Release av programmeringsspråket Crystal 1.16

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

Lägg en kommentar