Utgivningen av programmeringsspråket Crystal 1.16 har publicerats, vars utvecklare försöker kombinera bekvämligheten med utveckling på Ruby-språket med C-språkets höga applikationsprestanda. Crystals syntax är nära, men inte helt kompatibel med, Ruby, även om vissa Ruby-program körs utan modifiering. Kompilatorkoden är skriven i Crystal och distribueras under Apache 2.0-licensen.
Språket använder statisk typkontroll, som implementeras utan att man behöver specificera typerna av variabler och metodargument i koden. Crystal-program kompileras till körbara filer, med makron utvärderade och kod genererad vid kompilering. I Crystal-program är det möjligt att koppla bindningar skrivna i C. Parallellisering av kodexekvering utförs med hjälp av nyckelordet "spawn", vilket gör att du kan köra en bakgrundsuppgift i asynkront läge utan att blockera huvudtråden, i form av lätta trådar som kallas fibrer.
Standardbiblioteket tillhandahåller en uppsättning typiska funktioner, inklusive verktyg för att bearbeta CSV, YAML och JSON, komponenter för att skapa HTTP-servrar och WebSocket-stöd. Under utvecklingen kan du använda kommandot "crystal play", vilket genererar ett webbgränssnitt (localhost:8080 som standard) för interaktiv exekvering av Crystal-kod.
Huvudändringar:
- Lade till experimentellt stöd för att köra lätta trådar (fiber) i separata exekveringskontexter (Exekveringskontexter), vilket möjliggör effektivare parallell exekvering av uppgifter – att blockera trådar i ett kontext leder inte till att exekveringsstopp sker i ett annat. mt_context = Fiber::ExecutionContext::MultiThreaded.new("worker-threads", 4) 10.gånger gör mt_context.spawn gör do_something slut slut gtk = Fiber::ExecutionContext::Isolated.new("Gtk") gör Gtk.main slut gtk.wait
- Metoden Slice.literal ger nu typinferens för element som finns i ett segment och lägger till stöd för att arbeta i en tolk.
- Makrons storlek och alignering ger information om stabila typer.
- Nya metoder har lagts till i standardbiblioteket: Indexable#find, #find!, EventLoop#wait_readable och #wait_writable.
- Kompilatorn har en lång version av alternativet "-o", "--output", och möjligheten att ange en katalog istället för en fil har implementerats (filnamnet kommer att väljas i enlighet med filnamnet med koden).
- Dokumentationsgeneratorn har nu möjlighet att inkludera privata och skyddade objekt, samt objekt i biblioteksbindningar (lib, fun, union, cstruct, extern, typ) i dokumentationen.
- I "File.match?" metod En ny filsökvägsmatchningsalgoritm har implementerats, vilket har eliminerat vissa problem och begränsningar. Till exempel, teckensläckning ("\\t"-masken matchar "\t" men inte "t"-tecknet), sökvägsdelning ("a**"-masken matchar "ab" men misslyckas för "ab/c", medan "**/a"-masken matchar "a"), kapslade mönster ("{[}]}"-masken matchar "}"), och intervallen-]-masken är nu korrekta "".
- Suffixen "?" har föråldrats i namnen på parametrar i definitioner (defs), makron och block. Och "!".
- I metoderna Enumerable#sum och #product har den automatiska bestämningen av returtypen tagits bort om elementtypen är en union. När du anropar dessa metoder måste du nu explicit ange typen, till exempel, istället för "[1, 10000000000_u64].sum" ska du skriva "[1, 10000000000_u64].sum(0_u64)".
- HTTP::Request säkerställer korrekt analys av URL-delar.
- Lade till stöd för LLVM 20-kompilatorsviten.
- Anropen till LLVM::ABI och LLVM::TargetMachine#abi har fasats ut.
Källa: opennet.ru
