Скомпилируйте Ruby с его C API - PullRequest
7 голосов
/ 24 мая 2011

Если я возьму код ruby ​​

puts "Hello World!"

и перепишу его с помощью C API Ruby

#include "ruby.h"

int main() {
  ruby_init();

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

  ruby_finalize();
  return 0;
}

и скомпилирую, это способ компилирования кода Ruby?1007 *

Если я создаю программу, которая использует Ripper для синтаксического анализа кода Ruby и перезаписи его как C, могу ли я назвать его «компилятором Ruby»?Есть какой-нибудь рубиновый код, который нельзя переписать в Ruby таким образом?Кто-то пытался написать этот вид "компилятора" раньше?

Ответы [ 2 ]

4 голосов
/ 11 июля 2013

Несколько хороших статей на эту тему:

Также естьВы слышали о Кристалл ?Хотя это не совсем Ruby, это выглядит интересно:

Crystal - это язык программирования со следующими целями:

  • Синтаксис Ruby такой же или, по крайней мере, такой же, каквозможно.
  • Никогда не нужно указывать тип переменной или аргумента метода.
  • Уметь вызывать код C, записывая привязки к нему в Crystal.
  • Иметь compile-оценка времени и генерация кода, чтобы избежать шаблонного кода.
  • Компилировать в эффективный собственный код.

об этом на SO: Кто-нибудь пробовал язык программирования Crystal (скомпилированный Ruby с машинным кодом)?

И еще один (коммерческий) проект с теми же целями, но в основном предназначенный для разработки встраиваемых систем: http://foundry -lang.org/

1 голос
/ 24 мая 2011

да, это как бы "c-ified" код ruby.

Ближайшие вещи к "ruby to c" были http://ruby2cext.rubyforge.org, rubinius с его JIT-компилятором и ruby2c

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

Другой вариант - написать JIT-компилятор для байт-кода 1.9, что может немного ускорить процесс.

Также см. Язык mirah, которыйпоходит на статический, ruby ​​времени компиляции.

Теоретически это должно быть возможно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...