Après avoir écrit le premier article sur comment créer votre propre système d'exploitation, quelqu'un m'a dit que si je pouvais faire un article sur comment créer un langage de programmation. Au début, je n'y prêtais pas beaucoup d'attention, mais maintenant et par d'autres moyens, j'ai appris beaucoup plus sur la création de langages de programmation. Alors faisons un langage de programmation de base, facilement intégrable dans d'autres programmes et qui fonctionne avec une machine virtuelle que nous allons également concevoir. Aujourd'hui, nous devons créer la machine virtuelle la plus basique.
Vous vous demandez probablement: Une machine virtuelle? Mais n'est-ce pas très difficile et cela ralentit-il aussi les programmes? " En revanche, une machine virtuelle simple est très simple et relativement rapide. J'ai choisi Calme comme langage pour la machine virtuelle. Mais qu'est ce que c'est Calme?
Calme s'installe dans Linux/Unix D'une manière simple. Cependant, il n'y a pas de colis officiel. Utilisateurs de Ubuntu peut ajouter ces deux PPA: ppa: hansjorg / rouille y ppa: cmrx64 / cargaison, utilisateurs de voûte peut utiliser AUR (cargo-git est le package qui installe tout). Le reste peut utiliser:
curl -s https://static.rust-lang.org/rustup.sh | sudo sh
Comment fonctionne une machine virtuelle?
Si vous savez comment fonctionne le monde de l'assembleur, c'est exactement la même chose, avec la pile ou la pile. Sinon, je vais vous l'expliquer. Imaginons le code suivant:
imprimer 2 + 3
L'ordinateur ne comprend pas ce que signifie 2 + 3, ni quel ordre suivre. Les ordinateurs fonctionnent avec des piles ou des piles dans lesquelles les données sont accumulées et extraites en continu. Ce code dans notre machine virtuelle devrait ressembler à ceci:
PUSH 2 PUSH 3 AJOUTER UNE IMPRESSION
Fondamentalement, nous placerions le 2 sur la pile en haut, le 3 également. ADD tirerait (c'est-à-dire le retirer de la pile et obtenir sa valeur) les 2 derniers éléments de la pile et ajouter le résultat en haut de la pile. PRINT prendrait le dernier élément de la pile et l'utilisait pour nous l'afficher. Maintenant faisons ça en Calme.
Il faut d'abord définir un langage pour le bytecode, nous pourrions utiliser un existant comme celui de Java ou l' CLR de .NET / Mono, mais nous allons en créer un plus basique.
https://gist.github.com/a01de8904fd39a442c20
Nous utilisons la notation hexadécimale pour chaque instruction. En haut nous avons mis # [dérivant (FromPrimitive)], est une particularité de Calme et cela nous aidera plus tard à pouvoir comparer directement l'énumération avec les octets.
Nous devons maintenant créer une fonction qui exécute chacune de ces instructions. Pour cela, nous devons lire un octet et le comparer avec les instructions que nous avons dans l'énumération. Si vous en trouvez, vous devez exécuter votre action.
https://gist.github.com/8950ce212a2de2f397f9
Nous faisons cela pour lire chaque octet individuellement et pour les exécuter:
https://gist.github.com/12e24a1f0dd65e4cd65d
Comme vous pouvez le voir, nous différencions si nous avons reçu la commande PUSH (notre commande INTEGER) avant, l'octet suivant sera complètement pris dans la pile. Là, nous utilisons deux fonctions que je ne vous ai pas enseignées, self.pop () y self.push (), qui sont évidemment en charge de la manipulation de la pile.
https://gist.github.com/54147f853a8a2b8c01d9
Ils ne sont pas très complexes, mais la fonction pop dispose de mécanismes de détection d'erreur. En fait, dans Calme, si nous supprimons ces mécanismes, cela nous donnerait une erreur de compilation. Maintenant, nous devons simplement appeler un programme Périn (notre machine virtuelle) et exécutez un bytecode.
https://gist.github.com/99b1ab461318b3a644d0
Ce bytecode peut être lu à partir d'un fichier, mais ici pour simplifier, je l'ai stocké dans une variable. Si nous l'exécutons, cela nous donnera le résultat attendu:
Perin v0.1 La machine virtuelle Perin exécute le bytecode FlopFlip Démarrage de l'instance PerinVM PerinVM v0.1.0 Valeur entière 5
Tout le code est disponible à GitHub sous la Licence Apache 2.0: https://github.com/AdrianArroyoCalle/perin. Pour compiler, ils doivent avoir Cargaison installé et mis:
charge build && ./target/main
Dans le prochain chapitre, nous en verrons plus sur notre langage de programmation.
Curiosité intéressante, même si ce n'est pas très utile en réalité, cela ne fait pas de mal de savoir.
C'est génial que vous annonciez Rust, c'est un langage qui promet beaucoup, non seulement il est plus sûr que le c ++, mais (pour l'instant) plus clair dans sa syntaxe.
Quant à la photo, je ne considérerais pas java evolution XD.
Et de fortran, je ne l'ai jamais utilisé, mais je n'en ai pas beaucoup entendu parler ...
Je le fais, et c'est particulièrement utile en ingénierie même si Python gagne du terrain.
Fortran est peut-être l'autre grand langage avec C. Même aujourd'hui, les questions vraiment critiques seront l'une ou l'autre.
Et il serait discutable que Fortran soit comme une «évolution» de C, alors que ce devrait peut-être être l'inverse, car C est plus récent, plus moderne et avec plus de possibilités; bien que l'un ne soit pas du tout détaché de l'autre.
Bien que les positions finales soient toutes discutables d'un certain point de vue.
+1 à Java
Voyons voir si j'aime ça, je donne quelque chose à la programmation mais basique pour voir si je comprends plus.
Quel est le véritable but de la création d'un nouveau langage de programmation? Personnellement, il me semble que c'est un stratagème pour cacher le code source.
Ami, qu'est-il arrivé à la poursuite de "votre propre système d'exploitation"? Ne le laissez pas là, continuez-le.
En fait, tu es un maître et juste ces deux chansons ont complètement captivé mon attention, mais je ne voudrais pas qu'elles restent à mi-chemin.
Je sais que nous sommes nombreux à penser la même chose et nous attendons les suites et les conclusions de ces sujets très intéressants.
Très intéressant, merci beaucoup. 🙂
Je ne considère pas java comme un langage de programmation, mais plutôt comme un interpréteur de commandes, car il n'est pas compilable
[Un langage de programmation est un langage formel conçu pour exprimer des processus qui peuvent être exécutés par des machines telles que des ordinateurs.]
Pour cette raison, Java est un langage de programmation. Même le langage Bash (langage shell Linux) est un langage de programmation en soi.
Il existe deux types de langues:
- Compilé
- Interprété
- Mixte (Machines virtuelles, les bibliothèques natives sont compilées et le code fonctionnel est interprété)
Les interprètes sont très utiles lorsqu'il s'agit de multiplateforme et n'ont pas de performances désastreuses pour cela. Java, VB.NET, C ++ .NET, F #, C # sont tous des langages mixtes. Le langage bash, bat, PHP, Javascript et bien d'autres sont des langages interprétés.
Si vous ne considérez pas Java comme un langage parce qu'il est interprété (ce qui n'est pas le cas), vous ne devriez pas considérer de nombreux autres langages utilisés pour créer des programmes. De plus, selon cette règle de trois, vous ne devez pas considérer qu'il existe un langage de programmation à l'exception du langage machine lui-même.
Et pourquoi pas? Même le langage machine ne peut être considéré comme un langage puisqu'il ne s'agit en réalité que d'un ensemble de commandes "interprétées" par le processeur.
Car effectivement, TOUS les langages ne sont rien de plus qu'un ensemble de commandes interprétées par un processeur.
Vous pouvez aimer un langage plus ou moins (Java, dans ce cas), paraître plus ou moins utile et puissant mais dire que ce n'est pas un langage de programmation car il n'est pas compilé… cela va à l'encontre de toutes les définitions de langage de programmation.
😐 J'espère que je n'ai pas semblé trop impoli
pas de calme tu as seulement détruit nos vies
hahahahaha, perdoooon. ce n'était pas mon intention xD
java est un langage de programmation. Parce que vous pouvez développer une application et lorsque vous compilez vous créez un .jar qui est interprété par la JVM. Ensuite, selon votre logique python, il n'est pas interprété non plus, mais il se compile en différents exécutables ...
Très bonne information
bonne information mais j'ai un doute, il sera possible de créer un nouveau langage de programmation à partir de zéro sans avoir à compter sur d'autres analogies ou logiciels. Je parle de la même manière que d'autres langages ont été créés comme Java ou HTML.
J'apprécierais grandement votre aide sur cette question.