Зачем трюфлеруби нужны расширения C?
Текущий статус truffleruby
говорит:
TruffleRuby продвигается быстро, но в настоящее время, вероятно, не готов к тому, чтобы вы запустили полноценное приложение Ruby. Поддержка критических расширений C, таких как OpenSSL и Nokogiri, отсутствует.
Почему truffleruby
нужны расширения C? Он построен на GraalVM, который построен поверх JVM, на самом деле он является форком JRuby:
TruffleRuby - это форк JRuby, объединяющий его с кодом из проекта Rubinius, а также содержащий код из стандартной реализации Ruby, MRI.
Разве они не могут использовать драгоценные камни мира JRuby вместо того, чтобы полагаться на свои варианты C?
РЕДАКТИРОВАТЬ ссылку на вопрос на GitHub
2 ответа
Запускать расширения C сложно, потому что API расширения C - это всего лишь внутренняя часть MRI, представленная в виде заголовочного файла. Вы не программируете против чистого API - вы программируете против всех деталей реализации и внутренних проектных решений MRI.
Java-расширения JRuby имеют точно такую же проблему! API расширения JRuby Java - это всего лишь внутренняя часть JRuby, и вы не программируете с помощью API, а программируете со всеми деталями реализации и проектными решениями JRuby.
Мы планируем в конечном итоге решить обе проблемы одним и тем же способом - добавить еще один уровень абстракции к коду C или Java, используя интерпретатор, который мы можем перехватывать и перенаправлять при необходимости, чтобы он считал, что он работает с внутренними объектами MRI или JRuby., но на самом деле мы перенаправляем их на наши внутренние устройства.
Мы думаем, что расширения C более важны, поэтому мы решаем их в первую очередь. На самом деле мы еще не начали расширений Java, но мы запустили базовый интерпретатор для Java, который мы будем использовать.
Это видео объясняет все
Вы уже получили хороший ответ от самого руководителя проекта, но я хочу предложить другую точку зрения:
Зачем трюфлеруби нужны расширения C?
Это не нужно им. Но они существуют, и есть код, который их использует, и было бы неплохо иметь возможность запустить этот код.