Parfois, lors de la programmation dans différents langages (C / C ++, C #), cette idée me vient à l’esprit:
- Chaque langue est-elle écrite dans le langage de programmation C?
- La langue C est-elle la mère / le père de toutes les langues?
- Est-ce que chaque concept ( POO , etc.) est implémenté en C?
Suis-je dans la bonne direction?
programming-languages
c
FaizanRabbani
la source
la source
Réponses:
Non.
Les dialectes OCaml, Haskell, Lisp tels que Scheme et plusieurs autres langues sont souvent utilisés dans le développement des langues de loisir.
Beaucoup de langages sont implémentés en C parce que c'est un langage omniprésent, et les outils d'écriture de compilateur tels que les générateurs lexer-parser (tels que yacc et bison) sont bien compris et presque aussi omniprésents.
Mais C lui-même ne pouvait pas être développé en C lors de sa création. En fait, il a été développé à l’origine en utilisant le langage B. Les langages précédents (comme le Fortran) étaient généralement initialisés à l' aide d'un langage d'assemblage natif ou même du code machine bien avant que C n'existe.
Sans aucun rapport, les paradigmes linguistiques tels que la programmation orientée objet sont généralement indépendants de la langue . Le paradigme fonctionnel, par exemple, a été développé (par Alonzo Church) en tant que fondement des mathématiques bien avant qu'un langage de programmation n'existe. Les paradigmes de programmation procédurale et structurée sont issus des travaux mathématiques de théoriciens comme John von Neumann. L'orientation objet a été développée par plusieurs efforts différents et sans lien , certains issus du calcul lambda (le paradigme fonctionnel) et d'autres de systèmes de programmation dynamiques tels que SmallTalk at Xerox PARC de Alan Kay.
C n’est qu’une infime partie de l’histoire, des décennies après la naissance de ces idées.
la source
Un langage est un ensemble de règles et de restrictions mathématiques abstraites ("si j'écris ceci , cela se produit"). Ce n'est écrit dans rien, vraiment.
Il est spécifié, généralement en mélangeant un sous-ensemble formalisé d'anglais, une notation mathématique et peut-être un langage de spécification spécialisé. La syntaxe est souvent spécifiée dans une variante de EBNF ou ABNF .
Par exemple, voici la spécification de l'
for
expression à partir de la spécification du langage ISO Ruby:Voici un exemple différent des règles de conformité de type de Scala:
Non ce n'est pas. C est assez jeune. Il y a beaucoup de vieilles langues. Comme le voyage dans le temps est physiquement impossible, il est tout simplement impossible que C ait eu une quelconque influence sur ces anciennes langues.
Tous ceux qui existaient avant même que C n'ait été inventé. Et beaucoup d'autres n'ont aucune influence de C en eux, même après son existence. La famille de langues PASCAL (ALGOL-58, ALGOL-60, ALGOL-X, ALGOL-W, PASCAL, Modula-2, Oberon, Oberon-2, Oberon actif, Component Pascal) est une lignée complètement séparée. Toute la famille Lisp (LISP, Franz Lisp, InterLisp, MacLisp, Scheme, Flavors, LOOPS, CommonLoops, Dylan, CommonLisp, Arc, Clojure, Racket, etc.) n’a pas non plus de relation. Les langages fonctionnels (ISWIM, KRL, Miranda, ML, SML, CAML, OCaml, Fa #, Haskell, Gofer, Clean) et toute la famille dépendante (Agda, Coq, GURU, Idris) sont aussi éloignés que possible de C. Il en va de même pour la famille Smalltalk (Smalltalk, Self, Newspeak, Us, Korz), la famille de programmation logique (PLANNER, Prolog, Mercury), SQL et bien d’autres.
Simula (1960) et Smalltalk (1972) ont été les premières langues à utiliser des concepts orientés objet, mais des systèmes orientés objet avaient été construits dès 1953 (sans les appeler ainsi). Encore une fois, c’est bien avant que C n’existe, donc OO ne peut avoir aucune relation avec C.
la source
x := x + y
syntaxe au lieu du C-like, plus familierx = x + y
. Cette critique survient malgré le fait que C n'a pas encore été inventé ...La plupart des langues essentielles sont écrites en C, mais les choses changent:
Le tout premier compilateur Java développé par Sun Microsystems a été écrit en C, mais à présent, les bibliothèques de classes sont toujours écrites en Java (car elles sont destinées à être exécutées à l'aide de la machine virtuelle Java elle-même). Certaines bibliothèques utilisant JNI (Java Native Interface) peuvent être partiellement écrites dans une variété d'autres langages, car elles sont destinées à être utilisées HORS DE LA JVM.
La machine virtuelle Sun / Oracle est écrite en C ++. La machine virtuelle BEA / Weblogic / Oracle est écrite en C. Mais il existe des machines virtuelles Java écrites en Java, Lisp, SmallTalk (IBM) ...
C a souvent été choisi pour plusieurs raisons: performances, portabilité, expérience.
Le dernier étant probablement le plus important: Python a été lancé en 1991, PHP en 1994/1995, Perl en 1988, Ruby en 1995. Au cours de ces années, Java venait de paraître et C ++ n'était pas encore bien normalisé.
Un peu lié:
la source
Non, certaines langues sont antérieures à C. Et beaucoup sont implémentées indépendamment de C, par exemple, voir http://en.wikipedia.org/wiki/Lisp_%28programming_language%29
la source
javac
de Oracle JDK / OpenJDK écrit par Martin Odersky (de renommée Scala) en 100% Java, le compilateur Eclipse, écrit en 100% Java (dérivé du compilateur Jikes d'IBM ), le compilateur de IBM J9, également dérivé de Jikes et 100% Java. Autant que je sache, le seul compilateur Java utilisé un peu répandue qui n'est pas écrit en Java est GCJJ'en ferais un commentaire si je pouvais, mais je ne peux pas, alors voici:
Une des raisons pour lesquelles C semble si omniprésente est qu’il s’agit de l’un des premiers langages développés, et qu’une énorme quantité de langages modernes sont basés sur sa structure (Java, Go, PHP, Perl, etc.). plus d'endroits que ce n'est.
Une autre raison souvent oubliée est qu’en 1973, Unix a été réécrit en C et que de nombreux appels système d’Unix sont également disponibles en tant que programmes / fonctions en C, ce qui rend les deux très liés. Comme Unix était un élément puissant du développement de la programmation moderne dans son ensemble, C s’est laissé entraîner dans l’infamie.
Cela dit, la réponse à votre question est "Non". C est basé sur un langage appelé ALGOL et de nombreux concurrents d’ALGOL (FORTRAN, Lisp, COBOL) et C (aucun ne me viennent à l’esprit). La programmation orientée objet, qui est sans doute le changement de paradigme le plus important dans la conception de la programmation, n'est pas née avec C, bien que C ++ soit un langage POO très populaire (il est apparu en premier dans Lisp ou Simula 67, selon la personne à qui vous le demandez). Au moment de l’application OOP, C était un langage si populaire qu’il n’avait pas besoin d’être le premier. Il était si populaire que «l’extension» C ++, pour ainsi dire, est devenue l’un des principaux langages OOP. Il reste d'usage moderne principalement en raison de ses puissantes fonctionnalités de contrôle de la mémoire (vous pouvez directement allouer et désallouer la mémoire créée par vos structures), ce qui lui permet de créer des programmes sur des budgets mémoire restreints (pensez aux jeux vidéo) et son compilateur hautement optimisé (évidemment en fonction du compilateur). Certes, même ces fonctionnalités perdent du terrain à mesure que la compilation Java JIT et les gestionnaires de mémoire en langage deviennent plus avancés.
la source
Évidemment pas. Comment le premier compilateur C pourrait-il être écrit en C si C n'existait pas auparavant? Ce n'est pas le problème de la poule et de l'œuf.
Il existe de nombreuses façons d'écrire le premier compilateur d'un langage, appelées amorçage.
De plus, la plupart des compilateurs tentent de s'auto-héberger , ou se compilent eux-mêmes dans leur langage, principalement pour promouvoir le langage et le compilateur lui-même.
la source
Voici une liste de certains langages de programmation qui ne sont pas écrits en C, à côté des langages dans lesquels ils sont implémentés:
Les meilleurs langages pour implémenter un compilateur vont probablement être assez éloignés de C. Les langages fonctionnels vous donnent des choses comme des schémas de récursion et des combinateurs d’analyseurs monadiques (à condition que vous ayez des classes de types), ce qui les rend particulièrement adaptés au travail du compilateur.
Deuxièmement, répondez à votre question de savoir si C est la "mère / père de tous les langages de programmation" - pas vraiment. C était une langue bien conçue au moment de sa parution et elle a sans aucun doute influencé les concepteurs de langages, qui ont ensuite fait des choses très différentes. Mais au bout du compte, Haskell se démarque de C de toutes les manières possibles. C a 45 ans et il n’est pas surprenant que nous ayons appris à faire mieux entre temps.
Enfin, pour répondre à votre troisième question, il n’est tout simplement pas vrai que C implémente "tous les concepts". En particulier, essayer de mettre en œuvre certains des concepts avancés de la programmation fonctionnelle (tels que les métamorphismes ou, ce qui est sûr, les synchromorphismes) en C serait monstrueusement difficile. Je ne suis pas particulièrement familiarisé avec la programmation orientée objet, mais je sais pertinemment que certains langages orientés objet possèdent des types somme.
la source
Les langages de programmation sont des spécifications (pas un logiciel!) Généralement écrites dans un document anglais (avec une formalisation, par exemple EBNF pour la plupart des syntaxes; parfois, leur sémantique est également partiellement formalisée).
Par exemple, C11 est défini par n1570 (à lire). Certains dialectes de Scheme sont définis par R5RS (à lire également, il est très bien écrit).
Les langages de programmation peuvent être implémentés par certains logiciels. Parfois, ce logiciel est un compilateur écrit dans le langage de programmation lui-même. Lisez à propos de l' initialisation des compilateurs .
On peut écrire un compilateur dans le langage de programmation compilé lui-même. Si ce langage XX est tout nouveau, vous devez passer par une étape temporaire consistant à écrire un interpréteur ou un compilateur minimal d'un sous-ensemble de ce langage dans un autre langage d'implémentation (peut-être C), et plus tard, vous pourrez jeter ce compilateur temporaire interpréteur (qui n'a pas besoin d'être "bon", juste pour être suffisant pour compiler l'autre compilateur). Une fois que vous avez compilé votre compilateur XX écrit en XX, vous pouvez jeter votre compilateur temporaire.
Souvent (mais pas toujours) le système d’exécution est partiellement écrit en C (en particulier le ramasse - miettes ).
Notez que bones est un compilateur et un moteur d'exécution Scheme entièrement écrit en lui-même (et vous pouvez trouver de nombreux autres exemples d'implémentations entièrement amorcées).
BTW, il est pratique d’utiliser C comme langage cible des compilateurs .
Aujourd'hui, de nombreuses implémentations de langages de programmation sont des logiciels libres ou open source . N'hésitez pas à étudier (et peut-être contribuer à) leur code source!
la source