Подтвердить что ты не робот

Есть ли окончательный справочный документ для синтаксиса Ruby?

Я ищу окончательный документ по синтаксису Ruby. Я знаю об окончательных документах для основного API и стандартной библиотеки, но как насчет самого синтаксиса? Например, такой документ должен охватывать: зарезервированные слова, синтаксис строковых литералов, правила именования для переменных/классов/модулей, все условные операторы и их перестановки и т.д.

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

Например, знаете ли вы, что вы можете использовать оператор case без начального значения case, и затем он выполнит первое предложение true when when? Любая данная книга или учебник Ruby может включать или не охватывать эту менее известную функциональность синтаксиса case. Это не обсуждается в разделе "Программирование Ruby" о случаях. Но это всего лишь один маленький пример.

Пока лучшая документация, которую я нашел, представляет собой проект rubyspec, который, похоже, является попыткой написать полный набор тестов для этого языка. Это неплохо, но это немного сложно использовать с практической точки зрения как разработчик, работающий над собственными проектами.

Я просто что-то пропустил или действительно нет окончательного читаемого документа, определяющего весь синтаксис Ruby?

4b9b3361

Ответ 1

Единственным документом, который можно разумно назвать "окончательным", является исходный код parse.y в дереве исходных текстов YARV.

Спецификация проекта ISO содержит 39-страничное приложение с кратким описанием грамматики. Обратите внимание, однако, что ISO Ruby является минимальным подмножеством пересечения Ruby 1.8 и 1.9. IOW: он не описывает ничего, что только в 1,8 или только в 1,9 (так что синтаксические дополнения в версии 1.9, такие как прочные proc и хеши символов, не описаны), и не описывает все в этом пересечении. ISO Ruby немного похож на ISO HTML.

Проект RubySpec содержит исполняемые спецификации для языка Ruby. Однако он не содержит явной спецификации грамматики. Единственная спецификация грамматики подразумевается в самих примерах. Кроме того, поскольку RubySpec представляет собой примерную спецификацию, он может отображать только конкретные примеры действительного кода Ruby, но он не может сказать вам все возможные действующие программы Ruby, такие как спецификация грамматики. И поскольку RubySpec сам является исполняемым кодом Ruby, он может показывать только действительные примеры, а не недопустимые.

Последнее, что можно считать окончательным, - это книга Язык программирования Ruby Дэвида Фланагана и Юкихиро "matz" Мацумото.

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

Ответ 2

В работах есть проект стандарта Ruby. Вы можете получить его здесь: http://ruby-std.netlab.jp/

Ваш пример о case и программировании Ruby плохо выбран. Когда программирование Ruby вводит case (на стр. 98 для первого издания, 141 для второго издания), Томас говорит:

Выражение Ruby case - мощный зверь: многострочный if на стероидах. И чтобы сделать его еще более мощным, он поставляется в двух вариантах.

Затем он кратко объясняет оба способа использования case (с явной целью после начального case и без). Он на самом деле начинает со стиля, о котором вы говорите, он не упоминает.

Однако ваша большая точка небезопасна. Вероятно, будет полезно иметь стандарт.

Ответ 4

Как было сказано выше, есть попытка написать "spec" на http://ruby-std.netlab.jp.

Вы должны быть осторожны с этой "спецификацией". Разработчики языка не делают это, и они в основном документируют то, что они видят, а не наоборот. Он основан на 1.8.7, поэтому могут быть возможности в 1.9, которые не покрываются.

Я не могу себе представить, что я помню синтаксис с 300-страничным документом. Чтобы иметь "над столом", этот чит-код описывает то, что вы хотите: сжатый синтаксис, зарезервированные слова и т.д. Это альтернатива dzone.