Den nye versjonen av Crystal, et kompilert programmeringsspråk med Ruby-syntaks, har flere hovedtrekk: en runtime med innebygd event loop der alle inn- og utdataoperasjoner er asynkrone, støtte for multithreading (for øyeblikket aktivert ved kompilering) og en ekstremt enkel og brukervennlig håndtering av C-biblioteker.
Fra og med versjon 0.34.0 begynner språket å bevege seg med faste skritt mot sin første ekte utgivelse (dvs. versjon 1.0).
I den nye versjonen av Crystal kan vi merke oss følgende endringer og forbedringer rangert etter viktighet:
Det er lagt til et nytt logger-API, Loggsom, i motsetning til den gamle, kan dirigere meldinger til forskjellige backend-tjenester og filtrere dem på ulike måter avhengig av «kilden».
Rester fra C-utviklingsverdenen, Errno og WinError, som ble brukt for primitive inn- og utdataoperasjoner, er på vei ut takket være unntakshierarkiet IO::Error (men ingen har forbudt å bruke Errno ennå).
Automatisk ifylling av else nil fra operatoren case/when/elseer fjernet. Dette er gjort for å unngå at utvikleren tilfeldig overser en av tilfellene when ved matching av deterministiske tilfeller som enums og ved gjennomgang av typer fra Union. Med andre ord, slik kode vil ikke lenger fungere uten å spesifisere en ekstra when (when Char) eller tilordne else-grenen:
a = 1 || ‘x’ || "foo"
case a
when Int32
# …
when String
# …
end
Kompilatoralternativet disable_overflow er ikke lenger tilgjengelig. For operasjoner med overflow, bruk metodene &+, &-, &*.
Array#fill nå flyr raskere enn en kule, takket være at den klønete løkken er byttet ut med en enkel memset;
Shard-manageren (pakker), som på en merkelig måte kalles shards, bruker nå en raskere og mer effektiv avhengighetsløsning algoritme, Molinillo, inspirert av CocoaPods (Swift) og Builder (Ruby).
Støtte lagt til LLVM 10, som i teorien vil gi oss en viss økning i ytelse, stabilitet, osv.
… og mange andre, etter min personlige mening, mindre betydningsfulle forbedringer.
Det er verdt å nevne at Crystal er et språk bygget på LLVM som gjør det mulig å skrive applikasjoner hurtigere, enklere og mer konsist enn sine tolkede "søsken", samtidig som det resulterer i en ganske rask binærkode. I forhold til Golang utmerker det seg med en fullverdig OOP, støtte for generika og en veldig enkel og forståelig syntaks. Det er på mange måter likt Nim, men er åpenbart rettet mot praktisk bruk "her og nå", noe som gir det et API arsenal av mange godt dokumenterte, praktiske og høykvalitets verktøy som støttes av språkets utviklere og derfor er svært stabile.
Kilde: linux.org.ru
