Programmeringsspråket D


onsdag 21. desember 2011 Julekalender Polyglot D

Dagens programmeringsspråk heter rett og slett D. Og det er jo et greit navn på et språk som blant annet kan erstatte C. Egentlig er det vel mest sammenlignbart med C++, men D har også latt seg påvirke av språk som Java og C#, og dynamiske språk som Python og Ruby.

D forsøker å kombinere ytelsen til C++, sikkerheten og minnehåndteringen i de mest moderne, kompilerte språkene, og de dynamiske språkenes evne til å la utvikleren uttrykke seg så enkelt og effektivt som mulig.

d

Effektivitet, enkelhet og kraft

D kompileres til effektiv maskinkode. Ideomatisk D-kode er både rask og sikker. Men utvikleren har mulighet til å "sku av" typesikkerhet, og bruke pekere, direkte tilgang til C-funksjoner, og til og med inline assembly, om han ønsker det.

D lar deg skrive ganske mye kode uten unødvendige typedeklarasjoner – kompilatoren finner ut av det. Språket har også god og fleksibel, automatisk minnehåndtering.

Dessuten støtter språket "de fleste" programmeringsparadigmene, og har god samtidighets-støtte. Noen stikkord som bør være kjente for dem som leser denne bloggen er immutable state og message passing. D tillater ikke deling av state på tvers av tråder "by default", men tilbyr kontrollert deling av data som kan endres (mutable state) når det er påkrevd. Her skiller altså D seg kraftig ut fra de fleste andre, imperative språkene.

Hvem D er laget for

D er laget for utviklere som ikke trives med objektorienteringen i C++ fordi den er for kompleks. D er laget for utviklere som liker kraften i C++, men som er frustrerte over å måtte bruke det meste av tiden sin på eksplisitt minnehåndtering og på å lete etter pointer-bugs.

D er også laget for utviklere som programmerer én del av løsningene sine i skripspråk som Python eller Ruby, og en annen del i C++. D kombinerer mange av styrkene fra begge sider, og gjør at du kan holde deg i ett språk.

Og sist men ikke minst: D er et praktisk språk. Det er laget for å få jobben gjort.

Litt kode

Syntaksen i D ser stort sett ut som C/C++. Løsningen av euler-oppgave nummer 1 inneholder derfor ingen overraskelser:

10 import std.stdio;
11 
12 bool includeNumber(int x)
13 {
14   return x % 3 == 0 || x % 5 == 0;
15 }
16 
17 void main()
18 {
19   int sum = 0;
20   for (int i = 0; i < 1000; i++)
21     if(includeNumber(i))
22       sum += i;
23   writeln(sum);
24 }

Vil du se mer D-kode er jeg redd du må ta turen til d-programming-language.org.

Noen flere detaljer

Merk at D ikke er bakoverkompatibelt med C. D har heller ingen preprosessor, og støtter ikke multippel arv. D støtter derimot templates, men disse skal være enklere å bruke enn varianten man finner i C++ (jeg kan ikke nok C++ til å uttale meg om dette selv).

D støtter også kodekontrakter / Design By Contract, som beskrevet i artikkelen om språket Cobra. Og det har innebygde muligheter for enhetstester.

En liten detalj med D som jeg virkelig setter pris på er at alle metoder er virtuelle. Jeg har alltid sagt at C# burde ha virtuelle metoder by default, men D har tatt det enda lengre. Torbjørn liker dette!

Konklusjon

Av og til kan det virke som om C og C++ har et absolutt monopol på visse områder. Da er det interessant når det kommer et språk som forsøker å erstatte og overgå dem. Selv om utbredelsen foreløpig er begrenset har jeg stor tro på D.

Ta turen innom www.d-programming-language.org – en behagelig side med mye informasjon – og bli inspirert du også!


comments powered by Disqus