Lanseringen av programmeringsspråket Crystal 1.0 har ägt rum. Utgivningen markerar den första betydande releasen som sammanfattar åtta års arbete och markerar språkets stabilisering och beredskap för användning i arbetsprojekt. I version 1.x kommer bakåtkompatibilitet att stödjas och förändringar i språket och standardbiblioteket som negativt påverkar byggande och funktionalitet av befintlig kod garanteras inte förekomma.
Uppdateringar 1.0.y kommer endast att innehålla rättande ändringar, medan versioner 1.x.0 kommer att erbjuda ny funktionalitet och betydande förändringar, samtidigt som de bibehåller kompatibilitet med koden. Nya idéer och potentiellt inkompatibla ändringar kommer att utvecklas i en separat grenn, på vilken en release av Crystal 2.0 senare kommer att baseras. Vissa funktioner i Crystal 1.0 har deklarerats som preliminära och trots att de finns i version 1.0, omfattas de inte av officiellt stöd. Bland dessa funktioner finns en-trådning, funktionalitet på Windows-plattformen och användning på system med ARM-processorer.
Det är värt att påminna om att utvecklarna av Crystal försöker kombinera bekvämligheten av utveckling på Ruby-språket med den höga prestandan hos applikationer som är typiska för C-språket. Syntaxen i Crystal liknar Ruby, men är inte helt kompatibel med det, även om vissa Ruby-program körs utan modifiering. Kompilatorn är skriven i Crystal och distribueras under Apache 2.0-licensen.
Språket använder statisk typkontroll, implementerad utan att behöva ange variabeltyper och metodargument i koden. Program skrivna i Crystal kompilieras till körbara filer, med beräkning av makron och generering av kod under kompileringen. I program skrivna i Crystal är det tillåtet att inkludera bindningar skrivna i C. Parallell exekvering av kod genomförs med hjälp av nyckelordet "spawn", vilket möjliggör att köra en bakgrundsuppgift asynkront utan att blockera huvudtråden, i form av lätta trådar kallade fibrer (Fiber).
Standardbiblioteket erbjuder en stor uppsättning av typiska funktioner, inklusive verktyg för att hantera CSV, YAML och JSON, komponenter för att skapa HTTP-servrar och stöd för WebSocket. Under utvecklingen är det praktiskt att använda kommandot "crystal play" som skapar ett webgränssnitt (standard localhost:8080) för interaktiv körning av kod i Crystal.
Huvudsakliga förändringar:
- I tupler tillåts indexerat åtkomst till element av olika typer, eftersom kompilatorn har information om vilken typ varje element har. Till exempel: tuple = {1, "hello", ‘x’} v = tuple[0..1] # ger {1, "hello"} typeof(v) # => Tuple(Int32, String)
- I sträng- och teckenliteraler är användning av surrogatgenomsökningar i Unicode-escape-sekvenser, såsom "\uD834", förbjudet. För kodning av godtyckliga värden bör notation "\x" användas.
- I standardbiblioteket har en stor del av definitioner, makron och metoder som tidigare markerats som föråldrade, tagits bort. Detta inkluderar metoder som Set, StaticArray#[], YAML.new, HTTP::Request, HTTP::WebSocket, Hash#delete_if, Process#kill, osv.
- I makron krävs nu obligatoriskt angivande av returtyp för getter och property.
- Standardrundningsmetoden har ändrats till TIES_EVEN ("bankörning", till närmaste heltal, och vid gränssituationer till närmaste jämna tal). RoundingMode-parametern har lagts till Number#round, vilket gör det möjligt att välja rundningsmetod. Bland de tillgängliga metoderna finns: TIES_EVEN, TIES_AWAY, TO_ZERO, TO_POSITIVE, TO_NEGATIVE.
- I samlingar har stöd för Enumerable#flat_map och Iterator#flat_map med element av blandade typer säkerställts.
- Vid serialisering av Enum-sekvenser används nu representationen i form av strängar med understreck.
- Typer som definieras i XML-modulen har översatts från användning av struct till class.
- Av säkerhetsskäl har avkodning av cookie-namn upphört, liksom kodning och avkodning av cookie-värden (omkodning har lagts i händerna på ramverk och applikationer). Metoden HTTP::Cookies.from_headers har delats upp i två varianter för servrar och kunder.
Källa: opennet.ru
