-- To post to this group, send email to [hidden email] To unsubscribe from this group, send email to [hidden email] http://www.clubSmalltalk.org |
In reply to this post by Gaboto
Alejandra De Bonnis es su tesis de licenciatura reifico el method lookup de tal manera que cada objeto podía definir cómo buscar un método a partir de un mensaje. De esta manera teníamos en el mismo ambiente prototipos y clases por ejemplo. Haciendo esto usar dnu o method wrappers, etc. dejó de tener sentido... imaginense, cada OBJETO puede definir que hacer cuando recibe un mensaje (delegarlo, buscar su método, tomarlo prestado, etc).
Como dice Gaby, el problema de la regresión existió pero lo resolvirmos fácil jeje... o sea, los objetos que se usaban para reificar el method lookup no podía reificar su method lookup jeje, pero igual había que trabajar un poco más en cómo estaba implementado.
A mi entender fue un trabajo muy pero muy interesante, lástima que como muchas cosas quedó ahí muerto por falta de tiempo para investigar, guita para invertir, etc. En fin, si alguien tiene ganas de verlo avise
Hernán.
-- 2010/7/27 Gabriel Brunstein <[hidden email]> Diego, en realidad el method dictionary se puede modificar, y se pueden usar wrappers bastante sofisticados, como method wrappers o instance wrappers (con clases anónimas). Creo que vos te referís a tener reificado en Smalltalk el algoritmo de method lookup, cosa que sería muy interesante de ver como se resolvería (hay un problema de regresión infinita, ya que el propio algoritmo tendría que evaluarse utilizándose, algo loco..). Si esto se logra sería muy interesante para experimentar, pero no hay que subestimar el problema de performance que podría ocasionar. -- Hernán Wilkinson
Agile Software Development, Teaching & Coaching Mobile: +54 - 11 - 4470 - 7207 email: [hidden email] site: http://www.10Pines.com To post to this group, send email to [hidden email] To unsubscribe from this group, send email to [hidden email] http://www.clubSmalltalk.org |
Hola Hernán, una pregunta, esto lo implementaron o es un trabajo
teórico? (de cualquier manera me parece muy interesante) Diego On Aug 2, 7:36 am, Hernan Wilkinson <[hidden email]> wrote: > Alejandra De Bonnis es su tesis de licenciatura reifico el method lookup de > tal manera que cada objeto podía definir cómo buscar un método a partir de > un mensaje. De esta manera teníamos en el mismo ambiente prototipos y clases > por ejemplo. Haciendo esto usar dnu o method wrappers, etc. dejó de tener > sentido... imaginense, cada OBJETO puede definir que hacer cuando recibe un > mensaje (delegarlo, buscar su método, tomarlo prestado, etc). > Como dice Gaby, el problema de la regresión existió pero lo resolvirmos > fácil jeje... o sea, los objetos que se usaban para reificar el method > lookup no podía reificar su method lookup jeje, pero igual había que > trabajar un poco más en cómo estaba implementado. > A mi entender fue un trabajo muy pero muy interesante, lástima que como > muchas cosas quedó ahí muerto por falta de tiempo para investigar, guita > para invertir, etc. > En fin, si alguien tiene ganas de verlo avise > > Hernán. > > 2010/7/27 Gabriel Brunstein <[hidden email]> > > > > > Diego, en realidad el method dictionary se puede modificar, y se pueden > > usar wrappers bastante sofisticados, como method wrappers o instance > > wrappers (con clases anónimas). Creo que vos te referís a tener reificado en > > Smalltalk el algoritmo de method lookup, cosa que sería muy interesante de > > ver como se resolvería (hay un problema de regresión infinita, ya que el > > propio algoritmo tendría que evaluarse utilizándose, algo loco..). Si esto > > se logra sería muy interesante para experimentar, pero no hay que subestimar > > el problema de performance que podría ocasionar. > > Por otro lado, según entiendo, lo que vos decías es tener un modelo de > > prototipos y delegación como el de Self (de donde se influenció > > NewtonScript). Yo también creo que sería más natural partir de un esquema > > de ese tipo y luego agregarle el esquema de clasificación como el de > > Smalltalk, así podrías combinar ambos. > > Pero creo que estos cambios implicarían un nuevo ambiente, ya no sería > > Smalltalk. Estaría muy bueno todo esto, pero por como están las cosas > > después de 35 años no creo que pase nada... > > > 2010/7/27 [hidden email] <[hidden email]> > > > Hola Andrés > >> Contesto entre líneas... > > >> On Jul 26, 8:57 pm, Andres Valloud <[hidden email]> wrote: > >> > > Coincido en que hacer algo que ande es relativamente sencillo y hacer > >> algo que ande bien es extremadamente complejo. > > >> > Y si... tal cual. > > >> > > Entre las cosas que hoy le pediría a un VM es en que aumenten los > >> límites en cantidad de objetos, que soporten 64 bits > > >> > No es por ser pretencioso, pero VisualWorks tiene VMs de 64 bits para > >> > Linux en x86, Solaris en x86, y Solaris en SPARC. Trabajamos mucho > >> > con las VMs y las imagenes de 64 bits en este tiempo, y las versiones > >> > que estan a punto de salir son muchisimo mejores que lo que teniamos > >> > hace unos años (esto no lo digo yo o nosotros (Cincom)... lo puso por > >> > escrito gente de GemStone en la lista de VisualWorks acerca de 7.7). > > >> > Tambien estamos trabajando en un port a Windows 64 bits. Esto ultimo > >> > es mas dificil de lo que parece. Por ejemplo, al contrario de mas o > >> > menos todo el mundo, en Windows de 64 bits un long tiene 32 bits. Asi > >> > que si, digamos, tenes codigo multiplataforma que habla de longs todo > >> > el tiempo porque hasta ahora siempre (la VM de VisualWorks tiene cerca > >> > de 30 años encima) en 64 bits un long tenia 64 bits, y en 32 bits un > >> > long tenia 32 bits... hmmm... > >> Si, puedo imaginar a VW y Gemstone muy bien armados en todo eso, en mi > >> caso uso Dolphin o Squeak por motivos comerciales. > > >> > > y algo que siempre quisiera tener es mucho mas control sobre el method > >> lookup, que a mi entender es la principal limitación de Smalltalk. > > >> > Podrias contar mas de esto? Donde le ves la limitacion? Que te > >> > gustaria que hubiera pero no hay? > > >> Cuando envío un mensaje a un objeto, este busca en la clase, > >> superclases, etc. y ejectua el método. Toda esta convención es > >> invariable y define, sin posibilidad de modificar nada, cosas muy > >> importantes como la herencia y otras yerbas. Esta convención nos > >> parece bien a todos porque nos parece bien que si mando el mensaje > >> #print se ejecute el método #print, y también nos parece bien a todos > >> utilizar herencia simple, y también a casi todos nos parecen bien las > >> clases, metaclases y todo lo que defendemos desde la practicidad. Sin > >> embargo, no poder modificar esta convención, trae mas limitaciones de > >> las que generalmente pensamos (porque nos acostumbramos y nos gusta la > >> convención) y usualmente resolvemos de manera sucia y limitada. Son > >> conocidos los casos no muy bien resueltos con herencia simple (como la > >> jerarquia de Stream), son conocidos los trucos de usar #dnu para > >> activar métodos que no están presentes en la clase del receptor (como > >> en los proxies) y personalmente me molesta que esté conceptualmente > >> tan acoplado el método con el mensaje, dos cosas muy distintas. Una > >> solución que me suena factible, y tal vez compleja de implementar > >> decentemente, sería que el methodLookup estuviera implementado en > >> Smalltalk, en Object supongo. La implementación default podría ser una > >> primitiva que hiciera lo mismo que esperamos hoy en día, pero que al > >> modificarla en subclases nos abriera un campo de posibilidades muy > >> amplias y muy peligrosas (tan peligrosas como cualquier otra de > >> Smalltalk). Sería trivial implementar proxies, hacer delegaciones mas > >> sofisticadas y generar diseños hoy imposibles, de manera muy clara. > >> Por ejemplo, hoy es común ver que los proxies para persistencia en > >> bases de datos, o para sistemas distribuidos se hacen heredando de > >> ProtoObject, o de clases con pocos métodos, cosa que ya es sucia de > >> entrada, luego se agregan #dnu que son mas sucios. No sería mas > >> adecuado que la clase de un proxy fuera el misma que la del subject? > >> al menos parecida?, de esta manera se podrían delegar en el subject la > >> resolución de algunos métodos y en el proxy la resolución de otros, > >> podría incluso haber cooperación entre estos objetos. Esto es largo de > >> explicar, pero creo qeu se podría resolver mucho, programando poco, > >> mas claro y simple de debuggear. Otro ejemplo sería la herencia > >> múltiple, quedaría de una manera muy prolija, porque se podría acotar > >> a una parte muy pequeña del sistema, no estaría condicionada por otra > >> convención (como en c++), no tendría porqué tener que limitarse a > >> clases, podría ser entre objetos (como en la herencia de prototipos > >> que usaba en el NewtonScript de Apple). Es mas el polimorfismo se > >> ampliaría porque un objecto podría resolver mensajes que hoy no > >> entendería. Creo que también desaparecerían los intentos de solucionar > >> estos problemas mediante traits o cosas similares. Todo esto, tal vez > >> genere mas incertidumbre, pero creo que sería muy interesante TENERLO, > >> ir usándolo con mucho cuidado, y posiblemente aparezcan patterns que > >> mejoren sustancialmente las recetas actuales. Entiendo, no estoy > >> seguro, que las primeras versiones de la VM de Smalltalk tenían algo > >> similar y que luego se descartó por temas de perfomance, supongo que > >> 35 años mas tarde se podría tratar de resolver ese "problemita". > > >> Saludos > > >> Diego Coronel > > >> > Andres. > > >> > 2010/7/26 [hidden email] <[hidden email]>: > > >> > > Coincido con Gerardo, muy bueno el correo de Andrés, muchas gracias. > >> > > Sería bueno que alguna vez alguien documentara o publicara algo acerca > >> > > de VMs de calidad, hay poca gente que lo podría hacer bien, y ese > >> > > material aportaría a la continuidad de Smalltalk como plataforma a > >> > > largo plazo. Todo smalltalker alguna vez tiene su época de querer > >> > > hacerse la VM, yo la pasé y si me distraigo un poco supongo que > >> > > volveré a lo mismo, es como recurrente el tema. Coincido en que hacer > >> > > algo que ande es relativamente sencillo y hacer algo que ande bien es > >> > > extremadamente complejo. Además la problemática a resolver tiene poco > >> > > que ver con Smalltalk (lo cual no lo hace menos divertido). Me parecen > >> > > válidos todos los enfoques, desde los que arrancan del assembler mas > >> > > crudo hasta los que se suben arriba de otra VM o lenguaje de alto > >> > > nivel, cada uno en su lugar y contexto no deja de ser interesante. > >> > > Entre las cosas que hoy le pediría a un VM es en que aumenten los > >> > > límites en cantidad de objetos, que soporten 64 bits y algo que > >> > > siempre quisiera tener es mucho mas control sobre el method lookup, > >> > > que a mi entender es la principal limitación de Smalltalk. > > >> > > Pero insisto en que sería bueno, que quienes saben del tema, alguna > >> > > vez publiquen y/o hagan docencia sobre el tema, al menos a modo de > >> > > memorias antes de retirarse. Creo que muchos pagaríamos gustosos un > >> > > libro sobre eso, porque nos ahorraría tiempo en lo que igual queremos > >> > > o vamos a hacer. Y además, difundir esto podría tener un efecto > >> > > positivo y podría originar la aparición de mas alternativas que las > >> > > que existen hoy, que son pocas. > > >> > > Saludos y gracias por la información. > > >> > > Diego Coronel > > >> > > On Jul 26, 2:41 pm, Gerardo Richarte <[hidden email]> wrote: > >> > >> excelente andres!!! > > >> > >> espero que todo esto tambi n lo tengas en formato powerpoint :) > > >> > >> ya sab s que a unos cuantos nos interesa, ponele una tonelada de > >> > >> detalles t cnicos, y agregale una pizca de rant tambi n :) > >> > >> listo! receta perfecta :) > > >> > >> en un rato vuelvo a leer el mail y mando algunas preguntas tambi > >> n > > >> > >> saludos! > > >> > > -- > >> > > To post to this group, send email to [hidden email] > >> > > To unsubscribe from this group, send email to > > ... > > read more »- Hide quoted text - > > - Show quoted text - -- To post to this group, send email to [hidden email] To unsubscribe from this group, send email to [hidden email] http://www.clubSmalltalk.org |
Se implementó. Para ello modificamos el header de todos los objetos y le agregamos una word para que referencie al objeto que reificaba el method lookup. Por default utilizaba el method lookup definido en la clase del objeto que por default era el method lookup que todos conocemos :-)
Había algunos objetos donde esto no se podía hacer como los small integer por no tener "header" y otros detalles de implementación que no recuerdo, pero andaba bastante bien.
2010/8/2 [hidden email] <[hidden email]> Hola Hernán, una pregunta, esto lo implementaron o es un trabajo -- Hernán Wilkinson
Agile Software Development, Teaching & Coaching Mobile: +54 - 11 - 4470 - 7207 email: [hidden email] site: http://www.10Pines.com To post to this group, send email to [hidden email] To unsubscribe from this group, send email to [hidden email] http://www.clubSmalltalk.org |
In reply to this post by Angel "Java" Lopez
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 [hidden email] To unsubscribe from this group, send email to [hidden email] http://www.clubSmalltalk.org |
In reply to this post by dcoronel32@gmail.com
On 07/27/2010 05:32 PM, [hidden email] wrote:
> Hola Andrés > Contesto entre líneas... > yo no, solo por esta vez :) > Cuando envío un mensaje a un objeto, este busca en la clase, > superclases, etc. y ejectua el método. > pegale una mirada a Visual Smalltalk, desde siempre tuvo algo que permite cambiar un poco la semántica del message send (del lookup) desde Smalltalk. Básicamente, el lookup no se hace por clases y jerarquías, si no que *cada objeto* tiene algo así como un array con los diccionarios donde se hace el lookup. El orden de los diccionarios es el orden del lookup. Obviamente por default este array esta armado según la jerarquía de la clase del objeto, y es compartido el mismo por todos los objetos de la misma clase, pero esto no tiene por que ser así. Y de esta forma se pueden usar métodos de instancia (y se usan en sistemas comerciales), se puede implementar fácilmente cosas como traits, hernecia múltiple, etc. Lo único que no se puede hacer es cambiar que el matching de los métodos se haga por el selector, para eso hay que caer en el doesNotUnderstand: saludos! -- To post to this group, send email to [hidden email] To unsubscribe from this group, send email to [hidden email] http://www.clubSmalltalk.org |
In reply to this post by Hernan Wilkinson-3
On 08/02/2010 11:08 AM, Hernan Wilkinson wrote:
> Se implementó. Para ello modificamos el header de todos los objetos y > le agregamos una word para que referencie al objeto que reificaba el > method lookup. Por default utilizaba el method lookup definido en la > clase del objeto que por default era el method lookup que todos > conocemos :-) interesantísimo! me imagino que esto fue en Squeak, no? te acordás como era el truco para llamar a Smalltalk desde el momento del lookup? es posible hacer callbacks en cualquier momento? o pausaban el proceso que estaba por hacer el send-con-lookup-raro, despertaban otro proceso que hacie el lookup adentro, y después volvian al proceso pausado? saludos! -- To post to this group, send email to [hidden email] To unsubscribe from this group, send email to [hidden email] http://www.clubSmalltalk.org |
In reply to this post by Gerardo Richarte
En otros Smalltalks, *cada objeto* tiene un puntero a su clase
(excepto los inmediatos como los caracteres, small integers y small doubles). Es lo mismo en lo que al puntero respecta, salvo que en VSE el puntero es a una cosa que no es una clase. En otros Smalltalks, superficialmente, nada impide hacer clases fantasma que cambien los mensajes a los que responde un objeto, o que hagan que la herencia pase por clases tuyas antes etc. Sin embargo, es de andar pidiendo que se te cuelgue la imagen. De cualquier modo es medio un garron. A primera vista parece que el enfoque de VSE tiene que ser obviamente superior, pero seguramente debe haber algun costo u otra cosa que se complica al tener que andar escarbando entre los arrays de method dictionaries para encontrar la clase del objeto... por ejemplo, probablemente para VSE sea bueno tener acceso mas rapido a los method dictionaries porque no tiene PICs. Si tuviera PICs, los lookups serian mucho menos frecuentes y entonces no importaria tanto tener la doble indireccion a traves de la clase para encontrar el method dictionary. Que se yo, no me parece que sea tan facil. 2010/8/7 Gerardo Richarte <[hidden email]>: > On 07/27/2010 05:32 PM, [hidden email] wrote: >> Hola Andrés >> Contesto entre líneas... >> > yo no, solo por esta vez :) >> Cuando envío un mensaje a un objeto, este busca en la clase, >> superclases, etc. y ejectua el método. >> > pegale una mirada a Visual Smalltalk, desde siempre tuvo algo que > permite cambiar > un poco la semántica del message send (del lookup) desde Smalltalk. > > Básicamente, el lookup no se hace por clases y jerarquías, si no que > *cada objeto* tiene algo así como un array con los diccionarios donde se > hace el lookup. El orden de los diccionarios es el orden del lookup. > Obviamente por default este array esta armado según la jerarquía de la > clase del objeto, y es compartido el mismo por todos los objetos de la > misma clase, pero esto no tiene por que ser así. > > Y de esta forma se pueden usar métodos de instancia (y se usan en > sistemas comerciales), se puede implementar fácilmente cosas como > traits, hernecia múltiple, etc. Lo único que no se puede hacer es > cambiar que el matching de los métodos se haga por el selector, para eso > hay que caer en el doesNotUnderstand: > > saludos! > > -- > To post to this group, send email to [hidden email] > To unsubscribe from this group, send email to [hidden email] > > http://www.clubSmalltalk.org -- To post to this group, send email to [hidden email] To unsubscribe from this group, send email to [hidden email] http://www.clubSmalltalk.org |
In reply to this post by Gerardo Richarte
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: [hidden email] [mailto:[hidden email]] En nombre de Gerardo Richarte Enviado el: Sunday, August 08, 2010 3:14 AM Para: [hidden email] 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 [hidden email] To unsubscribe from this group, send email to [hidden email] http://www.clubSmalltalk.org -- To post to this group, send email to [hidden email] To unsubscribe from this group, send email to [hidden email] http://www.clubSmalltalk.org |
Free forum by Nabble | Edit this page |