Ist die D-Sprache vollständig von der D-Laufzeit abhängig?

8
In letzter Zeit habe ich in der D-Sprache studiert. Ich war immer etwas verwirrt über die Laufzeit. Aus den Informationen, die ich darüber sammeln kann (was nicht sehr viel ist), verstehe ich, dass es eine Art ist von einer, gut, Laufzeit, die mit einigen von D's Funktionen hilft. Wie Garbage Collection läuft es zusammen mit Ihren eigenen Programmen. Aber da D zu Maschinencode kompiliert wird, braucht es wirklich Features wie Garbage Collection, wenn unser Programm es nicht benötigt? Was mich wirklich verwirrt sind Aussagen wie "Sie können ein Betriebssystem in D. schreiben". Ich weiß, dass du es wirklich nicht kannst tun Sie das, weil es mehr zu einem Betriebssystem gibt, als irgendeine kompilierte Sprache geben kann, ohne irgendeine Versammlung zu verwenden. Aber wenn Sie einen Kernel hätten, der D-Code aufruft, würde die D-Runtime verhindern D in solch einer nackten Umgebung laufen? Oder ist die D-Laufzeit einfacher? Kann es gedacht als einfach "automatische" Aufnahme von Quelldateien / Bibliotheken, die bei der Kompilierung mit Ihre Bewerbung macht keinen Unterschied mehr, als diesen Code selbst zu schreiben? Vielleicht bin ich nur ich sehe es falsch an. Aber ich bin mir sicher, dass einige Informationen zu diesem Thema vielen Menschen gut tun können.

    
kbzombie 09.11.2012, 10:08
quelle

2 Antworten

13

Ja, Sie können die Funktionen von DRuntime, die der Compiler erwartet, direkt in Ihrem Hauptmodul (oder wo auch immer) implementieren, ohne Runtime kompilieren und es wird Just Work (tm).

Wenn Sie Ihren Code nur ohne Laufzeitumgebung erstellen, gibt der Compiler Fehler aus, wenn ein Symbol fehlt, von dem erwartet wird, dass es von der Laufzeitumgebung implementiert wird. Sie können dann sehen, wie DRuntime es implementiert, um zu sehen, was es tut, und dann implementieren Sie es in welcher Weise Sie bevorzugen. Dies ist es, was XOmB, der in D geschriebene Kernel (Sprachversion 1, aber gleiches Angebot), tut: Ссылка

Viele DRuntime werden von vielen Anwendungen nicht wirklich benutzt, aber es ist der bequemste Weg, um die Runtime-Komponenten von D in Anwendungen zu integrieren. Aus diesem Grund ist es eine statische Bibliothek (hoffentlich eine gemeinsame Bibliothek in der Zukunft). .

    
user438034 09.11.2012, 10:14
quelle
6

Es ist ziemlich genau dasselbe wie C und C ++, das ich erwarte. Die Sprache selbst kompiliert zu nativem Code und läuft nur. Aber es gibt Code, der immer benötigt wird, um alles einzurichten, um Ihr Programm auszuführen, zum Beispiel die Verarbeitung von Befehlszeilenparametern.

Und einige komplexere Spracheinrichtungen werden besser implementiert, indem man etwas Standardcode aufruft, anstatt den Code überall dort zu erzeugen, wo er benutzt wird. Zum Beispiel muss eine Ausnahme ausgelöst werden, um die relevante Handler-Funktion zu finden. Zweifellos könnte der Compiler den Code dort einfügen, wo er verwendet wurde, aber es ist viel sinnvoller, den Code in eine Bibliothek zu schreiben und diesen aufzurufen. Außerdem gibt es viele vordefinierte Bibliotheksfunktionen in der Standardbibliothek.

Alles zusammengenommen ist die Laufzeit.

Wenn Sie C schreiben, können Sie damit ein Betriebssystem schreiben, weil Sie den Startcode selbst schreiben können, Sie können den gesamten Code für die Speicherzuweisung selbst schreiben, Sie können stattdessen den gesamten Code für Standardfunktionen wie strcat selbst schreiben Verwenden der bereitgestellten in der Laufzeit. Aber Sie möchten das für kein Anwendungsprogramm tun.

    
jcoder 09.11.2012 10:15
quelle

Tags und Links