D (programmeringsspråk)

Programmeringsspråket D är ett objektorienterat, tvingande systemprogramspråk med flera paradigmiska modeller. D-språket uppstod som en omarbetning av C++, och D:s designmål är att kombinera prestanda hos kompilerade språk med säkerhet och uttrycksförmåga hos moderna dynamiska språk. Nativ D-kod är vanligtvis lika snabb som motsvarande C++-kod, samtidigt som den är kortare och minnessäker.

 

Exempel

Exempel 1

Detta exempelprogram skriver ut sina kommandoradsargument. Funktionen main är ingångspunkten för ett D-program och args är en array av strängar som representerar kommandoradsargumenten. En sträng i D är en matris av tecken som representeras av char[] i D1 eller immutable(char)[] i D2.

import std. stdio: writefln; void main(string[] args) { foreach (i, arg; args) writefln("args[%d] = '%s'", i, arg); }

Foreach-angivelsen kan iterera över vilken samling som helst. I det här fallet producerar det en sekvens av index (i) och värden (arg) från arrayen args. Indexet i och värdet arg har sina typer härledda från typen av arrayen args.

Exempel 2

Nedan visas flera av D:s möjligheter och avvägningar i fråga om D-utformning i ett mycket kort program. Det går igenom raderna i en textfil med namnet words.txt som innehåller ett annat ord på varje rad och skriver ut alla ord som är anagram till andra ord.

import std. stdio, std. algorithm, std. range, std. string; void main() { dstring[][dstring] signs2words; foreach(dchar[] w; lines(File("words.txt"))))     { w = w. chomp(). toLower(); immutable key = w. dup. sort(). release(). idup; signs2words[key] ~= w. idup; } foreach(words; signs2words) if(words. length > 1) writefln(words. join(" ")); }
  1. signs2words är en inbyggd associativ matris som mappar dstring-nycklar (32-bitars/char) till matriser av dstrings. Den liknar defaultdict(list) i Python.
  2. lines(File()) ger rader på ett lamt sätt, med en ny rad. Den måste sedan kopieras med idup för att få fram en sträng som kan användas för de associativa arrayvärdena (idup-egenskapen för arrays returnerar en oföränderlig kopia av arrayen, vilket krävs eftersom dstring-typen faktiskt är oföränderlig(dchar)[]). Inbyggda associativa matriser kräver oföränderliga nycklar.
  3. Operatören ~= lägger till en ny dstring till värdena i den associerade dynamiska matrisen.
  4. toLower, join och chomp är strängfunktioner som D tillåter att man använder med en metodsyntax. Namnet på sådana funktioner är ofta mycket likt Pythons strängmetoder. ToLower omvandlar en sträng till små bokstäver, join(" ") sammanfogar en array av strängar till en enda sträng med ett enda mellanslag som separator och chomp tar bort en newline från strängens slut om en sådan finns.
  5. Sorteringen är en std.algorithm-funktion som sorterar matrisen på plats och skapar en unik signatur för ord som är anagram av varandra. Metoden release() på returvärdet av sort() är praktisk för att hålla koden som ett enda uttryck.
  6. Den andra foreach-analysen itererar på värdena i den associativa matrisen, vilket gör att den kan härleda ordtypen.
  7. nyckel tilldelas en oföränderlig variabel, och dess typ härleds.
  8. UTF-32 dchar[] används istället för normalt UTF-8 char[], annars vägrar sort() att sortera det. Det finns effektivare sätt att skriva det här programmet som bara använder UTF-8.
 

AlegsaOnline.com - 2020 / 2023 - License CC3