Согласно Википедии, Ruby «является интерпретируемым языком программирования общего назначения высокого уровня». Кроме того, это язык, который относительно легко выучить, и, по моему опыту, многие программисты говорят, что это был первый язык, который они выучили. В результате многие начинающие программисты, вероятно, читают определение Ruby и понятия не имеют, что означает половина слов.

Чтобы начать объяснение, мы должны понять некоторые термины в определении Википедии. «Интерпретируемый» язык - это язык, в котором вместо компилятора используется интерпретатор. Компилятор работает путем преобразования исходного кода в машинные инструкции, которые могут быть прочитаны ЦП или виртуальной машиной. C - это пример языка программирования, в котором используется компилятор. Я играл с Rust, другим компилируемым языком, и вы можете видеть, что компилятор генерирует новый файл, который в основном не читается людьми.

Интерпретатор с другой стороны работал, преобразовывая или интерпретируя исходный код, в данном случае ваш код Ruby, в машинный код или другой язык, который может быть легко выполнен. Интерпретатором по умолчанию для Ruby долгое время был Ruby Interpreter MRI или CRuby, потому что Юкихиро «Мац» Мацумото, создатель Ruby, написал интерпретатор на C. Существуют и другие реализации с использованием интерпретаторов, написанных на других языках.

Однако это не так просто, как утверждать, что Ruby просто интерпретируется. Как RubyGuides, объясняет, что Ruby компилирует ваш код в инструкции YARV (еще одна виртуальная машина Ruby). YARV - это интерпретатор байт-кода.

Байт-код - это компактный числовой код, но не машинный код. Ruby - чрезвычайно гибкий язык, и неправильно называть его интерпретируемым, потому что для него существуют компиляторы.

Ruby 2.6.0, вышедший в прошлом году, также представил экспериментальный компилятор JIT (Just-In-Time). Компилятор, согласно официальному сайту Ruby, теперь «записывает код C на диск и порождает общий компилятор C для генерации собственного кода». Я видел, как это иногда называют «гибридом», потому что он ведет себя как компилятор, за исключением того, что он компилируется во время выполнения. Версия теперь имеет производительность в 1,7 раза быстрее, чем Ruby 2.5. Это очень существенное улучшение, особенно потому, что скомпилированные языки в целом работают быстрее, потому что в них меньше шагов.

Даже начальное утверждение в определении Википедии должно иметь звездочку, потому что Ruby не обязательно является интерпретируемым языком.

Язык высокого уровня и язык общего назначения

Хотя все, что я читал о языках высокого уровня, включает Ruby, я нашел разные списки того, что входит в число языков низкого уровня. Обычно акцент делается на том, что язык высокого уровня имеет больше абстракций, чем язык низкого уровня, а язык низкого уровня практически не имеет абстракций.

Машинный код будет одним из языков самого низкого уровня. Сборка будет выше машинного кода, но все равно очень потеряна. Конечно, C будет ниже, чем Ruby, но это язык более высокого уровня, чем Assembly. Ruby, несомненно, содержит множество абстракций, поэтому его правильно называют языком более высокого уровня.

Наконец, Ruby универсален, потому что он не ограничивается решением ограниченного количества проблем. Это не похоже на SQL, который разработан для баз данных. Вместо этого вы можете использовать Ruby с разными фреймворками в серверной части или даже во внешнем интерфейсе приложения. Его можно использовать для создания приложения CLI или просто для решения различных математических или логических задач.

Возможно, самое простое определение Ruby состоит в том, что это универсальный язык программирования высокого уровня с акцентом на гибкость с акцентом на объектно-ориентированное программирование.

Ресурсы:

Что такое MJIT в Ruby 2.6 и как это работает »Хесус Кастелло

Just-In-Time for Ruby 2.6, объяснение компилируемых и интерпретируемых языков »Мишель Берри

« Размытые линии: является ли Ruby интерпретируемым языком и что это вообще означает? » Мануэля Груллона

О Рубине »