8
votes

Une deuxième mise en œuvre d'une langue de programmation peut-elle être écrite dans cette langue?

Cette question est juste quelque chose que je pensais récemment. Une langue de programmation peut-elle être écrite dans cette langue comme une seconde mise en œuvre? par exemple. Java. Est-il possible de réécrire la langue de programmation Java à l'aide du langage de programmation Java?

excuses s'il s'agit d'une question idiote mais j'ai besoin de savoir!

gf


0 commentaires

13 Réponses :


12
votes

TOUJOURS. Tout Turing-complet Language est - bien - une langue complète de Turing. Si vous pouvez écrire le compilateur dans une langue complète, vous pouvez l'écrire dans n'importe quelle langue équivalente.


2 commentaires

Même certaines langues complètes de Turing peuvent avoir des limitations, en fonction de ce que nous entendons par «mise en œuvre». Imaginez une langue Turing-Complete qui ne peut saisir que l'entrée et la sortie du texte ASCII uni. Une telle langue serait incapable de produire un binaire exécutable et ne serait donc pas en mesure de construire son propre interprète "autonome".


Fichiers texte ASCII exécutable



3
votes

oui. Tant que la langue est terminée, vous pouvez mettre en œuvre la langue en soi.


5 commentaires

Turing-Telopesseness n'est pas strictement une exigence IIRC. Mais les langues existantes-incomplètes de Turing-incomplètes (regex, SQL et telles) sont toujours insuffisantes.


Vous pouvez lire une regex à l'aide de Regex, mais je pense qu'il est impossible de créer une implémentation de regex en l'utilisant. L'exhaustivité Turing est la théorie, afin d'écrire un compilateur Java, vous devez manipuler des bits et écrire sur le disque (Java peut le faire).


@TOvent: En fait, vous ne pouvez même pas Vérifiez Regex à l'aide de Regex (c.-à-d. La langue que nous utilisons pour spécifier des langues ordinaires n'est pas régulière)!


@Seva je ne voulais pas impliquer que c'était une exigence stricte; Juste que si une langue est terminée, alors ce que l'op suggère est possible. :)


@Blueraja - Danny Pflughoeftft: Vous êtes absolument pluvieux, je n'ai pas pensé au fait que la Regex Laguerage n'est pas régulière avec des constructions telles que la parenthèse correspondante.



11
votes

Oui, c'est possible. Découvrez bootstrapping .


1 commentaires

+1 Je faisais mon cerveau (et je vais sur Google) pour rechercher ce terme. Je me suis vaguement rappelé que quelque chose à propos de C compilateurs C est mis en œuvre successivement en soi.



1
votes

Cela peut non seulement, c'est. ECJ (Compilateur d'Eclipse) est un exemple et je pense que le SDK lui-même est livré avec un pure compilateur Java, bien que je puisse me tromper à ce sujet.


0 commentaires

7
votes

Oui pour toute langue complète Turing. Lisp vous vient à l'esprit comme l'une des langues les plus faciles à écrire un interpréteur / compilateur pour lui-même.


0 commentaires

2
votes

Il existe de nombreux exemples pratiques, un exemple est l'oberon, qui présente un intérêt pour cette discussion, car le code du compilateur est très lisible, c'est dans le projet de lecture Oberon disponible gratuitement:

http://www.oberon.thz.ch/bibliographie/publications

http://fr.wikipedia.org/wiki/bootstrapping_(Compilers)


0 commentaires

6
votes

ça peut. Un exemple récent est que Python a Pypy . Un peu plus d'informations est sur la page Wikipedia et de bons liens.


3 commentaires

AFAIK PYPY n'interprète pas, cela compilait le VM.


Pypy est l'interpréteur python écrit dans un sous-ensemble réduit de Python (Rpython). Cependant, le projet peut construire une version C et même un JITC de traçage en effectuant des transformations sur la source de Rpython.


Oui mais Pypy peut interpréter le VM étant conçu?



-1
votes

Consultez 3-Lisp


0 commentaires

0
votes

Bien sûr. J'ai même vu quelqu'un écrit un compilateur Cobol écrit à Cobol! (OK, pas un compilateur complet ... mais au moins un parseur.)


0 commentaires

4
votes

Bien sûr.

Il y a beaucoup de nombreuses années, un de mes premiers ordinateurs à domicile, un VIC 20, est venu avec un interprète de base intégré, mais c'était là. J'ai donc écrit la première version d'un assembleur pour celui-ci en basique. Ensuite, j'ai utilisé mon premier assembleur primitif pour écrire un meilleur assembleur.


1 commentaires

@monojohnny Les cartes Punch reviennent. Ce truc de lecteur USB est juste une fad. :-)



2
votes

Les compilateurs de la GCC sont écrits en C.

Cela fait longtemps que quiconque a construit des compilateurs C de l'assemblage.


0 commentaires

1
votes

écrire un compilateur Java en Java - pas de problème du tout. En fait, je pense que Javac de Sun est écrit en Java.

Cependant, «Java» signifie généralement plus de choses que de Javac, votre question n'est donc pas très claire.


0 commentaires

2
votes

Pas seulement possible, mais pour les compilateurs de code natif, il s'agit de la technique de mise en œuvre la plus courante . Un bon guide sur le mode de plan d'Andrew Appel Bootstrage axiomatique: guide pour les pirates de compilateur .


0 commentaires