2011-05-23 17 views
7

si tomo un código de rubíCompilar rubí con su API C

puts "Hello World!" 

y reescribir usando la API C de Rubí

#include "ruby.h" 

int main() { 
    ruby_init(); 

    rb_funcall(Qnil, rb_intern("puts"), 1, rb_str_new2("Hello World!")); 

    ruby_finalize(); 
    return 0; 
} 

y compilarlo, es esta una forma de compilar el código Ruby ?

Si creo un programa que usa Ripper para analizar el código de Ruby y reescribirlo como C, ¿puedo llamarlo como un "compilador de Ruby"? ¿Hay algún código de rubí que no se puede reescribir en Ruby de esta manera? ¿Alguien intentó escribir este tipo de "compilador" antes?

+1

Cualquier lenguaje puede ser compilado, al igual que cualquier lenguaje Puede ser interpretado. Algunos lenguajes (Perl, Python, probablemente Ruby) necesitarían un intérprete incrustado en el programa compilado para soportar completamente el uso indiscriminado de 'eval' y tal, pero eso es más o menos lo que está haciendo su código. –

Respuesta

4

Un par de buenos artículos sobre este tema:

también han oído hablar de Crystal? Aunque no es realmente Ruby, se ve interesante:

Crystal es un lenguaje de programación con los siguientes objetivos:

  • tienen la misma sintaxis que Ruby, o al menos lo más similar posible.
  • Nunca tiene que especificar el tipo de una variable o argumento de método.
  • Se puede llamar al código C escribiendo enlaces en Crystal.
  • Tienen una evaluación en tiempo de compilación y generación de código, para evitar el código repetitivo.
  • Recopila código nativo eficiente.

sobre él en SO: Anybody tried the Crystal Programming Language (machine-code compiled Ruby)?

Y otro proyecto (comercial) con los mismos propósitos, pero principalmente dirigidos al desarrollo incrustado: http://foundry-lang.org/

1

sí que es el código ruby ​​"c-ified", por así decirlo.

lo más parecido a "Ruby a C" han sido http://ruby2cext.rubyforge.org, Rubinius con su compilador JIT, y ruby2c

http://betterlogic.com/roger/2009/08/how-to-use-the-ruby2c-gem

Otra opción sería escribir un compilador JIT para el código de bytes de 1,9, que se podría acelerar las cosas un poco.

También vea el lenguaje mirah, que es como estático, compile el rubí del tiempo.

Teóricamente debería ser posible.