A D programozási nyelv Angeli Dávid
Nagy vonalakban C++ --- 2
Történet Megjelenés éve: 2001 Fejlesztők: Walter Bright, Andrei Alexandrescu (2006-tól) Utolsó verzió, 2014 február: 17. a TIOBE listán (2013 március: 30.) 3
Walter Bright, Digital Mars 1957 Empire - stratégiai játék, , PDP-10 mainframe C/C++ fordítók (Zortech C++, 1988) D (2001) 4
C/C++ C/C++ -szerű look and feel Közvetlen rendszer API elérés Multiparadigma támogatás: OOP, funkcionális, generikus, template metaprogramming Kivételkezelés Futásidejű típusinformáció (RTTI) Operátor túlterhelés Resource acquisition is initialization „Down and dirty” programming 5
- C (C++) kompatibilitás C preprocesszor Többszörös öröklődés Névterek Előzetes deklaráció Include files Nem virtuális tagfüggvények 16bit támogatás 6
+ Memóriakezelés - Garbage collector Dinamikus tömbök, asszociatív tömbök (-> modern string funkciók) Design by contract Unit teszt Modulok Ddoc – dokumentáció kommentekből 7
Helló Világ.d import std.stdio; void main() { writeln("Hello, world!"); } 8
Binarysearch, type parameter import std.array; bool binarySearch(T)(T[] input, T value) { while (!input.empty) { auto i = input.length / 2; auto mid = input[i]; if (mid > value) input = input[0.. i]; else if (mid < value) input = input[i $]; else return true; } return false; } 9
Unit teszt unittest { assert(binarySearch([ 1, 6, 7, 15 ], 6)); assert(binarySearch!(int)([ 1, 3, 15 ], 5)); } Unit teszt futtatása: compilert „-unittest” paraméterrel kell hívni. A tesztek a main függvény előtt futnak. 10
C/C++ használata C - D felület: közvetlen C hívások: extern (C) int strcmp(char* string1, char* string2); … return strcmp(std.string.toStringz(s), "foo"); … C library-k elérése könnyű C++ hoz korlátozottabb hozzáférés 11
Contract programming long square_root(long x) in { assert(x >= 0); } out (result) { assert((result * result) <= x); } body { return cast(long)std.math.sqrt(cast(real)x); } 12
Eszközök és linkek VisualD: DDT: Tutorial a Githubon: tut/# tut/# Community: Official: 13
Forrás