Udgivelsen af programmeringssproget Crystal 1.0 fandt sted. Udgivelsen er markeret som den første betydningsfulde udgivelse, som opsummerede 8 års arbejde og markerede stabiliseringen af sproget og dets parathed til brug i arbejdsprojekter. 1.x-grenen vil opretholde bagudkompatibilitet og sikre, at der ikke er ændringer i sproget eller standardbiblioteket, der negativt påvirker opbygningen og driften af eksisterende kode.
Выпуски 1.0.y будут включать лишь корректирующие исправления, а версии 1.x.0 будут предлагать новую функциональность и значительные изменения, сохраняя при этом совместимостью с кодом. Новые идеи и потенциально несовместимые изменения будут развиваться в отдельной ветке, на базе которой в последующем будет сформирован выпуск Crystal 2.0. Некоторые возможности Crystal 1.0 объявлены как предварительные и несмотря на наличие в ветке 1.0, они не подпадают под официальную поддержку. Среди таких возможностей моногопоточность, работа на платформе Windows, использование на системах с процессорами ARM.
Lad os huske på, at Crystal-udviklere forsøger at kombinere bekvemmeligheden ved udvikling i Ruby-sproget med den høje applikationsydelse, der er iboende i C-sproget. Crystals syntaks er tæt på, men ikke fuldt ud kompatibel med, Ruby, selvom nogle Ruby-programmer kører uden ændringer. Compilerkoden er skrevet i Crystal og distribueret under Apache 2.0-licensen.
Sproget bruger statisk typekontrol, implementeret uden behov for eksplicit at specificere typerne af variabler og metodeargumenter i koden. Krystalprogrammer kompileres til eksekverbare filer, hvor makroer evalueres og kode genereres på kompileringstidspunktet. I Crystal-programmer er det muligt at forbinde bindinger skrevet i C. Parallelisering af kodeudførelse udføres ved hjælp af nøgleordet "spawn", som giver dig mulighed for at køre en baggrundsopgave asynkront, uden at blokere hovedtråden, i form af letvægtstråde kaldet fibre.
Standardbiblioteket giver et stort sæt almindelige funktioner, herunder værktøjer til behandling af CSV, YAML og JSON, komponenter til oprettelse af HTTP-servere og WebSocket-understøttelse. Under udviklingsprocessen er det praktisk at bruge kommandoen "crystal play", som genererer en webgrænseflade (localhost:8080 som standard) til interaktiv udførelse af kode i Crystal-sproget.
Vigtigste ændringer:
- Tuples tillader indekseret adgang til elementer af forskellige typer, fordi compileren ved, hvilken type hvert element er. For eksempel: tuple = {1, "hello", 'x'} v = tuple[0..1] # returnerer {1, "hello"} typeof(v) # => Tuple(Int32, String)
- Streng og bogstaver tillader ikke brug af surrogatforkortelser i Unicode-escape-sekvenser såsom "\uD834". Brug notationen "\x" for at indkode vilkårlige værdier.
- I standardbiblioteket er en stor del af definitioner, makroer og metoder, der tidligere var markeret som forældede, blevet fjernet. Inklusive metoderne Set, StaticArray#[], YAML.new, HTTP::Request, HTTP::WebSocket, Hash#delete_if, Process#kill osv.
- Getter- og egenskabsmakroerne kræver nu, at returtypen angives.
- Standardafrundingsmetoden er blevet ændret til TIES_EVEN ("bankmands afrunding", til nærmeste heltal, og for grænsesituationer til nærmeste lige tal). Parameteren RoundingMode er blevet tilføjet til Number#round, så du kan vælge afrundingsmetoden. Tilgængelige metoder omfatter: TIES_EVEN, TIES_AWAY, TO_ZERO, TO_POSITIVE, TO_NEGATIVE.
- Enumerable#flat_map og Iterator#flat_map arbejder med elementer af blandede typer i samlinger.
- Serialisering af Enum-sekvenser bruger nu understregningsstrengrepræsentationer.
- Typerne defineret i XML-modulet er blevet flyttet fra at bruge struct til klasse.
- Af sikkerhedsmæssige årsager er afkodning af cookienavne, samt kodning og afkodning af cookieværdier, blevet afbrudt (omkodning er nu ansvaret for frameworks og applikationer). HTTP::Cookies.from_headers-metoden er blevet opdelt i to varianter for servere og kunder.
Kilde: opennet.ru
