2010-11-27 34 views
1

À l'université je me suis spécialisé en théorie des compilateurs et en grammaires, donc j'ai une bonne expérience dans ce domaine et je sais que la création d'un compilateur est une énorme entreprise, au moins pour un langage C++. Donc, je suis confus quant au grand nombre de langages de programmation qui semblent avoir été créés par des individus, par opposition à de grands groupes de personnes travaillant dans une entreprise. Ruby par exemple, selon Wikipédia, il a été créé par une personne - je ne connais pas la langue, c'est peut-être incroyablement simple, mais ce que je veux dire, c'est qu'il y a plein de langues créées par moi-même.Comment les gens créent-ils leurs propres langages de programmation?

Alors, comment peut-on créer son propre langage (ce qui n'est pas trop simple pour être plutôt inutile) en tant qu'individu et ne pas passer toute sa vie à le faire?

Y at-il de bons livres sur le sujet (pas sur les compilateurs et en général, spec)?

+0

Cette question ressemble à [Programmers.SE] (http://programmers.stackexchange.com/) serait un meilleur ajustement. –

+2

qui dit que * ça ne prend pas * toute une vie pour rendre un langage créé par soi-même utile? – SingleNegationElimination

Répondre

1

Je suis allé un peu loin dans la création de ma propre langue. J'ai commencé à le faire pour représenter les exigences, l'analyse et les constructions de conception, plutôt qu'un compilateur de code. A cet effet, même un langage très simple peut être utile. J'ai trouvé utile de pouvoir lire et écrire de telles constructions dans une version très contrainte de phrases en anglais principalement. Ensuite, il est devenu utile d'avoir la machine de langage lisible et donc j'ai construit des lexers et des analyseurs pour lire la langue en utilisant Lex et Yacc. Comme je suis parti j'ai étendu la langue et ses parseurs pour faire face aux expansions. Je suis conscient que c'est un très long chemin à partir d'un compilateur robuste pour un langage aussi étendu que C++, mais illustre une motivation pour aller dans cette voie. Je dirais que votre point de vue sur les langues simples comme étant plutôt inutile est exagéré. Même un langage très limité peut être très utile.

0

Bien que je pratiquement pas d'expérience dans la fabrication des langues de mon propre, j'ai une bonne quantité d'expérience d'apprentissage de nouvelles, donc je pourrait suggérer cela -

L'industrie de la programmation est un marché des langues. Les langues montent et descendent en popularité en raison de leur simplicité d'apprentissage et d'utilisation, de l'absence de restriction commerciale et légale, d'applicabilité à des situations réelles, de flexibilité et de pouvoir. Si vous voulez que votre langue soit populaire un jour, essayez d'y aller. Si vous concevez un langage de jouets pour vous-même (comme le font de nombreux informaticiens), c'est un exercice théorique intéressant et tout à fait valable, mais vous ne vous attendez pas à ce qu'il devienne aussi répandu.

3

(bien que depuis longtemps) et de savoir que la création d'un compilateur est une grande entreprise énorme, au moins pour un langage tel que C++.

Beaucoup de choses ont contribué à rendre les choses plus faciles:

  1. Les ordinateurs ont beaucoup plus de RAM et la vitesse. Une grande partie du défi d'écrire les premiers compilateurs était de pouvoir le faire efficacement et avec un minimum de mémoire. C'est pourquoi C peut compiler en un seul passage: à ce moment-là, vous n'avez peut-être pas assez de mémoire pour y insérer un fichier source entier. Alors qu'auparavant, une grande partie de la magie de l'écriture de compilateur optimisait la représentation et l'analyse de votre table de symboles aussi vite que physiquement possible, vous pouvez maintenant faire les choses beaucoup plus simplement et facilement.

  2. La technologie de base s'est améliorée. La plupart des langages ont de bonnes bibliothèques d'analyseurs faciles à utiliser, des structures de données de haut niveau (les tableaux de symboles sont faciles à utiliser si vous avez déjà une bonne implémentation de hashtable!) Et d'autres outils.

  3. Le GC est omniprésent. La plupart des nouvelles langues créées aujourd'hui sont récupérées. Cela facilite la conception de la langue (vous n'avez pas à spécifier de sémantique de mémoire détaillée). En même temps, vous pouvez cibler une plate-forme GC existante comme la CLR ou la JVM. En tant qu'auteur de la langue, vous n'avez pas besoin d'écrire votre propre GC. En fait, le ciblage du CLR ou de la JVM rend votre travail en tant que rédacteur de compilateur beaucoup plus facile en général: en tant que plate-forme de niveau supérieur, le bytecode vous rencontre à mi-chemin.

  4. La plupart des nouvelles langues sont typées dynamiquement. La majorité des nouveaux langages créés sont dynamiquement typés. Ce sont beaucoup plus facile à concevoir et à mettre en œuvre. J'ai trouvé que la majorité du défi dans la conception de la langue est la conception d'un système de type. De même, compiler ou interpréter un langage statique est plus difficile. Les langages dynamiques où tout est juste un sac de propriété sont étonnamment faciles à mettre en place.

  5. Encore une fois, les ordinateurs ont beaucoup plus de RAM et de vitesse. De retour dans la journée, si votre langue devait avoir des chances de succès, elle devait se compiler vers un code machine efficace, utiliser efficacement la mémoire et s'exécuter rapidement. Sinon, il serait inutilement lent. Maintenant que les ordinateurs sont beaucoup plus rapides, même un langage lent comme Ruby est encore assez rapide pour de nombreuses utilisations réelles. En tant que rédacteur de compilateur, vous n'avez pas besoin d'autant de compétences en optimisation que vous le faisiez auparavant.

Il est également intéressant de noter que ne fait une nouvelle langue aussi complexe que C++ ces jours-ci. C++ est vraiment proche de la limite supérieure de la complexité du langage.