7
votes

Qu'est-ce que cela signifie de dire que c a été compilé en C?


1 commentaires

Si Firefox n'a pas rejeté votre lien comme une "connexion non soirée", je jetterais un coup d'oeil.


5 Réponses :


9
votes

Cela signifie que le compilateur C a été écrit en c.

Initialement, c'est un problème car comment pouvez-vous écrire un compilateur en C si ce compilateur existe-t-il encore pour c.

mise à jour:

Si vous écrivez un compilateur dans une langue différente, les gens se demandent si la langue est trop limitée pour la construction d'un compilateur ou si les inventeurs de la langue ne sont pas convaincus de leur langue et ont préféré un autre.

Mais il y a de bonnes raisons d'écrire un compilateur dans une langue différente.


8 commentaires

+1 pour ne pas dire «hébergement auto» et donner un lien.


Exactement. Comment était-ce possible?


@Felipe: Si la question de savoir comment accueillir auto-hébergement / bootstrap, ces questions sont une dupe d'E.G. Stackoverflow.com/questions/193560/... .


@Felipe: De nos jours, le moyen le plus simple est de croiser le compilateur de l'architecture cible d'une machine pour laquelle le compilateur existe déjà. D'autres méthodes sont illustrées ici .


@Felipe: Non, nous allons simplement le fermer comme dupliqué. Chaque dupe le rend plus probable que les gens trouvent la réponse avant de demander à nouveau (s'ils recherchent du tout - une hypothèse discutable)


@delnan Qui est Nous dans Nous allons le fermer comme dupliquer ?


@Felipe Almeida: Comme votre réputation monte, vous obtenez plus de privilèges, l'un de ceux qui sont la capacité de fermer des questions. De nombreux utilisateurs ont ce niveau de réputation et le verront et ajouteront leur vote à la fermeture. Une fois que le total du vote à terme atteint 5 la question est fermée.


@Gregs merci pour l'info. Désolé pour mon ignorance.



0
votes

Cela ne signifie pas vraiment quoi que ce soit. Des déclarations telles que cela ne peuvent pas vraiment être appliquées à une langue dans son ensemble, simplement des implémentations spécifiques de celui-ci. Par exemple, le code d'un compilateur C peut bien être écrit en c.


1 commentaires

Je pense que le questionneur veut savoir quelque chose du processus de bootstrap. Évidemment, le tout premier compilateur pour "x" ne peut avoir été écrit dans X.



12
votes

Vous commencez avec l'assemblage, vous faites une première version et vous pouvez toujours écrire une nouvelle version d'un compilateur avec la version précédente.

Vous n'avez pas besoin d'un compilateur afin de démarrer le compilateur écrit dans sa langue. Il vous suffit de rédiger un interprète pour un sous-ensemble C. Ensuite, vous utilisez ce sous-ensemble afin de l'améliorer.

À l'époque C a été inventé (environ 1967) Personne ne pensait que c'était une idée sain d'un compilateur ou d'un système d'exploitation dans une langue de haut niveau, à l'exception de Brian Kerninghan et de Dennis Ritchie. Ils ont prouvé avoir raison!


1 commentaires

C'est vrai. A cette époque, les ordinateurs ont une mémoire très limitée. Personne ne croit qu'une langue de haut niveau peut compiler à une petite empreinte suffisante pour écrire de grands programmes complexes qui correspondent à la mémoire. C Cependant, il est conçu pour mapper presque un à un à l'autre des instructions de langage de l'Assemblée PDP, rendez le code compilé extrêmement compact. Et, comme on dit, le reste est l'histoire. +1 sur ce morceau d'histoire.



1
votes

compilateurs sont des programmes relativement compliqués. Il est donc parfois supposé que la capacité d'écrire quelque chose comme un compilateur est une indication qu'un langage informatique a suffisamment de pouvoir pour écrire des programmes compliqués - c'est-à-dire un "vrai" langage de programmation.

Le compilateur ne doit pas nécessairement être écrit dans la même langue que la compilation. Par exemple, si C est utilisé pour écrire un compilateur Pascal, il remplit toujours le test (un peu non scientifique) que c est un vrai langage de programmation.

Évidemment, car il doit y avoir un test, il doit y avoir des langues informatiques qui ne sont pas suffisamment puissantes pour écrire un compilateur - ou que cela peut être ainsi convolué / compliqué qu'il n'est même pas tenté. Quelques langages de script de 4gl, certaines langages de script ou une langue spécialisée (pouvez-vous écrire un compilateur dans Lisp? Je ne sais pas ...) peut tomber dans cette catégorie.

Comme mentionné, ceci n'est en aucun cas un test "scientifique" d'une langue. Il n'est apparu à l'origine que pour le marketing. Il existe de légers avantages si - ayant un compilateur, l'O / S et les services publics écrits dans la même langue signifie que vous pouvez avoir un environnement de programmation complet en une seule langue, la simplification considérable de la maintenance. Unix et C est un bon premier exemple d'un environnement "C-seul".


1 commentaires

Je ne suis pas un utilisateur LISP, mais bien sûr, vous pouvez écrire un compilateur. Il a une syntaxe inhabituelle, mais cela ne le rend pas moins puissant. Et la manière dont le code de traite des LISP et les données sont aussi étroitement liés pourraient le rendre encore plus facile à écrire un compilateur LISP dans LISP.



0
votes

Je suggérerais que le test vrai pour "True Language" serait que ce soit Turing complet . Les langues interprétées ne sont pas moins vraies-langues, mais vous ne pouviez pas écrire l'interprète dans la langue interprétée, ce qui peut être ce que votre "gars" fait référence. (En fait, vous pourriez, mais vous auriez besoin de l'interprète original présent pour exécuter le nouvel interprète, plusieurs générations plus tard, il serait horriblement lent et grand).


0 commentaires