Self-sustaining Systems, Cola, Pepsi, Coke y Mate

En la reunión del grupo Smalltalking del 13 de enero, estuve reunido con Alejandro Reimondo y Leonardo De Marco. El bueno de Leonardo ofició de anfitrión, como lo había hecho el año pasado, pero ahora con el agregado de tener WiFi, así que los tres estuvimos muy entretenidos visitando sitios y bajando papers de los temas que tratamos. Uno de esos temas fue el de sistemas auto-sustentables. ¿A qué se refiere este término? De acuerdo al bueno de Alejandro:

Lo de sistemas sustentables, es relativamente reciente, y tengo pocas referencias. Me entusiasma que alguien trata de avanzar en el desarrollo de sistema basados en instancias de sistema, que sean sustentables en el tiempo, y que viva en el tiempo. Eso era para mi la gema de Smalltalk. Uno se encontraba construyendo un sistema, no declarandolo, jugabas en el tiempo pero estabas comprometido con él.

En la implementación natural de Smalltalk, la máquina virtual es algo que queda por debajo: algo más allá de nuestro sistema. Exploremos el tema.

Eso llevo a pensar a que cambios en la maquina virtual, era cambiar Smalltalk. Si le modificamos la máquina virtual, lo llamamos otra cosa, como pasa con el lenguaje Self, sin clases. Pero podemos verlo de otra forma: se estaba revelando la rigidez que tenía Smalltalk, y de alguna forma también Self y otros lenguajes, si tienen embutida la máquina virtual, como algo más allá del alcance del desarrollador. Este no puede cambiar las reglas básicas, por ejemplo, las políticas de garbage collection.

Yo creo igual que con la aparición de máquinas virtuales de código abierto, hasta estos temas quedarán al alcance del propio desarrollador. Pero sigamos con el tema.

¿Por qué existe una máquina virtual para estos lenguajes? Porque la máquina real, el hardware, no soporta objetos. De ahí que necesitemos una máquina de virtualización de objetos. Igualmente, recordemos que hay máquinas virtuales que más que virtualizar todo, en algún momento pasan a nativo, usando algún Just In Time compiler, como en Java y en .NET.

Sistemas Auto-Sustentables

Alejandro presentó en la reunión, el tema de Sistemas Auto-Sustentables. Se viene un

Workshop on Self-Sustaining Systems (S3) 2008

a realizarse en Potsdam, Alemania (Alejandro visitó el lugar el año pasado).

Leemos en su Call for papers:

The Workshop on Self-sustaining Systems (S3) is a forum for discussion of topics relating to computer systems and languages that are able to bootstrap, implement, modify, and maintain themselves. One property of these systems is that their implementation is based on small but powerful abstractions; examples include (amongst others) Squeak/Smalltalk, COLA, Klein/Self, PyPy/Python, Rubinius/Ruby, and Lisp. Such systems are the engines of their own replacement, giving researchers and developers great power to experiment with, and explore future directions from within, their own small language kernels.

Interesante el tema. Vean el Klein en:

Klein Metacircular Virtual Machine Kit 0.1 Release Notes

Una máquina virtual para Self escrita enteramente en Self.

Yo recuerdo mis tiempos en los ochenta, donde leí sobre intérpretes Lisp escritos en Lisp (uno de los lenguajes del Workshop de Potsdam).

Y por qué no, una nostalgia por el BCPL, cuyo compilador estaba escrito en BCPL. El bueno de Martin Richards lo podía portar a otra máquina, simplemente usando como bootstrap el compilador que tenía en otra máquina, y cambiando su salida para las instrucciones de la máquina destino. Yo lo usaba en la Facultad de Ingeniería de la Universidad de Buenos Aires.

También interesante el PyPy:

PyPy Project

donde leemos:

The PyPy project aims at producing a flexible and fast Python implementation. The guiding idea is to translate a Python-level description of the Python language itself to lower level languages. Rumors have it that the secret goal is being faster-than-C which is nonsense, isn’t it?

COLA, Coke y Pepsi

Alejandro nos presentó el trabajo de Ian Piumarta. Pueden ver que ya en sus inicios, Piumarta estaba interesado en la compilación de lenguajes como Smalltalk:

Delayed Code Generation in a Smalltalk-80 Compiler (su tesis)

Pueden leer la biografía del bueno de Ian:

Ian Piumarta

(esta foto es de su CV, bueno, ya pasaron algunos años de esos tiempos…;-)

Ahora, el hijo de la señora Piumarta está trabajando en la implementación de lo que llama COLA (Combined Object-Lambda Architecture). Una COLA es un par de abstracciones que se sostienen entre sí. Una provee representación y otra provee conducta (¿les recuerda algo de objetos? :-). Traduzco algunos conceptos de los escritos de Ian.

La representación es provista por objetos prototípicos que intercambian mensajes, organizados en familias de clones (algo intermedio entre clases livianas y conducta específica de instancia). La semántica del envío de mensajes es provista por los propios objetos. Utiliza estructuras similares a las expresiones simbólicas (las viejas SExpr) del cálculo lambda para la conducta, que pueden ser transformadas (por lo que entendí, hasta llegar a código de un lenguaje de implementación).

El lenguaje de implementación y las abstracciones del sistema son precisamente el lenguaje y las abstracciones que el sistema implementa. El tener un modelo de ejecución dinámica, para el que se puede producir código estático y dinámico, elimina la necesidad de un intérprete central o un agente máquina virtual.

Bajemos a tierra estos conceptos. Pueden leer:

cola — combined lambda/object architecture

Por un lado, tiene un lenguaje funcional, con reminiscencias de Lisp:

Coke programming guid

Por otro lado, tiene un lenguaje de objetos

Pepsi — not quite The Real Thing

que le sirve para ir investigando sintaxis e ideas para el proyecto. Lo llama Pepsi, por que no es “la cosa real”, que debería ser Coke en la instancia final de lo que quiere hacer.

Interesante el modelo de objeto que propone

Open, extensible object models

basado en asignar una VTable a cada objeto, para decidir por fuera cómo procesa cada mensaje

(Tiene algunos puntos de contacto con lo que predico: integrar un underlying language con lo que querramos hacer por arriba, como en AjBasic, que aprovecha .NET, o AjTalk, que también aprovechará .NET por debajo. Por ejemplo, en AjTalk, los objetos de este lenguaje tienen una conducta definida para procesar los mensajes, pero también se puede enviar mensajes a otros objetos, por ejemplo, nativos de .NET y hay una conducta asociada para tratarlos, generalmente mapearlos por reflection).

Hay más para leer, como

Leiberman prototypes

y algo de UI

Canvas abstraction

Para el que llegado a este punto no pueda más de curioso, hay una lista de correo.

Tengo el código del proyecto. Es bastante interesante, algo largo para comentar acá. Pero veamos un ejemplo. En una implementación que hace de Smalltalk 80, en COLA se define un archivo _object.st, con definiciones como:

_object doesNotUnderstand: aSelector
[
self _typeName: self _debugName doesNotUnderstand: aSelector _string
]

y como

 

_object _typeName: _cName doesNotUnderstand: _cSelector
{
fprintf(stderr,
"%s does not understand '%s'\n", (char *)v__cName, (char *)v__cSelector); abort(); }

Lo que hace un compilador llamado Id, en este sistema, es tomar esta definición y producir código de lenguaje C. Vemos que lo que definimos en [ ] está en un lenguaje tipo Smalltalk, mientras que lo que está en { } es lenguaje C. Con un compilador llamado idc, se pasa de todos los archivos .st (Piumarta se escribió una implementación de ST80), a archivos .c que pueden compilarse.


El proyecto es casi incompilable en herramientas Microsoft, no pudimos compilar, está todo orientado a trabajar con makes y compiladores C de Unix/Linux.


Piumarta trabaja actualmente en el Viewpoints Research Institute. Vean que el COLA es parte del proyecto más grande:


Inventing Fundamental New Computing Technologies


donde leemos


An excruciating example of an area that needs more than incremental improvements is programming, both in the large and in the small. Code is too: large, complex, costly, buggy, insecure, segregated, and inexpressive. We have plans to attempt a qualitative reinvention of programming and to start one of the subprojects this year: to make a practical working mathematical model of a complete personal computer system.


El VPRI tiene como presidente a Alan Kay, y el board of advisors tiene a variada gente como Gordon Bell, Richard Dawkins, Adele Goldberg, Quincy Jones, Vint Cerf, Nicholas Negroponte. No, che, a mí no me invitaron… ;-)


El Mate


Alejandro, ante tanta Cola, Coke, Pepsi (bebidas que usan alguna yerba en sus componentes), propone que en Smalltalking estudiemos el tema y veamos que podemos hacer con COLA. Propone un proyecto Mate, veremos en las semanas que vienen, antes de la próxima reunión.


Yo propongo desde acá estudiar la posibilidad de implementar las ideas de Piumarta en .NET (o en Java). Podría usar algo de lo que estoy escribiendo para AjTalk (mínima VM para un Smalltalk-like language, debo un post y código, ayer vimos algo de código andando en la reunión). Creo que los puntos esenciales son:


- Tener un lenguaje como Pepsi o Coke


- Tener un lenguaje de implementación, como C# o Java


- Implementar algo similar a las VTable


- Implementar el compilador, basado en la transformación de las expresiones del Pepsi o Coke en código del lenguaje de implementación, e insertando código del lenguaje de implementación en cualquier parte del código (como en el ejemplo de más arriba).


Bueno, ya sé, tengo que tomarme la píldora verde, no la roja… ;-)


Nos leemos!


Angel “Java” Lopez
http:/www.ajlopez.com/

This entry was posted in 3462, 3463. Bookmark the permalink.

Leave a Reply

Your email address will not be published. Required fields are marked *


*

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>