Programmeerimiskeele Crystal 1.16 väljaanne

Programmeerimiskeele Crystal 1.16 väljaanne on avaldatud ning arendajad püüavad ühendada Ruby keele arendamise mugavust C keele kõrge jõudlusega rakendustega. Crystali süntaks on sarnane Ruby keele omale, kuid ei ole täielikult ühilduv, kuigi mõned Ruby programmid töötavad ilma ümberkirjutamiseta. Kompilaatori kood on kirjutatud Crystal keeles ja jaotatakse Apache 2.0 litsentsi all.

Keeleline staatiline tüüpide kontroll toimub ilma vajaduseta näidata muutujate ja meetodite argumentide tüüpe koodis. Crystal programmid kompileeritakse käivitatavateks failideks, koos makrode arvutamise ja koodi genereerimisega kompileerimise ajal. Crystali programmides on lubatud kasutada C keeles kirjutatud sidumisi. Koodi paralleelset täitmist teostatakse kasutades sõna «spawn», mis võimaldab taustülesande käivitada asünkroonselt, blokeerimata põhivoogu, kergweightsete lõimede, mida nimetatakse fibereiteks (Fiber), kujul.

Standardraamatukogu pakub hulga tüüpilisi funktsioone, sealhulgas CSV, YAML ja JSON töötlemise vahendeid, komponente HTTP-serverite loomiseks ja WebSocketi toe jaoks. Arenduse käigus saab kasutada käsku „crystal play”, mis loob veebiliidese (vaikimisi localhost:8080) interaktiivseks Crystal-koodi täitmiseks.

Peamised muudatused:

  • Lisatud eksperimentaalne tugi kergete kiudude (fiber) käitamiseks eraldi täitmisvõimetes (Execution Contexts), mis võimaldab saavutada tõhusamat ülesannete samaaegset täitmist — ühe konteksti kiudude blokeerimine ei peata teistes kontekstidest täitmist. mt_context = Fiber::ExecutionContext::MultiThreaded.new(„worker-threads“, 4) 10.times do mt_context.spawn do do_something end end gtk = Fiber::ExecutionContext::Isolated.new(„Gtk“) do Gtk.main end gtk.wait
  • Meetodis Slice.literal on tagatud mõõtmete tüüpide väljund, mis sisaldavad sisselõiget (slice), ning lisatud tugi töötamiseks tõlgis.
  • Makrode sizeof ja alignof puhul on tagatud stabiilsete tüüpide teabe edastamine.
  • Standardraamatukogusse on lisatud uued meetodid: Indexable#find, #find!, EventLoop#wait_readable ja #wait_writable.
  • Kompilaatorisse on lisatud pikk variant valikust «-o» — «—output» ja ellu on viidud võimalus määrata kataloog faili asemel (faili nimi valitakse koodi failiga vastavuses).
  • Dokumentatsiooni generaatorisse on lisatud võimalus sisaldada dokumentatsioonis privaatseid ja kaitstud objekte, samuti objekte raamatukogu ümbrikes (lib, fun, union, cstruct, external, type).
  • Meetodis «File.match?» on kasutusele võetud uus failitee vaste algoritm, mis on aidanud kõrvaldada mõningaid probleeme ja piiranguid. Näiteks töötatakse nüüd õigesti läbi sümbolite põgenemine (maska «\\t» alla kuulub «\t», mitte sümbol «t»), tee jagamine (mask «a**» katab «ab», kuid ei tööta «ab/c» puhul, samas mask «**/a» katab «a»), pesad mustrid (mask «{[}]}» katab «}»), vahemikud (mask «[a-]» katab «-«).
  • Parameetrite nimedes määratlemise (defs), makrode ja plokkide puhul on deklareeritud vananenud suffiksid «?» ja «!».
  • Enumerable#sum ja #product meetodites on eemaldatud automaatne tagasiväärtuse tüübi määramine, kui elementide tüüp on ühend (union). Nüüd tuleb neid meetodeid kutsudes tüüpi selgelt näidata, näiteks "[1, 10000000000_u64].sum" asemel tuleb kirjutada "[1, 10000000000_u64].sum(0_u64)".
  • HTTP::Request-is on tagatud õige URL-i osade analüüs.
  • Lisatud tugi LLVM 20 kompilaatorite kogumile.
  • LLVM::ABI ja LLVM::TargetMachine#abi kutsed on kuulutatud vananenuks.

    Allikas: opennet.ru
Osta usaldusväärne veebihosting DDoS kaitsega, VPS VDS serverid 🔥 Osta usaldusväärne veebihosting DDoS kaitsega, VPS VDS serverid | ProHoster