ScalaSharp Simple Scala en C# (1) La Idea

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

This entry was posted in 10755, 1389, 15035, 18256, 5374. Bookmark the permalink.

Leave a Reply

Your email address will not be published. Required fields are marked *


*

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>