PHP est en terme de langage une sombre merde comme le prouve ce post légendaire. Pour avoir passé quelques jour sur la grammaire de l'implémentation de référence, je confirme celle-ci est aussi immonde que la conception du langage. Par exemple, on a un parseur dans le lexer (!). Fallait quand même y penser... C'est aussi le code C le plus crade que j'ai pu voir de ma vie. Et la grammaire Yacc la plus... j'ai pas de mot, crade n'est pas assez fort.
Nonobstant, dans mon taf, j'ai eu à implémenter les parseurs de PHP et de JS.
A ma grande surprise, la grammaire de PHP, implémenté avec PDT, est assez clean. Je les félicites au passage, c'est un exploit d'avoir nettoyé ça..
La grammaire de JS est un modèle du genre de n'importe quoi, j'y ai vu des horreurs, avec des instructions à place d'expressions ou inversement, ou les deux. Je me suis bien amusé sur le parseur...
Conclusion PHP et JS sont deux langages très crades, mais à l'inverse l'un de l'autre :
- PHP est en fait un langage avec une grammaire relativement classique, un peu incohérente (l'exemple de la "fonction" empty qui n'est pas une fonction mais est dans la grammaire...), mais pas trop. On peut faire n'importe quoi, mais pas trop quand même, et de moins en moins. C'est sa sémantique, par contre qui est du grand n'importe quoi, je renvoi encore une fois aux détails
- JS est lui sémantiquement beaucoup plus "propre" : on voit que le type qui l'a conçu a une vrai culture en terme de langages. Il y a beaucoup moins d'incohérences sémantiques que PHP. Par contre, mais ça se voit que quand on le parse, l'arbre syntaxique est parfois très surprenant. La liberté et la "puissance" d'expressivité de ce langage est telle qu'on peut faire plein de trucs vraiment crades et imbitables.
Pour avoir écrit un analyseur de sémantique pour ces deux langages, ce qui est marrant, c'est qu'analyser du PHP est faisable, mais le faire en JS est quasiment impossible. Je m'étais amusé à hacker Flow de Facebook, pour lui faire cracher un AST typé. Après avoir réussi à le coder, je lui ai donné à manger le source de Angular 2 : j'ai arrêté l'exécution après 30h de calcul.
« Il n’y a pas de choix démocratiques contre les Traités européens » - Jean-Claude Junker
[^] # Re: PHP...
Posté par Ontologia (site web personnel) . En réponse au journal Etude comparée de la popularité des langages de programmation sur linuxfr. Évalué à 10.
PHP est en terme de langage une sombre merde comme le prouve ce post légendaire. Pour avoir passé quelques jour sur la grammaire de l'implémentation de référence, je confirme celle-ci est aussi immonde que la conception du langage. Par exemple, on a un parseur dans le lexer (!). Fallait quand même y penser... C'est aussi le code C le plus crade que j'ai pu voir de ma vie. Et la grammaire Yacc la plus... j'ai pas de mot, crade n'est pas assez fort.
Nonobstant, dans mon taf, j'ai eu à implémenter les parseurs de PHP et de JS.
A ma grande surprise, la grammaire de PHP, implémenté avec PDT, est assez clean. Je les félicites au passage, c'est un exploit d'avoir nettoyé ça..
La grammaire de JS est un modèle du genre de n'importe quoi, j'y ai vu des horreurs, avec des instructions à place d'expressions ou inversement, ou les deux. Je me suis bien amusé sur le parseur...
Conclusion PHP et JS sont deux langages très crades, mais à l'inverse l'un de l'autre :
- PHP est en fait un langage avec une grammaire relativement classique, un peu incohérente (l'exemple de la "fonction" empty qui n'est pas une fonction mais est dans la grammaire...), mais pas trop. On peut faire n'importe quoi, mais pas trop quand même, et de moins en moins. C'est sa sémantique, par contre qui est du grand n'importe quoi, je renvoi encore une fois aux détails
- JS est lui sémantiquement beaucoup plus "propre" : on voit que le type qui l'a conçu a une vrai culture en terme de langages. Il y a beaucoup moins d'incohérences sémantiques que PHP. Par contre, mais ça se voit que quand on le parse, l'arbre syntaxique est parfois très surprenant. La liberté et la "puissance" d'expressivité de ce langage est telle qu'on peut faire plein de trucs vraiment crades et imbitables.
Pour avoir écrit un analyseur de sémantique pour ces deux langages, ce qui est marrant, c'est qu'analyser du PHP est faisable, mais le faire en JS est quasiment impossible. Je m'étais amusé à hacker Flow de Facebook, pour lui faire cracher un AST typé. Après avoir réussi à le coder, je lui ai donné à manger le source de Angular 2 : j'ai arrêté l'exécution après 30h de calcul.
« Il n’y a pas de choix démocratiques contre les Traités européens » - Jean-Claude Junker