D (Programmiersprache)

Die D Programmiersprache ist eine objektorientierte, befehlende, von Walter Bright von Digitalem Mars geschaffene Mehrparadigma-Systemprogrammiersprache. Es ist als eine Neugestaltung von C ++ entstanden, aber wenn auch es hauptsächlich unter Einfluss dieser Sprache ist, ist es nicht eine Variante von C ++. D hat einen C ++ Eigenschaften neu entworfen und ist unter Einfluss Konzepte gewesen, die auf anderen Programmiersprachen, wie Java, Pythonschlange, Rubin, C#, und Eiffel verwendet sind.

Die Designabsichten von D versuchen, die Leistung von kompilierten Sprachen mit der Sicherheit und ausdrucksvollen Macht von modernen dynamischen Sprachen zu verbinden. Idiomatischer D-Code ist allgemein so schnell wie gleichwertiger C ++ Code, kürzer und speichersicher seiend. Typ-Schlussfolgerung, automatisches Speichermanagement und Syntax-Zucker für allgemeine Typen erlauben schnellere Entwicklung, während Grenze-Überprüfung, Design durch Vertragseigenschaften und ein der Parallelität bewusstes Typ-System helfen, das Ereignis von Programmfehlern zu reduzieren.

Eigenschaften

D wird mit Lektionen entworfen, die aus praktischem C ++ Gebrauch aber nicht aus einer theoretischen Perspektive gelernt sind. Wenn auch es viele C/C ++ Konzepte verwendet, verwirft es auch einige, und weil solcher mit C/C ++ Quellcode nicht vereinbar ist. Es trägt zur Funktionalität von C ++ bei, indem es auch Design durch Vertrag, Einheitsprüfung, wahre Module, Müll-Sammlung, Reihe der ersten Klasse, assoziative Reihe durchgeführt wird, dynamische Reihe, das Reihe-Schneiden, hat Funktionen, innere Klassen, Verschlüsse, anonyme Funktionen, Übersetzungszeit-Funktionsausführung, faule Einschätzung verschachtelt und hat eine überarbeitete Schablone-Syntax. D behält C ++ 's Fähigkeit, das auf niedriger Stufe Codieren zu tun, und trägt dazu mit der Unterstützung für einen einheitlichen Reihenmonteur bei. C ++ wird Mehrfachvererbung durch den javanischen Stil einzelnes Erbe mit Schnittstellen und mixins ersetzt. Die Behauptung von D, Erklärung und Ausdruck-Syntax vergleichen nah die von C ++.

Der Reihenmonteur ist für die Unterschiede zwischen D und Anwendungssprachen wie Java und C# typisch. Ein Reihenmonteur lässt Programmierer in maschinenspezifischen Zusammenbau-Code innerhalb des Standards D Code eingehen, eine von Systemprogrammierern häufig verwendete Methode, um auf die auf niedriger Stufe Eigenschaften des Verarbeiters zuzugreifen, musste Programme führen, die direkt mit der zu Grunde liegenden Hardware, wie Betriebssysteme und Gerät-Fahrer verbinden.

D hat eingebaute Unterstützung für Dokumentationsanmerkungen, automatische Dokumentationsgeneration erlaubend.

Programmierung von Paradigmen

D unterstützt fünf Hauptprogrammierparadigmen — befehlend, objektorientiert, metaprogramming, funktionell und gleichzeitig (Schauspieler-Modell).

Befehlsform

Die befehlende Programmierung in D ist fast zu C identisch. Auf Funktionen, Daten, Erklärungen, Behauptungen und Ausdruck-Arbeit ebenso in C und der C Laufzeitbibliothek kann direkt zugegriffen werden. Einige bemerkenswerte Unterschiede zwischen D und C im Gebiet der befehlenden Programmierung schließen die Schleife-Konstruktion von D ein, die erlaubt, sich über eine Sammlung zu schlingen, und Funktionen verschachtelt hat, die Funktionen sind, die in einem anderen erklärt werden und auf die lokalen Variablen der Funktion des Umgebens zugreifen können.

Objektorientiert

Die objektorientierte Programmierung in D basiert auf einer einzelnen Erbe-Hierarchie, mit allen Klassen abgeleitet aus Klassengegenstand. D unterstützt Mehrfachvererbung nicht; statt dessen verwendet es mit Java artige Schnittstellen, die mit C ++ reine abstrakte Klassen und mixins vergleichbar sind, die erlauben, allgemeine Funktionalität aus der Erbe-Hierarchie zu trennen. D erlaubt auch, statische und endgültige (nichtvirtuelle) Methoden in Schnittstellen zu erklären.

Metaprogramming

Metaprogramming wird durch eine Kombination von Schablonen, Übersetzungszeit-Funktionsausführung, Tupeln und Schnur mixins unterstützt. Die folgenden Beispiele demonstrieren einige von den Übersetzungszeit-Eigenschaften von D.

Schablonen in D können in einem mehr funktionsähnlichen Stil geschrieben werden als diejenigen in C ++. Das ist eine regelmäßige Funktion, die den factorial einer Zahl berechnet:

ulong factorial (ulong n)

{\

wenn (n

Hier wird der Gebrauch, die Übersetzungszeit von D bedingte Konstruktion, demonstriert, um eine Schablone zu bauen, die dieselbe Berechnung mit dem Code durchführt, der dieser der obengenannten Funktion ähnlich ist:

Schablone Factorial (ulong n)

{\

statisch wenn (n

In den folgenden zwei Beispielen werden die Schablone und Funktion, die oben definiert ist, verwendet, um factorials zu schätzen. Die Typen von Konstanten brauchen ausführlich nicht angegeben zu werden, weil der Bearbeiter ihre Typen aus den Rechten von Anweisungen ableitet:

const fact_7 = Factorial! (7);

</syntaxhighlight>

Das ist ein Beispiel der Übersetzungszeit-Funktionsausführung. Gewöhnliche Funktionen können im unveränderlichen, Übersetzungszeit-Ausdrücke verwendet werden, vorausgesetzt dass sie bestimmten Kriterien entsprechen:

const fact_9 = factorial (9);

</syntaxhighlight>

Die Schablone führt artige Datenformatierung durch, und der "msg" pragma zeigt das Ergebnis während der Übersetzung:

Import std.metastrings;

pragma (msg, Format! ("7! = %s", fact_7));

pragma (msg, Format! ("9! = %s", fact_9));

</syntaxhighlight>

Spannen Sie mixins, der mit der Übersetzungszeit-Funktionsausführung verbunden ist, erlauben Sie, D-Code mit Schnur-Operationen während der Übersetzung zu erzeugen. Das kann verwendet werden, um bereichsspezifische Sprachen zum D-Code grammatisch zu analysieren, der als ein Teil des Programms kompiliert wird:

Import FooToD;//hypothetisches Modul, das eine Funktion enthält, die Quellcode von Foo grammatisch analysiert

//und Umsatz gleichwertiger D codiert

leere Hauptsache

{\

mixin (fooToD (Import ("example.foo")));

}\</syntaxhighlight>

Funktionell

leere Hauptsache {\

unveränderliche interne Nummer [] a1 = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];

unveränderliche interne Nummer [] a2 = [6, 7, 8, 9];

//muss unveränderlich sein, um Zugang aus mySum zu erlauben

unveränderliche Türangel = 5;

interne Nummer mySum (in der internen Nummer a, in der internen Nummer b) reiner nothrow//reine Funktion

{\

wenn (b

Gleichzeitig

Leere foo

{\

bool cont = wahr;

während (cont)

{\

erhalten Sie (//Delegierte werden verwendet, um den Nachrichtentyp zu vergleichen

(interne Nummer msg) => writeln ("interne Nummer hat erhalten:", msg),

(Absender von Tid) {cont = falsch; sender.send (-1);},

(Variante v) => writeln ("haha?")//vergleicht Variante jeden Typ

);

}\

}\leere Hauptsache {\

Auto tid = Laich (&foo);//erzeugen einen neuen Faden, der foo läuft

foreach (ich; 0.. 10)

tid.send (i);//senden einige ganze Zahlen

tid.send (1.0f);//senden eine Hin- und Herbewegung

tid.send ("hallo");//senden eine Schnur

tid.send (thisTid);//senden einen struct (Tid)

erhalten Sie ((interne Nummer x) => writeln ("Hauptfaden hat Nachricht erhalten:", x));

} </syntaxhighlight>

Speichermanagement

Gedächtnis wird gewöhnlich mit der Müll-Sammlung geführt, aber spezifische Gegenstände können sofort beendet werden, wenn sie aus dem Spielraum gehen. Ausführliches Speichermanagement ist das mögliche Verwenden der überlasteten Maschinenbediener und, und indem es einfach den malloc von C und frei direkt nennt. Müll-Sammlung kann kontrolliert werden: Programmierer können hinzufügen und Speicherreihen davon ausschließen, durch den Sammler beobachtet zu werden, können unbrauchbar machen und dem Sammler ermöglichen und einen generational oder einen vollen Sammlungszyklus zwingen. Das Handbuch führt viele Beispiele dessen an, wie man verschiedene hoch optimierte Speicherverwaltungsschemas dafür durchführt, wenn Müll-Sammlung in einem Programm unzulänglich ist.

Wechselwirkung mit anderen Systemen

Die Anwendung binäre Schnittstelle (ABI) von C wird sowie alle grundsätzlichen und abgeleiteten Typen von C unterstützt, direkten Zugang zum vorhandenen C-Code und den Bibliotheken ermöglichend. D sind bindings für viele populäre C Bibliotheken verfügbar. Die Standardbibliothek von C ist ein Teil des Standards D.

C ++ 's wird ABI nicht völlig unterstützt, obwohl D auf C ++ Code zugreifen kann, der dem C ABI geschrieben wird. Der D parser versteht eine Ex-Seeschwalbe (C ++) das Benennen der Tagung für die beschränkte Verbindung mit C ++ Gegenstände.

Auf Windows von Microsoft kann D auf Code von Component Object Model (COM) zugreifen.

Geschichte

Walter Bright hat sich dafür entschieden anzufangen, an einer neuen Sprache 1999 zu arbeiten. D wurde zuerst im Dezember 2001, und erreichte Version 1.0 im Januar 2007 veröffentlicht. Die erste Version der Sprache (D1) hat sich auf die Befehlsform, Gegenstand orientierte und metaprogramming Paradigmen konzentriert, die C ++ ähnlich sind.

Unzufrieden mit Phobos, der offiziellen Laufzeit- und Standardbibliothek von D, haben Mitglieder der D Gemeinschaft eine alternative Laufzeit- und Standardbibliothek genannt der Tango geschaffen. Die erste öffentliche Tango-Ansage ist innerhalb von Tagen D 1.0's Ausgabe zusammengefallen. Tango hat einen verschiedenen Programmierstil angenommen, OOP und hohe Modularität umarmend. Ein gemeinschaftsgeführtes Projekt seiend, war Tango für Beiträge offener, die ihm erlaubt haben, schneller fortzuschreiten, als die offizielle Standardbibliothek. Damals waren Tango und Phobos wegen der verschiedenen Laufzeitunterstützung APIs (der Müllmann unvereinbar, Unterstützung, usw. einfädelnd). Das hat es unmöglich gemacht, beide Bibliotheken in demselben Projekt zu verwenden. Die Existenz von zwei Bibliotheken, sowohl weit im Gebrauch, hat zu bedeutendem Streit wegen einiger Pakete mit Phobos als auch anderen mit dem Tango geführt.

Im Juni 2007 wurde die erste Version von D2 veröffentlicht. Der Anfang der D2's Entwicklung hat der Stabilisierung von D1 Zeichen gegeben; die erste Version der Sprache ist in der Wartung seitdem gewesen, nur Korrekturen und Durchführung bugfixes erhaltend. D2 sollte brechende Änderungen in die Sprache einführen, mit seinem ersten experimentellen const System beginnend. D2 hat später viele andere Spracheigenschaften, wie Verschlüsse, Reinheit und Unterstützung für die funktionellen und gleichzeitigen Programmierparadigmen hinzugefügt. D2 hat auch Standardbibliotheksprobleme durch das Trennen der Durchlaufzeit von der Standardbibliothek behoben. Die Vollziehung eines D2 Tango-Hafens wurde im Februar 2012 bekannt gegeben.

Die Ausgabe des Buches von Andrei Alexandrescu Die D Programmiersprache am 12. Juni 2010 hat die Stabilisierung von D2 gekennzeichnet, der heute allgemein gerade "D" genannt wird.

Im Januar 2011, D Entwicklung hat sich von einem bugtracker / Basis der Fleck-Vorlage zu GitHub bewegt. Das hat zu einer bedeutenden Zunahme in Beiträgen zum Bearbeiter, Laufzeit- und Standardbibliothek geführt.

Durchführungen

Aktuellste D Durchführungen kompilieren direkt in den Maschinencode für die effiziente Ausführung.

  • DMD — Der Digitale Mars D Bearbeiter ist der offizielle D Bearbeiter durch Walter Bright. Das Bearbeiter-Vorderende wird sowohl laut der Künstlerischen Lizenz als auch laut des GNUS GPL lizenziert; der Quellcode für das Vorderende wird mit den Bearbeiter-Dualzahlen verteilt. Der Bearbeiter-Zurückende-Quellcode ist verfügbar, aber nicht laut einer offenen Quelllizenz.
  • GDC — Ein Vorderende für das GCC Zurückende, das gebaute Verwenden des offenen DMD Bearbeiter-Quellcodes. Es unterstützt Versionen 1.072 und 2.057 im Hauptstrom
  • LDC — Ein Bearbeiter hat auf dem DMD Vorderende gestützt, das Low Level Virtual Machine (LLVM) als sein Bearbeiter-Zurückende verwendet. Die erste Version der Ausgabe-Qualität wurde am 9. Januar 2009 veröffentlicht. Es unterstützt beide Versionen: 1.0 und Version 2.0.
  • D Bearbeiter für.NET — Ein Zurückende für die D Programmiersprache 2.0 Bearbeiter. Es kompiliert den Code zu Common Intermediate Language (CIL) bytecode aber nicht zum Maschinencode. Der CIL kann dann über eine Infrastruktur der Gemeinsamen Sprache (CLR) virtuelle Maschine geführt werden.

Entwicklungswerkzeuge

Redakteure und integrierte Entwicklungsumgebungen (IDEN), die D unterstützen, schließen Eklipse, Microsoft Visual Studio, SlickEdit, Emacs, Schwung, SciTE, Smultron, TextMate, MonoDevelop, Zeus und Geany unter anderen ein.

  • Eklipse-Einfügefunktionen für D schließen ein: DDT und Abstieg (totes Projekt).
  • Sehstudio-Integration wird von VisualD zur Verfügung gestellt.
  • Schwung unterstützt sowohl Syntax hervorhebend als auch Codevollziehung (durch geflickten Ctags).
  • Ein Bündel ist für TextMate verfügbar, und der IDE schließt teilweise Unterstützung für die Sprache ein. Jedoch sind IDE Standardeigenschaften wie Codevollziehung oder Wiederfactoring noch nicht verfügbar, obwohl sie wirklich teilweise im Code arbeiten:: Blöcke (wegen der Ähnlichkeit von D zu C).
  • Ein Steck-für Xcode 3, ist D für Xcode verfügbar, um D-basierte Projekte und Entwicklung zu ermöglichen.
  • AddIn für MonoDevelop ist verfügbarer, genannter Mono-D.

Offene Quelle D IDEN für Windows, besteht einige, die in D, wie Poseidon, D-IDE geschrieben sind, und Lockt Entwerfer.

D Anwendungen kann mit jedem C/C ++ Testhilfeprogramm, wie GDB oder WinDbg die Fehler beseitigt werden, obwohl die Unterstützung für verschiedene D-specific Spracheigenschaften äußerst beschränkt wird. Auf Windows, D Programme kann mit Ddbg oder Beseitigen-Werkzeugen von Microsoft (WinDBG und Sehstudio) die Fehler beseitigt werden, die Fehlersuchprogramm-Information mit cv2pdb umgewandelt. Das Testhilfeprogramm von ZeroBUGS für Linux hat experimentelle Unterstützung für die D Sprache. Ddbg kann mit verschiedenen IDEN oder von der Befehl-Linie verwendet werden; ZeroBUGS hat seine eigene grafische Benutzerschnittstelle (GUI).

Beispiele

Beispiel 1

Dieses Beispiel-Programm druckt seine Befehl-Linienargumente. Die Funktion ist der Zugang-Punkt eines D Programms, und ist eine Reihe von Schnuren, die die Befehl-Linienargumente vertreten. In D ist eine Reihe von Charakteren, die durch in D1, oder in D2 vertreten sind.

Import std.stdio: writefln;

leere Hauptsache (Schnur [] args)

{\

foreach (ich, arg; args)

writefln ("args [%d] = '%s", ich, arg);

}\</syntaxhighlight>

Die Behauptung kann über jede Sammlung wiederholen, in diesem Fall erzeugt es eine Folge von Indizes und Werte von der Reihe. Der Index und der Wert ließen ihre Typen aus dem Typ der Reihe ableiten.

Beispiel 2

Die folgenden Shows mehrere D Fähigkeiten und D Designumtausche in einem sehr kurzen Programm. Es wiederholt die Linien einer genannten Textdatei, der ein verschiedenes Wort auf jeder Linie enthält, und alle Wörter druckt, die Anagramme anderer Wörter sind.

leere Hauptsache {\

dstring [] [dstring] signs2words;

foreach (dchar [] w; Linien (Datei ("words.txt")))

{\

w = w.chomp .toLower ;

unveränderlicher Schlüssel = w.dup.sort .release .idup;

signs2words [Schlüssel] ~ = w.idup;

}\

foreach (Wörter; signs2words)

wenn (words.length> 1)

writefln (words.join (" "));

} </syntaxhighlight>
  1. ist eine eingebaute assoziative Reihe, die dstring (32 Bit / Rotforelle) Schlüssel zur Reihe von dstrings kartografisch darstellt. Es ist in der Pythonschlange ähnlich.
  1. Ertrag-Linien träge, mit dem newline. Es muss dann kopiert werden mit, eine Schnur zu erhalten, die für die assoziativen Reihe-Werte zu verwenden ist (das Eigentum der Reihe gibt ein unveränderliches Duplikat der Reihe zurück, die erforderlich ist, da der Typ wirklich ist). Eingebaute assoziative Reihe verlangt unveränderliche Schlüssel.
  2. Der Maschinenbediener hängt einen neuen dstring an den Werten der dynamischen Mitreihe an.
  1. und sind Zeichenkettenfunktionen, die D erlaubt, mit einer Methode-Syntax zu verwenden. Der Name solcher Funktionen ist häufig Pythonschlange-Schnur-Methoden sehr ähnlich. Die Bekehrten eine Schnur zur unteren Umschaltung, schließt sich einer Reihe von Schnuren in eine einzelne Schnur mit einem einfachen Zeilenabstand als Separator an, und kauen Sie laut entfernt schließlich Gegenwart newline vom Ende der Schnur.
  2. Einer Std.algorithm-Funktion zu sein, die die Reihe im Platz sortiert, eine einzigartige Unterschrift für Wörter schaffend, die Anagramme von einander sind. Die Ausgabe Methode der Sorte ist handlich, um den Code als ein einzelner Ausdruck zu behalten.
  3. Das zweite wiederholt auf den Werten der assoziativen Reihe, sie ist im Stande, den Typ dessen abzuleiten.
  1. wird einer unveränderlichen Variable zugeteilt, sein Typ wird abgeleitet.
  2. UTF-32 dchar [] wird statt der normalen UTF-8 Rotforelle [] sonst verwendet Sorte weigert sich, es zu sortieren. Es gibt effizientere Weisen, dieses Programm, dieser Gebrauch gerade UTF-8 zu schreiben.

Siehe auch

  • Ddoc
  • GtkD

Weiterführende Literatur

  • . (CC DURCH die Lizenz von NC SA)

Links


Source is a modification of the Wikipedia article D (programming language), licensed under CC-BY-SA. Full list of contributors here.
Nanoarchaeota / Geschlechterfolge zum norwegischen Thron
Impressum & Datenschutz