Opublikowano wydanie języka programowania Crystal 1.2, którego twórcy starają się połączyć wygodę programowania w języku Ruby z wysoką wydajnością aplikacji charakterystyczną dla języka C. Składnia Crystal jest zbliżona do języka Ruby, ale nie jest z nim w pełni kompatybilna, chociaż niektóre programy w języku Ruby działają bez modyfikacji. Kod kompilatora napisany jest w języku Crystal i rozpowszechniany na licencji Apache 2.0.
Język wykorzystuje statyczne sprawdzanie typów, realizowane bez konieczności jawnego określania typów zmiennych i argumentów metod w kodzie. Programy Crystal są kompilowane do plików wykonywalnych, z oceną makr i kodem generowanym w czasie kompilacji. W programach Crystal możliwe jest łączenie powiązań napisanych w C. Równoległość wykonywania kodu odbywa się za pomocą słowa kluczowego „spawn”, które pozwala na asynchroniczne uruchomienie zadania w tle, bez blokowania głównego wątku, w postaci lekkich wątków zwanych włóknami.
Biblioteka standardowa udostępnia duży zestaw typowych funkcji, w tym narzędzia do przetwarzania plików CSV, YAML i JSON, komponenty do tworzenia serwerów HTTP oraz obsługę protokołu WebSocket. Podczas procesu programowania wygodnie jest użyć polecenia „crystal play”, które generuje interfejs sieciowy (domyślnie localhost: 8080) do interaktywnego wykonywania kodu w języku Crystal.
Główne zmiany:
- Dodano możliwość przypisania podklasy klasy ogólnej do elementu klasy nadrzędnej. klasa Foo(T); klasa końcowa Bar(T) < Foo(T); koniec x = Foo x = Bar
- Makra mogą teraz używać podkreślenia do ignorowania wartości w pętli for. {% dla _, v, i w {1 => 2, 3 => 4, 5 => 6} %} p {{v + i}} {% end %}
- Dodano metodę „file_exists?” do makr. aby sprawdzić istnienie pliku.
- Biblioteka standardowa obsługuje teraz 128-bitowe liczby całkowite.
- Dodano moduł Indexable::Mutable(T) z implementacją zaawansowanych operacji na kolekcjach takich jak BitArray i Deque. ba = BitArray.new(10) # ba = BitArray[0000000000] ba[0] = true # ba = BitArray[1000000000] ba.rotate!(-1) # ba = BitArray[0100000000]
- Dodano metodę XML::Node#namespace_definition w celu wyodrębnienia określonej przestrzeni nazw z XML.
- Metody IO#write_utf8 i URI.encode są przestarzałe i należy je zastąpić metodami IO#write_string i URI.encode_path.
- Obsługa 32-bitowej architektury x86 została przeniesiona na drugi poziom (gotowe pakiety nie są już generowane). Przygotowywane jest przejście na pierwszy poziom wsparcia dla architektury ARM64.
- Trwają prace nad zapewnieniem pełnego wsparcia dla platformy Windows. Dodano obsługę gniazd Windows.
- Dodano uniwersalny pakiet dla systemu macOS, działający zarówno na urządzeniach z procesorami x86, jak i na sprzęcie z chipem Apple M1.
Źródło: opennet.ru