Notacion Bloque

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
6 messages Options
Reply | Threaded
Open this post in threaded view
|

Notacion Bloque

Angel Java Lopez
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:


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:

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

--
To post to this group, send email to [hidden email]
To unsubscribe from this group, send email to [hidden email]
 
http://www.clubSmalltalk.org
Reply | Threaded
Open this post in threaded view
|

Re: Notacion Bloque

Angel Java Lopez
Agrego nuevo caso

         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 <[hidden email]>
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:


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:

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


--
To post to this group, send email to [hidden email]
To unsubscribe from this group, send email to [hidden email]
 
http://www.clubSmalltalk.org
Reply | Threaded
Open this post in threaded view
|

Re: Notacion Bloque

Sebastian Calvo
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
<[hidden email]> 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 <[hidden email]>
>>
>> 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 [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
Reply | Threaded
Open this post in threaded view
|

Re: Notacion Bloque

Esteban A. Maringolo
En GNU Smalltalk es justamente un chunk format modificado.
Hay que tener en cuenta que GNUst no tiene "image"*, o mas bien se trabaja de manera basada en archivos (y principalmente para scripting).

Saludos.

Esteban A. Maringolo


El 23 de marzo de 2012 12:10, GallegO <[hidden email]> 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
<[hidden email]> 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 <[hidden email]>
>>
>> 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 [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

--
To post to this group, send email to [hidden email]
To unsubscribe from this group, send email to [hidden email]
 
http://www.clubSmalltalk.org
Reply | Threaded
Open this post in threaded view
|

Re: Notacion Bloque

Diogenes Moreira
In reply to this post by Sebastian Calvo

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" <[hidden email]> 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
<[hidden email]> 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 <[hidden email]>
>>
>> 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 [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

--
To post to this group, send email to [hidden email]
To unsubscribe from this group, send email to [hidden email]
 
http://www.clubSmalltalk.org
Reply | Threaded
Open this post in threaded view
|

Re: Notacion Bloque

Angel Java Lopez
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 

y segun esta comparativa de web frameworks:

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

Los bloques de Smalltalk se traducen más o menos directamente a funciones de JS. Sólo hay que considerar 2 diferencias: el this/selfy la diferencia entre el return/^.

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


otra discusion/exposicion del tema

Nos leemos!

Angel "Java" Lopez


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

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" <[hidden email]> 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
<[hidden email]> 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 <[hidden email]>
>>
>> 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 [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

--
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