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
