37 votes

créer mon propre langage de programmation

Duplicatas possibles :
Références nécessaires à l'implémentation d'un interpréteur en C/C++
Comment créer une langue de nos jours ?
Apprendre à écrire un compilateur

Je connais un peu le c++, TRES bon en php, pro en css html, ok en javascript. J'ai donc pensé à la façon dont le C++ a été créé, c'est-à-dire comment un ordinateur peut-il comprendre ce que signifient les codes ? Comment peut-il lire... alors est-il possible de créer mon propre langage et comment ?

7 votes

Déjà une grande sélection de ressources ici : stackoverflow.com/questions/1669/apprendre à écrire un compilateur

1 votes

Oubliez le "langage" textuel et optez pour quelque chose de plus spécifique au domaine. Pourquoi ne pas dire à l'ordinateur ce que vous voulez qu'il fasse graphiquement, par des gestes de la main ou quelque chose de plus naturel, comme la reconnaissance faciale ? ted.com/talks/peter_molyneux_demos_milo_the_virtual_boy.html

0 votes

Je voulais mettre ceci comme réponse, mais comme elle a été fermée, je vais le mettre ici : C'est un livre qui a été utilisé dans de nombreux collèges comme un livre de comp sci 101. Il vous fait découvrir les rudiments de la conception de matériel informatique, du langage d'assemblage, des compilateurs et des langages de haut niveau. Il ne fera pas de vous un expert en une nuit, mais il les rend très accessibles. Vous vous étonnerez vous-même de ce que vous apprendrez à faire. "The Elements of Computing Systems" : www1.idc.ac.il/tecs

50voto

Nikita Rybak Points 36641

Si vous vous intéressez à la conception des compilateurs (" comment l'ordinateur peut-il comprendre ce que les codes signifient "), je vous recommande vivement Livre du Dragon . Je l'ai utilisé à l'université et suis allé jusqu'à créer moi-même un langage de programmation.

37 votes

Je ne pense pas que je recommanderais le livre du dragon à un enfant de 13 ans.

23 votes

@mmyers, s'il connaît déjà un peu de C++ et de très bon en php... il a peut-être les compétences et les connaissances nécessaires pour comprendre le livre Dragon. Si rien d'autre n'est fait, cela lui permettra d'apprendre ce qu'il doit encore savoir/apprendre. premièrement .

7 votes

@mmyers Ce n'est pas parce qu'il a 13 ans qu'il est plus facile d'écrire un compilateur.

38voto

anthony Points 15067

"De temps en temps, je suis tenté de concevoir un langage de programmation. mais je m'allonge jusqu'à ce qu'elle disparaisse." - L. Peter Deutsch

EDIT (pour ceux qui ont besoin de contexte) :

"[L. Peter Deutsch] a également écrit l'implémentation de PDP-1 Lisp 1.5, Basic PDP-1 LISP, "alors qu'il était encore en culottes courtes" entre l'âge de 12 et 15 ans."

1 votes

+1 pour avoir prôné le bon sens, et avoir évité le masochisme... =) ( édité pour ajouter un lien vers une source pour la citation : books.google.com/ )

2 votes

À l'âge de 13 ans, je déboguais un assembleur en langage d'assemblage Signetics 2650. Le projet est devenu plus facile après avoir appris l'algèbre. Après avoir suivi le cours universitaire Compiler Theory & Design, je le comprends maintenant parfaitement.

0 votes

Ce n'est pas une bonne réponse, étant donné le contexte de l'OP. C'est bien d'avoir créé soi-même une version simple de la plupart des parties d'un système une fois. C'est la meilleure façon d'avoir une meilleure idée de ce qui est impliqué, et vous donne un meilleur jugement sur la façon dont votre système pourrait fonctionner en interne, et donc quand vous rencontrez des bugs bizarres, il y a une meilleure probabilité que vous sachiez ce qui pourrait l'avoir causé. Réinventer des parties de votre ordinateur (en tant qu'exercice d'apprentissage) fait de vous un meilleur programmeur.

20voto

Mr Fooz Points 21092

Si vous voulez comprendre comment l'ordinateur comprend le code, vous pouvez apprendre un peu de langage d'assemblage. Il s'agit d'un langage de niveau inférieur qui vous donnera une meilleure idée du type d'instructions simples qui sont réellement exécutées. Vous devriez également être en mesure de comprendre comment on met en œuvre des constructions de plus haut niveau, comme les boucles, avec seulement des sauts conditionnels.

Pour un niveau de compréhension encore plus bas, vous devrez étudier l'électronique. La logique numérique vous montre comment vous pouvez prendre des "portes" électroniques et mettre en œuvre une unité centrale générique capable de comprendre le code machine généré à partir du code en langage d'assemblage.

Pour les choses de très bas niveau, vous pouvez étudier la science des matériaux qui peut vous apprendre comment faire fonctionner les portes au niveau atomique.

Vous semblez être une personne pleine de ressources. Vous devrez rechercher des livres et/ou des sites Web sur ces sujets, adaptés à votre niveau de compréhension et axés sur ce qui vous intéresse le plus. Une compréhension assez complète de tout cela est possible avec un diplôme de licence en informatique ou en ingénierie informatique, mais beaucoup de choses sont tout à fait compréhensibles pour une personne motivée dans votre situation.

0 votes

Il n'est pas nécessaire de comprendre l'assemblage ou l'électronique pour écrire un langage de haut niveau (bien que cela puisse certainement aider). Par exemple, un grand nombre de langages créés récemment fonctionnent dans la JVM : fr.wikipedia.org/wiki/List_of_JVM_languages

3 votes

Bien que ce soient des choses intéressantes à apprendre, à l'exception de la première, aucune de ces choses ne semble nécessaire pour écrire un compilateur. Même la première n'est pas nécessaire si l'on utilise LLVM ou une technologie similaire.

6 votes

Le terme "haut niveau" n'était pas spécifié dans la question.

11voto

Matt Points 8168

Oui, il est possible de créer sa propre langue. Jetez un œil aux compilateurs. Ou le code source de certains langages de script si vous osez. Certains outils utiles sont yacc, bison et lexx.

D'autres ont mentionné le livre du dragon. Lorsque j'étais à l'université, nous utilisions un livre qui s'appelait, je crois, "Compiler theory and practice".

Il n'est pas nécessaire d'apprendre l'assembleur pour écrire un langage. Par exemple, Javascript s'exécute dans quelque chose appelé un interpréteur qui est une application qui exécute les fichiers javascript. Dans ce cas, l'interpréteur est généralement intégré au navigateur.

Le langage de programmation le plus simple pour commencer serait d'écrire une simple calculatrice en mode texte, c'est-à-dire prendre un fichier texte, le parcourir et effectuer les calculs. Vous pourriez écrire cela en C++ très facilement.

Mon premier langage pour un projet universitaire était un langage défini en BNF qui nous a été donné. Nous devions ensuite écrire un analyseur syntaxique qui le convertissait en une structure arborescente en mémoire, puis en quelque chose appelé code à 3 adresses (qui ressemble à un assembleur). Vous pouviez assez facilement transformer le code à 3 adresses en assembleur réel ou écrire un interprète pour cela.

4 votes

+1 pour commencer par l'écriture d'une calculatrice. J'essaierais cependant de lire quelque chose comme le Dragon Book et d'utiliser un compilateur tel que Bison ou ANTLR.

0 votes

Je suis d'accord, écrire un simple analyseur et interprète d'expressions est une bonne première étape, mais ne répondra probablement pas aux questions de l'OP sur le fonctionnement du C++, comment l'ordinateur exécute le code. Je ne suis pas sûr d'être d'accord avec les générateurs de compilateurs/parseurs cependant (dans ce cas particulier d'apprentissage du fonctionnement des choses). Il pourrait être intéressant d'écrire votre propre tokenizer et parser à la main d'abord, juste pour comprendre ce que ces outils font pour vous.

8voto

Niki Yoshiuchi Points 7822

Oui, c'est tout à fait possible. D'autres ont mentionné le Dragon Book, mais il y a aussi beaucoup d'informations en ligne. llvm, par exemple, a un tutoriel sur l'implémentation d'un langage de programmation : http://llvm.org/docs/tutorial/

3 votes

Ugh, j'ai professionnellement écrit plusieurs compilateurs pour de petits langages spécifiques à un domaine, et j'ai récemment fait mon premier projet LLVM et j'ai trouvé la courbe d'apprentissage très très raide. Il est certain que pour un étudiant, il serait préférable de créer un tout petit langage jouet et d'écrire son propre compilateur de descente récursive et son interpréteur de bytecode, plutôt que d'essayer de comprendre tous les concepts de compilateurs industriels dont on a besoin pour utiliser LLVM.

0 votes

@Larry Gritz : cela dépend si vous êtes intéressé par l'écriture du compilateur ou la conception du langage. Si vous vous contentez de générer l'assemblage llvm, je pense que cela peut être assez simple (une fois que vous avez généré votre AST), cela ne veut pas dire que vous ne devez pas lire un bon livre.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X