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.

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 DD na pl.wikibooks.orgProjekty 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

0 nowych
infoR_96   4 #1 01.04.2010 19:13

Super wpis, pierwszy raz dowiedziałem się o D, czekam na kolejne wpisy :)

trux   10 #2 01.04.2010 20:23

Bardzo ciekawa publikacja.
Do zalet D można zaliczyć wieloplatformowość.
Mógł byś podać jakieś przykłady programów napisanych w D?

  #3 01.04.2010 21:23

Bardzo fajny wpis, ale... Może się czepiam, lecz w tytule piszesz "Godny następca C i C++", a zaraz na początku wpisu "(...) jak sama nazwa wskazuje - ma być następcą C (nie C++!)". Pewna sprzeczność, nie uważasz xD ;)

  #4 01.04.2010 22:52

trux - na razie jest tego stosunkowo niewiele, ponieważ język nie jest zbyt popularny. Ale zapraszam na dsource (linka podałem), tam jest sporo projektów pisanych w D. Dużo z nich to biblioteki, ale i programy, a może nawet i jakieś gry się znajdą.
A i sam już napisałem edytor programistyczny w D i GTK. Posłałem go na pewien konkurs, więc jak ogłoszą wyniki, to pewnie umieszczę go gdzieś w sieci.

programmer_:D - "ma być następcą C (nie C++!)" - w tym zdaniu chciałem podkreślić, że D bazuje na C, a nie na C++. A w tytule chodziło mi o to, że ten język moim zdaniem z powodzeniem może zastąpić kiedyś C i C++. Troszkę źle sformułowałem ;)

A kolejną część napiszę pewnie jutro, więc zapraszam do czytania.

ajz   2 #5 01.04.2010 22:59

Niekoniecznie sprzeczność - "ma być następcą" a "jest (godnym) następcą" to różnica. ;)

Vighter   1 #6 02.04.2010 11:13

Dzięki za wpis o D. Wprawdzie nie jestem specjalnie dobrym programistą, ale od czasu do czasu można sobie pokodzić. W każdym razie wygląda ciekawie, więc może warto wypróbować. :)

ziggurad   11 #7 03.04.2010 22:25

Dzięki, coś nowego, ciekawego :) Czekam na dalsze wpisy ;)

  #8 05.04.2010 12:25

"| 1, 2 i 4 bitowy (char, wchar, dchar). "

chyba chodziło o bajty a nie bity :)

Mi2   4 #9 05.04.2010 20:28

Oczywiście, że o bajty. Dzięki, fgfgght :)

  #10 06.04.2010 14:51

"Godny następca C i C++" -
"jak sama nazwa wskazuje - ma być następcą C (nie C++!)."
oj ktoś tu wprowadza ludzi w błąd. Nieładnie !

Mi2   4 #11 06.04.2010 17:08

@zakłopotany
Patrz parę komentarzy wyżej. Co prawda jest niezalogowany Mitu, ale to ja ;) (na tym forum widnieje nick Mi2, bo dopiero później zacząłem korzystać z pisowni Mitu).

Przytoczę: ""ma być następcą C (nie C++!)" - w tym zdaniu chciałem podkreślić, że D bazuje na C, a nie na C++. A w tytule chodziło mi o to, że ten język moim zdaniem z powodzeniem może zastąpić kiedyś C i C++. Troszkę źle sformułowałem ;)"

  #12 01.05.2010 15:56

Swego czasu czytałem nieco o tym języku i bibliotece Tango ale zawsze jakoś nie było czasu na zgłębienie ich tajemnic ;/ Ostatecznie zostaję przy C#.

  #13 27.10.2010 20:37

Nie kumam. Kompatybilność binarna z C... Czyli, przykładowo, mogę napisać aplikację w D korzystającą z framework-a C++? Albo napisać w D coś co korzysta z Ogre3D?

Druga sprawa: na ile D jest obiektowy, skoro bazuje na C, a nie C++? (tak, przyznaję, nie chce mi się czytać na podanych stronach)

  #14 12.01.2011 20:15

@up z tego co czytałem gwarantowana jest obiektowość znana z C++ tzn.klasy metody dziedziczenie polimorfizm(nie jestem pewien)...

  #15 21.04.2011 13:19

Czy są do tego kompilatory dla mikro kontrolerów

AVR itp... ?

  #16 21.02.2013 12:05

to D już nie jest kompatybilny binarnie z C? bo z początku można było używać API napisanych w C, ale to z C++ nie było kompatybilności binarnej

  #17 10.09.2014 18:55

Problem z D jest taki ze posiada wg mnie duzo bledow jak kiedys probowalem cos napisac to wywalal blad za bledem, dwa rozne jezyki D1 i D2 dwie rozne biblioteki, malo bibliotek malo tutoriali i ogolnie malo popularny.

Mi2   4 #18 27.10.2014 10:31

@gjgjgj (niezalogowany):
Faktycznie, bibliotek i tutoriali nie ma dużo, niestety.
Jeżeli chodzi wersje języka i bibliotek, to D 1.0 jest starą wersją i obecnie należy wykorzystywać wyłącznie D 2.0 i Phobos.