Implementando Lenguajes de Programación en Unununium César Yáñez Fernández Introducción 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. ¿Por qué se optó por Python? 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. 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.. Unununium ¿Qué es Unununium? Unununium es un Sistema Operativo, con el fin de crear un mejor entorno computacional, maximizando la interconexión entre componentes. 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. ¿Por qué otro Sistema Operativo? 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. 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: Más interconexión ¿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. Persistencia Ortogonal Una mejor Interfaz de Usuario 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? Lenguajes implementados Ensamblador 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: Tienes acceso a registros de la máquina y I/O. 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. Puedes construir interfaces entre fragmentos de código usando convenciones incompatibles. Puedes tener acceso a modos de programación no usuales en tu procesador. Puedes producir código rasonablemente rápido que no puede un compilador. Puedes producir código optimizado a mano adecuado para tu hardware. Puedes tener control completo de tu código. Las desventajas podrían ser estas: Inicialmente, es más largo y tedioso de escribir. Propenso a errores. Los errores son dificiles de encontrar. Código dificil de mantener. El código no es portable entre arquitecturas, existentes o futuras. Tu código sólo puede estar optimizado para alguna implementación de la misma arquitectura. Pasas más tiempo en detalles pequeños y no te enfocas en un diseño de algoritmo más complejo. Un pequeño cambio en tu algoritmo y tal vez se necesite reescribir todo tu código. C 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: Fácil implementación de nuestros algoritmos. Es más fácil detectar errores. Su semántica es legible. Es flexible para construir sistemas operativos. El código producido del compilador es más eficiente que en otros lenguajes de alto nivel. Podemos interconectar funciones y componentes escritos en ensamblador dentro del lenguaje. Claro, también tenemos ligeras desventajas: Para poder crear aplicaciones en el sistema operativo que estas haciendo, necesitas portar o hacer una biblioteca de C. Requieres hacer un toolchain o un back-end para tu compilador y poder así seguir programando tu sistema operativo. Pyrex 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: Podemos escribir al nivel de Python partes complejas de nuestro sistema, como el manejador de memoria. La sálida del código en Pyrex es C, para después compilarlo, no requerimos de un interprete corriendo en nuestro sistema. Podemos usar las ventajas de C en un lenguaje de mayor nivel. 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. Python 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: Python usa una sintaxis elegante Soporta programación orientada a objetos con clases y herencias multiples. El código puede estar agrupado en módulos y paquetes. Soporta manejo de excepciones, resultando en un mejor control de errores. Recolección de basura automático. La biblioteca estándar soporta tareas como conexiones a servidores, expresiones regulares y manejo de archivos. Puedes extender el lenguaje escribiendo módulos en C o C++. Puedes empotrar o embeber el lenguaje en una aplicación para proveer una interfaz de programación. Pero por ser un lenguaje interpretado, también tenemos desventajas muy importantes: Es un lenguaje interpretado, lo que implica que sea lento al ejecutarse. Puede ocupar mucho más memoria que un lenguaje compilado. Necesitas un toolchain especial para poder correr código escrito en Python dentro de tu sistema como binario nativo. Necesitas haber portado o creado previamente una biblioteca de C y el interprete de Python. Mozart OZ 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: Programación orientada a objetos. Programación concurrente. Programación multi-paradigma. Programación constreñida. Programación lógica. Cómputo distribuído. Programación basada en componentes distribuída. Agentes móviles. Separación de Aspectos. Compatibilidad entre plataformas. Programación de GUI. Módulo para extensión nativa. 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.