Strona używa cookies (ciasteczek). Dowiedz się więcej o celu ich używania i zmianach ustawień. Korzystając ze strony wyrażasz zgodę na używanie cookies, zgodnie z aktualnymi ustawieniami przeglądarki.    X

Godny następca C i C++, czyli programowanie w D - cz. 1: Czym jest D?

Witam wszystkich czytelników vortalu na moim blogu. W pierwszym wpisie chciałem zaprezentować język programowania D . Jest to język ogólnego przeznaczenia, który - jak sama nazwa wskazuje - ma być następcą C (nie C++!). Obecnie D nie jest szczególnie popularne, lecz - moim zdaniem - zdecydowanie godne uwagi.

Czym jest D?

Jak wiadomo, języki C i C++ są obecnie bardzo szeroko wykorzystywane przez programistów. W językach tych pisanych jest całe mnóstwo ogromnych projektów i gier. Przykładami są choćby Qt, GTK, KDE... Można wymieniać długo. Nie da się jednak ukryć, że języki te mają już swoje lata - pierwsza wersja języka C++ pojawiła się 1979 roku. Od tego czasu sporo się jednak zmieniło. Programy komputerowe stawały się coraz większe i bardziej złożone, rozwinęły się też nowe techniki programowania takie, jak np. programowanie kontraktowe (umożliwiające m. in. sprawdzanie, czy dane przyjmowane i zwracane przez funkcję są poprawne).

Język D został opracowany przez Waltera Brighta - twórcę pierwszego natywnego kompilatora C++. Pierwsza wersja stabilna pojawiła się 2 stycznia 2007 roku. Obecnie D 1.0 koncentruje się wyłącznie na usuwaniu błędów, rozwijana jest natomiast kolejna wersja - D 2.0.

r   e   k   l   a   m   a

W przeciwieństwie do C++, D zachowuje jedynie binarną kompatybilność z językiem C. Oznacza to, że kod napisany w D może być linkowany z bibliotekami C. Jest to bardzo dobre posunięcie, ponieważ umożliwia przeprojektowanie bardzo wielu elementów języka przy możliwości korzystania z ogromnych zasobów bibliotek C i C++. W praktyce dla języka D powstają obudowy bibliotek takich, jak Qt czy GTK, dzięki którym możemy wykorzystywać w pełni potencjał nowego języka.

Co nowego w D?

D było projektowane z zamysłem bardziej praktycznym, niż teoretycznym. Wspomniana wcześniej rezygnacja z pełnej kompatybilności z C umożliwiła wprowadzenie do języka wielu nowoczesnych elementów. Wymienić wszystkie nowości nie sposób, więc streszczę te najważniejsze:
- podział na pakiety i moduły - ich importowanie wygląda podobnie, jak w Javie.
- dużo typów prostych - oprócz tych znanych c C++ mamy do dyspozycji również typy zespolone, urojone. Wprowadzono typ rzeczywisty real o maksymalnej długości obsługiwanej przez platformę lub dwukrotnie większej od double (80 bitów dla platformy x86). Zarezerwowano też słowa kluczowe cent i ucent do przyszłego wykorzystania na 128 bitowe typy całkowite. Typy znakowe są trzy - 1, 2 i 4 bajtowy (char, wchar, dchar).
- brak konieczności uprzedniej deklaracji funkcji - można normalnie wywoływać funkcje, które są zdefiniowane w dalszej części kodu.
- brak konieczności stosowania wskaźników - wskaźniki zostały zachowane wyłącznie dla kompatybilności.
- pętle foreach i foreach_reverse
- tablice dynamiczne i asocjacyjne - tablice dynamiczne umożliwiają zmianę długości, zaś asocjacyjne mogą być indeksowane różnymi typami, np ciągami znaków (np. tablica["pies"] = "dog";)
- interfejsy zamiast wielokrotnego dziedziczenia
- kontrakty i testy jednostkowe - umożliwiają wpisanie dodatkowego kodu, który będzie sprawdzał poprawność działania programu na bieżąco. Do dyspozycji mamy asercje, testy jednostkowe oraz kontrakty wykonujące się przed i po wykonaniu danej funkcji (dzięki czemu możemy sprawdzić poprawność danych wejściowych i wyjściowych). Za pomocą flag kompilatora możemy decydować o wkompilowaniu kontaktów do programu lub nie.
- kompilacja warunkowa - umożliwia określanie warunków, pod którymi w programie znajdą się dane fragmenty kodu. Możemy w jednym kodzie źródłowym określić, które fragmenty mają być zawarte w programie w zależności od platformy, systemu operacyjnego, wersji programu... możliwości są naprawdę duże.
- Garbage collector - automatyczne zarządzanie pamięcią. Nie zrezygnowano z ręcznego zarządzania.
- Wbudowany generator dokumentacji DDoc

Jak widać, nowości jest wiele. Niektóre z nich postaram się przybliżyć w następnej (lub kilku następnych) częściach.

Kompilatory

Obecnie do dyspozycji programistów jest kilka kompilatorów do języka D:
- DMD - oficjalny kompilator Waltera Brighta. Definiuje standardy języka. Objęty jest licencją artystyczną oraz GPL.
- GDC - front-end dla GNU Compiler Collection. Obecnie uznawany za martwy projekt.
- LDC - front-end dla kompilatora LLVM.
- D Compiler for .NET - eksperymentalna implementacja dla platformy .NET.

Odnośniki

Dla wszystkich, którzy chcieliby trochę więcej dowiedzieć się o D, wstawiam parę odnośników:
Oficjalna strona języka D
D na pl.wikibooks.org
Projekty Open-Source pisane w D oraz forum

Ciąg dalszy nastąpi...

Już w najbliższym czasie opublikuję kolejny wpis o D, w którym postaram się pokazać, jak to wygląda w praktyce, jakie korzyści płyną z nowości w D oraz jak zacząć swoją przygodę z tym językiem. Zapraszam do czytania oraz dyskusji na temat języka.

P.S.
05.04.2010 - Mała poprawka. Typy znakowe są oczywiście 1, 2 i 4 BAJTOWE, nie bitowe. 

Komentarze