Hola gente!
Gracias, Gerardo, por tu interés en el proyecto. Interesante, van a
presentar en este año? Algún adelanto?
Yo puede que presente eso que estoy haciendo. Veo si llego a tener algo
presentable.
Ah! Con respecto a las primitivas, a ver: tengo bytecodes (que podría
considerar las primitivas básicas). Tuve tentado a no tener bytecodes y
seguir un patrón interpreter (un árbol de nodos a ir ejecutando), pero me
pareció ya demasiado radical con todo lo que estoy haciendo. Veré si algún
día vuelvo a esa idea.
A lo que voy, que no voy a escribir algo de soporte para cosas como:
<# primitive 50 > (no recuerdo la notación de Smalltalk ahora)
En el medio del código de un método. La idea es que si alguien quiere algo
mas, puede poner
@System.IO.Directory !exists: 'MiDirectorio'
Es decir, invocar métodos de cualquier librería .NET que este cargada. (El !
avisa que es un método nativo).
Si alguien implementa, digamos, números complejos en AjTalk (el "Smalltalk
de arriba"), lo puede hacer. Pero si luego quiere implementarlo en clases
nativas (.NET, el "underlying" language), lo puede hacer.
En estos días estoy agregando cosas como (escribo de memoria, disculpen si
yerro en la notación)
Collection subclass: #List
nativeType: 'System.Collections.ArrayList'
Entonces, List new, en vez de devolver un objeto AjTalk, devuelve un new
ArrayList() nativo. Self es directamente ese objeto. La clase List de
arriba, sigue siendo una clase normal de Smalltalk, con diccionario de
métodos y tutti li fiocci, pero cambia el behavior de new. Permite escribir
un método como
add: element
self !add: element
Es decir, puedo poner métodos en AjTalk, sobre objetos nativos.
Con todo esto de arriba, creo que "zafo" de poner <# primitive 50 > y esas
cosas. La extensión esta directamente en acceder al underlying language. Por
ejemplo, Clojure (Lisp y mucho mas, concurrencia, estructuras persistentes,
software transactional memory, en Java y en CLR) es asi: tiene un nucleo de
special forms "hardcodeadas", y luego, el programador de Clojure puede ir
construyendo nuevas formas y macros, y ahí acceder con una notación especial
a métodos en Java. Con eso, el ecosistema de Clojure ha crecido (heredado)
todo lo que ya hay hecho en Java, y a mucha gente le gusto: tiene un
lenguaje dinamico, funcional, arriba, y aprovecha librerías de acceso a
datos, graficos 3D, sockets, web, etc.... que ya viene, o la mejora en Java,
o la reescribe en Clojure, a gusto y piaccere. Lo bueno de Clojure, que
también compila, no es solo interprete. Como mencione, no creo que "me de el
cuero" para hacer eso con mi proyecto, pero si lo hiciera, un camino a
seguir es http://dlr.codeplex.com
Volviendo a AjTalk, podría crear ventanas, botones .NET desde métodos en
AjTalk. Podria implementar clases Form, Button, etc... que sean wrappers
sobre los nativos (es decir, tengan una variable de instancia que apunte al
objeto real) o que sean realmente el nativo (que self ya sea una referencia
al nativo). Me falta implementar listeners de eventos: la idea es poner como
listener a un bloque con variables tipo button onClick: [ :sender
:eventparameter | .....] o anyobj addHandler: [....] for: 'CancelEvent'
No entendí que es "callback" en Smalltalk, es parecido a eso? Supongo que
eso de listener de eventos debe ser lo que tengo que implementar para
completar la integración con el underlying language (siempre con el objetivo
de diseño que es que puedo cambiar todo a Java en cualquier momento).
Todo BitBlt, Form, Pen, etc.. podría mapearlo al namespace de .NET que se
ocupa de eso (System.Graphics?) Aunque no creo que intente eso, por ahora.
Ah! No hizo falta coraje para poner Java, aca en esta lista no me hicieron
problema nunca, creo. Me tratan bien! ;-)
Nos leemos!
Angel "Java" Lopez
http://www.ajlopez.com
http://twitter.com/ajlopez
-----Mensaje original-----
De: [email protected] [mailto:[email protected]]
En nombre de Gerardo Richarte
Enviado el: Sunday, August 08, 2010 3:14 AM
Para: [email protected]
Asunto: Re: [clubSmalltalk] RV: DNG-Win32 Bit VM
vengo con el mail, perdón!
On 07/26/2010 05:28 PM, Angel "Java" Lopez wrote:
> Gerardo (creo que nos habremos cruzado en alguna reunión de Sugar en
Buenos
> Aires, en 1997), gracias por el comentario. Hmmm, algunas aclaraciones:
>
Sip, me acuerdo perfectamente, sos el que tiene "java" en el nombre en
las listas de Smalltalk, jue :) (y suficiente coraje como para bancársela!)
> - Mi pet project [1] es un interprete,
>
Interesantísimo la verdad, un aproach totalmente distinto a, erm, otro
experimento que presentaremos en la Smalltalks este año, que aunque
quizás deje algunas cosas afuera, permite enseguida experimentar con
algunas otras que de otra forma tardan mucho en llegar (como las que vos
dijiste). Contanos como sigue cada tanto!
Solo un comentario, que no estoy de acuerdo que no implementes
primitivas, como decis, si no que tus primitivas, como siempre, se
implementan en el lenguaje de abajo (que en este caso es .NET por
ejemplo), creo que también son primitivas, uhm... con la salvedad que es
más fácil hacerlas, y consecuentemente, más fácil tentarse a ir
agregando demasiadas :)
saludos!
--
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