11
votes

Une langue qui n'utilise pas 'c'?

juste curieux. Je me trompe peut-être, mais aussi loin que je sache, la plupart des langues sont créées en utilisant 'c' sources.

Par exemple: Perl , php , python , java (? ), Go ...

Y a-t-il une langue qui n'utilise pas C comme un interprète / compilateur de bas niveau? (fortran?)


2 commentaires

Oui pour Java, j'ai plongé dans les sources OpenJDK et ils sont définitivement C.


Merci pour toutes ces réponses intéressantes. Comme il n'y a pas une solution et une seule solution, je vais donner un point à toutes les bonnes réponses.


19 Réponses :


4
votes

Qu'en est-il de Basic ou Pascal?


1 commentaires

@Arthur - Ça pense que FreeBasic est auto-héberge en ce moment, bien que cela puisse changer une fois qu'il devient un front de GCC



1
votes

PYPY est une implémentation de Python écrit en Python.


3 commentaires

Il y a aussi une mise en œuvre de Python en Java: Jython


Toutefois, Pypy génère un code C afin d'être suffisamment rapide pour une utilisation quotidienne. ;)


Toutes les implémentations python bouchent jusqu'à un interprète ou une machine virtuelle basée sur C



2
votes

De ce que je sais de GCC, la plupart des compilateurs vont de Java / Fortran / ADA / Quels que soient le code objet, ils utilisent tous le même lien. J'imagine que la liaison est en C, mais l'assembleur n'est probablement pas.


1 commentaires

Le compilateur GCC / Java / Fortran GCC est écrit en C, assembleur de sortie assemblé avec du gaz (également écrit en C)



7
votes

3 commentaires

Et quelle langue était-elle écrite? Je veux dire, la première version, pas la bootsTrappe.


Spice Lisp Begat Cmlucl, et cmuck Begat Sbcl. Spice Lisp, semble-t-il, a été écrit dans le microcode (pour la PERQ). De: Cons.org/cmucler /doc/cmucl-history.htmlled/a >


Vous avez besoin de SBCL pour compiler SBCL. Maintenant c'est la récursion :)



2
votes

Le compilateur Dylan est écrit en Dylan.


0 commentaires

3
votes

Oui ..... PL / 1 Un ancien programme Mainframe IBM (PL / 1 signifie la langue de programmation 1)

Il y a d'autres: assembleur?

Cordialement Sigersted


0 commentaires

22
votes

Tout langage compilé qui pree C a (avait?) compilateurs qui n'étaient pas eux-mêmes dépendants de c.

Il y avait un vieux compiler LISP Compilateur qui était écrit dans Lisp (retour lorsque Lisp était le seul LISP).

Fortran, Algol, Snobol, Forth, Smalltalk, Simula, Pascal, APL, Cobol, Mumps, Logo et BCLL étaient également entièrement libres de c.


1 commentaires

Je valide la question la plus votée un an après que j'ai posé ma question :-)



16
votes

Si vous écrivez une langue B dans A, il est possible d'écrire plus tard un compilateur pour B en B.
Découvrez bootstrapping

bootstrapping est un terme utilisé dans Informatique pour décrire le techniques impliquées dans la rédaction d'un compilateur (ou assembleur) dans la cible langue de programmation qu'il est destiné à compiler. Cette technique est également appelé auto-hébergement.

une grande proportion de programmation Les langues sont bootstrappées, y compris basique, c, pascal, facteur, haskell, modula-2, Oberon, OCAML, Common Lisp, schéma, clojure et plus.

EDIT: Prendre en compte des commentaires:

  • Le système d'exécution de Haskell est toujours un joli gros morceau de C
  • Clojure n'est pas (encore) BootsTrapped, mais c'est mis en œuvre dans Java

6 commentaires

Cela ne répond pas vraiment à la question.


Le système d'exécution de Haskell est toujours un joli gros morceau de c


Clojure n'est pas (encore) BootsTrappe, c'est le noyau est toujours implémenté à Java, pas de clojure. En outre, la JVM est elle-même écrite en C (++).


@ROBERT GAMBLE, ci-dessus est une liste des langues bootstrajesques, alias les langues qui n'utilisent pas C.


Pas vrai ... cela ne s'applique que si B est suffisamment fonctionnel. Je pourrais écrire une langue en C dont les seules commandes sont imprimées et goto; Cette langue n'a pas pu être utilisée pour écrire une implémentation indépendante de lui-même.


@Dave Sherohman, désolé je n'étais pas clair. Par "Il est possible d'écrire plus tard" Je voulais dire si vous concevez / évoluez B pour être suffisamment fonctionnel pour cela, comme vous l'avez mentionné.



6
votes

Delphi a été écrit dans Pascal et Afaik Pascal a été (initialement) écrit dans Fortran mais après cela à Pascal lui-même.


1 commentaires

Delphi a été écrit à Turbo Pascal et qui a été écrit à Assembleur. Le générateur de code jusqu'à la version 3 était toujours en assembleur. Même Borlands C ++ Builder Aka Turbo C a été écrit dans Assembleur.



4
votes

Freepascal est la compilation automatique. À un moment donné, je vais aller faire pour avoir une pièce de théâtre avec elle. Je me souviens encore des jours de gloire de Turbo Pascal.

En fait, je viens de le remarquer dans les référentiels de Karmic Koala Synaptic, donc je le téléchargeons et le Lazarus IDE en ce moment.

super, un autre week-end le week-end sur les tubes: -)


0 commentaires

4
votes

voir Bootstrapping compilateurs . Le premier compilateur Pascal a été écrit en Fortran, qui a été utilisé pour compiler un compilateur Pascal qui a été écrit à Pascal.

C ++ est un super-ensemble de C, de sorte qu'un compilateur de base C ++ pourrait être écrit en C, puis amélioré à l'aide de fonctionnalités spécifiques C ++ (et compilées à l'aide d'une version précédente de lui-même).

Je ne sais pas quel langues les compilateurs MS sont écrits, mais je ne serais pas surpris qu'ils étaient en C ++. Clang de Apple est en C ++ et cible la LLVM, qui est également écrite en C ++.

En outre, de nombreuses langues LISP peuvent se compiler elles-mêmes.

Certains compilateurs utiliseront C comme une version portable de l'Assemblée, mais c'est juste pour la commodité.


1 commentaires

Le compilateur de MSVC est efficacement c1.dll , qui relie à la fois le C ++ CRT et .NET.



2
votes

Jruby est une implémentation de Ruby qui utilise la machine virtuelle Java. Il est possible de dire que la machine virtuelle Java est écrite en C, C ++ ou une autre langue basse niveau, mais en fin de compte tout ce qui parle au matériel directement est écrit dans C, C ++, assembleur ou une autre langue basse niveau.


0 commentaires

4
votes

Plus d'une règle générale qu'une loi de la nature: Compilateurs pour les langages compilés sont généralement rédigés dans la langue elle-même. (Par exemple Pascal, OCaml, Haskell, ...) Ceci est parfois obscurci par le fait que certaines langues utilisent un compilateur C comme back-end. Cela est très courant pour les nouvelles langues: par exemple le compilateur Glasgow Haskell est écrit en Haskell, mais il crée un code intermédiaire C qui est que compilé en code natif, sauvant ainsi les programmeurs la tâche fastidieuse de génération de code natif pour plusieurs plates-formes. BTW: Java et C # tombent dans cette catégorie, aussi. Le compilateur javac est écrit en Java, le compilateur C # en C #. parties du moteur d'exécution / VM sont écrits en C, mais pas le compilateur.

Les interprètes pour les langues interprétées d'autre part sont souvent (mais pas toujours) écrit dans une autre langue. Les exemples incluent les langues que vous avez mentionnés. Lisp ou comprennent des contre-PyPy. Je suppose que la raison principale de mettre en œuvre l'interprète dans une autre langue est d'obtenir un interprète plus rapide, ce qui pourrait aussi expliquer pourquoi C est le choix commun ici (puisque C a la réputation de conduire à un code rapide).


1 commentaires

GHC génère uniquement C si vous le demandez spécifiquement (-FVIA-C). La plupart du temps génère juste un code d'objet directement.



11
votes

Si vous recherchez des implémentations non-C de certaines langues populaires / grandes, alors considérez ceci:


2 commentaires

"Clojure, Scala et Groovy" - et bien sûr, Jruby et Jython sont des implémentations non-C de Ruby et de Python. Ils ne sont tout simplement pas la façon dont ces deux langues ont été créées pour la première fois.


@Steve 'onebyone' Jessop bien, vrai. J'ai énuméré les langues dont les premières implémentations elles-mêmes n'étaient pas en C.



5
votes

Le processus d'obtention d'une langue et de courir est très intéressant. Il est particulièrement intéressant d'être particulièrement intéressant dans le fait que le noyau de la langue peut être mis en œuvre dans une faible quantité d'espace, puis tout le reste peut venir pour le trajet. De ma propre mémoire, vous pouvez vous échapper avec la mise en œuvre @,!, + Et - en montage - peut-être une ou deux piles jongler des opérateurs et vous avez terminé. Voir ici pour plus d'informations.

Ce qui est particulièrement intéressant, c'est que les choses commencent à se tromper dans le processus de bootstress. Il y a de nombreuses années, j'ai lu sur un compilateur Pascal créé dans une université en tant que projet de recherche. Il a été écrit à Pascal, en utilisant le compilateur Pascal existant et éventuellement totalisé. Le problème était qu'il y avait un bogue dans la génération de code dans un cas particulier et le correctif dans le bogue induit par la source du compilateur dans le compilateur existant, ce qui rend impossible l'application de moyens conventionnels. Les sauvegardes à une version non bugée étaient obsolètes. Finalement, l'auteur a fini par une chirurgie binaire très minutieuse sur le compilateur existant.

Bien que c est une langue de système dominante, ce n'est certainement pas la langue de base pour créer d'autres langues. Les premières machines Macintosh ont été créées avec Pascal à l'esprit et la plupart des premiers outils et langues étaient Pascal (ou Assemblage).


1 commentaires

Un autre exemple est la biottrage délibérément mal tourné. Voir: cm.bell-labs.com/who/ken/trust.html < / a>




3
votes

Il y a même un compilateur C actuel non écrit à l'origine en C

Je crois que le Le logiciel Green Hills C compilateur C a été d'abord écrit au début des années 1980 à Pascal. La société est désormais un grand fournisseur de trucs intégrés de l'aérospatiale et qualifiés de MIL et il est possible que le compilateur soit toujours à Pascal. Mais alors, je pense qu'ils ont aussi un traducteur Pascal-to-C, donc je suppose qu'ils auraient pu migrer.

UCSD Pascal

Le système P a utilisé un compilateur qui généré du code pour une machine virtuelle. Je crois que le compilateur était lui-même écrit à Pascal. Vous pouvez porter la chose entière en portant simplement le VM. Ce système a influencé le développement Java / JVM ultérieur.

tous les autres vieux trucs

C n'a été allé que depuis le début des années 1970 et n'a été populaire que depuis le début des années 1980. Tout au plus tôt a dû faire avec quelque chose d'autre qui était plus tôt ou bootstrap elle-même dans la compilation automatique.


0 commentaires

5
votes

C est la langue que la plupart des systèmes d'exploitation modernes sont écrits et donc à peu près toutes les autres langues qui souhaitent courir sur des systèmes d'exploitation modernes et du matériel moderne doivent avoir la possibilité d'interfacer à C s'il veut interagir avec le reste du monde du monde. En outre, à cause de cela, C compilateurs C sont omniprésents, vous pouvez donc toujours utiliser toujours sur un compilateur C disponible pour toute plate-forme qui vous intéresse. Pour ces deux raisons, de nombreuses langues sont soit implémentées dans C (au moins en partie en partie. ), ou sont écrits pour compiler à C (la version compilée à C peut être utilisée pour bootstrap).

Cela dit, il y a encore des langues qui ont encore peu de contacts avec C. Clozure Common Lisp ( Autrefois OpenMCLCl, avant que ce Macintosh commun Lisp, avant que ce corail commun LISP) soit écrit entièrement dans les LISP commun. Vous devez télécharger des binaires de celui-ci pour une plate-forme pour pouvoir le compiler. Il est très courant que les LISP soient écrits dans Lisp (parfois un autre dialecte, parfois le même), car Lisp est beaucoup plus âgé que C. Il y avait même Machines LISP dans les années 1970 et des années 80 conçues pour exécuter LISP, et l'ensemble du système d'exploitation et de l'environnement de développement en a été écrit.

Il existe de nombreuses langues qui ont un compilateur et certaines bibliothèques écrites dans cette langue, tandis que certaines bibliothèques et bits du temps d'exécution sont écrites dans C. Par exemple, cmucl (et son dérivé SBCL ) sont principalement écrits dans Lisp commun, mais ils ont un petit runtime C. Il en va de même pour GHC , le compilateur Glasgow Haskell; Il est écrit à Haskell, vous avez donc besoin d'une implémentation de haskell existante pour le construire (généralement câlins , comme c'est écrit dans C et fait donc plus de bottes), mais il a un code C dans son runtime.

schéma 48 est un schéma qui est écrit dans Prescheme , un dialecte limité de schéma pouvant être compilé à C, qui est lui-même écrit dans le schéma. Le fait qu'il compileait à C faite de la chaussure plus facile; Le schéma 48 Distribution est doté du code compilé à C déjà, il vous suffit donc de compiler avec le compilateur de votre système C pour vous mettre en marche.

Il y a beaucoup d'autres langues écrites dans des langues autres que c aussi. Il y a Pascal gratuit , une version de Pascal écrit à Pascal. Il y a beaucoup de langues écrites en Java, bien que la JVM elle-même soit principalement écrite dans C. erlang a été écrit à l'origine dans prolog (qui a fortement influencé sa syntaxe), mais n'est pas écrit dans une combinaison de C et Erlang.

Toutes les langages de programmation doivent être écrits dans quelque chose, si vous voulez qu'ils fonctionnent sur un ordinateur. Au début, le seul choix était d'écrire un code de machine directement. Peu de temps après, les gens ont écrit des assembleurs (à l'origine dans le code de la machine et se terminent par l'assembleur) pour faciliter le code de la machine d'écriture. Cela a ensuite été suivi de langues de haut niveau; Fortran, Lisp, Cobol, Algol, et plus tard Simula, Smalltalk, C, Pascal, ML, Prolog. Chacun d'entre eux devait être écrit dans quelque chose; Les premiers ont été écrits dans Assembleur, puis plus tard, certains ont été écrits en eux-mêmes et d'autres écrit dans une autre langue de haut niveau. Par les années 80, C était à peu près le langage de programmation des systèmes dominants et est donc devenu le choix par défaut d'écrire une nouvelle langue dans; et cela continue à aujourd'hui. Mais regardez-vous dans les langues d'auparavant, et vous trouverez de nombreuses personnes implémentées dans d'autres langues, voire elles-mêmes.


1 commentaires

Le fait qu'il y ait des en-têtes C pour ce qui est fondamentalement une API de procédure générale ne fait pas que C pour cette couche est nécessaire.



1
votes

Vous devez définir ce que vous entendez par "niveau de bas niveau". Presque toutes les langues vont utiliser indirectement parce que la plupart des systèmes d'exploitation sont écrits en C ou C ++. Pour effectuer des appels système (fichiers d'ouverture, sockets réseau), vous devez vous interfacer avec C.

qui étant dit qu'il y a eu des tentatives de rédaction de systèmes d'exploitation dans d'autres langues plus particulièrement être OCAML et LISP.

Bien sûr, cela a été fait dans Lisp (Google Lisp Machines).

Lisp serait donc le langage le plus remarquable (non mort) qui a réussi avec c.


0 commentaires