D (programovací jazyk)
D je multiparadigmatický, aspektově a objektově orientovaný, imperativní a systémový programovací jazyk. Jeho autoři jsou Walter Bright z firmy Digital Mars a Andrei Alexandrescu. Vychází z jazyka C++, ale zároveň se liší. Jazyk D přestavěl některé rysy C++ a je ovlivněn jazyky Java, C#, Eiffel a Python. Stabilní verze 1.0 byla vydána 2. ledna 2007. Designové cíle jazyka D jsou zkombinovat výkon kompilovaných jazyků s bezpečností a expresivní silou moderních dynamických jazyků. Idiomatický kód v D je obvykle stejně rychlý jako ekvivalentní kód C++, ale zároveň je kratší a paměťově bezpečný. Automatické odvození typu a automatická správa paměti umožňují rychlejší vývoj, přičemž kontrola mezí, design by contract a typový systém připravený na paralelní programování, pomáhají omezit počet chyb. VlastnostiProgramovací jazyk D se poučil tam, kde má v praxi C++ problémy. I když používá mnoho konceptů jazyka C++, tak zároveň se některých zbavuje, a tudíž není kompatibilní se zdrojovým kódem C++. Přidává do funkcionality C++ implementací design by contract, unit testy, pravé moduly, mixiny, automatická správa paměti, first class pole, asociativní pole, dynamická pole, rozdělování polí, vnořené funkce, vnořené třídy, closures a lambda funkce, anonymní funkce, interpretaci jazyka při kompilaci, pozdní inicializace a změněnou syntaxi šablon. D může být stejně jako C++ použit pro nízkoúrovňové programování díky zabudované podpoře inline assembleru. Vícenásobná dědičnost je podobně jako v Javě realizována pomocí rozhraní. Syntaxe deklarace, příkazů a výrazů je stejná, jako v C++. Vestavěný inline assembler představuje zásadní rozdíl mezi převážně systémovým D a aplikačními jazyky jako Java a C#. Inline assembler umožňuje programátorovi vkládat v podstatě strojový kód příslušného procesoru, což je technika používaná zejména programátory píšící systémový software pro přímý přístup k hardware. To je zapotřebí zejména při programování operačních systémů a ovladačů zařízení. D má zabudovanou podporu dokumentačních komentářů a podporuje automatické generování dokumentace k programu. Charakteristika jazykaDatové typyCeločíselné
Bezznaménkové typy se deklarují pomocí prefixu u (například Zvláštní typy
Desetinná čísla
Pomocí prefixů c a i lze deklarovat imaginární nebo komplexní čísla (například Znaky
PoleIndexují se od nuly. Statická: mají konstantní velikost. Deklarují se takto: Dynamická: mají proměnnou velikost. Deklarují se takto: Řetězce jsou aliasy na dynamická pole neměnných znaků: Asociativní poleMohou být indexována čímkoli, nejen číslem. Deklarují se takto: AtributyDatové typy mají vlastnosti. Přistupuje se k nim takto: typ.atribut, nebo proměnná.atribut. Atributy, které mají všechny typy:
byte a;
int b;
float c;
a.sizeof;//1
b.sizeof;//4
c.sizeof;//4
Atributy celočíselných typů:
int.init;//0
int a=int.max;
int b=int.min;
int c=123;
int d=a+c;//Přetečení, D nekontroluje, zda se hodnota vejde
int e=b-c;//Podtečení, D nekontroluje, zda se hodnota vejde
Atributy desetinných čísel:
float.init;//float.nan
cfloat a=5.0+2.0i;
ifloat b=a.im;//2.0i
float c=a.re;//5.0
float d=c/0.0;//float.inf
float e=0.0/0.0;//float.nan
Atributy polí:
int[5] a=[1,2,3,4,5];
a.length;//5
int[] b=a.dup;//Dynamické pole, kopie pole a
b.length;//5
b.length=12;//Změna velikosti pole
a.ptr;//Ukazatel na počátek pole
b.reverse;//b==[5,4,3,2,1]
immutable(int)[] c=b.idup;//Neměnná kopie
StrukturyDeklarují se klíčovým slovem Příklad: import std.conv;
struct Osoba
{
int vek;
string jmeno;
static Osoba nejstarsi;
string predstav_se()
{
//Textove retezce a pole se spojuji operatorem ~
//to!string je funkce která převede vek na string
return "Jsem "~jmeno~" a mám "~to!string(vek)~" let.";
}
void zestarni()
{
++vek;
if(vek>nejstarsi.vek)
{
nejstarsi=this;
}
}
static string predstav_nejstarsiho()
{
return "Jmenuje se " ~ nejstarsi.jmeno ~ " a je starý " ~ nejstarsi.vek.to!string ~ " let.";
}
}
Inicializace//Když jsou uvedeny jména členů, může být inicializace v jiném pořadí, než v deklaraci struktury
Osoba pepa={jmeno:"Josef Novák", vek: 20};
//Pokud se to inicializuje C-stylem, musí být prvky v daném pořadí
Osoba petr={26, "Petr Pupík"};
//Při inicializaci pomocí strukturového literálu musí být inicializace vyhodnotitelná v čase kompilace
Osoba alena=Osoba(65, "Alena Dvořáková");
//Také nemusíme uvést inicializátor vůbec
Osoba jana;//jana.vek==0, jana.jmeno==null
//Potom to můžeme kdykoli inicializovat takto:
jana.jmeno="Jana Svobodová";
jana.vek=15;
Všechny struktury mají vlastnost Unie
Unie na rozdíl od struktur mají velikost největší položky a jednotlivé členy se v paměti překrývají (statické se nepřekrývají). Deklarují se stejně jako struktury ale místo union MojeUnie
{
byte a;
int b;
double c;
}
Inicializace//Tak:
MojeUnie x={c:0.0};
//Nebo tak:
MojeUnie y;
y.b=0;
Ukázka kóduTento program vytiskne předané parametry. Funkce Smyčka import std.stdio : writefln;
void main(string[] args)
{
foreach (i, arg; args)
writefln("args[%d] = '%s'", i, arg);
}
ReferenceV tomto článku byl použit překlad textu z článku D (programming language) na anglické Wikipedii.
Externí odkazy
|