Hola gente!

Gracias por las respuestas.

GallegO, parece que todo viene de GNU Smalltalk al fin. Lo que me confunde,
es que el primer codigo que mostre, es del Iliad Project

http://www.iliadproject.org/pages/Documentation/Getting-started/The-counter-example

y segun esta comparativa de web frameworks:
https://docs.google.com/spreadsheet/ccc?authkey=CJva7-8L&pli=1&key=0Atnb1W9vuq9ndGRTUFIzT3VON0lTQ3JxdlZYTUxhOFE&hl=en&authkey=CJva7-8L#gid=0


Iliad esta en 7 smalltalks, no se porque en la pagina de ellos prefirieron
esta notacion. Sospecho que habra nacido sobre Smalltalk GNU y luego lo
portaron a otros lados.

Diogenes, si, es todo un tema en Javascript, pero hasta ahi. El bloque con
el contexto se puede retornar con una function anonima

Ejemplo

function addx(x)
{
     return function(y) { x+y };
}

funcionaria devolviendo una funcion que tiene acceso al x "de afuera".
Mantiene la clausura, no hay tanto problema.

El problema es en los return de un bloque. En Smalltalk tiene return dentro
de un bloque, que puede hacer retornar a toda el metodo que "lo envuelve"
al bloque. No se si me explico.

A ver, a mano alzada

one
    ^ 2.

deberia funcionar igual que

one
     [ ^2 ] do.

o algo asi. El return de ADENTRO del bloque HACE RETURN del metodo one
COMPLETO. Esa es la parte tricky a implementar en Javascript.

Pero se puede! Hay mas de un approach. Hmmm... ver

http://diegogomezdeck.blogspot.com.ar/2006/07/st2js-traductor-de-smalltalk.html
Los bloques de Smalltalk se traducen más o menos directamente a funciones
de JS. Sólo hay que considerar 2 diferencias: el *this*/*self*y la
diferencia entre el *return*/*^*.

Ahi usan un throw new ReturnValue.... yo uso otro approach parecido pero
sin usar una exception.
algo mas en

http://ceibo.wordpress.com/2008/01/06/introduccion-a-smalltalk-web-toolkit-swt/

otra discusion/exposicion del tema
http://silversmalltalk.wordpress.com/2011/02/02/implementing-smalltalks-non-local-returns-in-javascript/

Nos leemos!

Angel "Java" Lopez
http://www.ajlopez.com
http://twitter.com/ajlopez


2012/3/23 Diogenes Moreira <[email protected]>

> Nop no es de pharo.. Supongo...corregime angel..pero es gnu..
> Lo que es haciendo es definir el comportamiento on the fly el método.
>
> Eso lo podes hacer en js.. lo que se te va complicar es llevarte el
> contexto junto con el bloque.
>
> eso no tengo perra idea como se hace en javascript
>
> Saludos
> El mar 23, 2012 12:10 p.m., "GallegO" <[email protected]> escribió:
>
> Parece un chunk format modificado eso.
>> Es de Pharo?
>>
>> Nunca lo había visto.
>>
>> Saludos
>>
>> El día 23 de marzo de 2012 11:50, Angel Java Lopez
>> <[email protected]> escribió:
>> > Agrego nuevo caso
>> >
>> >
>> http://www.gnu.org/software/smalltalk/manual/html_node/Defining-methods.html#Defining-methods
>> >
>> >          Account class extend [
>> >             new [
>> >                 | r |
>> >                 <category: 'instance creation'>
>> >                 r := super new.
>> >                 r init.
>> >                 ^r
>> >            ]
>> >         ]
>> >
>> >
>> > Guau! hay un unary message extend, y luego un bloque?
>> >
>> > Cosa Golda! :-)
>> >
>> > 2012/3/23 Angel Java Lopez <[email protected]>
>> >>
>> >> Hola gente!
>> >>
>> >> El anio pasado consegui traducir codigo Smalltalk a Javascript, y
>> >> ejecutarlo en NodeJs, asi como en el browser. En estos dias tengo otro
>> >> "approach" para hacer lo mismo, pero ya directamente escrito en
>> Javascript
>> >> (el anterior trabajo esta en C#).
>> >>
>> >> Queria traducir/portar algun web framework simple de Smalltalk a
>> >> Javascript, y ejecutarlo desde NodeJs. Llegue a ver a:
>> >>
>> >>
>> >>
>> http://www.iliadproject.org/pages/Documentation/Getting-started/The-counter-example
>> >>
>> >> Y ahi me encuentro con el tema de esta consulta/pregunta. Veo:
>> >>
>> >> Iliad.ILWidget subclass: MyWidget [
>> >>
>> >>   contents [
>> >>     ^[:e |
>> >>       e div
>> >>         class: 'example';
>> >>         h1: 'hello world!']
>> >>     ]
>> >> ]
>> >>
>> >> Nunca habia visto esto de poner un bloque asi. En el libro de
>> Smalltalk-80
>> >> no parece que este. Por lo que entendi, define metodos, en este caso
>> >> contents.
>> >>
>> >> Lo que no entiendo, es como se implemento esta sintaxis en Smalltalk.
>> Es
>> >> que asi escrito, el bloque parece un mensaje unario que se envia a
>> MyWidget.
>> >> Pero debe estar pasando otra cosa.
>> >>
>> >> Entiendo que se envia el mensaje con selector subclass: a ILWidget, y
>> a lo
>> >> que retorna, se le aplica de algun modo el bloque. Es asi?
>> >>
>> >> Es algo que para implementarlo hubo que cambiar el Compiler de
>> Smalltalk?
>> >>
>> >> Es algo solo para cuando se envia subclass: ?
>> >>
>> >> Es #subclass el selector del message? O el compilador lo pasa a algo
>> como
>> >> #subclass:withblock: ?? (yo apuesto a esto ultimo)
>> >>
>> >> Como se escribiria en Smalltalk-80 clasico?
>> >>
>> >> Esta "notacion" esta soportada en todos los Smalltalks? en la mayoria?
>> en
>> >> la mitad?
>> >>
>> >> Veo tambien esa notacion en:
>> >> http://etoileos.com/dev/docs/languages/smalltalk/
>> >>
>> >> NSObject subclass: LS
>> >> [
>> >>     run
>> >>     [
>> >>         | fm files out |
>> >>         fm := NSFileManager defaultManager.
>> >>         files := fm directoryContentsAtPath:'.'.
>> >>         out := NSFileHandle fileHandleWithStandardOutput.
>> >>         files foreach:[ :x | x printOn:out. '\n' printOn:out. ].
>> >>     ]
>> >> ]
>> >>
>> >> Cualquier aclaracion, bienvenida!
>> >>
>> >> Nos leemos!
>> >>
>> >> Angel "Java" Lopez
>> >> http://www.ajlopez.com
>> >> http://twitter.com/ajlopez
>> >>
>> >
>> > --
>> > 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