SharpGo Implementando Go en C# (1) El proyecto

Otro proyecto que tengo para practicar TDD (Test-Driven Development) y C#, es


https://github.com/ajlopez/SharpGo


Un intérprete (no compilador) del lenguaje Go de Google en C#. Como es usual, tiene un proyecto de librería y un proyecto de tests de la librería. Como el lenguaje Go es un lenguaje tipado, no puedo seguir el camino de armar un árbol de expresiones y evaluarla, como en RubySharp, PythonSharp y Mass, sino que el compilador tiene que tener varias fases, como en ScalaSharp, para ir detectando incosistencias de tipos, y declaraciones de tipos que todavía no se conocen al momento de analizar una sentencia o expresión.


Parte del proyecto, los nodos del AST que por ahora están implementados:



Los nodos que estoy armando del AST (Abstract Syntax Tree), se agrupan en dos grandes grupos:


- Nodos de Comandos, que deben producir comandos que se ejecutan.


- Nodos de Expresiones, que deben producir expresiones a evaluar, que devuelvan un valor. Tienen tipo.


Las comandos que declaran variables también tienen tipo. Por ahora, tengo todo dispuesto para comenzar a ir comenzando a:


- Declarar los tipos de algunas declaraciones de variables y funciones
- Controlar que los tipos sean los correctos, por ejemplo que a una variable entera no se le asigne un string
- Comenzar a emitir los comandos y expresiones adecuados


Como en otros proyectos, espero poder agregar acceso a los tipos y librerías propios de .NET. Un tema que tengo que examinar es cuánto del lenguaje Go puedo implementar. Un punto a estudiar: hay referencias a estructuras, que tengo que revisar si es posible mantener la semántica original o no en un lenguaje como C#. Parece interesante implementar canales, que ya hace unos años lo había implementado, tomando ideas de Go, en C# y en AjSharp.


Nos leemos!


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

This entry was posted in 1389, 15035, 18470, 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>