Kompilátor jazyka D verze 2.112

Byl vydán DMD 2.112, referenční kompilátor pro jazyk D. Kód kompilátoru je distribuován pod bezplatnou licencí BSL (Boost Software License). Podporované systémy jsou Linux, Windows, macOS a FreeBSD.

Jazyk D je staticky typovaný, má syntaxi podobnou jazyku C/C++ a poskytuje výkon kompilovaných jazyků. Jazyk D si také vypůjčuje některé funkce z dynamických jazyků, které jsou užitečné pro zlepšení efektivity vývoje a zajištění bezpečnosti. Například existuje podpora pro: asociativní pole, nepřímou definici typů, automatickou správu paměti, nástroje pro paralelní programování, šablony, komponenty pro metaprogramování. Sběrač odpadu je volitelně k dispozici. Programy v jazyce D mohou používat knihovny jazyka C, stejně jako některé knihovny jazyka C++ a Objective-C.

Změny ve verzi 2.112 zahrnují:

  • Operace na asociativním poli (hashmap) jsou implementovány pomocí šablon.
  • Bitová pole jsou součástí jazyka a již není nutné používat samostatnou volbu „-preview=bitfields“.
  • Příkazy „else“ zadané bez uzavření bloku do složených závorek nyní místo varování vyvolají chybu: int i, j; if (i) if (j) return 1; else // Chyba: else je zablokované, přidejte { } za podmínku `if (i)` return 2;
  • Přidán nový přepínač „-extI“ pro určení externích cest importu, který je podobný volbě cesty importu (-I), až na to, že určuje, že nalezený modul se nachází mimo aktuálně kompilovaný spustitelný soubor. Windows Používá se, když je možnost přepsání dllimportu nastavena na jinou hodnotu než „none“, aby se vynutil import symbolů externích modulů pomocí DllImport.
  • Přidány moduly pro soubory C. Stejně jako rozšíření __import, klíčové slovo __module přesouvá deklarace modulů z D do C. To je obzvláště užitečné, když je třeba importovat více souborů C se stejným názvem (například hello/utils.c a world/utils.c), protože oba soubory musí být importovány s import utils, pokud jsou zadány na příkazovém řádku, což vede ke konfliktům. --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);
  • Implicitní celočíselná konverze v přiřazení "int op= float" byla zastaralá. Důvodem je zabránění potenciálním chybám, kdy přiřazení "op=" implicitně zkrátí pravou stranu výrazu z nenulové hodnoty na nulu. uint a; float b = 0.1; a += b; // Zastaralé: `uint += float` provádí zkrácenou konverzi
  • Do běhového prostředí bylo přidáno několik nových implementací šablon.
  • Opraveny chyby související s nezdokumentovanou změnou v ABI. macOS 15.4.
  • Makra v jazyce C se nyní při spuštění příkazu "ImportC" převádějí na šablony: 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; }
  • Standardní knihovna implementuje funkci „lazyCache“, která poskytuje mechanismus pro ukládání rozsahů do mezipaměti s líným vyhodnocováním. Na rozdíl od cache, která okamžitě vyhodnocuje prvky rozsahu během konstrukce rozsahu, lazyCache odkládá vyhodnocení, dokud nejsou prvky explicitně vyžádány. auto result = iota(-4, 5).map!(a => tuple(a, expensiveComputation(a))).lazyCache(); // V tomto bodě nebyly provedeny žádné výpočty auto firstElement = result.front; // Nyní je vyhodnocen první prvek
  • Vylepšená zpětná kompatibilita getrandom() na starších verzích Linux a další systémy.
  • Soubor „std.uni“ byl aktualizován a nyní podporuje Unicode 17.
  • Přidána podpora pro uuid v7 do std.uuid.
  • Nové API pro "std.conv", kde se objevily tři funkce "writeText", "writeWText" a "writeDText".
  • Správce balíčků dub má nyní volbu „-dest“ a klíč „frameworks“. —Dříve: lflags „-framework“ „Cocoa“ —Nyní: frameworks „Cocoa“ „OpenGL“

Dále stojí za zmínku vývoj řady zajímavých projektů v jazyce D:

  • Herní vývojář (GameDev) se dočkal následujících aktualizací: dvn, engine pro vizuální novely, přidal příklady použití. Do portu enginu Godot byla přidána experimentální podpora pro webový export. Na Steamu byla vydána hra The Art of Reflection, vyvinutá s využitím technologií D a DirectX ve vlastním enginu.
  • V oblasti webového vývoje se vyvíjí lehký plánovač Photon Fiber. Ten vykázal vysoké výsledky v testu výkonu TechEmpower a v několika benchmarkech (Plaintest, JSON) se dostal do první desítky. Tento engine byl integrován do populárního webového frameworku Vibe.D, což vedlo k nárůstu výkonu bez změny kódu webové aplikace.
  • Po oznámení vývoje nového garbage collectoru na konferenci Dconf (video 1, video 2) byla tato aktualizace zahrnuta do nové verze. Nový garbage collector lze také nainstalovat jako samostatný balíček. V současné době je pro OS podporována architektura x86_64. Linux и WindowsPráce na podpoře pokračuje. macOS a další architektury.

Zdroj: opennet.ru

Kupte si spolehlivý hosting pro stránky s DDoS ochranou, VPS VDS servery 🔥 Kupte si spolehlivý webhosting s ochranou DDoS, VPS VDS servery | ProHoster