„Crystal“ programavimo kalbos išleidimas 1.16

Paskelbtas Crystal 1.16 programavimo kalbos leidimas, kurio kūrėjai stengiasi suderinti patogumą kurti Ruby kalba su aukštu C kalbai būdingu programų našumu. „Crystal“ sintaksė yra artima „Ruby“, bet ne visiškai su ja suderinama, nepaisant to, kad kai kurios „ruby“ programos veikia be pertvarkymo. Kompiliatoriaus kodas parašytas Crystal ir platinamas pagal Apache 2.0 licenciją.

Kalba naudoja statinį tipo tikrinimą, kuris įgyvendinamas, kode nereikia aiškiai nurodyti kintamųjų tipų ir metodo argumentų. „Crystal“ programos sukompiliuojamos į vykdomuosius failus, įvertinamos makrokomandos ir sugeneruojamas kodas kompiliavimo metu. „Crystal“ programose galima jungti įrišimus, parašytus C. Kodo vykdymo lygiagretinimas atliekamas naudojant „spawn“ raktinį žodį, kuris leidžia paleisti foninę užduotį asinchroniniu režimu, neužblokuojant pagrindinės gijos, lengvų gijų, vadinamų pluoštais, pavidalu.

Standartinė biblioteka teikia tipinių funkcijų rinkinį, įskaitant CSV, YAML ir JSON apdorojimo įrankius, HTTP serverių kūrimo komponentus ir „WebSocket“ palaikymą. Kūrimo metu galite naudoti komandą „crystal play“, kuri sukuria žiniatinklio sąsają (pagal numatytuosius nustatymus – localhost:8080) interaktyviam „Crystal“ kodo vykdymui.

Pagrindiniai pakeitimai:

  • Pridėta eksperimentinė parama lengvų gijų (fiber) vykdymui atskiruose vykdymo kontekstuose (vykdymo kontekstai), kuri leidžia efektyviau lygiagrečiai vykdyti užduotis – gijų blokavimas viename kontekste nesukelia vykdymo sustabdymo kitame. mt_context = Fiber::ExecutionContext::MultiThreaded.new("worker-threads", 4) 10 kartų atlikti mt_context.spawn atlikti „do_something“ pabaiga pabaiga gtk = Fiber::ExecutionContext::Isolated.new("Gtk") atlikti Gtk.main pabaiga gtk.wait
  • Slice.literal metodas dabar pateikia skiltyje esančių elementų tipo išvadas ir prideda palaikymą darbui naudojant vertėją.
  • Makrokomandų dydis ir lygiavimas suteikia informacijos apie stabilius tipus.
  • Į standartinę biblioteką įtraukti nauji metodai: „Indexable#find“, „#find!“, „EventLoop#wait_readable“ ir „#wait_writable“.
  • Kompiliatorius turi ilgąją „-o“ parinkties versiją „--output“, taip pat įdiegta galimybė nurodyti katalogą, o ne failą (failo pavadinimas bus parenkamas pagal failo pavadinimą su kodu).
  • Dokumentacijos generatorius dabar turi galimybę į dokumentaciją įtraukti privačius ir saugomus objektus, taip pat objektus, esančius bibliotekos įrišime (lib, fun, union, cstruct, external, type).
  • „File.match?“ metodas Įdiegtas naujas failų kelių atitikimo algoritmas, kuris pašalino kai kurias problemas ir apribojimus. Pavyzdžiui, simbolių pašalinimas („\\t“ kaukė atitinka „\t“, bet ne „t“), kelio padalijimas („a**“ kaukė atitinka „ab“, bet nepavyksta su „ab/c“, o „**/a“ kaukė atitinka „a“), įdėtieji raštai (kaukė „{[}]}“ atitinka „}“) ir diapazonai (kaukė dabar atitinka „[a-")
  • Priesagos "?" buvo nebenaudojami parametrų pavadinimuose apibrėžimuose (defs), makrokomandose ir blokuose. Ir "!".
  • „Enumerable#sum“ ir „#product“ metoduose automatinis grąžinamo tipo nustatymas buvo pašalintas, jei elemento tipas yra sąjunga. Kviečiant šiuos metodus, dabar reikia aiškiai nurodyti tipą, pavyzdžiui, vietoj „[1, 10000000000_u64].sum“ reikėtų rašyti „[1, 10000000000_u64].sum(0_u64)“.
  • HTTP::Užklausa užtikrina teisingą URL dalių analizavimą.
  • Pridėtas LLVM 20 kompiliatoriaus rinkinio palaikymas.
  • Skambučiai į LLVM::ABI ir LLVM::TargetMachine#abi buvo nebenaudojami.

    Šaltinis: opennet.ru

Добавить комментарий