¿Existe un documento de referencia definitivo para la syntax de Ruby?

Estoy buscando un documento definitivo sobre la syntax de Ruby. Conozco los documentos definitivos para la API básica y la biblioteca estándar, pero ¿qué pasa con la syntax? Por ejemplo, dicho documento debe cubrir: palabras reservadas, syntax de cadenas literales, reglas de denominación de variables / clases / módulos, todas las declaraciones condicionales y sus permutaciones, etc.

Sé que hay muchos libros y tutoriales, sí, pero cada uno de ellos es esencialmente un tutorial, cada uno con un rango de profundidad y enfoque diferentes. Todos ellos, por necesidad de brevedad y flujo narrativo, omitirán ciertos detalles del lenguaje que el autor considera insignificantes.

Por ejemplo, ¿sabía que puede usar una statement de caso sin un valor de caso inicial, y luego ejecutará el primer verdadero cuando la cláusula? Cualquier libro o tutorial de Ruby puede o no cubrir esa funcionalidad particular menos conocida de la syntax de casos. No se trata en la sección “Progtwigción de Ruby” sobre declaraciones de casos. Pero eso es solo un pequeño ejemplo.

Hasta ahora, la mejor documentación que he encontrado es el proyecto rubyspec, que parece ser un bash de escribir un conjunto de pruebas completo para el idioma. No está mal, pero es un poco difícil de usar desde un punto de vista práctico como desarrollador que trabaja en mis propios proyectos.

¿Me estoy perdiendo algo o realmente no hay un documento legible definitivo que defina toda la syntax de Ruby?

El único documento que se puede describir razonablemente como “definitivo” es el código fuente de parse.y en el árbol de fonts YARV .

El borrador de la especificación ISO contiene un apéndice de 39 páginas con un resumen de la gramática. Sin embargo, tenga en cuenta que ISO Ruby es un subconjunto mínimo de la intersección de Ruby 1.8 y 1.9. IOW: no describe nada que esté solo en 1.8 o solo en 1.9 (por lo tanto, las adiciones de syntax en 1.9 como procesos y símbolos de hashes no se describen), ni describe todo en esa intersección. ISO Ruby es un poco como ISO HTML en ese sentido.

El proyecto RubySpec contiene especificaciones ejecutables para el lenguaje Ruby. Sin embargo, no contiene una especificación explícita de la gramática. La única especificación de la gramática está implícita en los propios ejemplos. Además, dado que RubySpec es una especificación basada en el ejemplo, solo puede mostrarle ejemplos específicos de código válido de Ruby, pero no puede indicarle todos los posibles progtwigs válidos de Ruby como podría hacerlo una especificación de gramática. Y, dado que RubySpec es en sí mismo un código ejecutable de Ruby, solo puede mostrarle ejemplos válidos, no válidos.

Lo último que podría considerarse definitivo es el libro The Ruby Programming Language de David Flanagan y Yukihiro “matz” Matsumoto.

Tenga en cuenta, sin embargo, que “la totalidad de la syntax de Ruby” es una tarea bastante desalentadora, porque la syntax de Ruby es increíblemente complicada con una gran cantidad de casos extraños.

Hay un borrador de un estándar de Ruby en las obras. Puede obtenerlo aquí: http://ruby-std.netlab.jp/

Su ejemplo sobre el case y la progtwigción Ruby está mal elegido. Cuando Programming Ruby presenta el case (en la página 98 para la primera edición; 141 para la segunda edición), Thomas dice:

La expresión del case Ruby es una bestia poderosa: una vía múltiple if usa esteroides. Y solo para hacerlo aún más poderoso, viene en dos sabores.

Luego explica brevemente ambas formas de usar el caso (con un objective explícito después del case inicial y sin él). En realidad comienza con el estilo que dices que no menciona.

Sin embargo, tu punto más grande no es irrazonable. Probablemente será útil tener un estándar.

Como sugirió la respuesta anterior, hay un esfuerzo por escribir una “especificación” en http://ruby-std.netlab.jp .

Tienes que tener cuidado con esa “especificación”. No está hecho por los diseñadores de lenguaje, y básicamente están documentando lo que ven y no al revés. Se basa en 1.8.7 por lo que puede haber características en 1.9 que no están cubiertas.

No puedo imaginarme recordando la syntax con un documento de 300 páginas. Para tener “sobre la mesa”, esta hoja de trucos describe lo que desea: syntax condensada, palabras reservadas, etc. Esta es una alternativa de dzone .