Hola gente!

Sebastian, gracias por los datos de <primitive: muy interesante...

Si, es asi. Solo con algun twist:

- La primera version, que presente en Smalltalks 2010, no tenia AST, y
tenia (y todavia tiene) un parser que compila a bytecodes. Entonces, en el
mismo proyecto, tengo el interprete de bytecodes, con todo su soporte, lo
que llamaria una VM casera. Eso sigue asi en la version actual
- En la version de Smalltalks 2011, aparecio AST, y compilador/"traslator"
a generar Javascript
- Este anio, estoy usando el AST para visitar los nodos y generar el
bytecode
- Todo con TDD, todavia tengo las dos implementaciones: parser->bytecode;
nuevo parser->AST->visitors->bytecodes
- Luego, este anio, nacio para @garduino una version en Java, diferente,
Work in Progress
- El anio pasado, presente otro proyecto, que esta escrito directamente en
Javascript, y procesa bytecodes que compila de un parser en JavaScript.
PERO, la VM del segundo punto, genera codigo javascript para que sea
consumida desde etra VM en Javascript. La diferencia es:
-- Esta VM en javascript, parsea y compila bytecodes y los interpreta
-- Esta VM en javascript, levanta codigo javascript generado por la VM del
segundo punto, y hace "obj add: 1", lo pasa a obj.add_(1), con lo que
aprovecha la compilacion de Javascript del engine de abajo, en mi caso,
browser, o NodeJs.
-- Un ejemplo en linea, con browser, pero primitivo en
http://ajlopez.github.com/AjTalkJs/demo.html# jeje esta lejos de un Amber
;-)

Y si, podria armar (o alguien podria armar) un Visitor en C# (o si quieren,
en Smalltalk corriendo sobre esta vm en C#, pues se puede acceder a las
clases del AST), y generar lo que se pueda, por ejemplo Python. Mi primer
idea, seria compilar a C# usando C# 4.x, y los objetos dynamic, pero vere
como lo encaro. Algo a explorar: generar para LLVM (creo recordar que la
gente de PyPy, Python en Python, lo habia usado para Smalltalk, o me estoy
confundiendo con Jython?)

Hoy estoy algo orgulloso, consegui que la VM en C# levantara dos maquinas
(cada una con sus clases), y que una sea "host" de la otra, de tal forma
que los metodos que no estan en la hosteada, se resuelvan en el host.
https://github.com/ajlopez/AjTalk/blob/master/Src/AjTalk.Tests/CodeFiles/HostMachine.st
https://github.com/ajlopez/AjTalk/blob/master/Src/AjTalk.Tests/CodeFiles/HostedMachine.st
con test para @hernanwilkinson (ok, un test un poco grande, pero me
diviegto como logco ;-)
https://github.com/ajlopez/AjTalk/blob/master/Src/AjTalk.Tests/HostMachineTests.cs#L180-L208

Nos leemos!

Angel "Java" Lopez
@ajlopez

2012/11/30 Sebastian Nozzi <[email protected]>

> Hola Angel,
>
> lo que estás haciendo suena alucinante. A ver si entiendo...
>
> Parseás código ST a un syntax-tree abstracto, y de ahí podés generar
> código al lenguaje que sea. El parser lo escribiste en C# y tenés
> también generador hacia C#, JavaScrtipt y uno en Java (que estabas
> haciendo para Germán).
>
> Asimismo, en el lenguaje (o plataforma) "target" hay una especie de
> soporte "runtime" para poder tener funcionalidad de Smalltalk que no
> se encuentra en el lenguaje en cuestión, además de para servir de
> "bridge" entre el código ST y las frameworks que te ofrece el lenguaje
> final...
>
> Estoy entendiendo bien?
>
> Ahora, donde entra la parte de la VM... es parte de lo que yo llamé el
> "soporte runtime"? Qué tiene que tener dicha VM/runtime para que
> puedas cambiar clases on-the-fly, o agregar soporte de debugueo?
>
> Se podría entonces, en teoría, compilar a Python, Ruby, lo que sea?
>
> Saludos,
>
> Sebastian
>
>
> El día 24 de noviembre de 2012 17:01, Angel Java Lopez
> <[email protected]> escribió:
> > Hola gente!
> >
> > Ah, si, Sebastian! Es lo que presente en Smalltalks 2010 y en 2011, open
> > source, y siempre pueden ver la evolucion en mi github:
> > https://github.com/ajlopez/AjTalk
> > Presentada en Smalltalks 2010, escrita con TDD; commits atomicos, para
> > cualquiera pueda vigilar si me aparto de TDD o no :-) (cc
> @hernanwilkinson
> > :-)
> >
> > Corre en memoria, accede a objetos nativos, y tiene una parte que compila
> > .st a javascript (en realidad, el compilar a JavaScript es una prueba de
> > concepto de algo mas basico: tener un Abstract Syntax Tree y visitarlo,
> con
> > Visitors, generando algo. Tengo visitors que generan JavaScript, y
> visitors
> > que generan codigo bytecode a ejecutar en la memoria. El "litmus tests":
> > poder hacer otro Visitor, que genere Python, por ejemplo. Supongo que
> Uds.
> > preferirian hacer eso en Smalltalk, pero todavia para mi es mas
> "proficient"
> > hacerlo en C#
> >
> > Este anio le estaba haciendo a maese @garduino una version en Java
> > https://github.com/ajlopez/AjTalkJava
> > pero parece que maese abandono el Eclipse, snif.. :-)
> >
> > Y la que presente el anio pasado en Smalltalks 2011 (y este anio en JS
> > Conf):
> > https://github.com/ajlopez/AjTalkJs
> > en Javascript (tiene una parte que ejecuta bytecodes, y otra que ejecuta
> > JavaScript directo=
> >
> > Pero la mas madura es la de C#. Espero como proyecto "de verano" hacer
> que
> > levante un sitio web, por lo menos archivos estaticos, si consigo algo
> mas
> > dinamico, bienvenido!
> >
> > Nos leemos!
> >
> > Angel "Java" Lopez
> > @ajlopez
> > gh:ajlopez
> >
> >
> > 2012/11/24 Sebastian Nozzi <[email protected]>
> >>
> >> Te estás haciendo tu propia VM? Impresionante!
> >>
> >> Y por lo que dejás entrever tendrías varias versiones? (C#, Java...?)
> >>
> >> El día 24 de noviembre de 2012 16:27, Angel Java Lopez
> >> <[email protected]> escribió:
> >>
> >> > Interesante, maese GallegO. En mi VM ya puedo tener mas de una imagen
> >> > (cada
> >> > una con su propio Object, clases, metodos) en memoria. Hoy consegui
> >> > serializar y deserializar bastante (en la version C#), me falta
> guardar
> >> > los
> >> > bytecodes de los metodos compilados (aguante TDD :-)
> >>
> >> --
> >> To post to this group, send email to [email protected]
> >> To unsubscribe from this group, send email to
> >> [email protected]
> >>
> >> http://www.clubSmalltalk.org
> >
> >
> > --
> > To post to this group, send email to [email protected]
> > To unsubscribe from this group, send email to
> > [email protected]
> >
> > http://www.clubSmalltalk.org
>
> --
> To post to this group, send email to [email protected]
> To unsubscribe from this group, send email to
> [email protected]
>
> http://www.clubSmalltalk.org
>

-- 
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to 
[email protected]

http://www.clubSmalltalk.org

Responder a