Toleo la mkusanyaji wa lugha D 2.112

DMD 2.112, kikusanyaji marejeleo cha lugha ya D, kimetolewa. Msimbo wa kikusanyaji unasambazwa chini ya BSL ya bure (Leseni ya Programu ya Kuongeza). Mifumo inayoungwa mkono ni Linux, Windows, macOS na FreeBSD.

Lugha ya D imechapishwa kwa takwimu, ina sintaksia sawa na C/C++, na hutoa utendaji wa lugha zilizokusanywa. Lugha ya D pia hukopa baadhi ya vipengele kutoka kwa lugha wasilianifu ambazo ni muhimu kwa ajili ya kuboresha ufanisi wa maendeleo na kuhakikisha usalama. Kwa mfano, kuna usaidizi wa: safu za ushirika, ufafanuzi wa aina isiyo ya moja kwa moja, usimamizi wa kumbukumbu moja kwa moja, zana za programu sambamba, templates, vipengele vya metaprogramming. Kikusanya taka kinapatikana kwa hiari. Programu za D zinaweza kutumia maktaba za C, pamoja na baadhi ya maktaba za C++ na Objective-C.

Mabadiliko katika toleo la 2.112 yanajumuisha:

  • Uendeshaji kwenye Associative Array (hashmap) hutekelezwa kupitia templeti.
  • Sehemu za Bit zimejumuishwa katika lugha na hakuna tena haja ya kutumia chaguo tofauti la "-preview=bitfields".
  • Kuning'inia kauli za "else" zilizoainishwa bila kuambatanisha kizuizi hicho kwa vibandiko vilivyopinda sasa kutaleta hitilafu badala ya onyo: int i, j; if (i) if (j) return 1; else // Error: else ni kuning'inia, ongeza { } baada ya sharti `if (i)` return 2;
  • Imeongeza swichi mpya "-extI" kwa ajili ya kubainisha njia za nje za kuingiza, ambayo ni sawa na chaguo la njia ya kuingiza (-I), isipokuwa kwamba inabainisha kuwa moduli inayopatikana nayo iko nje ya faili inayoweza kutekelezwa inayokusanywa kwa sasa. Windows Inatumika wakati chaguo la kufuta dllimport limewekwa kwa thamani yoyote isipokuwa "hakuna" ili kulazimisha uingizaji wa alama za moduli za nje kwa kutumia DllImport.
  • Moduli zilizoongezwa kwa faili za C. Kama kiendelezi cha __import, neno muhimu la __module huhamisha matamko ya moduli kutoka D hadi C. Hii ni muhimu hasa wakati faili nyingi za C zenye jina moja zinahitaji kuingizwa (kwa mfano, hello/utils.c na world/utils.c), kwani faili zote mbili lazima ziingizwe na import utils zinapoainishwa kwenye mstari wa amri, na kusababisha migogoro. --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);
  • Ubadilishaji kamili wa nambari kamili katika mgawo wa "int op= float" umeondolewa. Hii ni kuzuia makosa yanayoweza kutokea ambapo mgawo wa "op=" hufupisha upande wa kulia wa usemi kutoka thamani isiyo ya sifuri hadi sifuri. uint a; float b = 0.1; a += b; // Kuondolewa: `uint += float` inafanya ubadilishaji mfupi
  • Utekelezaji kadhaa mpya wa kiolezo umeongezwa kwenye muda wa utekelezaji.
  • Imerekebisha hitilafu zinazohusiana na mabadiliko yasiyo na kumbukumbu katika ABI. macOS 15.4.
  • Macro za C sasa zinabadilishwa kuwa violezo wakati wa kuendesha "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; }
  • Maktaba ya kawaida hutekeleza kitendakazi cha "lazyCache", ambacho hutoa utaratibu wa safu za kuhifadhi data kwa kutumia tathmini ya uvivu. Tofauti na kashe, ambayo hutathmini mara moja vipengele vya safu wakati wa ujenzi wa safu, lazyCache huahirisha tathmini hadi vipengele viombwe waziwazi. matokeo otomatiki = iota(-4, 5).map!(a => tuple(a, expensiveComputation(a)))().lazyCache(); // Hakuna hesabu zilizofanywa katika hatua hii auto firstElement = result.front; // Kipengele cha kwanza sasa kimetathminiwa
  • Utangamano wa nyuma ulioboreshwa wa getrandom() kwenye matoleo ya zamani Linux na mifumo mingine.
  • "std.uni" imesasishwa ili kuunga mkono Unicode 17.
  • Imeongeza usaidizi wa uuid v7 kwenye std.uuid.
  • API mpya ya "std.conv", ambapo vitendakazi vitatu "writeText", "writeWText" na "writeDText" vilionekana.
  • Kidhibiti cha kifurushi cha dub sasa kina chaguo la "-dest" na kitufe cha "fremu". —Hapo awali: lflags "-framework" "Cocoa" —Sasa: ​​frameworks "Cocoa" "OpenGL"

Zaidi ya hayo, ni muhimu kuzingatia maendeleo ya miradi kadhaa ya kuvutia katika lugha ya D:

  • Uundaji wa mchezo (GameDev) umeona masasisho yafuatayo: dvn, injini mpya inayoonekana, imeongeza mifano ya matumizi. Usaidizi wa majaribio wa usafirishaji wa wavuti umeongezwa kwenye lango la injini la Godot. Sanaa ya Kutafakari, iliyotengenezwa kwa kutumia teknolojia za D na DirectX katika injini maalum, imetolewa kwenye Steam.
  • Katika uwanja wa ukuzaji wa wavuti, kipanga ratiba cha nyuzinyuzi nyepesi cha fotoni kinatengenezwa. Kilionyesha matokeo ya juu katika jaribio la utendaji la TechEmpower na kufikia 10 bora katika vipimo kadhaa (Plaintest, JSON). Injini hii imeunganishwa kwenye mfumo maarufu wa wavuti wa Vibe.D, na kusababisha faida za utendaji bila kubadilisha msimbo wa programu ya wavuti.
  • Kufuatia tangazo la uundaji wa mkusanyaji mpya wa takataka katika mkutano wa Dconf (video 1, video 2), sasisho hili limejumuishwa katika toleo jipya. GC mpya inaweza pia kusakinishwa kama kifurushi tofauti. Kwa sasa, usanifu wa x86_64 unatumika kwa ajili ya mfumo wa uendeshaji. Linux и WindowsKazi ya usaidizi inaendelea. macOS na usanifu mwingine.

Chanzo: opennet.ru

Nunua upangishaji wa kuaminika wa tovuti zilizo na ulinzi wa DDoS, seva za VPS VDS 🔥 Nunua upangishaji wa tovuti unaoaminika kwa ulinzi wa DDoS, seva za VPS VDS | ProHoster