Izšla je nova različica Crystal, programskega jezika s sintakso Ruby, katere glavne značilnosti so: runtime z 'vgrajenim' event loopom, v katerem so vse operacije vhod/izhod asinhrone, podpora za večnitnost (trenutno se aktivira s flagom pri prevajanju) in izjemno preprosto ter udobno delo z knjižnicami v C-ju.
Od različice 0.34.0 se je jezik uradno začel z odločnim korakom pomikati proti prvemu pravemu sprostitvi (tj. različici 1.0).
V novi različici Crystal lahko opazimo naslednje spremembe in izboljšave v vrstnem redu njihove pomembnosti:
V API je dodana nova knjižnica za dnevnik Log, ki, za razliko od stare, omogoča usmerjanje sporočil v različne backend-e ter različno filtriranje teh sporočil glede na 'vir'.
Rudimenti iz sveta C-programiranja, Errno in WinError, ki so se uporabljali za primitivne operacije vhod/izhod, odhajajo v preteklost zahvaljujoč hierarhiji izjem IO::Error (vendar pa nihče zaenkrat ne prepoveduje uporabe Errno).
Samodejna vstavitev else nil iz operatorja case/when/else. To je bilo storjeno, da bi se izognili naključnemu preskakovanju ene od vej s strani razvijalca when pri ujemanju z določenimi primeri, kot so enum-i in prehod skozi tipe iz Unije. Z drugimi besedami, takšen koda ne bo več delovala brez navedenih dodatnih when (when Char) ali določanja else-veje:
a = 1 || 'x' || "foo"
case a
when Int32
# …
when String
# …
end
Možnost prevajalnika disable_overflow ni več na voljo. Za operacije s prelivanjem uporabite metode &+, &-, &*.
Array#fill zdaj leti hitreje od krogle, zahvaljujoč zamenjavi neintuitivnega cikla z enim preprostim memsetom;
Menjalnik shardov (paketov), ki se imenuje, kot to paradoksalno je, shards, zdaj uporablja hitrejši in učinkovitejši algoritem za zadovoljitev odvisnosti Molinillo, opazovan v CocoaPods (Swift) in Builder (Ruby).
Dodana je podpora za LLVM 10, kar naj bi nam po ideji prineslo povečanje zmogljivosti, stabilnosti, itd.
… in vrsto drugih, po mojem subjektivnem mnenju, manj pomembnih izboljšav.
Treba omeniti da je Crystal jezik zasnovan na LLVM-u, koji omogućava pisanje aplikacija brže, lakše i sažetije nego njegove interpretirane "rođake", a pritom se dobija prilično brz binačni fajl. U poređenju sa Golang-om, izdvojio se kao potpuno funkcionalan OOP, sa podrškom za generičke tipove i veoma jednostavnom i razumljivom sintaksom. Po svom značenju je mnogo sličan Nimu, ali je jasno orijentisan na praktičnu upotrebu "ovde i sada", zbog čega u svom API arsenalu ima mnoštvo dobro dokumentovanih, praktičnih i kvalitetnih alata, podržanih od strane developera jezika i samim tim veoma stabilnih.
Izvor: linux.org.ru
