J'entends souvent le terme que la langue A est écrite dans la langue B. Par exemple, [~ # ~ # ~ # ~] a été écrit C , c # est écrit dans C++.
Quelqu'un peut-il s'il vous plaît expliquer ce que cela signifie et s'il est même correct? Est-ce que cela a quelque chose à voir avec le compilateur d'interprète utilisé par la langue?
De plus, quels sont les facteurs sur lesquels le choix du langage de mise en œuvre repose sur?
La plupart des langues de programmation tombent dans deux catégories: interprété et des langues compilées.
Une langue compilée est traduite par A compilateur en code de machine , la langue de la CPU exécute directement étape par étape. Une langue interprétée, d'autre part, utilise un intermédiaire, un interpréteur , pour exécuter le code de langue. L'interprète est en soi un autre programme, généralement lui-même compilé au code de la machine.
PHP est une langue interprétée. Vous avez besoin d'un programme séparé sur exécuter PHP code, l'ordinateur n'exécute pas directement le programme. Ce programme séparé, Le PHP Interprète est lui-même écrit en C.
C # est une langue compilée, mais elle n'est pas compilée au code de la machine. Au lieu de cela, il est compilé à une langue spécialisée, code octet, à exécuter sur une machine virtuelle. =Java est un autre exemple d'une telle configuration. Vous pouvez le voir comme hybride entre la compilation et l'interprétation, où la machine virtuelle est un interprète. La machine virtuelle pour C # (le CLI ou - Infrastructure de langue commune ) est écrit en C++.
D'autres exemples sont:
Vous êtes essentiellement juste. S'il est dit que Ruby est écrit en C, cela signifie que l'interprète de la langue et les parties de la bibliothèque principale sont écrites en C.
Donc, le Ruby INTERPRÈTE est un programme C qui prend un fichier texte comme entrée, le traite, puis appelle des fonctions dans un autre fichier texte (si écrit en rubis) ou qui sont compilées Code C , Autant de la fonctionnalité de base qui doit accéder directement à des ressources système telles que la mémoire, le système de fichiers, etc. et certaines fonctions nécessitant des performances très élevées.
Vous avez donc différentes parties d'une langue pouvant être écrite ou à écrire dans d'autres langues. Rien ne vous empêcherait d'écrire l'interprète en C et les bibliothèques de C++ (bien que peut-être faire quelques choses plus difficiles). Vous pouvez même avoir plusieurs étapes et utiliser une langue très bonne au traitement de texte pour générer des données intermédiaires qui sont ensuite traitées par certains Code C.
Les facteurs de décision peuvent être identiques à ceux d'autres applications complexes. La performance est une. La possibilité d'écrire du code pouvant accéder à des ressources système directement une autre. Donc, dans la plupart des cas, il doit s'agir d'une langue compilée (bien que en théorie, vous pouvez écrire un Ruby en Python). La disponibilité sur différents systèmes est importante si vous voulez que votre langue fonctionne sous Linux, Gagner, os x et autres.
Cela signifie simplement que le plus du noyau de la langue A est écrit dans la langue B. Quel "noyau de la langue a" peut différer de la langue à la langue, mais En termes généraux, vous devinez juste, cela signifie que c'est compilateur ou interprète. Le facteur décisif sur la sélection d'une langue pour écrire une autre langue est, comme avec presque tous les projets, quelles langues les développeurs connaissent plus.
Cela dit: "La langue A est écrite dans la langue B" est une simplification excessive pour la plupart des langues modernes. Si nous prenons Python à titre d'exemple, tandis que la mise en œuvre de la référence, CPPHON , a été effectivement écrite en C, il existe des implémentations écrites dans d'autres langues, comme Jython (écrit en Java), ironpython (écrit en C #), pypy (écrit en python), CLPLYHON (écrit en commun LISP ), Python sans empilement (écrit en C et Python) et hirondelle de déconnexion (écrit en C++).
Un langage de programmation est une définition et comme le Python exemple montre, il n'y a pas vraiment de restrictions sur quelles langues son compilateur, son interprète et ses bibliothèques peuvent être écrites. Et bien sûr, c'est aussi possible. Pour qu'une langue soit écrite en soi, à travers un processus appelé bootstrapping .
Du point de vue de l'utilisation d'un langage de programmation, un langage de programmation n'est qu'un programme. Il pourrait s'agir d'un compilateur ou d'un interprète peut être une sorte de machine virtuelle. Toutes ces choses ne sont que des programmes informatiques et peuvent donc être écrits dans n'importe quelle langue.
Donc, si vous souhaitez créer votre propre version de PHP, vous pouvez commencer avec la langue que vous utilisez le plus couramment. Vous écrivez alors un programme pouvant lire le code formaté PHP et faire ce que ce soit PHP Spec dit que votre programme devrait faire. Vous créez donc le PHP Langue dans la langue X.
Une phrase très similaire avec un sens complètement différent consiste à "écrire un langage A dans la langue B", par ex. "Écriture C en Java".
Ceci décrit le code syntaxiquement correct dans une langue, mais utilise des structures, des idiomes et des conventions d'une autre langue. Dans l'exemple "Écriture C en Java", les signes de ceci déclareraient toutes les variables locales sur chaque méthode, à l'aide de constantes d'entier au lieu d'Enums, à l'aide d'identifiants_with_underscores, etc.
Généralement, cela se produit lorsque quelqu'un a travaillé avec une langue pendant une longue période (surtout quand ils ont travaillé niquement avec cette langue) et est très nouveau dans la langue actuelle (ou non intéressé par la rédaction de code de nettoyage).
La technologie est un processus intrinsèquement itératif. Nous commençons avec des outils simples, puis utilisons ces outils pour en faire mieux. Les premières langues de montage étaient à peu près 1: 1 traductions de l'instruction standardisée bytecodes pour la puce; L'architecture 8086 et son assembleur sont devenus dominants sur d'autres architectures telles que Z80, RISC, etc., et nous avons donc commencé à développer des langues pouvant être digérées en 8086 montage, comme Fortran, Cobol, Pascal et C. Le programme qui interprète le code source de Ces langues doivent être écrites dans quelque chose de plus primitif, sinon vous vous retrouverez dans un argument de poulet et d'œufs; Si le code source du premier compilateur C a été écrit en C, alors ce qui compilait le code source C et ne serait-ce pas que, par définition, être le premier compilateur C?
Fondamentalement, "C # est écrit en C++" "devrait être considéré comme signifiant que les premières et/ou les plus populaires compilatrice et les bibliothèques d'exécution/principes qui obéissent à la spécification de la langue C # (celles-ci" Microsoft .NET Framework et le compilateur de ligne de commande. programme CSC.EXE) sont écrits en C++.
"La langue A est écrite dans la langue B" signifie que la seule mise en œuvre de la langue A (ou la seule largement utilisée) est celle qui est en fait un projet développé dans la langue B et le seul complet, à jour à jour. La spécification d'A est le code source B qui l'applique de telle sorte que si la documentation et le programme B sont en désaccord, le programme B est généralement jugé correct.