www.wikidata.de-de.nina.az
D ist eine seit 1999 von Walter Bright entwickelte Programmiersprache mit objektorientierten imperativen sowie deklarativen Sprachelementen D wurde am 3 Januar 2007 in der stabilen Version 1 0 veroffentlicht 7 Sie lehnt sich ausserlich stark an C an jedoch ohne vollstandige sprachliche Kompatibilitat dazu DBasisdatenParadigmen imperativ objektorientiert funktional parallel generisch modularErscheinungsjahr 2007Designer Walter BrightEntwickler Walter Bright Andrei Alexandrescu ab D 2 0 Aktuelle Version 2 100 2 10 September 2021 1 Typisierung Stark statischWichtige Implementierungen DMD GDC LDCBeeinflusst von C C Eiffel Java C Python Ruby 2 Beeinflusste DScript Genie MiniD Qore Swift ValaBetriebssystem PlattformunabhangigLizenz Boost Software License 3 4 5 6 dlang orgVom 17 Juni 2007 bis Ende 2010 wurde die Version 2 von D entwickelt die neue Funktionalitat wie Closures und dem Begriff referentiell transparenter Funktionen sowie das funktionale Paradigma erganzt aber nicht kompatibel zum Vorganger ist Mit der Freigabe der neuen Version wurde auch das Buch The D Programming Language von Andrei Alexandrescu veroffentlicht der entscheidend beim Design der Sprache mitwirkte Inhaltsverzeichnis 1 Sprachmittel 1 1 Konstante und schreibgeschutzte Werte 1 2 Funktionsattribute 2 Compiler 3 Entwicklungsumgebungen 4 Programmbeispiele 4 1 Generische Programmierung 5 Literatur 6 Weblinks 7 EinzelnachweiseSprachmittel BearbeitenD ubernimmt die meisten Sprachmittel der Sprache C verzichtet im Gegensatz zu C aber auf die Kompatibilitat dazu Dadurch soll die Ubernahme von Entwurfsnachteilen vermieden werden Durch ABI Kompatibilitat sind aber trotzdem alle in C geschriebenen Programme und Bibliotheken nutzbar Die Anbindung von C Code unterliegt dagegen Einschrankungen 8 D ist eine objektorientierte imperative Programmiersprache die ab D 2 0 auch Moglichkeiten der funktionalen Programmierung innerhalb einer imperativen Programmiersprache bietet und verfugt uber Klassenvorlagen und uberladbare Operatoren D bietet Design by contract und Module Automatische Speicherbereinigung ist im Gegensatz zu z B C C fester wenn auch prinzipiell optionaler Bestandteil der Sprache wobei geplant ist die Laufzeitumgebung selbst insoweit von dieser zu entkoppeln dass ein Arbeiten mit D auch in Situationen moglich ist wo der Einsatz eines Garbage Collectors unmoglich oder unerwunscht ist 9 10 Automatische Referenzzahlung wird hingegen nicht unterstutzt 11 Programme konnen in D ohne Zeiger geschrieben werden So bestehen Felder transparent sowohl aus dem Ort ihrer Daten als auch aus ihrer Lange wodurch Zeigerarithmetik uberflussig ist und die Zulassigkeit von Feldzugriffen zur Laufzeit uberpruft werden kann Im Gegensatz zu Java ist es aber dennoch moglich Zeiger bei Bedarf nahezu wie in C zu benutzen und so maschinennah zu programmieren Konstante und schreibgeschutzte Werte Bearbeiten In D werden schreibgeschutzte Werte mit const Datentypen ausgezeichnet Schreibgeschutzt heisst dass uber diese Variable der Wert nicht verandert werden kann Das bedeutet jedoch nicht dass es keine andere Variable gibt uber die eine Anderung stattfinden kann Dem gegenuber stehen wirklich konstante Werte die mit immutable Datentypen ausgezeichnet werden Ist ein Wert immutable gibt es uberhaupt keine schreibbare Variable auf den Wert Funktionsattribute Bearbeiten In D werden Funktionen mit Funktionsattributen versehen um anzuzeigen dass die entsprechende Funktion gewisse Garantien macht oder auch nicht Folgende Attribute stellen Garantien dar pure zeigt an dass die Funktion referentiell transparent ist nothrow zeigt an dass die Funktion keine Exception wirft moglicherweise aber einen Error nogc zeigt an dass die Funktion keinen Speicher von der automatischen Speicherverwaltung anfordert und daher keine automatische Speicherbereinigung Garbage Collection auslosen kann safe zeigt an dass die Funktion keine Speicherzugriffsverletzung auslosen kann die zu undefiniertem Verhalten fuhrt 12 live zeigt an dass die Funktion das Ownership Borrowing Modell fur die Speicherverwaltung verwendet 13 Zu safe gehoren die Attribute system und trusted Unter anderem unterliegen mit safe gekennzeichnete Funktionen der Beschrankung nur andere solche Funktionen aufrufen zu durfen sowie solche mit trusted Mit trusted oder system gekennzeichnete Funktionen durfen jedoch beliebige Anweisungen ausfuhren Nicht explizit gekennzeichnete Funktionen sind implizit system Normalerweise arbeitet ein Grossteil des Programms innerhalb der Grenzen von safe Da sich D als Systemprogrammiersprache versteht wird dem Programmierer nicht die Moglichkeit verwehrt Anweisungen auszufuhren deren Freiheit von moglichen Speicherzugriffsverletzungen sich der Prufung durch den Compiler entzieht Typischerweise ist eine Funktion system wenn sie Speicherzugriffsverletzungen auslost wenn sie falsch benutzt wird Mit trusted ausgezeichnete Funktionen bilden eine Zwischenschicht die system Code nutzt aber auf eine Weise die bekanntermassen keine Speicherzugriffsverletzungen auslost Das wird vom Compiler jedoch nicht maschinell gepruft und es obliegt dem Programmierer oder der Qualitatssicherung nachzuweisen dass der system korrekt verwendet wird 14 Ein Beispiel dafur ist die C Funktion memcpy die n Bytes von A nach B kopiert Ist der Puffer B nicht gross genug die n Bytes aufzunehmen ist eine Speicherzugriffsverletzung moglich Daher ist Anbindung von memcpy in D system Ein geeigneter D Wrapper nimmt zwei sog Slices an statt zweier Zeiger und einer Anzahl Slices bestehen aus einem Zeiger und einer Lange es kann also uberpruft werden ob der annehmende Puffer gross genug ist Ein Wrapper der einen geordneten Programmabsturz herbeifuhrt darf somit mit trusted annotiert werden Bei Testlaufen sollten Falschverwendungen des Wrappers sofort ersichtlich werden Ein weiteres Beispiel sind Funktionen mit Inline Assembler Blocken da diese sich grundsatzlich einer Uberprufung durch den Compiler entziehen Moglicherweise ist jedoch offensichtlich dass ein solcher Block keine unsicheren Speicheroperationen durchfuhrt Auch dann ist die Annotation trusted korrekt und sinnvoll Compiler BearbeitenDMD der Digital Mars D Compiler 15 ist die Referenzimplementierung von Walter Bright und fur die x86 x86 64 Versionen von Windows Linux macOS und FreeBSD erhaltlich Die wichtigsten Ubersetzer mit alternativen Backends sind der auf GCC aufbauende GDC 16 sowie LDC 17 das sich auf die Qualitaten von LLVM stutzt Neben der hohen Geschwindigkeit des generierten Maschinencodes ermoglichen diese Backends ausserdem die Bedienung von x86 64 und verschiedener anderer Architekturen Inzwischen wurden auch zwei Compiler fur D in D selbst programmiert Dil 18 und Dang 19 die kompatibel zu LLVM sind Ein Codegenerator fur die NET Plattform stellt eher einen Machbarkeitsnachweis dar als einen funktionstuchtigen Ubersetzer 20 Seit Version 9 1 des GCC wird die Sprache D unterstutzt 21 Entwicklungsumgebungen BearbeitenD wird zunehmend von verschiedenen IDEs unterstutzt Zum Einsatz kommen unter anderen die Editoren Entice Designer Emacs Vim Scite Scite4D Smultron TextMate Zeus Geany und Visual Studio Code Vim und Scite4D unterstutzen Syntaxhervorhebung und Autovervollstandigung Fur TextMate und Visual Studio Code existiert jeweils eine Erweiterung auch Code Blocks unterstutzt D teilweise Daruber hinaus gibt es noch Plug ins fur andere IDEs Eclipse unterstutzt D mit dem Plug in DDT 22 fur MonoDevelop gibt es Mono D 23 Zudem gibt es in D geschriebene IDEs wie Poseidon das Autovervollstandigung sowie Refactoring unterstutzt und einen integrierten Debugger hat WinDbg und der GNU Debugger unterstutzen D rudimentar 24 25 Programmbeispiele BearbeitenHallo Welt Hauptartikel Hallo Welt in D Ausgabe der Kommandozeilenparameter Programm geschrieben in D2 das seine Parameter ausgibt void main string args safe Importiert writefln aus dem Modul std stdio import std stdio writefln In D konnen Imports auch in Funktionen stattfinden Jeder Eintrag im Feld args wird ausgegeben foreach i arg args writefln Parameter d s i arg Der Format String wird zur Compilezeit gepruft sodass nur passende Parameter verwendet werden konnen Werden i und arg vertauscht kompiliert das Programm nicht Die Annotation safe bedeutet dass die Funktion frei von Speicherzugriffsverletzungen ist und der Compiler das uberprufen wird Sie ist nicht notwendig aber sinnvoll Der main Funktion werden die Kommandozeilenparameter als ein Feld von Zeichenketten Strings ubergeben Ruft man dieses Programm unter Windows mit beispiel exe win s auf dann gibt es diesen Text in einem Konsolen Fenster aus Parameter 0 beispiel exe Parameter 1 win Parameter 2 s UnittestsUnittests bzw Modultests 26 sind Blocke die Programmcode enthalten welcher eine Funktion auf unterschiedliche Falle testen soll Zusatzlich kann der in Unittest Code als Beispiel in der von DDOC 27 generierten Dokumentation aufgefuhrt werden In D werden die Unittests unmittelbar vor der Main Funktion ausgefuhrt Ermittelt ob eine Zahl eine Primzahl ist Hinweis Das Verfahren ist nicht optimal Params a die zu testende Zahl Returns true falls die Zahl eine Primzahl ist false ansonsten bool isPrime long a pure if a lt 1 return false falls a keine Primzahl ist und a restlos durch n teilbar ist for long n 2 n n lt a n if a n 0 return false a war nicht teilbar gt a muss eine Primzahl sein return true unittest Die Bedingung in dem Assert Aufruf muss erfullt werden wahr sein Sonst ist ein Fehler aufgetreten und das Programm bricht ab assert isPrime 0 false assert isPrime 1 false assert isPrime 2 true assert isPrime 7 true assert isPrime 4 false assert isPrime 10 false Hier wird erwartet dass der Test fehlschlagt da 11 prim ist Fehlerhafter Code Assert schlagt immer fehl assert isPrime 11 false Die Annotation pure bedeutet dass isPrime eine referentiell transparente Funktion ist ihr Ergebnis also nur von den Eingaben aber nicht von globalen Variablen abhangt Der Compiler uberpruft die Korrektheit der Annotation Unittests sind Testfunktionen die das Verhalten einer Funktion auf alle Moglichkeiten testen sollen Damit Unittests ausgefuhrt werden muss ein Compiler Flag gesetzt werden unittest bei DMD Generische Programmierung Bearbeiten Zusatzlich zu Mixin Templates 28 implementiert die Programmiersprache D alle gangigen Templatearten 29 Funktionstemplates Diese Funktion liefert als Return Wert das Maximum der beiden Parameter Der Template Datentyp T wird dabei automatisch falls moglich erkannt T max T T a T b if a lt b return b else return a unittest assert max 2 3 3 assert max a c c assert max 3 1415 2 61 3 1415 assert max Hallo Abc Hallo Meta Programmierung Berechnet das Ergebnis von basis exp template Pow double basis uint exp static if exp gt 0 enum Pow basis Pow basis exp 1 else enum Pow 1 void main import std stdio Da pow ein Template ist wird das Ergebnis zur Compilezeit bestimmt und steht zur Laufzeit als Konstante zur Verfugung writeln 2 7182 3 Pow 2 7182 3 writeln 3 1415 5 Pow 3 1415 5 Ausgabe 2 7182 3 20 0837 3 1415 5 305 975 Compile Time Function ExecutionMit noch wahrend der Kompilierung ausgefuhrten Funktionen CTFE konnen Initialisierungslisten Lookup Tables u A erstellt 30 und durch sog Mixins bei der Ubersetzung aus Strings generierter D Code eingebunden werden 31 Diese beiden Features bieten eine Moglichkeit fur die Realisierung domanenspezifischer Sprachen in D T sum T T elems T result T 0 foreach elem elems result elem return result enum arr 10 13 14 15 18 19 22 24 25 36 summeVonArr ist zur Kompilierungszeit bekannt enum summeVonArr sum arr 196 Statisches Integer Array mit der Laenge 196 int summeVonArr staticArray Die Initialisierung von result mit null ist notwendig falls T durch einen Fliesskomma Datentyp wie double belegt wird denn uninitialisierte Fliesskommazahlen Variablen werden mit NaN initialisiert statt mit null Literatur BearbeitenAli Cehreli Programming in D Tutorial and Reference 1 Auflage CreateSpace 2015 ISBN 978 1 5150 7460 1 Adam D Ruppe D Cookbook 1 Auflage Packt Publishing 2014 ISBN 978 1 78328 721 5 Andrei Alexandrescu The D Programming Language 1 Auflage Addison Wesley 2010 ISBN 978 0 321 63536 5 Tobias Wassermann Christian Speer Programmieren in D 1 Auflage entwickler press 2007 ISBN 978 3 939084 69 3 Manfred Hansen D Buch Programmiersprache D 2009 Weblinks BearbeitenOffizielle Website Die Programmiersprache D bei Digital Mars Visual D D Integration fur Visual Studio 2005 2008 und 2010 englisch D NET D Compiler fur NET englisch Einzelnachweise Bearbeiten Change Log 2 100 2 D Programming Language D Programming Language 1 0 Intro Digital Mars FAQ Is D open source Lizenz im Compiler Quellcode Lizenz der Laufzeitbibliothek Lizenz der Standardbibliothek Heise Online Eleganter programmieren D ist da 3 Januar 2007 14 52 Interfacing to C Garbage Collection dlang org abgerufen am 21 September 2019 Michael Parker Don t Fear the Reaper The D Blog 20 Marz 2017 abgerufen am 21 September 2019 Memory Management im D Wiki abgerufen am 21 September 2019 Function Safety Abgerufen am 3 Januar 2021 englisch Live Functions Abgerufen am 3 Januar 2021 englisch SafeD Abgerufen am 3 Januar 2021 englisch DMD Digital Mars D DMD GDC GNU D Compiler GDC LDC auf GitHub DIL Projektseite Dang Projektseite D Compiler for NET Memento des Originals vom 26 Januar 2018 im Internet Archive nbsp Info Der Archivlink wurde automatisch eingesetzt und noch nicht gepruft Bitte prufe Original und Archivlink gemass Anleitung und entferne dann diesen Hinweis 1 2 Vorlage Webachiv IABot dnet codeplex com GCC 9 Release Series Changes New Features and Fixes DDT auf Github Mono D windbg Debugger auf dlang org abgerufen am 14 Februar 2019 Debugging with GDB D abgerufen am 13 Februar 2019 dlang org unittests dlang org DDOC dlang org Mixin Templates dlang org Templates dlang org CTFE dlang org mixinsNormdaten Sachbegriff GND 7606805 5 lobid OGND AKS Abgerufen von https de wikipedia org w index php title D Programmiersprache amp oldid 230924265