<!DOCTYPE Book PUBLIC "-//OASIS//DTD DocBook V4.2//EN">
<book>
 <title>Implementando Lenguajes de Programación en Unununium</title>
 <bookinfo>
  <author>
   <firstname>César</firstname>
   <surname>Yáñez Fernández</surname>
  </author>
 </bookinfo>
 <preface><title>Introducción</title>
  <para>En un principio, éste software (Unununium) fue escrito en
  ensamblador, pero, ¿qué desventajas tiene esto? Pues que una vez que
  llegó a ser grande, cada vez era más dificil de encontrar errores,
  además que había que enfocarse más en escribir bien el código y no
  tanto al concepto o tecnología que se estaba implementando, al igual
  de la base de conocimiento que requiere el programador para llevarlo
  a cabo. Es por eso que se optó por portar una biblioteca de C a
  Unununium, para crear aplicaciones para éste en C, y gracias a éste,
  también importar otros lenguajes.</para>
  <formalpara><title>¿Por qué se optó por Python?</title>
   <para>Tener un lenguaje de alto nivel, implica que el programador
  se puede enfocar más en implementar la idea o tecnología que en el
  idioma de la máquina; tener un lenguaje estricto o flexible, lo que
  implica que nos esforcemos en escribir el código correctamente. Un
  lenguaje de alto nivel también es legible y fácil de entender, para
  conocer a fondo las ideas implementadas en Unununium. Esto hace
  ahorrar muchas líneas de código en Unununium, al igual que se han
  implementado ideas en éste que fueron dificil si no es que imposible
  implementarlas en Ensamblador.</para>
  </formalpara>
  <para>Actualmente, Unununium tiene implementado C, Python, el
  entorno OSKIT y por portarse Mozart-OZ, y en éste documento se hará
  una pequeña reseña por cada lenguaje implementado..</para>
 </preface>

 <chapter><title>Unununium</title>
  <sect1><title>¿Qué es Unununium?</title>
   <para>Unununium es un Sistema Operativo, con el fin de crear un
  mejor entorno computacional, maximizando la interconexión entre
  componentes.</para>
   <para>Unununium está en primeras fases de desarrollo. Aunque se ha
  completado un sistema básico, Unununium no está listo para su uso
  como Sistema Operativo de propósito general.</para>
  </sect1>
  <sect1><title>¿Por qué otro Sistema Operativo?</title>
   <para>Unununium fue creado con el consentimiento de que no hay un
   Sistema Operativo disponible actualmente que tenga la elegancia en
   el diseño requerida para tomar al máximo el potencial en el
   cómputo. Hoy existen muchos sistemas operativos, y muchos de éstos
   son software libre. Sin embargo, son algo similares en forma. En
   todos los sistemas operativos populares, el entorno general es el
   mismo: un sistema de archivos global y simple y un número de
   aplicaciones para manipular archivos. Las aplicaciones son
   entidades distintas, con una interconexión definida por el usuario,
   o que se comunican por tuberías. Si el sistema tiene una Interfaz
   Gráfica de Usuario, emula un escritorio.</para>
   <para>Al principio parece que no hay nada malo con este modelo,
   porque ha sido aceptado por definición en el cómputo. Esto puede
   cambiarse. Para hacer el cómputo más natural y eficiente, se tiene
   pensado implementar los siguientes conceptos:</para>
   <itemizedlist>
    <listitem>
     <formalpara><title>Más interconexión</title>
     <para>¿Por qué no puedo usar mi editor de texto favorito para
     editar los campos de entrada de texto de un sitio web? La noción
     de que una aplicación es una "caja", y que esta aplicación puede usar
     "bibliotecas" pero no otras "aplicaciones" es absurdo. Un editor
     de texto no debe ser una aplicación apartada de otras, sino un
     componente que puede ser usado para editar cualquier texto. El
     entorno no debería ser un grupo de aplicaciones plano, sino una
     jerarquía de componentes que pueden ser interconectados en
     cualquier configuración.
     Los datos pueden tener acceso de manera universal. Los
     sistemas actuales tienen un sistema de archivos, y éste no puede
     hacer todos los datos disponibles para su uso. Por ejemplo, ¿por
     qué los archivos de internet por HTTP son vistos en diferente
     forma que archivos de un disco local? Todos los datos pueden
     estar disponibles por una interfaz común para que se puedan
     manipular de manera independiente a la fuente de los
     datos.</para></formalpara>
    </listitem>
    <listitem><formalpara><title>Persistencia
    Ortogonal</title><para></para></formalpara></listitem>
    <listitem>
     <formalpara><title>Una mejor Interfaz de Usuario</title>
     <para>Hoy hay sólo dos métodos populares de interacción con el
    usuario: la línea de comandos y la interfaz gráfica. Las interfaces
    de línea de comando son frecuentemente favorables para el usuario
    experimentado, sólo porque las interfaces gráficas son pobremente
    diseñadas. También son limitadas en sus capacidades de entrada y
    salida. Las interfaces gráficas son una variación pequeña del
    sistema desarrollado en Xerox tiempo atras, que fue diseñado para
    emular objetos tangibles como papel y escritorios. Como cualquiera
    sabe, existe un paradigma; ¿por qué las computadoras lo
    emulan?</para></formalpara>
    </listitem>
   </itemizedlist>
  </sect1></chapter>

  <chapter><title>Lenguajes implementados</title>
   <sect1><title>Ensamblador</title>
    <para>Es un lenguaje simbólico/mnemotécnico para representar las
   operaciones que puede ejecutar el procesador de una manera legible
   para el programador, claro está, para el inexperto o que no tiene
   conocimientos de la estructura del procesador que está usando, le
   será dificil entender y programar a este nivel. Estar en
   ensamblador tiene sus ventajas y desventajas. Entre sus ventajas
   destacamos:
     <itemizedlist>
      <listitem>
       <para>Tienes acceso a registros de la máquina y I/O.</para>
      </listitem>
      <listitem>
       <para>Puedes controlar el comportamiento del código de manera
       exacta en secciones críticas donde podrían ocurrir puntos
       muertos entre múltiples hilos de software o dispositivos de
       hardware.</para>
      </listitem>
      <listitem>
       <para>Puedes construir interfaces entre fragmentos de código
       usando convenciones incompatibles.</para>
      </listitem>
      <listitem>
       <para>Puedes tener acceso a modos de programación no usuales en
       tu procesador.</para>
      </listitem>
      <listitem>
       <para>Puedes producir código rasonablemente rápido que no puede
       un compilador.</para>
      </listitem>
      <listitem>
       <para>Puedes producir código optimizado a mano adecuado para tu
       hardware.</para>
      </listitem>
      <listitem>
       <para>Puedes tener control completo de tu código.</para>
      </listitem>
     </itemizedlist>
    </para>
    <para>Las desventajas podrían ser estas:
     <itemizedlist>
      <listitem>
       <para>Inicialmente, es más largo y tedioso de escribir.</para>
      </listitem>
      <listitem>
       <para>Propenso a errores.</para>
      </listitem>
      <listitem>
       <para>Los errores son dificiles de encontrar.</para>
      </listitem>
      <listitem>
       <para>Código dificil de mantener.</para>
      </listitem>
      <listitem>
       <para>El código no es portable entre arquitecturas, existentes
       o futuras.</para>
      </listitem>
      <listitem>
       <para>Tu código sólo puede estar optimizado para alguna
       implementación de la misma arquitectura.</para>
      </listitem>
      <listitem>
       <para>Pasas más tiempo en detalles pequeños y no te enfocas en
       un diseño de algoritmo más complejo.</para>
      </listitem>
      <listitem>
       <para>Un pequeño cambio en tu algoritmo y tal vez se necesite
       reescribir todo tu código.</para>
      </listitem>
     </itemizedlist>
    </para>
   </sect1>
   <sect1><title>C</title>
    <para>Es un lenguaje hecho en los laboratorios Bell en la década
    de 1970 por Dennis Ritchie mientras estaba desarrollandose el
    Sistema Operativo UNIX. Éste lenguaje a pesar de los años sigue
    siendo el más popular debido a que es un lenguaje de medio-alto
    nivel, muy flexible y que se pueden hacer muchas cosas con éste,
    de manera fácil y rápida. Tenemos claro está, sus ventajas y
    desventajas. Y de ventajas hay:
     <itemizedlist>
      <listitem>
       <para>Fácil implementación de nuestros algoritmos.</para>
      </listitem>
      <listitem>
       <para>Es más fácil detectar errores.</para>
      </listitem>
      <listitem>
       <para>Su semántica es legible.</para>
      </listitem>
      <listitem>
       <para>Es flexible para construir sistemas operativos.</para>
      </listitem>
      <listitem>
       <para>El código producido del compilador es más eficiente que
       en otros lenguajes de alto nivel.</para>
      </listitem>
      <listitem>
       <para>Podemos interconectar funciones y componentes escritos en
       ensamblador dentro del lenguaje.</para>
      </listitem>
     </itemizedlist>
    </para>
    <para>Claro, también tenemos ligeras desventajas:
     <itemizedlist>
      <listitem>
       <para>Para poder crear aplicaciones en el sistema operativo que
       estas haciendo, necesitas portar o hacer una biblioteca de
       C.</para>
      </listitem>
      <listitem>
       <para>Requieres hacer un <emphasis>toolchain</emphasis> o un
 <emphasis>back-end</emphasis> para tu compilador y poder así seguir
programando tu sistema operativo.</para>
      </listitem>
     </itemizedlist>
    </para>
   </sect1>
   <sect1><title>Pyrex</title>
    <para>Pyrex es un lenguaje escrito por Greg Ewing especialmente
    diseñado para escribir módulos de Python. Está diseñado como un 
    intermediario entre el lenguaje Python y C. En pocas palabras, 
    Pyrex es un Python con los tipos de datos de C. Tenemos como
    ventajas de éste:
     <itemizedlist>
      <listitem>
       <para>Podemos escribir al nivel de Python partes complejas de
       nuestro sistema, como el manejador de memoria.</para>
      </listitem>
      <listitem>
       <para>La sálida del código en Pyrex es C, para después
       compilarlo, no requerimos de un interprete corriendo en nuestro
       sistema.</para>
      </listitem>
      <listitem>
       <para>Podemos usar las ventajas de C en un lenguaje de mayor
       nivel.</para>
      </listitem>
     </itemizedlist>
    </para>
    <para>Pyrex es tan adecuado a nuestro trabajo, que no hay
    desventajas visibles, pero claro está, si nos queremos enfocar
    firmemente a la optimización, pues qué mejor que hacer esos
    controladores cochinos como el manejador de memoria y
    controladores en ensamblador y no en C/Pyrex.</para>
   </sect1>
   <sect1><title>Python</title>
    <para>Python es un lenguaje interpretado, interactivo, orientado a
    objetos escrito por Guido Van Rossum. Python combina poder con una
    sintaxis muy clara. Tiene módulos, clases, excepciones, tipos de
    datos dinámicos de alto nivel, entre otras virtudes. Tiene
    interfaces a muchas llamadas al sistema y bibliotecas. Nuevos
    módulos pueden ser fácilmente escritos en C o C++. Y sus ventajas
    tenemos:
    <itemizedlist>
     <listitem>
      <para>Python usa una sintaxis elegante</para>
     </listitem>
     <listitem>
      <para>Soporta programación orientada a objetos con clases y
      herencias multiples.</para>
     </listitem>
     <listitem>
      <para>El código puede estar agrupado en módulos y
      paquetes.</para>
     </listitem>
     <listitem>
      <para>Soporta manejo de excepciones, resultando en un mejor
      control de errores.</para>
     </listitem>
     <listitem>
      <para>Recolección de basura automático.</para>
     </listitem>
     <listitem>
      <para>La biblioteca estándar soporta tareas como conexiones a
      servidores, expresiones regulares y manejo de archivos.</para>
     </listitem>
     <listitem>
      <para>Puedes extender el lenguaje escribiendo módulos en C o
      C++.</para>
     </listitem>
     <listitem>
      <para>Puedes empotrar o embeber el lenguaje en una aplicación
      para proveer una interfaz de programación.</para>
     </listitem>
    </itemizedlist>
   </para>
   <para>Pero por ser un lenguaje interpretado, también tenemos
   desventajas muy importantes:
    <itemizedlist>
     <listitem>
      <para>Es un lenguaje interpretado, lo que implica que sea lento
      al ejecutarse.</para>
     </listitem>
     <listitem>
      <para>Puede ocupar mucho más memoria que un lenguaje
      compilado.</para>
     </listitem>
     <listitem>
      <para>Necesitas un <emphasis>toolchain</emphasis> especial para 
      poder correr código escrito en Python dentro de tu 
      sistema como binario nativo.</para>
     </listitem>
     <listitem>
      <para>Necesitas haber portado o creado previamente una
      biblioteca de C y el interprete de Python.</para>
     </listitem>
    </itemizedlist>
   </para>
  </sect1>
  <sect1><title>Mozart OZ</title>
   <para>El sistema de programación Mozart es una plataforma de
   desarrollo avanzada para aplicaciones distribuídas y avanzadas. El
   sistema es el resultado de una década de investigación en diseño de
   lenguajes de programación e implementación, cómputo distribuído, e
   interfaces humano-computadora. Mozart tiene un entorno de
   desarrollo interactivo incremental y corre en plataformas UNIX y
   Windows. Mozart está basado en el lenguaje Oz, que soporta
   programación declarativa, programación orientada a objetos,
   programación constante y concurrencia como un ente
   coherente. Mozart provee una implementación de red transparente y
   tolerante a fallas. Mozart es la plataforma ideal para aplicaciones
   de propósitos generales distribuidas asi como para problemas que
   requieren de optimización sofisticada y otras habilidades. Entre
   sus cualidades, se encuentran:
    <itemizedlist>
     <listitem>
      <para>Programación orientada a objetos.</para>
     </listitem>
     <listitem>
      <para>Programación concurrente.</para>
     </listitem>
     <listitem>
      <para>Programación multi-paradigma.</para>
     </listitem>
     <listitem>
      <para>Programación constreñida.</para>
     </listitem>
     <listitem>
      <para>Programación lógica.</para>
     </listitem>
     <listitem>
      <para>Cómputo distribuído.</para>
     </listitem>
     <listitem>
      <para>Programación basada en componentes distribuída.</para>
     </listitem>
     <listitem>
      <para>Agentes móviles.</para>
     </listitem>
     <listitem>
      <para>Separación de Aspectos.</para>
     </listitem>
     <listitem>
      <para>Compatibilidad entre plataformas.</para>
     </listitem>
     <listitem>
      <para>Programación de GUI.</para>
     </listitem>
     <listitem>
      <para>Módulo para extensión nativa.</para>
     </listitem>
    </itemizedlist>
   </para>
   <para>Debido a que aún no hemos estudiado ni se ha probado bien
   esta plataforma, desconocemos de las desventajas que podrían venir,
   también, estamos aún estudiando la posibilidad de usar esta
   tecnología en Unununium.</para>
  </sect1>
 </chapter>
</book>

