Wprowadzenie do języka D
Język D to wieloparadygmatowy język programowania, który wspiera programowanie obiektowe, imperatywne oraz metaprogramowanie. Opracowany przez Waltera Brighta, powstał jako następca C, oferując binarną kompatybilność z tym językiem. Jego składnia jest inspirowana Javą, C# oraz Eiffel. Pierwsza stabilna wersja ukazała się 2 stycznia 2007 roku.
Możliwości
D został zaprojektowany z praktycznym podejściem, rezygnując z wstecznej kompatybilności na rzecz przejrzystej gramatyki. Oferuje wiele nowoczesnych rozwiązań, takich jak:
- programowanie kontraktowe
- wbudowane zarządzanie pamięcią (garbage collector)
- testy jednostkowe
- tablice asocjacyjne i dynamiczne
- domknięcia i funkcje anonimowe
- system dokumentacji zintegrowany z kompilatorem
Paradygmaty programowania
D wspiera trzy główne paradygmaty programowania: imperatywne, obiektowe oraz generyczne.
Programowanie imperatywne
Programowanie imperatywne w D przypomina C, z dodatkowymi rozszerzeniami, takimi jak instrukcja foreach
do iteracji po kolekcjach oraz funkcje zagnieżdżone z dostępem do zmiennych lokalnych.
Programowanie obiektowe
W D klasy tworzą hierarchię wywodzącą się z klasy Object
. Język nie wspiera wielokrotnego dziedziczenia, lecz oferuje interfejsy oraz domieszki, a metody wirtualne są domyślnie oznaczane w sposób optymalizujący kod.
Metaprogramowanie
Metaprogramowanie w D jest realizowane za pomocą szablonów, funkcji wykonywanych w czasie kompilacji oraz domieszkowania tekstu. D pozwala na dynamiczne generowanie kodu i obliczanie wartości stałych w czasie kompilacji.
Zarządzanie pamięcią
D wykorzystuje garbage collector, ale programista ma pełną kontrolę nad alokacją i zwalnianiem pamięci, w tym możliwość ręcznego zarządzania pamięcią.
Łączenie z innymi językami
D jest binarnie kompatybilny z C, co umożliwia korzystanie z bibliotek C, a częściowa obsługa C++ została wprowadzona w wersji 2.0.
D 2.0
Wersja D 2.0 wprowadza nowe cechy, m.in.:
- obsługę interfejsu binarnego C++
- prawdziwe domknięcia
- funkcje czyste
- operacje wektorowe
- ulepszenia w bibliotece standardowej Phobos
Implementacje i narzędzia
Obecnie rozwijane są cztery główne kompilatory D:
- DMD – oficjalny kompilator
- GDC – front-end dla GCC
- LDC – front-end dla LLVM
- D Compiler for .NET – eksperymentalny port dla .NET
D obsługuje wiele edytorów i IDE, takich jak Eclipse, Visual Studio, Emacs i inne.
Problemy i kontrowersje
W D istnieją dwie biblioteki standardowe: Phobos i Tango, które były niekompatybilne, ale w wersji 2.0 wprowadzono jednolite środowisko uruchomieniowe, co umożliwiło ich współdzielenie.
Przykładowy program
import std.stdio;
int main(char[][] args)
{
foreach(i, a; args)
writefln(„args[%d] = '%s'”, i, a);
return 0;
}