Зачем трюфлеруби нужны расширения 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, который мы будем использовать.

Это видео объясняет все

https://youtu.be/YLtjkP9bD_U?t=1562

Вы уже получили хороший ответ от самого руководителя проекта, но я хочу предложить другую точку зрения:

Зачем трюфлеруби нужны расширения C?

Это не нужно им. Но они существуют, и есть код, который их использует, и было бы неплохо иметь возможность запустить этот код.

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