Ka është publikuar një version i ri të gjuhës së programimit Crystal 1.16, ku zhvilluesit përpiqen të kombinojnë lehtësinë e zhvillimit në gjuhën Ruby me performancën e lartë të aplikacioneve të karakteristique prÚ njohur si gjuhë C. Sintaksa e Crystal është e ngjashme me atë të Ruby, por nuk është plotësisht e përputhshme me të, pavarësisht se disa programe Ruby ekzekutohen pa modifikime. Kodi i kompilatorit është shkruar në Crystal dhe shpërndahet nën licencën Apache 2.0.
Gjuha përdor kontrollin statik të tipeve, i implementuar pa nevojën e specifikimit të qartë të tipeve të variablave dhe argumenteve të metodave në kod. Programet në Crystal kompilohet në skedarë ekzekutues, duke llogaritur makros dhe duke gjeneruar kod gjatë kompilimit. Në programet e gjuhës Crystal, është e mundur të lidhen lidhje të shkruara në gjuhën C. Ndërprerja e ekzekutimit të kodit bëhet me anë të fjalës kyçe "spawn", e cila lejon ekzekutimin e një detyre në sfond në mënyrë asinhrone, pa bllokuar linjën kryesore, si fibra të lehta, të njohur si fibers.
Biblioteka standarde ofron një grup funksionesh tipike, përfshirë mjete për përpunimin e CSV, YAML, dhe JSON, komponente për krijimin e serverëve HTTP dhe mbështetje për WebSocket. Gjatë zhvillimit, është e mundur të përdoret komanda "crystal play", e cila krijon një ndërfaqe web (me default localhost:8080) për ekzekutimin interaktiv të kodit në gjuhën Crystal.
Ndryshimet kryesore:
- ĂshtĂ« shtuar mbĂ«shtetje eksperimentale pĂ«r ekzekutimin e fibĂ«rave nĂ« kontekste tĂ« veçanta ekzekutimi (Execution Contexts), e cila lejon arritjen e ekzekutimit mĂ« efikas tĂ« detyrave â bllokimi i fibĂ«rave nĂ« njĂ« kontekst nuk ndalon ekzekutimin nĂ« kontekste tĂ« tjera. 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
- Në metodën Slice.literal është siguruar dalja e tipit të elementeve të përfshira në sllajd (slice), dhe është shtuar mbështetje për funksionimin në interpreter.
- Në makrosët sizeof dhe alignof është siguruar ofrimi i informacionit mbi tipet stabile.
- Në bibliotekën standarde janë shtuar metoda të reja: Indexable#find, #find!, EventLoop#wait_readable dhe #wait_writable.
- NĂ« kompilator Ă«shtĂ« shtuar njĂ« variant i gjatĂ« i opsionit "-o" â "--output" dhe Ă«shtĂ« realizuar mundĂ«sia e specifikimit tĂ« njĂ« katalogu nĂ« vend tĂ« njĂ« skedari (emri i skedarit do tĂ« zgjidhet nĂ« pĂ«rputhje me emrin e skedarit me kodin).
- Në dokumentacionin e gjenerimit është shtuar mundësia e përfshirjes në dokumentacion të objekteve private dhe të mbrojtura, si dhe objekteve në lidhjet e bibliotekës (lib, fun, union, cstruct, external, type).
- Në metodën "File.match?" është angazhuar një algoritem i ri për përputhjen e rrugëve të skedave, duke eliminuar disa probleme dhe kufizime. Për shembull, tani korrekt është përpunuar evazimi i simboleve (nën maskën "\\t" bën pjesë "\t", jo simboli "t"), ndarjen e rrugëve (maskë "a**" përfshin "ab", por nuk funksionon për "ab\/c", ndërsa maska "**\/a" përfshin "a"), modelet e ndërlidhura (maskë "{[}]" përfshin "}", dhe intervalet (maskë "[a-]" përfshin "-").
- Në emrat e parametrave të përcaktimeve (defs), makrosëve dhe blloqeve janë shpallur të vjetëruar sufikset "?" dhe "!".
- Në metodat Enumerable#sum dhe #product është hequr përcaktimi automatik i tipit të vlerës së kthyer, nëse tipi i elementeve është union. Kur thirren këto metoda, tani duhet të specifikohet qartë tipi, për shembull, në vend të "[1, 10000000000_u64].sum" duhet të shkruhet "[1, 10000000000_u64].sum(0_u64)".
- Në HTTP::Request është siguruar analizimi korrekt i pjesëve të URL.
- ĂshtĂ« shtuar mbĂ«shtetje pĂ«r grupin e kompilatorĂ«ve LLVM 20.
- ĂshtĂ« shpallur tĂ« vjetĂ«ruar thirrjet LLVM::ABI dhe LLVM::TargetMachine#abi.
Burimi: opennet.ru
