Programowanie w języku D: Tworzenie programu „HelloWorld” na Linuxie

Linux to system operacyjny, który od dawna przyciąga programistów dzięki swojej elastyczności, wszechstronności i mocnym narzędziom programistycznym. Jednym z mniej znanych, ale bardzo potężnych języków programowania na Linuxie jest język D. D jest językiem programowania, który łączy wydajność języków takich jak C i C++ z nowoczesnymi cechami, które ułatwiają programowanie.

W tym artykule przyjrzymy się, jak napisać i skompilować program „HelloWorld” w języku D na Linuxie, jakie kompilatory są dostępne, jak działa system budowania, jak pobierać biblioteki oraz jaka jest wydajność tego języka.

Czym jest język D?

Język D został zaprojektowany przez Waltera Brighta i Andrieja Aleksandrescu. Jego celem było połączenie wydajności języków niskopoziomowych z łatwością użycia i nowoczesnymi cechami języków wysokopoziomowych. D jest statycznie typowanym, kompilowanym językiem programowania, który oferuje szeroki wachlarz funkcji takich jak:

  • Moduły: Lepsze zarządzanie przestrzenią nazw
  • Wielowątkowość: Łatwiejsze tworzenie programów wielowątkowych
  • Programowanie kontraktowe: Weryfikacja poprawności kodu
  • Szablony: Metaprogramowanie
  • Garbage Collection (GC): Automatyczne zarządzanie pamięcią (z możliwością wyłączenia)

Program „HelloWorld” w języku D

Oto jak wygląda kod programu „HelloWorld” w języku D:

import std.stdio;

void main()
{
    writeln("Hello, World!");
}

Ten prosty program importuje moduł std.stdio, który zawiera funkcję writeln, a następnie wypisuje na ekranie „Hello, World!”.

Kompilatory do języka D

Istnieje kilka kompilatorów, które można wykorzystać do kompilacji kodu w języku D:

  1. DMD (Digital Mars D):
    • Oficjalny kompilator języka D, rozwijany przez głównego autora języka D.
  2. GDC (GNU D Compiler):
    • Kompilator języka D oparty na GCC (GNU Compiler Collection).
  3. LDC (LLVM D Compiler):
    • Kompilator języka D oparty na LLVM, oferujący lepszą optymalizację i wydajność.

Instalacja kompilatora dla języka D

Aby zainstalować DMD na Linuxie, można skorzystać z narzędzia curl:

curl -fsS https://dlang.org/install.sh | bash -s dmd

# alternatywny kompilator - pobranie pod Linux Debian lub Ubuntu
sudo apt install ldc

Kompilacja programu w języku D

Po zainstalowaniu kompilatora, kompilacja programu „HelloWorld” jest bardzo prosta:

dmd hello.d

# kompilacja na alternatywnym kompilatorze - LDC
ldc2 hello.d

Powyższe polecenie tworzy plik wykonywalny hello, który można uruchomić:

./hello

Systemy budowania w języku D

W przypadku większych projektów warto skorzystać z systemu budowania, takiego jak dub. Dub to domyślny menedżer pakietów i system budowania dla języka D.

Aby zainstalować dub, można użyć poniższego polecenia:

sudo apt install dub

W sytuacji, kiedy chcemy stworzyć pakiet w katalogu hello_d, wykonujemy poniższe kroki:

dub init hello_d --type=minimal

# zostaniemy zapytani o kilka rzeczy
Package recipe format (sdl/json) [json]: json
Name [hello_d]: 
Description [A minimal D application.]: 
Author name [bieli]: 
License [proprietary]: 
Copyright string [Copyright © 2025, bieli]: 
Add dependency (leave empty to skip) []: 
Successfully created an empty project in '/home/bieli/tmp/D/hello1/hello_d'.
Package successfully created in hello_d

# w podkatalogu hello_d zobaczymy
$ ls hello_d/
dub.json  source

Po utworzeniu projektu, możemy zbudować go i uruchomić za pomocą:

cd hello_d
dub

Pobieranie bibliotek w języku D

Dub ułatwia również zarządzanie zależnościami. Aby dodać zewnętrzną bibliotekę, wystarczy dodać ją do pliku dub.json. Przykład dodania biblioteki vibe-d:

"dependencies": {
    "vibe-d": "~>0.9.3"
}

Następnie wystarczy uruchomić dub, aby pobrać i zainstalować zależności:

dub

Przykład wystartowania projektu serwisu HTTP w języku programowania D z DUB

Wykonaj poniższe instrukcje tworzenia nowego pakietu projektu w języku D z użyciem dub, po czym w przeglądarce wpisz/skopiuj podany adres i port:

bieli@machine:/tmp/D$ dub init my-vibed-app -t vibe.d

Package recipe format (sdl/json) [json]:
Name [my-vibed-app]:                                                                                                          
Description [A simple vibe.d server application.]:                                                                            
Author name [bieli]:
License [proprietary]:                                                                                                        
Copyright string [Copyright © 2025, bieli]:
Add dependency (leave empty to skip) []:                                                                                      


Successfully created an empty project in '/tmp/D/my-vibed-app'.
Package successfully created in my-vibed-app


bieli@machine:/tmp/D$ cd my-vibed-app/


bieli@machine:/tmp/D/my-vibed-app$ dub



Fetching botan-math 1.0.4 (getting selected version)...       
Fetching vibe-core 1.24.0 (getting selected version)...                                                                       
Fetching memutils 1.0.10 (getting selected version)...                                                                        
Fetching taggedalgebraic 0.11.23 (getting selected version)...                                                                
Fetching vibe-d 0.8.6 (getting selected version)...                                                                           
Fetching stdx-allocator 2.77.5 (getting selected version)...                                                                  Fetching botan 1.12.19 (getting selected version)...                                                                          
Fetching openssl 1.1.6+1.0.1g (getting selected version)...
Fetching diet-ng 1.8.3 (getting selected version)...
Fetching eventcore 0.9.35 (getting selected version)...
Fetching mir-linux-kernel 1.0.1 (getting selected version)...
Fetching libevent 2.0.2+2.0.16 (getting selected version)...
Fetching libasync 0.8.6 (getting selected version)...
Running pre-generate commands for vibe-d:tls...
/bin/sh: 1: rdmd: not found
Performing "debug" build using /usr/bin/ldc2 for x86_64.
taggedalgebraic 0.11.23: building configuration "library"...
eventcore 0.9.35: building configuration "epoll"...

...

vibe-d:utils 0.8.6: building configuration "library"...
vibe-d:data 0.8.6: building configuration "library"...
mir-linux-kernel 1.0.1: building configuration "library"...
vibe-d:crypto 0.8.6: building configuration "library"...
diet-ng 1.8.3: building configuration "library"...
vibe-d:stream 0.8.6: building configuration "library"...

...

Linking...
Running ./my-vibed-app 
[main(----) INF] Listening for requests on http://[::1]:8080/
[main(----) INF] Listening for requests on http://127.0.0.1:8080/
[main(----) INF] Please open http://127.0.0.1:8080/ in your browser.

Wydajność języka D

Język D, dzięki swojej elastyczności i wsparciu dla niskopoziomowych operacji, oferuje wydajność zbliżoną do C i C++. Jednocześnie, jego nowoczesne funkcje i łatwość użycia sprawiają, że jest bardziej produktywny dla programistów. Wydajność kompilatorów takich jak LDC, który opiera się na LLVM, dodatkowo poprawia optymalizację kodu.

Podsumowanie

Język D to nowoczesny język programowania, który łączy wydajność C i C++ z łatwością użycia współczesnych języków. Dzięki kompilatorom takim jak DMD, GDC i LDC, programiści mają wiele opcji do wyboru. System budowania dub ułatwia zarządzanie projektami i zależnościami. Język D oferuje również doskonałą wydajność, co czyni go atrakcyjnym wyborem dla wielu zastosowań.

Jeśli szukasz nowoczesnego i wydajnego języka programowania na Linuxie, warto dać szansę językowi D. Możliwości, jakie oferuje, z pewnością przyciągną zarówno początkujących, jak i doświadczonych programistów.

TUX - maskotka systemu Linux

About the author

Autor "BIELI" to zapalony entuzjasta otwartego oprogramowania, który dzieli się swoją pasją na blogu poznajlinuxa.pl. Jego wpisy są skarbnicą wiedzy na temat Linuxa, programowania oraz najnowszych trendów w świecie technologii. Autor "BIELI" wierzy w siłę społeczności Open Source i zawsze stara się inspirować swoich czytelników do eksplorowania i eksperymentowania z kodem.