Frage

Es scheint, dass die meisten neuen Programmiersprachen, die in den letzten 20 Jahren geschrieben wurden, erschienen in C. Dies macht durchaus Sinn, wie C als eine Art tragbarer Assemblersprache zu sehen ist. Aber was ich bin gespannt, ob dies die Gestaltung der Sprachen in irgendeiner Weise eingeschränkt hat. Was hat meine Frage wurde darüber nachzudenken, wie der C-Stack für den Aufruf von Funktionen direkt in Python verwendet wird. Offensichtlich ist die Programmiersprache Designer können tun, was sie wollen, in welcher Sprache sie wollen, aber es scheint mir, dass die Sprache, die Sie wählen, um in Puts Sie in einer bestimmten Haltung der neuen Sprache zu schreiben und gibt Ihnen bestimmte Abkürzungen, die schwer zu ignorieren. Gibt es andere Eigenschaften dieser Sprachen, die in dieser Sprache (gut oder schlecht) nicht geschrieben werden?

War es hilfreich?

Lösung

Auch bei einer C-Implementierung, sind Sie überraschend frei in Bezug auf die Umsetzung. Zum Beispiel chicken Schema verwendet C als Zwischenprodukt, aber immer noch gelingt, den Stapel als Kinderzimmer Generation zu verwenden, in seine Garbage Collector.

sagte, gibt es einige Fälle, in denen es Einschränkungen gibt. Typischer Fall: Der GHC Haskell Compiler hat ein Perl-Skript die Böse Mangler genannt die GCC-ausgegeben Assembler-Code zu ändern, einige wichtige Optimierungen zu implementieren. Sie wurden bewegt, um intern erzeugte Montage und LLVM teilweise aus diesem Grund. Das heißt, das nicht die Sprache Design beschränkt hat -. Nur der Compiler die Wahl der verfügbaren Optimierungen

Andere Tipps

Ich neige dazu, andere Meinung zu sein.

Ich glaube nicht, es ist so viel, dass eine Sprache der Compiler oder Interpreter in C implementiert ist - schließlich können Sie eine virtuelle Maschine mit C implementieren, die völlig anders als seine Host-Umgebung ist, was bedeutet, dass Sie können weg von einer C / naher Assemblersprache Einstellung.

Es ist jedoch schwieriger zu behaupten, dass die C-Sprache selbst hatte keinen Einfluss auf die Gestaltung der späteren Sprachen. Nehmen Sie zum Beispiel der Verwendung von geschweiften Klammern { } gruppieren Aussagen in Blöcke, die Vorstellung, dass Leerzeichen und Vertiefung meist unwichtig ist, nativer Typ der Namen (int, char, etc.) und andere Schlüsselwörter, oder die Art und Weise, wie Variablen definiert werden (dh. Typdeklaration folgte zunächst durch den Namen der variablen, optional Initialisierung). Viele der heute beliebten und weit verbreiteten Sprachen (C ++, Java, C #, und ich bin sicher, es gibt noch mehr) mit C. diese Konzepte gemeinsam nutzen (diese wahrscheinlich mit C nicht völlig neu waren, aber AFAIK C kam mit, dass besondere Mischung von Sprachsyntax.)

Nein, kurz gesagt. Die Realität ist, in den Sprachen schauen Sie sich um, das zum Beispiel in C Lua, geschrieben wird, ist ungefähr so ??weit von C, wie Sie ohne zu Perl zu bekommen. Es verfügt über erstklassige Funktionen, vollautomatische Speichermanagement, etc.

Es ist ungewöhnlich für neue Sprachen durch deren Umsetzung Sprache betroffen sein, es sei denn, die Sprache gravierende Einschränkungen enthält. Während ich auf jeden Fall von C mißbilligen, ist es nicht eine begrenzte Sprache, nur sehr fehleranfällig und langsam zu Programm im Vergleich zu moderneren Sprachen. Oh, außer in der CRT. Zum Beispiel ist Lua enthält Verzeichnis Funktionalität nicht, weil es nicht Teil der CRT ist, so dass sie es nicht portabel in Standard C umsetzen können, dass ein Weg ist, in der C begrenzt ist. Aber in Bezug auf Sprachfunktionen, ist es nicht darauf beschränkt.

Wenn Sie ein Argument zu sagen, dass Sprachen implementiert in C haben XYZ Einschränkungen oder Eigenschaften konstruieren wollten, würden Sie zeigen, dass die Dinge eine andere Art und Weise zu tun in C unmöglich ist.

Der C-Stack ist nur der System-Stack, und dieses Konzept früher C durch eine ganze Menge. Wenn Sie studieren Theorie der Berechnung sehen Sie, dass ein Stapel mit sehr mächtig ist.

Mit C Sprachen zu implementieren hat wahrscheinlich ein sehr geringe Wirkung auf dieser Sprache hat, obwohl die Vertrautheit mit C (und andere C wie Sprachen) von Menschen, das Design und Sprachen implementieren wahrscheinlich ihr Design sehr viel beeinflusst hat. Es ist sehr schwierig, nicht von Dingen beeinflusst werden Sie vor selbst gesehen haben, wenn man nicht aktiv die besten Stücke einer anderen Sprache kopiert werden.

Viele Sprachen verwenden Sie C als Klebstoff zwischen ihnen und anderen Dingen, though. Ein Teil davon ist, dass viele OSes einen C-API zur Verfügung stellen, so zugänglich, dass es einfach zu bedienen C. Außerdem ist C nur so weit verbreitet und einfach, dass viele andere Sprachen haben eine Art von Weg, um Schnittstelle mit ihm. Wenn Sie wollen, zusammen zwei Module kleben, die in verschiedenen Sprachen geschrieben sind, dann C unter Verwendung als die Mitte des Menschen wahrscheinlich die einfachste Lösung ist.

Wenn eine Sprache in C Implementierung hat wahrscheinlich andere Sprachen am meisten beeinflusst sind wahrscheinlich Dinge wie, wie Fluchten in Strings getan, was wahrscheinlich ist das nicht zu begrenzen.

Das einzige, was Sprache Design beschränkt hat, ist die Phantasie und technische Fähigkeiten des Sprachdesigners. Wie Sie gesagt haben, kann C als „portable Assembler-Sprache“ angesehen werden. Wenn das wahr ist, dann fragt, ob C Konstruktion ist ähnlich zu fragen gezwungen hat, wenn Montag erzwungener Sprache Design. Da der gesamte Code in jeder Sprache geschrieben schließlich als Baugruppe ausgeführt wird, würde jede Sprache die gleichen Einschränkungen leiden. Daher selbst die Sprache C keine Beschränkungen auferlegt, die durch die Verwendung einer anderen Sprache überwunden werden würde.

That being said, es gibt einige Dinge, die leichter vs anderen in einer Sprache zu tun. Viele Sprachdesigner berücksichtigen dies. Wenn die Sprache entworfen wird zu sein, sagen wir, mächtig bei String-Verarbeitung, aber die Leistung ist kein Problem, dann in einer Sprache mit besser integrierten String-Verarbeitungsanlagen (wie zB C ++) könnte mehr optimal sein.

Viele Entwickler wählen C aus mehreren Gründen. Erstens ist C eine sehr verbreitete Sprache. Open-Source-Projekte insbesondere wie, dass es relativ einfacher ist, einen erfahrenen C-Sprache-Entwickler zu finden, als es ist, ein äquivalenter Weise qualifizierte Entwickler in einigen anderen Sprachen zu finden. Zweitens C verleiht der Regel selbst zu Mikro-Optimierung. Wenn Sie einen Parser für eine Skriptsprache zu schreiben, hat die Effizienz des Parsers einen großen Einfluss auf die Gesamtleistung von Skripten in dieser Sprache geschrieben. Für kompilierte Sprachen kann ein effizienter Compiler Kompilierung Zeiten reduzieren. Viele C-Compiler sind sehr gut bei extrem optimierten Code zu erzeugen (die auch ein Teil der Grund ist, warum viele eingebettete Systeme programmiert in C) und leistungskritischen Code kann in Inline-Assembler geschrieben werden. Auch C ist standardisiert und ist in der Regel ein statisches Ziel. Code kann auf den ANSI / C89-Standard geschrieben wird und hat keine Sorgen zu machen über sie mit einer zukünftigen Version von C. Die Revisionen in der C99-Standard-Add-Funktionalität unvereinbar zu sein, aber nicht bricht vorhandenen Code. Schließlich ist C sehr leicht zu transportieren. Wenn mindestens ein Compiler für eine bestimmte Plattform vorhanden ist, dann ist es höchstwahrscheinlich ein C-Compiler. Mit einer hochportablen Sprache wie C macht es einfacher, die Anzahl von Plattformen zu maximieren, die die neue Sprache verwenden können.

Die eine Einschränkung, die den Sinn kommt, ist Erweiterbarkeit und Compiler-Hosting. Betrachten wir den Fall von C #. Der Compiler ist in C / C ++ geschrieben und ist vollständig nativen Code. Dies macht es sehr schwierig, mit einer C # Anwendung in Verfahren zu verwenden.

hat diese weitreichende Auswirkungen für die Werkzeugkette von C #. Jeder Code, den Vorteil der realen C # Parser oder Bindungsmodul nehmen will, muss mindestens eine Komponente aufweisen, die in nativen Code geschrieben wird. Dies führt schließlich Ergebnisse in den meisten der Werkzeugkette für die Sprache C # in C ++ geschrieben werden, die ein bisschen nach hinten für eine Sprache ist.

Dies schränkt die Sprache pro sagen, aber auf jeden Fall eine Wirkung auf der Erfahrung rund um die Sprache.

Die Garbage-Collection. Sprachimplementierungen auf dem Java oder .NET verwendet die GC VM. Diejenigen auf der C sind in der Regel Reference Counting verwendet.

Eine Sache, die ich denken kann, ist, dass Funktionen sind nicht unbedingt erste Klassenmitglieder in der Sprache, und dies kann nicht auf C allein verantwortlich gemacht werden (ich spreche nicht über einen Funktionszeiger vorbei, obwohl es kann argumentiert werden, dass C liefern Sie mit dieser Funktion).

Wenn man einen DSL in groovy schreiben waren (/ Schema / Lisp / Haskell / lua / javascript / und einige mehr, ich bin nicht sicher), Funktionen erster Klasse Mitglieder werden können. Herstellung von Funktionen erster Klasse Mitglieder und damit für anonyme Funktionen ermöglicht präzise und mehr Menschen lesbaren Code zu schreiben (wie von LINQ gezeigt).

Ja, schließlich alle diese laufen unter C (oder Montage, wenn Sie auf dieses Niveau erhalten möchten), aber in Bezug auf die Bereitstellung der Benutzer der Sprache die Fähigkeit, sich besser auszudrücken, machen diese Abstraktionen eine wunderbare Arbeit.

einen Compiler / Interpreter in C Implementierung hat keine wesentlichen Einschränkungen. Auf der anderen Seite, hat eine Sprache X zu C-Compiler zu implementieren. Zum Beispiel nach dem Wikipedia-Artikel über C--, wenn ein höheres Niveau Kompilieren Sprache C können Sie präzise Garbage collection, effiziente Ausnahmebehandlung oder Endrekursion Optimierung nicht. Dies ist die Art von Problem, dass C-- sollte lösen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top