Все ли интерпретаторы Ruby используют один и тот же синтаксис Ruby?

Все ли интерпретаторы Ruby придерживаются одного и того же синтаксиса Ruby, определенного на www.ruby-lang.org?

  • МРТ
  • YARV
  • Rubinius
  • JRuby
  • IronRuby

Потому что именно интерпретатор определяет язык Ruby. Означает ли это, что один переводчик может добавить особенность / синтетический сахар, которого нет у других переводчиков?

Если это так, все ли переводчики имеют свою собственную документацию API?

Потому что я использую: http://ruby-doc.org/ruby-1.9/index.html.

Какие переводчики реализуют это?

Может ли кто-то пролить свет на эту тему.

Спасибо!

2 ответа

Решение

Все ли интерпретаторы Ruby придерживаются одного и того же синтаксиса Ruby, определенного на www.ruby-lang.org?

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

Потому что я использую: http://ruby-doc.org/ruby-1.9/index.html.

Какие переводчики реализуют это?

На данный момент единственным готовым к исполнению движком Ruby, полностью реализующим Ruby 1.9, является YARV.

Сам по себе JRuby готов к работе и реализует как Ruby 1.8.7, так и Ruby 1.9.2, но реализация Ruby 1.9.2 еще не завершена. IronRuby и Rubinius также работают над реализациями Ruby 1.9.2. MacRuby имеет довольно полную реализацию Ruby 1.9, но она все еще далека от версии 1.0. МРТ не реализует Ruby 1.9 и, вероятно, никогда не будет.

Но я не понимаю, почему вы так обеспокоены синтаксисом. Различия в синтаксисе тривиальны, чтобы обнаружить: если бы была разница в синтаксисе, движок просто отказался бы анализировать ваш файл, и вы бы сразу узнали, что что-то не так. Различия в семантике, с другой стороны, намного опаснее.

Какой бит "синтаксического сахара" вы имеете в виду?

Имейте в виду, что у ruby ​​очень маленький набор ключевых слов. Многие вещи, которые на первый взгляд кажутся ключевыми словами, на самом деле реализуются ядром (например, require, puts, а также raise).

http://apidock.com/ruby/Kernel

Другие вопросы по тегам