Archive for the '18256' Category

ScalaSharp Simple Scala en C# (1) La Idea

Sunday, June 22nd, 2014

Ya algo escribí en este blog, pero es tiempo de presentarlo en sociedad. Hace unos meses, el año pasado, inicié el proyecto:

https://github.com/ajlopez/ScalaSharp

Un simple intérprete de un Scala simplificado, en C#. No pretendo implementar todo Scala ni tampoco que sea un compilador a CLR .NET. Mi intención es explorar una implementación de intérprete, alternativa, adoptando algunas características de Scala, sin llegar a sobrecargarlo.

Sin ser un programador Scala (ni aficionado ni profesional) mi impresión es que Scala, como lenguaje y librería, es algo así como “too much”, como demasiado, como “overwhelming”. La gente de Java lo adopta porque es más flexible, se necesita menos “boilerplate”, etc. Pero me parece como que Scala fue demasiado lejos. Habiendo programado en Java y en C#, pienso que este último, agregando pocas cosas (hace años delegados, lambdas, métodos de extensión, “generics” en la VM, y recientemente, entrada/salida asincrónica, async, await), ha sabido mantenerse saludable, sin grandes complicaciones. Vean qué fácil ha sido implementar LINQ, con evaluación “lazy” y demás.

En cambio, Scala me parece como que es “demasiado, todo junto”. Por lo que ví, la inferencia de tipos es una característica que no es tan necesaria en los proyectos reales. Y todavía no puedo aceptar que la lista de operadores de Scala ocupe más de una página web. Pero bueno, ése es el estado actual de la cosa. La gente de Scala está trabajando en una nueva implementación, llamada Dotty. Pero si recién lo están haciendo, luego de años de definición del lenguaje, tengo que declarar: “demasiado poco, demasiado tarde”.

Eso no obsta a que reconozca que Scala tiene grandes triunfos, aplicaciones no triviales como el Play Framework y Akka. Es Akka y Play lo que “va a salvar” a Scala. No se necesita tanto tantas características nuevas de lenguaje (apenas las que mencioné para C#) como librerías que organicen algunos temas (como la implementación de un servidor HTTP asincrónico o la distribución de mensajes entre actores distribuidos).

Para experimentar con un Scala simplificado, y para practicar deliberadamente TDD (Test-Driven Development) en C#, inicié el proyecto ScalaSharp.

Es un desafío para mí, porque no es un simple intérprete. Quiero implementar un AST (Abstract Syntax Tree) que detecte inconsistencias de tipos. En mis anteriores experiencias, como RubySharp, PythonSharp, y el lenguaje Mass, sólo era necesario armar un árbol de expresiones/comandos y evaluarlo. Ahora voy a tener que controlar que los tipos sean los adecuados. Por ejemplo, que una variable esté tipada, y que en sus asignaciones, la expresión a evaluar y asignar corresponda al tipo de la variable. Pueden ver algo del trabajo en progreso en:

https://github.com/ajlopez/ScalaSharp/tree/master/Src/ScalaSharp.Core/Ast

donde está el árbol de nodos tipado, versus los comandos y expresiones a ejecutar/evaluar:

https://github.com/ajlopez/ScalaSharp/tree/master/Src/ScalaSharp.Core/Commands
https://github.com/ajlopez/ScalaSharp/tree/master/Src/ScalaSharp.Core/Expressions

Próximos temas: detalles de implementación, control de tipos en el AST, transformación a comandos/expresiones. Lo bueno de hacerlo con TDD es que me permite ir implementado la solución a medida que defino los casos de uso.

Nos leemos!

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

Resoluciones del Nuevo Mes: Abril 2014

Sunday, April 6th, 2014

Llega revisión de mis resoluciones de marzo:

– Trabajar en DictSharp [completo] ver repo
– Dar una charala sobre Aplicaciones Distribuidas en Node.js [completo] ver repo ver presentación
– Mejorar SimpleGammon [completo] ver repo
– Mejorar Annalisa [completo] ver repo
– Agregar @for a Templie [pendiente]
– Trabajar en PreciosaAnnalisa online web services [completo] ver repo
– Mejorar mis ejemplos de Aplicaciones Distribuidas en Node.js [completo] ver repo ver repo ver repo
– Trabajar en ScalaSharp [completo] ver repo
– Mejorar ClojSharp [completo] ver repo
– Mejorar SimpleAsync, operación do (funciones en “paralelo”) [pendiente]
– Mejorar Aktores [pendiente]
– Mensajes distribuidos en AjErl [pendiente]
– Agregar alcance de variables al lenguaje Mass [pendiente]
– Comenzar a codificar generation as a service [parcial]

Adicionalmente, estuve trabajando en:

– Complexo, operaciones de números complejos en JavaScript [completo] ver repo
– Comenzar RustScript, un intérprete de Rust en JavaScript [completo] ver repo
– Continuar RuScript, intérprete de Ruby en JavaScript [completo] ver repo
– Continuar RubySharp, intérprete de Ruby en C# [completo] ver repo
– Comenzar AjLispScala, intérprete Lisp en Scala, usando TDD y SBT [completo] ver repo
– Grabar un segundo video de aprendiendo Node.js [completo] ver post

Para este nuevo mes, mis resoluciones son:

– Continuar AjLispScala
– Continuar AjGenesisNode-Express
– Continuar AjGenesisNode-PHP
– Continuar RuScript
– Continuar RustScript
– Mensajes distribuidos en AjErl
– Dar una charla de introducción a Node.js
– Publicar un nuevo video de Aprendiendo Node.js

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