8
votes

Langues de programmation implémentées dans la langue d'assemblage

Récemment, j'ai trébuché sur JonesForth , qui est un interprète pour le langage de programmation de quath mise en œuvre dans la langue d'assemblage uni.

Je trouve cette implémentation intéressante, car elle montre comment une langue peut être mise en œuvre dans la langue d'assemblage, bien que je comprenne que la mise en œuvre d'une langue peut être un compromis de portabilité sérieux.

Donc, je me suis demandé s'il y a eu d'autres langages de programmation mis en œuvre dans la langue d'assemblage, dont la source est toujours disponible (et peut-être encore encore en cours de développement actif)?


3 commentaires

En fait, je voulais en faire un wiki communautaire, mais je ne sais pas comment, désolé


Cette solution de contournement ferait-elle le faire? ;) (1) Prendre une implémentation linguistique abrite en C ou C ++. (2) compiler. (3) Démontez l'exécutable. (J'ai eu du mal à ne pas ajouter de "... profit!")


Il est quelque peu unique dans la manière dont il est conçu de manière incrémentielle de sorte que vous écrivez un très petit ensemble de commandes en montage, puis écrivez le reste en avant. Vous obtenez ensuite la portabilité en ayant un ensemble minimal qui doit être porté. Certains LISP partagent cette caractéristique également.


5 Réponses :


9
votes

S'il est possible écrire une implémentation linguistique à montage, pour la plupart des langues, il n'est pas vraiment conseillé de le faire pour diverses raisons: le code de montage est notoirement difficile de développer et de maintenir, et C'est par définition non portable.

Cela dit, certaines langues sont nettement plus faciles à produire des implémentations pour:

  • Il est très facile de produire un Mise en œuvre de l'Assemblée pour Brainfuck

  • en avant a un certain nombre d'implémentations en montage, ce qui est Pourquoi il est utilisé dans le micrologiciel de plusieurs postes de travail non PC. Vous pouvez trouver des implémentations de montage pour diverses plateformes ici .

  • beaucoup Les interprétateurs de base ont été écrits en montage - en fait c'était probablement vrai Pour la plupart des implémentations de base des différents ordinateurs domestiques de la fin des années 70 et du début des années 80. Certains peuvent être trouvés ici .


2 commentaires

- Tout le pouvoir et la flexibilité du langage de montage associé à la lisibilité et à la maintenabilité de la langue d'assemblage


Les taquineries pour sa lisibilité sont un peu significatifs: c'est vraiment la faute du programmeur.



7
votes

Plusieurs versions de Turbo Pascal depuis 1.0 ont été écrits dans la langue d'assemblage . C'était le seul moyen d'adapter un éditeur, un compilateur, un débogueur et le programme compilé dans la RAM de 64 kb de l'époque, et il fournissait des vitesses de débogage de la compilation flamboyantes qui ont été observées auparavant.


0 commentaires

2
votes

Bien que non purement en montage, la machine virtuelle et certaines autres sections de Luajit sont écrites dans Macro'd Assembly, pour plusieurs plates-formes (principalement X86), uniquement pour la vitesse qu'il fournit (Mike Paul peut avoir d'autres raisons, mais je crois que je pense que C'est le principal). Le processeur de macro est également sur mesure, en utilisant Lua.


0 commentaires

7
votes

Pico Lisp Récemment (au cours des dernières années) passa de C à 486-64 Assembleur. C'est le seul exemple que je peux penser à cela a été entrepris dans l'ère "moderne". Certains LISP plus anciens ont une ampleur de l'assembleur encore utilisé. Attendez effectivement que quelqu'un a récemment écrit un schéma dans l'assembleur de bras (http://armpit.sourceforge.net/index.html). Je ne sais pas pourquoi ils auraient fait une chose aussi folle et je n'ai pas regardé de près. Bien sûr, il est très courant d'écrire dans C et d'ajouter certaines fonctions ASM pour mettre en œuvre Call / CC ou similaire.

Le compilateur BDS C des années 1980 a été écrit dans 8080 Assembleur et le code source a été publié il y a quelques années, mais il est principalement d'intérêt historique.


1 commentaires

Picolisp a également une mise en œuvre de référence écrite en Java. (Qui est également utilisé pour compiler picolisp lorsqu'il n'y a pas déjà de picolisp sur le système.)



3
votes

En fin de compte, chaque langue est implémentée dans l'assembleur, un compilateur C doit mapper + sur une instruction d'assembleur, d'une manière ou d'une autre, quelque part. Il n'y a qu'une grande variabilité dans la taille d'une partie d'une langue dans le noyau d'assembleur et la grande partie de la langue est définie dans la langue elle-même. Si vous regardez JonesForth, vous verrez qu'une partie du noyau, même dans le fichier Assembleur, est en effet de code, pas de code d'assemblage.

Le critère peut donc être si la langue du programme principal est assemblée ou la langue elle-même. Plus important peut être de savoir si une langue a besoin d'une autre langue pour être construite, par ex. Une mise en œuvre du LISP à Pascal, GForth mis en œuvre à l'aide de C. Il peut s'agir d'une responsabilité de dépendre d'un compilateur que vous ne contrôlez pas et que les normes linguistiques pouvant faire des pratiques obsolètes. Suivre avec de nouvelles fonctionnalités d'un processeur dans un compilateur, nécessite des connaissances de montage approfondies, que votre compilateur soit écrit en soi ou en montage.

Tant que vous avez la source, la langue n'est pas morte. Vous pouvez donc regarder de Fig-Fild (1980). Jonesforth a une partie de son inspiration de ma CIForth, un assembleur I86, vides pour les bits 16/32/64.

Je peux être en train de se reconnaître, notamment "Yourforth", alternue dans l'assembleur que j'ai fait spécifiquement à des fins éducatives. Il a des exercices, mais ceux-ci ne sont pas encore terminés: https://bitbucket.org/avanderhorst/yourforth


0 commentaires