D-sprÄkkompilatorversion 2.112

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

Köp pĂ„litlig hosting för webbplatser med DDoS-skydd, VPS VDS-servrar đŸ”„ Köp pĂ„litlig webbhotell med DDoS-skydd, VPS VDS-servrar | ProHoster