Dziś jest piątek, 5 grudnia 2008 roku (z kalendarza...)

Poznaj D

Języki C i C++ oddały do tej pory wielkie zasługi dla rozwoju informatyki. Jądro Linuksa, tysiące aplikacji zostały napisane głównie w jednym z nich. Jednak kto wie, czy epoka C/C++ nie dobiega już powoli końca. Oczywiste jest, że mają one poważne wady. C brakuje szeregu możliwości, które zwiększają niezawodność tworzonego programu. Nie ma w nim programowania obiektowego, a biblioteki standardowe są trudne w użyciu. Z kolei z C++ poprzez konieczność zachowania wstecznej kompatybilności, powstał skomplikowany, pełen wyjątków język, znacznie utrudniający stworzenie poprawnego kompilatora. Jednak 2 stycznia 2007 roku, po ponad ośmiu latach pracy, ukazała się stabilna wersja 1.0 specyfikacji języka D...

O D czytałem już jakiś czas temu na Wikipedii, ale wtedy znajdował się on w fazie rozwoju i szybko o nim zapomniałem. Dopiero parę dni temu, po zajrzeniu tam ponownie, mój wzrok przyciągnął numerek wersji oraz data premiery ulokowana w przeszłości i bardzo szybko do prywatnej wishlisty dopisałem "nauczyć się języka D". Postaram się teraz pokrótce opisać ten projekt.

D narodził się w 1999 roku w umyśle programisty Waltera Brighta, twórcy kompilatorów z firmy Digital Mars. Początkowym zamysłem było przeprojektowanie C++, by pozbyć się jego wad. Choć głównym źródłem inspiracji dla D był właśnie ten język, nie jest to jego wariant. Wiele możliwości C++ zostało przeprojektowanych na nowo, a wpływ na jego kształt wywarły również takie języki, jak Java, C# i Eiffel. Przez długi czas język pozostawał w wersji rozwojowej, co utrudniało jego wykorzystanie do celów produkcyjnych - stosunkowo często pojawiały się drastyczne zmiany powodujące utratę kompatybilności. Jednak równolegle do specyfikacji powstawał wzorcowy kompilator, DMD (Digital Mars D Compiler), a także port dla gcc. Specyfikacja, jak już podałem, została zamrożona 2 stycznia i można uznać, że nowy język nadaje się już do celów produkcyjnych. Poniżej przedstawiam przykładowy kod źródłowy zaczerpnięty z Wikipedii:

import std.stdio;       // writefln()
int main()
{
    // tablica haszująca, indeksowana tablicami char[], zawierająca tablice tablic char[]
    char[][] [char[]] kontener;
 
    // Dodanie elementow
    kontener["Ania"] ~= "szalik";
    kontener["Daniel"] ~= "bilety";
    kontener["Ania"] ~= "czapka";
 
    // Iteracja po wszystkich osobach
    foreach (char[] osoba, char[][] przedmioty; kontener)
        wyswietl_ilosc(osoba, przedmioty);
 
    return 0;
}
 
void wyswietl_ilosc(char[] osoba, char[][] przedmioty)
{
    writefln(osoba, " ma ", przedmioty.length, " przedmiotów.");
}

D jest językiem kompilowanym do kodu maszynowego, a nie wykonywanym przez interpreter, jak Java. Umożliwia także pisanie niskopoziomowe (wstawki assemblerowe), dlatego nadaje się zarówno do tworzenia rozbudowanych projektów, jak i fragmentów, gdzie sprawa wydajności jest krytyczna. Oto inne jego cechy:

  1. Domyślnie obsługiwane paradygmaty programowania: imperatywne, obiektowe, kontraktowe.
  2. Automatyczne zarządzanie pamięcią za pomocą odśmiercacza. Oprócz tego, można też ręcznie przydzielać i zwalniać pamięć, jeśli zajdzie taka potrzeba. Wskaźniki jako takie domyślnie są ukryte przed programistą, ale również w razie potrzeby można ich użyć.
  3. Prawdziwe moduły - koniec z #include <costam> :).
  4. Nowe typy danych - D natywnie obsługuje ciągi tekstowe, 8- i 16-bajtowe liczby, liczby urojone i zespolone.
  5. Wbudowane struktury danych - w D wiele struktur danych jest wbudowanych w sam język, np. tablice haszujące.
  6. Poprawiony model obiektowy - m.in. nie ma wielokrotnego dziedziczenia, są interfejsy.
  7. Binarna kompatybilność z bibliotekami C, tzn. program można linkować z bibliotekami stworzonymi dla języka C bez żadnych poprawek, dzięki czemu nie trzeba tworzyć portów setek projektów.
  8. Wsparcie dla Unicode.
  9. Obecność prostych struktur danych, przydatnych przy pisaniu niskopoziomowym.
  10. Wbudowany w język system dokumentacji.
  11. Wsparcie dla mechanizmów zarządzania projektem - generowanie różnych wersji programu z tego samego kodu, oznaczanie niektórych partii jako "przestarzałe".

I jeszcze kilka innych, o których jeszcze nie doczytałem. Walter Bright pomyślał też o twórcach programów narzędziowych dla D. Jako specjalista od kompilatorów, najlepiej wiedział, jak trudne jest maniuplowanie kodem C++:

It is spectacularly difficult to parse C++ 100% correctly. To do so really requires a full C++ compiler. Third party tools tend to parse only a subset of C++ correctly, so their use will constrain the source code to that subset. (...) D's lexical analyzer and parser are totally independent of each other and of the semantic analyzer. This means it is easy to write simple tools to manipulate D source perfectly without having to build a full compiler. It also means that source code can be transmitted in tokenized form for specialized applications. - Jest niesamowicie trudno przeparsować kod C++ w 100% poprawnie. Zadanie to naprawdę wymaga kompletnego kompilatora. Dodatkowe programy narzędziowe zazwyczaj przetwarzają poprawnie tylko wycinek składni, zatem ich użycie jest ograniczone tylko do kodu korzystającego z niego. (...) Analizator leksykalny i parser języka D są zupełnie niezależne od siebie nawzajem oraz od analizatora semantycznego. Oznacza to, że jest łatwo napisać proste programy do manipulowania kodem D bez konieczności tworzenia pełnego kompilatora. Oznacza to także, że kod źródłowy może być transmitowany do zewnętrznych, specjalistycznych aplikacji, wstępnie przetworzony, w formie stokenizowanej.

Języka programowania najlepiej uczyć się w praktyce. Już mam na oku parę aplikacji, przy których można wykorzystać język D i osobiście przekonać się o jego możliwościach.

Powrót

Komentarze

Napisał Paweł `hwao` Hal w wtorek, 19 czerwca 2007 o 08:40

Po tak zachęcającym tekście od Zyx jakoś sama nabrałem ochoty na poskrobanie w nim. :)

Trzeba będzie się koniecznie przyjrzeć w "praktyce"

Napisał Wielkie G w środę, 20 czerwca 2007 o 22:29

Mi jakoś D nie przypadł do gustu, wolę babrać się w C++ :) Dobrze, że można wyłączyć odśmiecacz, być może z tego powodu spróbuję coś w tym porobić.
Lepiej niech ktoś przepisze PHP z pod-języka C na nad-język C++, a nie jakieś nowe języki się marzą :P

Napisał Zyx w piątek, 22 czerwca 2007 o 08:48

A mnie właśnie niektóre idiotyzmy z C++ czasem do szewskiej pasji doprowadzają. Nawet nie wiesz, ile się z głupim STL-em omęczyłem, by często zmusić go do zrobienia prostej rzeczy bez zaśmiecenia konsoli tysiąclinijkowym komunikatem o błędzie. Bardzo dobrze, że ktoś to wreszcie spróbował sensownie uporządkować. Nie mogę się doczekać, kiedy sprawdzę wszystko osobiście.

Strona 1 z 1 :: 1

Skomentuj

NickInformacja
E-mailTylko do użytku wewnętrznego.
WWWNie zapomnij o http://
LayoutNapisz tu, czy widzisz dzienny czy nocny layout.
WpisFormatowanie wiki
Internauto, pamiętaj! Wolność to nie samowola - dbaj o kulturę wypowiedzi oraz dyskusji w sieci.

Na Zyxist.com panuje swoboda wyrażania opinii oraz krytyki pod dowolnym adresem. Jedyny warunek: musi być ona kulturalna i rzeczowa. Na chamstwo, prostactwo lub jawne obrażanie kogokolwiek nie ma tu miejsca i takie komentarze są bardzo szybko usuwane. Jeśli zamierzasz polemizować z treścią wpisu, wpierw uważnie ją przeczytaj.

© Tomasz "Zyx" Jędrzejewski 2005 - 2008 | Wykonanych zapytań: 2 | Serwer wirtualny zapewnia