J'entends souvent le terme que le langage A est écrit en langage B. Par exemple, PHP a été écrit C , C # est écrit en C ++ .
Quelqu'un peut-il expliquer ce que cela signifie et s'il est même exact? 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 repose le choix du langage d'implémentation?
s/written/implemented/
et c'est beaucoup plus clair.Réponses:
La plupart des langages de programmation se répartissent en deux catégories: les langages interprétés et compilés.
Un langage compilé est traduit par un compilateur en code machine , le langage que le CPU exécute directement étape par étape. Un langage interprété, en revanche, utilise un intermédiaire, un interprète , pour exécuter le code du langage. L'interpréteur est lui-même un autre programme, généralement lui-même compilé en code machine.
PHP est un langage interprété. Vous avez besoin d'un programme distinct pour exécuter le code PHP, l'ordinateur n'exécute pas le programme directement. Ce programme distinct, l'interpréteur PHP, est lui-même écrit en C.
C # est un langage compilé, mais il n'est pas compilé en code machine. Au lieu de cela, il est compilé dans un langage spécialisé, le code d'octet, pour être exécuté sur une machine virtuelle. Java est un autre exemple d'une telle configuration. Vous pouvez le voir comme un hybride entre compilation et interprétation, où la machine virtuelle est un interprète. La machine virtuelle pour C # (CLI ou Common Language Infrastructure ) est écrite en C ++.
D'autres exemples sont:
la source
Vous avez fondamentalement raison. S'il est dit que Ruby est écrit en C, cela signifie que l'interpréteur de langage et des parties de la bibliothèque principale sont écrits en C.
L'interpréteur Ruby est donc un programme C qui prend un fichier texte en entrée, le traite et appelle ensuite des fonctions qui se trouvent dans un autre fichier texte (s'il est écrit en Ruby) ou qui sont du code C compilé, autant de fonctionnalités de base qui ont besoin pour accéder directement aux ressources système comme la mémoire, le système de fichiers et plus encore. Et certaines fonctions qui nécessitent de très hautes performances.
Vous avez donc différentes parties d'une langue qui peuvent ou doivent être écrites dans d'autres langues. Rien ne vous empêcherait d'écrire l'interpréteur en C et les bibliothèques en C ++ (bien que cela puisse rendre certaines choses plus difficiles). Vous pouvez même avoir plusieurs étapes et utiliser un langage très bon pour le traitement de texte pour générer des données intermédiaires qui sont ensuite traitées par un code C.
Les facteurs de la décision peuvent être les mêmes que pour d'autres applications complexes. La performance est une. La possibilité d'écrire du code qui peut accéder directement aux ressources système. Donc, dans la plupart des cas, il doit s'agir d'un langage compilé (bien qu'en théorie, vous pourriez écrire un interpréteur Ruby en Python). La disponibilité sur différents systèmes est importante si vous souhaitez que votre langue s'exécute sur Linux, Win, OS X et autres.
la source
Cela signifie simplement que la majeure partie du noyau de la langue A est écrite dans la langue B. Ce que le «noyau de la langue A» peut différer d'une langue à l'autre, mais en termes généraux vous devinez juste, cela signifie que c'est un compilateur ou un interprète. Le facteur décisif pour choisir une langue dans laquelle écrire une autre langue est, comme pour presque tous les projets, les langues que les développeurs connaissent le mieux.
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 comme exemple, alors que l'implémentation de référence, CPython , a bien été écrite en C, il existe des implémentations écrites dans d'autres langages, comme Jython (écrit en Java), IronPython (écrit en C #), PyPy (écrit en Python), CLPython (écrit en Common Lisp), Stackless Python (écrit en C et Python) et Unladen Swallow (écrit en C ++).
Un langage de programmation est une définition, et comme le montre l'exemple Python, il n'y a pas vraiment de restrictions sur les langues dans lesquelles son compilateur, son interprète et ses bibliothèques peuvent être écrits. Et bien sûr, il est également possible qu'un langage soit écrit en lui-même, grâce à un processus appelé bootstrapping .
la source
string.lower(s)
y a une fonction python qui la délèguereturn s.lower()
, c'est correct. Les opérations de cas de chaîne CPython 3.3 sont implémentées en C.Du point de vue de l'utilisation d'un langage de programmation, un langage de programmation n'est qu'un programme. Il peut s'agir d'un compilateur, d'un interprète ou d'une sorte de machine virtuelle. Toutes ces choses ne sont que des programmes informatiques et peuvent donc être écrites dans n'importe quelle langue.
Donc, si vous vouliez créer votre propre version de PHP, vous pourriez commencer avec la langue dans laquelle vous parlez le plus couramment. Vous écririez alors un programme qui peut lire le code au format PHP et faire tout ce que la spécification PHP dit que votre programme devrait faire. . Vous créez ainsi le langage PHP en langage X.
la source
explode
qui prend unString
et retourne unArray
, son implémentation (c'est-à-dire le code qui fonctionnera sur la chaîne pour produire le tableau) est écrite en C , non?Une formulation très similaire avec une signification complètement différente est «écrire le langage A dans le langage B», par exemple «écrire C en Java».
Ceci décrit du code syntaxiquement correct dans une langue, mais utilise des structures, des idiomes et des conventions d'une autre langue. Dans l'exemple "écriture de C en Java", les signes de ceci seraient de déclarer toutes les variables locales au-dessus de chaque méthode, en utilisant des constantes entières au lieu d'énumérations, en utilisant identifiers_with_underscores, etc.
En général cela se produit lorsque quelqu'un a travaillé avec une langue depuis longtemps (surtout quand ils ont travaillé seulement avec cette langue) et est très nouveau dans le langage courant (ou pas intéressé par l' écriture de code propre).
la source
La technologie est un processus intrinsèquement itératif. Nous commençons avec des outils simples, puis utilisons ces outils pour en créer de meilleurs. Les premiers langages d'assemblage étaient à peu près des traductions 1: 1 des sous-codes d'instructions normalisés pour la puce; l'architecture 8086 et son assembleur sont devenus dominants sur d'autres architectures comme Z80, RISC, etc., et nous avons donc commencé à développer des langages pouvant être digérés dans l'assemblage 8086, comme FORTRAN, COBOL, Pascal et C. ces langues doivent être écrites dans quelque chose de plus primitif, sinon vous vous retrouvez dans un argument poulet et œuf; si le code source du premier compilateur C a été écrit en C, alors qu'est-ce qui a compilé ce code source C, et ne serait-ce pas, par définition, le premier compilateur C?
Fondamentalement, "C # est écrit en C ++" doit être considéré comme signifiant que le premier et / ou le plus populaire compilateur et les bibliothèques d'exécution / de base qui obéissent à la spécification du langage C # (ceux étant Microsoft .NET Framework et le compilateur en ligne de commande) CSC.exe) sont écrits en C ++.
la source
«La langue A est écrite dans la langue B» signifie que la seule implémentation de la langue A (ou la seule qui est largement utilisée) est celle qui est en fait un projet développé en langue B, et la seule complète et à jour la spécification de A est le code source B qui l'implémente de telle sorte que si la documentation et le programme B sont en désaccord, le programme B est généralement considéré comme correct.
la source