Archive for the '18257' Category

AjErl Implementando Erlang en C# (1) El proyecto

Tuesday, June 24th, 2014

Siguiente Post

Hace ya un tiempo, para practicar C# y TDD y explorar ideas de Erlang, inicié:

https://github.com/ajlopez/AjErl

La estructura de la solución:

Tiene el proyecto núcleo de librería de clases, el proyecto de tests, y estoy armando un REPL (Read Eval Print Loop) como programa de consola. Lo interesante de Erlang es que internamente tiene procesos livianos, implementados en la propia máquina virtual, que pueden comunicarse entre sí enviando y recibiendo mensajes inmutables. No pretendo implementar una máquina virtual de ese tipo, sino tener procesos en threads. Nunca van a llegar a ser tan rápidos como los de Erlang, pero es un primer “baby step” a explorar, antes de tratar de mejorar la implementación.

Los mensajes se pueden enviar a una cola por proceso (thread en este caso), y ya tengo implementado la aceptación de los mensajes, su rechazo y vuelta a procesar, como en Erlang nativo.

Pero hoy quería comentar brevemente la implementación de cómo transforma texto de entrada en expresiones y formas Erlang:

Hay un Lexer que devuelve tokens, y estos tokens tienen un valor y un tipo. Ya puedo reconocer un átomo (un nombre que comienza en letra minúscula), una variable, delimitadores, operadores, números enteros y reales, strings. El Lexer es consumido por un Parser, que tiene dos grandes métodos públicos: uno que parsea expresiones, usado desde el REPL, y otro que parsea lo que en Erlang se llama un form, sería como una definición de función en un módulo de Erlang. También hay formas que declaran el nombre del módulo, o que otras formas se exportan con nombre y cantidad de argumentos. En dichos módulos no se aceptan expresiones, sino solamente ese tipo de declaraciones form.

Si ven la historia de los commits, verán que no todo se desarrolló de antemano, sino que fue creciendo de a poco, a medida que me planteaba pequeños casos de uso a implementar.

Próximos temas: comentar la implementación de expresiones, forms, procesos como threads con mailbox para mensajes, y el REPL. Tengo que seguir trabajando en la implementación de mensajes y procesos distribuidos.

Nos leemos!

Angel “Java” Lopez

http://www.ajlopez.com

http://twitter.com/ajlopez

Resoluciones del Nuevo Mes: Marzo 2014

Sunday, March 9th, 2014

Primero, revisión de mis Resoluciones de Febrero:

– Completar mensajería distribuida en AjErl [parcial] ver repo
– Completar dot notation in AjLisp [pendiente]
– Mejorar ClojSharp [completo] ver repo
– Trabajar en ScaScript [parcial] ver repo
– Trabajar en ScalaSharp [completo] ver repo
– Agregar alcance de variable a Mass [pendiente]
– Completar primera versión de Aktores, actor model en C# [pendiente]
– Más tareas de generación de código, plantillas, modelos, para AjGenesis para Node, generando Express, Meteor, Sinatra y otro tipo de aplicaciones [parcial] ver repo

Para compensar lo faltante, estuve trabajando en:

– Crear Annalisa [completo] ver repo with online web services and demo
– Comenzar SimpleAsync [completo] ver repo
– Crear mis primeros ejemplos en Meteor [completo] ver repo
– Comenzar Templie, una simple template engine en Java [completo] ver repo
– Comenzar SimpleScraper, un simple scraper en JavaScript/Node.js [completo] ver repo

E hice algunas mejoras en DylanSharp

Resoluciones del nuevo mes:

– Trabajar en DictSharp
– Dar una charla sobre Node.js y Aplicaciones Distribuidas
– Mejorar SimpleGammon
– Mejorar Annalisa
– Agregar @for a Templie
– Trabajar en PreciosaAnnalisa online web services
– Mejorar mis ejemplos de aplicaciones distribuidas en Node.js
– Trabajar en ScalaSharp
– Mejorar ClojSharp
– Mejorar SimpleAsync, agregar do operation (funciones en paralelo)
– Mejorar Aktores
– Mensajes distribuidos en AjErl
– Agregar alcance de variables al lenguaje Mass
– Comenzar un ejemplo de code generation as a service

Mucho para divertirse!

Nos leemos!

Angel “Java” Lopez
http://www.ajlopez.com
http://twitter.com/ajlopez

Resoluciones del Nuevo Mes: Febrero 2014

Saturday, February 8th, 2014

Revisión de mis Resoluciones de Enero:

– Comenzar a implementar un modelo de actores a la Akka en C# [completo] ver repo
– Comenzar a implementar un intérprete Scala en JavaScript [completo] ver repo
– Trabajar en AjErl, Erlang en C# [completo] ver repo
– Trabajar en Mass (tengo varias ideas para implementar más module pattern y scope de variables) [pendiente]
– Trabajar en DylanSharp [completo] ver repo
– Comenzar una implementacion de ML (JavaScript? C#?) [pendiente]

También trabajé en:

– Mejorar intérprete Scala en C# [completo] ver repo
– Agregar notación dot en mi intérprete Lisp en C# [completo] ver repo
– Mejorar el intérprete Ruby en JavaScript [completo] ver repo
– Mejorar el intérprete Clojure en C# [completo] ver repo
– Primeros templates y tasks generando código Sinatra desde AjGenesis para Node [completo] ver repo

Mis resoluciones para este nuevo mes:

– Completar mensajería distribuida en AjErl
– Completar notación dot en AjLisp para acceder a tipos y objetos nativos
– Mejorar ClojSharp
– Trabajar en ScaScript
– Trabajar en ScalaSharp
– Agregar alcance de variables a Mass
– Completar primera versión de model de actores Aktores en C#
– Más tareas de generación de código, plantillas, modelos en AjGenesis para Node, generando código para Express, Meteor, Sinatra

Nos leemos!

Angel “Java” Lopez
http://www.ajlopez.com
http://twitter.com/ajlopez