viktorvsk
@viktorvsk

Как работает интерпретатор Ruby ?

Как известно, в руби, <=>, [], + и другие "операции" являются методами, которые можно переопределять.
Каким образом интерпретатор понимает, что в method можно передать параметры с помощью method(params), а в случае с методом [] "понимает", что параметры находятся между квадратных скобок и круглые использовать уже нельзя. Аналогично, каким образом идет разбор того, что method = 1 то же самое, что и method= 1?

Где лучше более углубленно почитать о таких деталях? Насколько много сахара такого плана в языке?
  • Вопрос задан
  • 3904 просмотра
Решения вопроса 1
@vsuhachev
Это определено синтаксисом ruby и не изменяемо.

Если подробнее, то сначала происходит парсинг исходного текста в промежуточное представление кода. После чего перестают существовать отдельные символы '[' и ']', код становится древовидной структурой в памяти, которая уже хранит в узлах целые операторы. И соответственно вы переопределением оператора :[] реально просто перетасовываете указатели в этой структуре, которая ничего не знает о синтаксисе входного языка (в нашем случае ruby)
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 3
@Shetani
Наверное тут, только Си придется выучить =)
https://github.com/ruby/ruby/blob/trunk/method.h
Ответ написан
Комментировать
Fesor
@Fesor
Full-stack developer (Symfony, Angular)
Это все разруливается в рантайме. То есть до момента непосредственно вызова функции ( оператора) не известно что именно будет вызвано. Разбор же исходников, смею предположить, организован как и у всех посредствам AST.
Ответ написан
Комментировать
1kachan
@1kachan
мб механизм позднего связывания?
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы