O języku D

edytuj

Język D jest nowoczesnym językiem programowania, skupiającym się na praktycznych problemach które spotykają programiści w codziennej pracy.

Jest to język wieloparadygmatowy, tzn. umożliwia mieszanie kilku różnych stylów i filozofii pisania programów w jednym kodzie. Są to paradygmaty pisania imperatywnie (podając instrukcje które mają być wykonane krok po kroku), obiektowo (pozwalając na tworzenie programów z mniejszych niezależnych modułów) oraz generycznie (metaprogramowanie, czyli tworzenie pewnego schematu, który można wykorzystywać przy różnych okazjach). Język posiada również pewne cechy języka funkcyjnego.

Korzenie

edytuj

Jest on odpowiedzią na języki C i C++. Wielu programistów jest przyzwyczajonych do języków imperatywnych i kompilowanych do natywnego kodu, na przykład C, który jest szybki, efektywny oraz pozwala programiście na kontrole działania programów w każdym szczególe, jednak często te osoby są niezadowolone z problemów jakie pojawiają się przy pisaniu dużych programów w C. Wyjściem z tego miały być techniki obiektowe i język C++. Według wielu nie udało się zrealizować zamierzonych celów. Zamiast języka prostego powstał język olbrzymi, pełen reguł, wyjątków i z nie do końca przejrzystą składnią. Jest to język tak skomplikowany iż implementacja poprawnego kompilatora jest bardzo trudna. Dlatego powstał D.

D jest próbą dotarcia do zamierzonych celów w najprostszy możliwy sposób. Jest to możliwe ponieważ D nie jest obarczony historią bycia zgodnym z C czy C++. Oczywiście do pewnego stopnia języki te są bardzo podobne, aby nie powodować zamieszania.

Początki

edytuj

Pracę nad językiem D rozpoczął około roku 2000 programista Walter Bright, pracujący w firmie Digital Mars, zajmującej się tworzeniem kompilatorów. Walter Brigth jest autorem kilku kompilatorów (w tym C++), co świadczy dobrze o języku, ponieważ od początkowych założeń, język rozwija się wraz z implementacją wzorcową (kompilator Digital Mars D), co umożliwia przetestowanie pomysłów szybko w praktyce.

Rozwój i idee

edytuj

A pomysłów na usprawnienie języka w ciągu ostatnich 5 lat było bardzo dużo, w szczególności pomysły czerpano między innymi z takich języków jak C, C++, Java, C#, Eiffel, Python, lecz wiele pomysłów jest oryginalnych i niespotykanych w innych językach. D zawdzięcza to rosnącej rzeszy ochotników skupionej wokół tego języka, zwykle wymieniającej się uwagami i dyskutując z innymi programistami oraz autorem kompilatora na grupach dyskusyjnych.

Ideą przyświecającą przy tworzeniu tego języka była chęć posiadania w języku konstrukcji które wielu programistów i tak będzie używać, lecz będzie do tego używać zewnętrznych bibliotek. Posiadanie ich wbudowanych w język w znaczący sposób ułatwia ich używanie, a wielokrotnie pozwala na generowanie bardziej zoptymalizowanego kodu. Przykładem niech będą tutaj wbudowane w język tablice haszujące (w C++ są one w bibliotece STL) oraz tablice dynamiczne, zmienne zespolone, dobra obsługa przetwarzania tekstów i iteracja po "kontenerach", oraz automatyczne zarządzanie pamięcią przy pomocy garbage collectora. Innymi konstrukcjami zintegrowanymi z językiem, spotykanymi w innych językach jako oddzielne biblioteki i narzędzia, są automatyczne generowanie dokumentacji, kontrakty oraz testy jednostkowe. To znacząco ułatwia ich użycie oraz pozwala pisać szybciej lepsze programy, które łatwo potem modyfikować.

Co pozostawiono

edytuj

Z języka C pozostawiono możliwość pisania niskopoziomowego, na przykład istnieje możliwość pisania bezpośrednio w kodzie asemblera umożliwiającego interakcję ze sprzętem czy pisanie systemów operacyjnych i sterowników, albo wydajnościowo krytycznych aplikacji (na przykład kompresja obrazów, czy sterowanie urządzeniami). Istnieje również możliwość wyłączenia mechanizmów automatycznego zarządzania pamięcią przerzucając te obowiązki na programistę (tak jak w C).

Pozostawiono również możliwość interakcji z funkcjami z języków C czy Fortran, ponieważ istnieje bardzo dużo sprawdzonych bibliotek w tych językach. Zrezygnowano z kompatybilności binarnej z językiem C++ ponieważ nie udało się pogodzić sprzecznych założeń i odmiennych sposobów ich rozwiązania.

Znana z C obsługa wskaźników została ukryta przed programistą, lecz są nadal dostępne. Przy pisaniu większości programów nie ma potrzeby ich bezpośredniego używania - ich funkcję przejęły referencje, oraz argumenty inout.

Nowe cechy

edytuj

Kolejna cecha którą posiada D to możliwość łatwego gromadzenia funkcji w moduły o hierarchicznej strukturze, oraz swoboda miejsca w którym piszemy definiujemy funkcje i struktury - można na przykład definiować funkcje w funkcjach, albo klasy w funkcjach.

W toku swojej ewolucji język uzyskał wiele nowych cech, takich jak rozbudowany system szablonów, leniwa ewaluacja. Planowane jest dodanie iteratorów oraz lepszej obsługi tablic wielowymiarowych.

Przyszłość

edytuj

Obecnie powstaje eksperymentalna wersja języka D o numerze 2. W wersji tej powstaje gruntownie zmieniony system typów (szczególnie obsługa const/final/invariant), system makr (jak w Lispie) do metaprogramowania. Zapewne również wiele dodakowych pomysłów znajdzie tam miejsce. Niniejszy podręcznik opisuje język w wersji 1. W dodatku opisano dla zainteresowanych główne idee i obecny status wersji 2.

Czy się udało osiągnąć cele?

edytuj

Według wielu tak. Otrzymano język przejrzysty, w którym proste rzeczy są proste, a skomplikowane przynajmniej wykonywalne. Autorzy niniejszego podręcznika uważają, iż warty jest on nauki nawet jako pierwszy język programowania, a jego popularność będzie wzrastać w wielu różnych zastosowaniach.

Nasz podręcznik w systematyczny i prosty sposób przedstawi wszystkie przedstawione powyżej aspekty języka.

Podręcznik ten nie ma być walką z innymi językami programowania takimi jak C++ czy Java, lecz rzetelnym przedstawieniem możliwości D.

Mamy nadzieje, że język D Ci się spodoba oraz przyda do praktycznego rozwiązywania problemów.

Społeczność

edytuj

Ważnym elementem w rozwoju języka D odgrywa społeczność entuzjastów, złożona głównie z doświadczonych programistów, ale nie brak również teoretyków, czy ludzi szukających nowatorskich rozwiązań.

Główna dyskusja nad językiem toczy się na grupie dyskusyjnej digitalmars.D na serwerze news.digitalmars.com

Pomocy można również znaleźć na kanałach IRC: #d oraz #d.pl na serwerze irc.freenode.net