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 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.
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.
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.
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!
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å!