La eldono de la programlingvo Crystal 1.16 estis publikigita, kies programistoj provas kombini la oportunon disvolvi en la Ruby-lingvo kun la alta aplikaĵa rendimento eneca en la C-lingvo. La sintakso de Crystal estas proksima, sed ne tute kongrua kun Ruby, malgraŭ la fakto, ke iuj rubenaj programoj funkcias sen reverkado. La kompilkodo estas skribita en Crystal kaj distribuita sub la licenco Apache 2.0.
La lingvo uzas senmovan tipkontroladon, kiu estas efektivigita sen la bezono eksplicite specifi la specojn de variabloj kaj metodoargumentojn en la kodo. Kristalaj programoj estas kompilitaj en ruleblajn dosierojn, kun makrooj taksitaj kaj kodo generita en kompiltempo. En Kristalaj programoj, eblas konekti ligojn skribitajn en C. Paraleligo de koda ekzekuto estas farita per la ŝlosilvorto "spawn", kiu ebligas al vi ruli fonan taskon en nesinkrona reĝimo sen bloki la ĉefan fadenon, en formo de malpezaj fadenoj nomataj fibroj.
La norma biblioteko disponigas aron de tipaj funkcioj, inkluzive de iloj por prilabori CSV, YAML, kaj JSON, komponentojn por krei HTTP-servilojn kaj WebSocket-subtenon. Dum evoluo, vi povas uzi la komandon "kristal-ludado", kiu generas retan interfacon (localhost:8080 defaŭlte) por interaga ekzekuto de Crystal-kodo.
Ĉefaj ŝanĝoj:
- Aldonita eksperimenta subteno por rulado de malpezaj fadenoj (fibro) en apartaj ekzekutkuntekstoj (Execution Contexts), kiu ebligas pli efikan paralelan plenumadon de taskoj - blokado de fadenoj en unu kunteksto ne kondukas al ekzekuthalto en alia. mt_context = Fibro::ExecutionContext::MultiThreaded.new("laboristo-fadenoj", 4) 10.foje do mt_context.spawn do do_something end end gtk = Fiber::ExecutionContext::Isolated.new("Gtk") do Gtk.main end gtk.wait
- La metodo Slice.literal nun disponigas tipinferencon por elementoj enhavitaj en tranĉaĵo, kaj aldonas subtenon por labori en interpretisto.
- La grandeco de kaj vicigo de makrooj disponigas informojn pri stabilaj tipoj.
- Novaj metodoj estis aldonitaj al la norma biblioteko: Indexable#find, #find!, EventLoop#wait_readable, kaj #wait_writable.
- La kompililo havas longan version de la opcio "-o", "--output", kaj la kapablo specifi dosierujon anstataŭ dosieron estas efektivigita (la dosiernomo estos elektita laŭ la nomo de la dosiero kun la kodo).
- La dokumentargeneratoro nun havas la kapablon inkluzivi privatajn kaj protektitajn objektojn, same kiel objektojn en bibliotekligadoj (lib, fun, union, cstruct, external, type) en la dokumentado.
- En la "Dosiero.match?" metodo Nova dosiervoja kongrua algoritmo estis efektivigita, kiu forigis kelkajn problemojn kaj limigojn. Ekzemple, signo eskapo (la "\\t" masko kongruas kun "\t" sed ne la "t" signo), padodividado (la "a**" masko kongruas kun "ab" sed malsukcesas por "ab/c", dum la "**/a" masko kongruas kun "a"), nestitaj ŝablonoj (la "{[}]}" masko kongruas kun "}"), kaj intervaloj (la "[a-]" masko nun kongruas kun "[a-]").
- La sufiksoj "?" estis malrekomenditaj en la nomoj de parametroj en difinoj (defs), makrooj kaj blokoj. Kaj "!".
- En la metodoj Enumerable#sum kaj #product, la aŭtomata determino de la revena tipo estis forigita se la elemento-tipo estas kuniĝo. Kiam vi vokas ĉi tiujn metodojn, vi nun devas eksplicite specifi la tipon, ekzemple, anstataŭ "[1, 10000000000_u64].sum" vi devus skribi "[1, 10000000000_u64].sum(0_u64)".
- HTTP::Peto certigas ĝustan analizadon de URL-partoj.
- Aldonita subteno por la kompililo LLVM 20.
- La alvokoj al LLVM::ABI kaj LLVM::TargetMachine#abi estas malrekomenditaj.
fonto: opennet.ru
