Ich habe mich immer gefragt, wie die Abhängigkeiten von einer Programmiersprache zu ihren Bibliotheken verwaltet werden. Nimm zum Beispiel C#. Als ich angefangen habe, etwas über Computer zu lernen, würde ich (fälschlicherweise) annehmen, dass die Sprache selbst unabhängig von den Klassenbibliotheken entwickelt wird, die schließlich für sie verfügbar werden. Das heißt, der Satz von Sprachschlüsselwörtern (wie for
, oder throw
) sowie die Syntax und die Semantik werden zuerst definiert, und Bibliotheken, die aus der Sprache verwendet werden können, werden separat entwickelt. Die spezifischen Klassen in diesen Bibliotheken, so dachte ich, sollten keinen Einfluss auf das Design der Sprache haben.Sind Sprachen wirklich abhängig von Bibliotheken?
Aber das funktioniert nicht, oder nicht die ganze Zeit. Betrachten Sie throw
. Der C# -Compiler stellt sicher, dass der Ausdruck throw
zu einem Ausnahmetyp aufgelöst wird. Exception
ist eine Klasse in einer Bibliothek, und als solche sollte es überhaupt nicht speziell sein. Es wäre eine Klasse wie jede andere, außer dass der C# -Compiler ihr diese spezielle Semantik zuweist. Das ist sehr gut, aber meine Schlussfolgerung ist, dass das Design der Sprache von der Existenz und dem Verhalten bestimmter Elemente in den Klassenbibliotheken abhängt.
Darüber hinaus frage ich mich, wie diese Abhängigkeit verwaltet wird. Wenn ich eine neue Programmiersprache entwerfen würde, welche Techniken würde ich verwenden, um die Semantik von throw
zu der ganz bestimmten Klasse zu mappen, die Exception
ist?
So sind meine Fragen zwei:
- Bin ich richtig, dass die Sprache Design im Denken fest an, dass der Basisklassenbibliotheken gekoppelt ist?
- Wie werden diese Abhängigkeiten innerhalb des Compilers und der Laufzeit verwaltet? Welche Techniken werden verwendet?
Vielen Dank.
BEARBEITEN. Danke an diejenigen, die darauf hingewiesen haben, dass meine zweite Frage sehr vage ist. Ich stimme zu. Was ich versuche zu lernen, ist, welche Art von Referenzen der Compiler über die benötigten Typen speichert. Zum Beispiel findet es die Typen durch eine Art eindeutige ID? Was passiert, wenn eine neue Version des Compilers oder der Klassenbibliotheken freigegeben wird? Ich bin mir bewusst, dass dies immer noch ziemlich vage ist, und ich erwarte keine präzise Antwort in einem einzigen Absatz; vielmehr sind Hinweise auf Literatur oder Blogbeiträge sehr willkommen.
See nicht tragbar ist http://docs.oracle.com/javase/1.4.2/docs/api/java/lang/package-summary.html _ Bietet Klassen an, die für das Design von Die Java-Programmiersprache._ – flup
Und http://msdn.microsoft.com/en-us/library/yxcx7skw(v=vs.71).aspx _Der System-Namespace enthält fundamentale Klassen und Basisklassen, die gemeinsam verwendeten Wert und definieren Referenzdatentypen, Ereignisse und Ereignishandler, Schnittstellen, Attribute und Verarbeitungsausnahmen. Andere Klassen bieten Dienste zur Unterstützung der Datentypkonvertierung, Methodenparametermanipulation, Mathematik, Remote- und lokaler Programmaufruf, Anwendungsumgebungsmanagement und Überwachung von verwalteten und nicht verwalteten Anwendungen. – flup
Die Antwort auf die erste Frage lautet "Ja". Die zweite Frage ist so vage, dass ich keine Ahnung habe, wie ich überhaupt anfangen soll, darauf zu antworten. –