J'aime vraiment la conception de langages de programmation. Parfois, je pense que mes projets linguistiques et leurs utilisateurs potentiels bénéficieraient d'un document de normes complet. J'ai examiné de nombreuses normes de langage, allant du très formel (C ++) au plutôt informel (ECMAScript), mais je n'arrive pas vraiment à comprendre comment je dois décomposer les choses et organiser un tel document, même si je pense que je suis assez bon en rédaction technique en général.
Dois-je l'écrire comme un long tutoriel, ou plus comme un papier mathématique formel? Comment le tenir à jour si je le développe en parallèle d'une implémentation de référence? Dois-je simplement abandonner et traiter la mise en œuvre et la documentation comme la norme de facto? De plus, y a-t-il vraiment un avantage significatif à avoir une norme? Est -ce que nécessite une moyenne standard de la langue est inutilement complexe?
Réponses:
J'ai trouvé la spécification du langage Java à la fois formelle et lisible, et je pense qu'elle a une structure sensée. Certaines des spécifications du W3C pourraient également être de bons exemples.
Faire le travail formel pourrait vous aider à réduire la complexité de la langue et à voir les cas d'angle.
En-têtes brain dump: encodage source, lexing, types fondamentaux, littéraux, opérateurs, expressions, instructions simples, conditions, boucles, fonctions (définitions et appels), déclarations de type, modules, unités de compilation, portée des variables, divers types de résolution de noms (par exemple importations, méthodes), modèle de mémoire, effets secondaires, typage, simultanéité…
la source
Lisez beaucoup et restez simple
Concevoir une nouvelle langue est difficile. Vraiment dur. Mais finalement très satisfaisant s'il devient populaire et résout vraiment un problème que les gens connaissent de manière élégante.
Comme je l'ai mentionné dans les commentaires, je vous conseille de lire les langages spécifiques au domaine de Martin Fowler pour les raisons suivantes:
Quant à la façon de rédiger votre cahier des charges, pensez à votre public. Évidemment, avant de mettre le doigt sur le clavier pour concevoir votre langue, vous aurez soigneusement réfléchi à ce qu'il est censé faire.
S'il s'agit d'un nouveau langage interprété pour remplacer JavaScript, vous souhaiterez une approche très laisser-faire afin d'atteindre les développeurs Web avec une durée d'attention limitée et un désir de résultats immédiats - ou plus rapidement si possible.
S'il doit être utilisé lors de la prochaine mission sur Titan, des spécifications extrêmement détaillées montrant des preuves formelles exactes du comportement de chaque composant seront le niveau d'entrée minimal.
Ce n'est donc pas une chose simple. Pour approcher la spécification, vous feriez probablement mieux d'acquérir beaucoup d'expérience dans la création de vos langues et de travailler avec ceux qui les utilisent réellement au jour le jour. Si vous avez des victimes consentantes ... euh ... des développeurs au travail qui peuvent prendre un certain temps pour apprendre votre langue, ils peuvent vous donner des commentaires sur ce qui est nécessaire pour les amener à l'utiliser.
En bref, restez simple et plus de gens l'utiliseront.
la source
Wirth a conçu et implémenté de nombreux langages de programmation: parmi eux, les spécifications des langages Oberon et Oberon2 se distinguent par leur exhaustivité, leur concision et leur lisibilité.
la source
Common Lisp et Haskell ont des normes de langage. Ruby et Python ont des implémentations et de la documentation. Je dirais donc qu'une norme de langue n'est pas nécessaire, mais cela pourrait être utile si vous vous attendez à ce qu'il y ait plus d'une implémentation de la langue que vous concevez. D'un autre côté, une norme est prématurée si vous vous attendez à des changements importants dans votre définition de langage.
la source
toute spécification doit être concise et capable de résister à l'épreuve du temps
c'est pourquoi vous voyez une abstraction comme BNF utilisée pour de nombreuses normes linguistiques ... sa lacune et sera toujours comprise longtemps après que beaucoup de nos outils actuels auront été abandonnés.
bien sûr, il y a plus que juste une grammaire. regardez ce que d'autres ont fait ... perl6, schéma, C ... ils traitent des problèmes qui importent également à l'implémentateur.
la source