DMD 2.112, referenskompilatorn för D-sprÄket, har slÀppts. Kompilatorkoden distribueras under den kostnadsfria BSL (Boost Software License). De system som stöds Àr Linux, Windows, macOS och FreeBSD.
D-sprÄket Àr statiskt typat, har en syntax som liknar C/C++ och ger prestandan hos kompilerade sprÄk. D-sprÄket lÄnar ocksÄ vissa funktioner frÄn dynamiska sprÄk som Àr anvÀndbara för att förbÀttra utvecklingseffektiviteten och sÀkerstÀlla sÀkerhet. Till exempel finns det stöd för: associativa arrayer, indirekt typdefinition, automatisk minneshantering, parallella programmeringsverktyg, mallar, komponenter för metaprogrammering. Sopsamlare finns som tillval. D-program kan anvÀnda C-bibliotek, sÄvÀl som vissa C++- och Objective-C-bibliotek.
Ăndringar i version 2.112 inkluderar:
- Operationer pÄ den associativa arrayen (hashmappen) implementeras via mallar.
- BitfÀlt ingÄr i sprÄket och det finns inte lÀngre nÄgot behov av att anvÀnda ett separat alternativ "-preview=bitfields".
- Att dingla "else"-satser som anges utan att omsluta blocket med klammerparenteser kommer nu att producera ett fel istÀllet för en varning: int i, j; if (i) if (j) return 1; else // Fel: else dinglar, lÀgg till { } efter villkoret `if (i)` return 2;
- Lade till en ny vÀxel "-extI" för att ange externa importsökvÀgar, vilket liknar importsökvÀgsalternativet (-I), förutom att det anger att modulen som hittas med den finns utanför den körbara filen som för nÀrvarande kompileras. Windows Den anvÀnds nÀr parametern dllimport override Àr instÀlld pÄ nÄgot annat vÀrde Àn "none" för att tvinga import av externa modulsymboler med DllImport.
- Lade till moduler för C-filer. Precis som __import-tillĂ€gget flyttar nyckelordet __module moduldeklarationer frĂ„n D till C. Detta Ă€r sĂ€rskilt anvĂ€ndbart nĂ€r flera C-filer med samma namn behöver importeras (till exempel hello/utils.c och world/utils.c), eftersom bĂ„da filerna mĂ„ste importeras med import utils nĂ€r de anges pĂ„ kommandoraden, vilket leder till konflikter. --hello/utils.c: #if __IMPORTC__ __module hello.utils; #endif int sqr(int x) { return x * x; } --world/utils.c: #if __IMPORTC__ __module world.utils; #endif int max(int ââââa, int b) { return a > b ? a : b; } --app.d: import hello.utils; import world.utils; static assert(sqr(3) == 9); static assert(max(3, 5) == 5);
- Implicit heltalskonvertering i tilldelningen "int op= float" har förÄldrats. Detta Àr för att förhindra potentiella fel dÀr "op="-tilldelningen implicit avkortar höger sida av uttrycket frÄn ett vÀrde som inte Àr noll till noll. uint a; float b = 0.1; a += b; // FörÄldrad: `uint += float` utför avkortningskonvertering
- Flera nya mallimplementeringar har lagts till i körtiden.
- à tgÀrdade buggar relaterade till en odokumenterad Àndring i ABI. macOS 15.4.
- C-makron konverteras nu till mallar nÀr "ImportC" körs: import core.sys.posix.stdlib; import core.sys.posix.unistd; extern(C) int main() { int status, pid = vfork(); if (pid == 0) { // ⊠return 0; } waitpid(pid, &status, 0); if (WIFEXITED(status)) { // ⊠} return 0; }
- Standardbiblioteket implementerar funktionen "lazyCache", som tillhandahÄller en mekanism för att cacha intervall med lazy evaluation. Till skillnad frÄn cache, som omedelbart utvÀrderar intervallelement under intervallkonstruktionen, skjuter lazyCache upp utvÀrderingen tills elementen uttryckligen begÀrs. auto result = iota(-4, 5).map!(a => tuple(a, expensiveComputation(a)))().lazyCache(); // Inga berÀkningar utförs vid denna tidpunkt auto firstElement = result.front; // Första elementet utvÀrderas nu
- FörbÀttrad bakÄtkompatibilitet för getrandom() pÄ Àldre versioner Linux och andra system.
- "std.uni" har uppdaterats för att stödja Unicode 17.
- Lade till stöd för uuid v7 till std.uuid.
- Nytt API för "std.conv", dÀr tre funktioner "writeText", "writeWText" och "writeDText" dök upp.
- Pakethanteraren dub har nu alternativet "-dest" och tangenten "frameworks". âTidigare: lflags "-framework" "Cocoa" âNu: frameworks "Cocoa" "OpenGL"
Dessutom Àr det vÀrt att notera utvecklingen av ett antal intressanta projekt i D-sprÄket:
- Spelutveckling (GameDev) har fÄtt följande uppdateringar: dvn, en visuell romanmotor, har lagt till anvÀndningsexempel. Stöd för experimentell webbexport har lagts till i Godot-motorporten. The Art of Reflection, utvecklad med D- och DirectX-teknik i en anpassad motor, har slÀppts pÄ Steam.
- Inom webbutveckling utvecklas den lÀtta fotonfiberschemalÀggaren. Den visade höga resultat i TechEmpowers prestandatest och nÄdde topp 10 i flera benchmarks (Plaintest, JSON). Denna motor har integrerats i det populÀra webbramverket Vibe.D, vilket resulterar i prestandaförbÀttringar utan att Àndra webbapplikationskoden.
- Efter tillkÀnnagivandet av den nya garbage collector-utvecklingen pÄ Dconf-konferensen (video 1, video 2) har denna uppdatering inkluderats i den nya utgÄvan. Den nya GC kan ocksÄ installeras som ett separat paket. För nÀrvarande stöds x86_64-arkitekturen för operativsystemet. Linux О WindowsArbetet med stödet fortsÀtter. macOS och andra arkitekturer.
KĂ€lla: opennet.ru
