Język programowania Crystal został wydany jako wersja 1.0. Wydanie to jest oznaczone jako pierwsze znaczące wydanie, które podsumowuje 8 lat pracy i oznacza stabilizację języka oraz jego gotowość do użycia w projektach produkcyjnych. Gałąź 1.x zachowa wsteczną kompatybilność i zapewni, że żadne zmiany w języku lub bibliotece standardowej nie wpłyną negatywnie na montaż i działanie istniejącego kodu.
Wersje 1.0.y będą zawierać jedynie drobne poprawki, natomiast wersje 1.x.0 wprowadzą nowe funkcjonalności i istotne zmiany, zachowując jednocześnie kompatybilność kodu. Nowe pomysły i potencjalnie niekompatybilne zmiany zostaną opracowane w osobnej gałęzi, która później stanie się podstawą dla wydania Crystal 2.0. Niektóre funkcje Crystal 1.0 są uznawane za wstępne i, pomimo obecności w gałęzi 1.0, nie są objęte oficjalnym wsparciem. Funkcje te obejmują wielowątkowość, obsługę platformy i Windows, stosować w systemach z procesorami ARM.
Przypomnijmy, że programiści Crystal starają się połączyć wygodę programowania Ruby z wysoką wydajnością aplikacji inherentną dla języka C. Składnia Crystal jest zbliżona do Ruby, ale nie jest z nią w pełni zgodna, pomimo faktu, że niektóre programy Ruby są wykonywane bez przeróbek. Kod kompilatora jest napisany w Crystal i jest dystrybuowany na licencji Apache 2.0.
Język wykorzystuje statyczne sprawdzanie typów, implementowane bez konieczności jawnego określania typów zmiennych i argumentów metod w kodzie. Programy Crystal są kompilowane do plików wykonywalnych, a makra są obliczane, a kod generowany podczas kompilacji. Programy Crystal umożliwiają łączenie powiązań napisanych w C. Paralelizacja wykonywania kodu jest realizowana za pomocą słowa kluczowego „spawn”, które umożliwia uruchomienie zadania w tle w trybie asynchronicznym, bez blokowania wątku głównego, 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:
- W krotkach indeksowany dostęp do elementów różnych typów jest dozwolony, ponieważ kompilator wie, jaki typ ma każdy element. Na przykład: tuple = {1, "hello", 'x'} v = tuple[0..1] # yields {1, "hello"} typeof(v) # => Tuple(Int32, String)
- Skróty zastępczych sekwencji ucieczki Unicode, takie jak „\uD834”, nie są dozwolone w literałach ciągów znaków i znaków. Notacja „\x” powinna być używana do kodowania dowolnych wartości.
- Duża część wcześniej przestarzałych definicji, makr i metod została usunięta ze standardowej biblioteki. W tym metody Set, StaticArray#[], YAML.new, HTTP::Request, HTTP::WebSocket, Hash#delete_if, Process#kill itd.
- Makra getterów i właściwości wymagają teraz typu zwracanego.
- Domyślna metoda zaokrąglania została zmieniona na TIES_EVEN ('zaokrąglanie bankiera', do najbliższej liczby całkowitej, a w przypadkach granicznych do najbliższej liczby parzystej). Parametr RoundingMode został dodany do Number#round, umożliwiając wybór metody zaokrąglania. Dostępne metody obejmują: TIES_EVEN, TIES_AWAY, TO_ZERO, TO_POSITIVE, TO_NEGATIVE.
- Kolekcje obsługują Enumerable#flat_map i Iterator#flat_map z elementami mieszanych typów.
- Serializacja sekwencji Enum wykorzystuje teraz reprezentację ciągów znaków rozdzielonych podkreśleniem.
- Typy zdefiniowane w module XML zostały przeniesione ze struktury do klasy.
- Ze względów bezpieczeństwa dekodowanie nazw plików cookie, a także kodowanie i dekodowanie ich wartości, zostało wycofane (za przekodowywanie odpowiadają teraz frameworki i aplikacje). Metoda HTTP::Cookies.from_headers została podzielona na dwie wersje. serwery i klienci.
Źródło: opennet.ru
