Tyrel

Ideas Generales

Diseñar un lenguaje de programación con múltiples niveles de sintaxis combinadas, la idea es evitar la necesidad de mezclar diferentes lenguajes para diferentes partes de una aplicación compleja.


Metas

  • Basado en bytecode para mayor eficiencia
  • Primer nivel de sintaxis basado en instrucciones de pila y RPN
  • Segundo nivel de sintaxis basado en S-expressions
  • Tercer nivel de sintaxis similar a C++ o Python
  • Soporte de orientación a objetos y programación funcional directamente a nivel de bytecode
  • Posibilidad de mezclar los tres niveles en un mismo archivo de código por medio de pragmas
  • Posibilidad de extender el lenguaje con nuevas sintaxis
  • Fácil de integrar con aplicaciones en C y C++, ganando los beneficios de los tres niveles de sintaxis
  • Librería estándar directamente disponible en todos los niveles de sintaxis

Estado Actual

  • Primera versión preliminar del bytecode (33 instrucciones)
  • Primera versión del runtime implementado en C++
  • Primera versión del compilador de la sintaxis de primer y segundo nivel
  • Primera versión del compilador de la sintaxis de tercer nivel (en desarrollo)

Descargas

Es posible descargar la versión actual (en desarrollo, aún no usable para producción) usando Subversion, desde el repositorio:

svn co svn://sihnon.homelinux.net/tyrel


Ejemplos

Ejemplo 1

Llamar a una función global MyFunction con argumentos 1, 2 y 3 (valores enteros) y guardar el resultado en la variable global z:

  • Sintaxis primer nivel
3 2 1 global "MyFunction" get do global "z" set
  • Sintaxis segundo nivel
( set z ( MyFunction 1 2 3 ))
  • Sintaxis tercer nivel
z = MyFunction(1, 2, 3);

Ejemplo 2

Imprimir los valores en la lista [ 1, 2, 3 ], uno a uno:

  • Sintaxis primer nivel
[ global "write" get do ] code [ 1 2 3 ] for
  • Sintaxis segundo nivel
( for x '( 1 2 3 ) ( write x ) )
  • Sintaxis tercer nivel
 for x in [ 1, 2, 3 ]:
 {
  write ( x );
 }

Ejemplo 3

Definir una función global 'Suma' que sume dos números:

  • Sintaxis primer nivel
[ global "+" get do ] code global "Suma" set
  • Sintaxis segundo nivel
( define Suma ( a b ) ( return ( + a b ) ) )

* Sintaxis tercer nivel

define Suma (a, b)
{
 return (a+b);
}