ĂshtĂ« publikuar versioni DMD 2.112, kompileri referencĂ« pĂ«r gjuhĂ«n D. Kodi i kompilerit shpĂ«rndahet nĂ«n licencĂ«n e lirĂ« BSL (Boost Software License). Sistemet e mbĂ«shtetura janĂ« Linux, Windows, macOS dhe FreeBSD.
Gjuha D përdor tipizimin statik, ka një sintaksë të ngjashme me C/C++, dhe ofron performancën e gjuhëve të kompiluara. Gjuha D gjithashtu huazon disa funksionalitete nga gjuhët dinamike, të dobishme për rritjen e efikasitetit të zhvillimit dhe sigurisë. Për shembull, mbështetje për: tabela asociative, përcaktimin e tipave indirect, menaxhimin automatik të memories, mjete për programim paralel, shabllone, komponente për metaprogramim. Blerësi i plehrave është i disponueshëm në mënyrë opsionale. Në programet e shkrimeve në gjuhën D, mund të përdoren librari të gjuhës C, si dhe disa librari në C++ dhe Objective-C.
Ndryshimet në versionin 2.112 përfshijnë:
- Operacione mbi Array të Asocojuara (hashmap) janë realizuar nëpërmjet shablloneve.
- Fushat bitore janĂ« pĂ«rfshirĂ« nĂ« gjuhĂ« dhe tani nuk Ă«shtĂ« nevoja tĂ« pĂ«rdoret veçanĂ«risht â-preview=bitfieldsâ.
- OperatorĂ«t âelseâ tĂ« varur, tĂ« caktuar pa shenjat e bllokut me kllapa, tani do tĂ« japin njĂ« gabim nĂ« vend tĂ« njĂ« paralajmĂ«rimi: int i, j; if (i) if (j) return 1; else // Gabim: else Ă«shtĂ« varur, shtoni { } pas kushtit `if (i)` return 2;
- NjĂ« çelĂ«s i ri â-extIâ u shtua pĂ«r tĂ« caktuar rrugĂ«t e jashtme tĂ« importit, i cili Ă«shtĂ« analog me parametrin e rrugĂ«s sĂ« importit (-I), me pĂ«rjashtimin qĂ« tregon se moduli i gjetur me tĂ« Ă«shtĂ« jashtĂ« skedarit ekzekutiv qĂ« po kompilohet aktualisht. NĂ« Windows, ai pĂ«rdoret kur parametri i rimbushjes dllimport Ă«shtĂ« caktuar nĂ« çdo vlerĂ« pĂ«rveç ânoneâ, pĂ«r tĂ« importuar detyrueshĂ«m simbolet e modulit tĂ« jashtĂ«m pĂ«rmes DllImport.
- JanĂ« shtuar modulet pĂ«r skedarĂ«t C. NgjashĂ«m me zgjerimin â__importâ, fjala kyçe â__moduleâ transferon shpalljen e moduleve nga gjuha D nĂ« gjuhĂ«n C. Kjo Ă«shtĂ« veçanĂ«risht e dobishme kur duhet tĂ« importohen disa skedarĂ« C me tĂ« njĂ«jtin emĂ«r (p.sh., hello/utils.c dhe world/utils.c), pasi tĂ« dy skedarĂ«t duhet tĂ« importohen me import utils, kur ato janĂ« tĂ« shĂ«nuara nĂ« linjĂ«n e komandĂ«s, gjĂ« qĂ« çon nĂ« konflikte. â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);
- Kthimi i paqartĂ« i numrave tĂ« plotĂ« nĂ« caktimin e vlerave tĂ« tipit âint op= floatâ u shpall i vjetruar. Kjo u bĂ« pĂ«r tĂ« parandaluar gabimet e mundshme, kur caktimi âop=â prerĂ« nĂ« mĂ«nyrĂ« tĂ« paqartĂ« anĂ«n e djathtĂ« tĂ« shprehjes nga njĂ« vlerĂ« e ndryshme nĂ« zero. uint a; float b = 0.1; a += b; // VjetĂ«rsim: `uint += float` po bĂ«n transformim pĂ«r prerje.
- Në runtime janë shtuar disa realizime të reja të shablloneve.
- Janë rregulluar gabimet që lidhen me ndryshimin e pa dokumentuar në ABI macOS 15.4.
- Makrositet C tani konvertohen nĂ« shabllone kur punojnĂ« âImportCâ: 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; }
- NĂ« bibliotekĂ«n standarde u implementua funksioni âlazyCacheâ, i cili ofron njĂ« mekanizĂ«m caching pĂ«r intervale me vlerĂ«sim tĂ« shtyrĂ«. Ndryshe nga cache, i cili vlerĂ«son menjĂ«herĂ« elementet e intervalit gjatĂ« krijimit, lazyCache e shtyn vlerĂ«simin derisa elementet tĂ« kĂ«rkohen qartĂ«. auto result = iota(-4, 5).map!(a => tuple(a, expensiveComputation(a)))().lazyCache(); // AsnjĂ« llogaritje e kryer nĂ« kĂ«tĂ« pikĂ« auto firstElement = result.front; // Elementi i parĂ« tani vlerĂ«sohet
- PĂ«rmirĂ«simi i pĂ«rputhshmĂ«risĂ« prapa âgetrandom()â nĂ« versionet e vjetra tĂ« Linux dhe sistemeve tĂ« tjera.
- âstd.uniâ u pĂ«rditĂ«sua pĂ«r tĂ« mbĂ«shtetur Unicode 17.
- NĂ« âstd.uuidâ u shtua mbĂ«shtetje pĂ«r uuid v7.
- NjĂ« API i ri pĂ«r âstd.convâ, ku u shfaqĂ«n tre funksione âwriteTextâ, âwriteWTextâ dhe âwriteDTextâ.
- NĂ« menaxherin e paketave dub u shtua opsioni â-dest dhe çelĂ«si frameworks. âIshte: lflags â-frameworkâ âCocoaâ âTani Ă«shtĂ« e mundur: frameworks âCocoaâ âOpenGLâ
Gjithashtu mund të theksohet zhvillimi i një sërë projektesh interesantë në gjuhën D:
- Në fushën e zhvillimit të lojërave (GameDev) kishte këto përditësime: në dvn, një motor për krijimin e romaneve vizuale, u shtuan shembuj përdorimi. Në portin e motorit Godot u shtua mbështetje eksperimentale për eksportin në Web. Në Steam u publikua loja The Art of Reflection, e realizuar duke përdorur teknologjitë D dhe DirectX në motorin e saj.
- Në fushën e zhvillimit të uebit, po zhvillohet plani i lehtë për planifikuesin e fibrave photon, i cili tregoi rezultate të larta në testin e performancës TechEmpower dhe hyri në 10 rezultatet më të mira në disa teste (Plaintest, JSON). Ky motor u integrua në kuadrin e njohur të uebit Vibe.D, duke arritur rritje të performancës pa ndryshuar kodin e aplikacioneve web.
- Pas njoftimit për fillimin e zhvillimit të grumbulluesit të ri të plehrave në konferencën Dconf (video1, video2), ky përditësim hyri në versionin e ri. GC i ri gjithashtu mund të provohet për t'u instaluar si një paketë të veçantë. Ndërkohë, po mbështetet arkitektura x86_64 për OC Linux dhe Windows. Puna vazhdon për mbështetje të macOS dhe arkitekturave të tjera.
Burimi: opennet.ru
