Rubysyn: Clarifying Ruby's Syntax and Semantics
L'article propose une syntaxe alternative de type Lisp pour Ruby qui préserve la sémantique de Ruby et vise une grammaire complète, triviale à analyser et sans sucre syntaxique, tout en clarifiant des cas limites mal documentés. Il détaille la syntaxe complète des littéraux de tableau, explique le comportement du "constructing array splat" (l'astérisque) et sa désucreisation via une fonction array_splat, et rappelle que [] est lui‑même du sucre et que nil.to_a et les hashes ont des comportements par défaut. Les règles d'affectation sont précisées : l'assignation simple déclare des variables initialisées à nil avant d'évaluer le côté droit, l'assignation multiple opère sur un tableau résultant avec gestion des discordances de taille, support d'un seul splat à gauche et cas particulier du splat nu. Le système définit des primitives sémantiques comme les synvars, les labels et les tailcalls pour implémenter le flux de contrôle (seq, if, while) avec collecte statique des déclarations, et exprime break/next/redo, les lambdas, l'appel dynamique (call) et le return via des labels de retour implicites. Enfin, la spécification couvre les classes, modules, méthodes et singletons en associant def à des lambdas, distingue $$self et $$receiver, décrit send et un sucre d'opérateurs, règle l'ambiguïté variable versus appel sans arguments, et restreint la syntaxe des littéraux de chaînes, symboles et hash.