Publicēts Crystal 1.2 programmēšanas valodas izlaidums, kura izstrādātāji cenšas apvienot Ruby valodas izstrādes ērtības ar C valodai raksturīgo augsto aplikāciju veiktspēju. Crystal sintakse ir tuva, bet nav pilnībā saderīga ar Ruby, lai gan dažas Ruby programmas darbojas bez izmaiņām. Kompilatora kods ir rakstīts Crystal un tiek izplatīts saskaņā ar Apache 2.0 licenci.
Valoda izmanto statisku tipa pārbaudi, novēršot nepieciešamību kodā skaidri norādīt mainīgo tipus un metodes argumentus. Crystal programmas tiek kompilētas izpildāmos failos, veicot makro novērtēšanu un koda ģenerēšanu kompilēšanas laikā. Crystal programmas var ietvert saistījumus, kas rakstīti C valodā. Paralēla koda izpilde tiek panākta, izmantojot atslēgvārdu "spawn", kas ļauj fona uzdevumus palaist asinhroni, nebloķējot galveno pavedienu, vieglu pavedienu, ko sauc par šķiedrām, veidā.
Standarta bibliotēka nodrošina lielu kopīgu funkciju kopumu, tostarp rīkus CSV, YAML un JSON apstrādei, komponentus HTTP serveru izveidei un WebSocket atbalstu. Izstrādes procesā ir ērti izmantot komandu “crystal play”, kas ģenerē tīmekļa saskarni (pēc noklusējuma localhost:8080) interaktīvai koda izpildei Crystal valodā.
Galvenās izmaiņas:
- Pievienota iespēja piešķirt vispārīgas klases apakšklasi vecāku klases elementam. class Foo(T); end class Bar(T) < Foo(T); end x = Foo x = Bar
- Makro tagad var izmantot pasvītrojuma rakstzīmi, lai ignorētu vērtību "for" ciklā. {% for _, v, i in {1 => 2, 3 => 4, 5 => 6} %} p {{v + i}} {% end %}
- Makro ir pievienota metode "file_exists?", lai pārbaudītu faila esamību.
- Standarta bibliotēka ievieš atbalstu 128 bitu veseliem skaitļiem.
- Pievienots Indexable::Mutable(T) modulis ar paplašinātu darbību ieviešanu tādām kolekcijām kā BitArray un Deque. ba = BitArray.new(10) # ba = BitArray[0000000000] ba[0] = true # ba = BitArray[1000000000] ba.rotate!(-1) # ba = BitArray[0100000000]
- Pievienota XML::Node#namespace_definition metode, lai no XML iegūtu konkrētu vārdtelpu.
- IO#write_utf8 un URI.encode metodes ir novecojušas, un to vietā jāizmanto IO#write_string un URI.encode_path.
- Atbalsts 32 bitu x86 arhitektūrai ir pārvietots uz 2. līmeni (vairs netiek ģenerētas iepriekš izveidotas pakotnes). Atbalsts ARM64 arhitektūrai tiek jaunināts uz 1. līmeni.
- Darbs pie pilnīga platformas atbalsta nodrošināšanas turpinās. WindowsPievienots atbalsts Windows-rozetes.
- Par macOS Ir pievienota universāla pakotne, kas darbojas gan ierīcēs ar x86 procesoriem, gan iekārtās ar Apple M1 mikroshēmu.
Avots: opennet.ru
