Wydanie języka programowania Crystal 1.5

Opublikowano wydanie języka programowania Crystal 1.5, 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:

  • Kompilator dodał sprawdzenie zgodności nazw argumentów w implementacji metody abstrakcyjnej i w jej definicji. W przypadku niezgodności nazw zostanie wyświetlone ostrzeżenie: klasa abstrakcyjna FooAbstract streszczenie def foo(number: Int32): Nil end class Foo < FooAbstract def foo(name: Int32): Nil p name end end 6 | def foo(name : Int32): Nil ^— Uwaga: parametr pozycyjny 'name' odpowiada parametrowi 'number' nadpisanej metody FooAbstract#foo(number : Int32), który ma inną nazwę i może wpływać na przekazywanie nazwanych argumentów
  • Podczas przypisywania argumentu metody bez typu do wartości zmiennej, argument jest teraz ograniczony do typu tej zmiennej. class Foo @x : Int64 def inicjalizacja(x) @x = x # parametr x zostanie wpisany @x end end
  • Umożliwia dodawanie adnotacji do parametrów metod lub makr. def foo(@[MożeNieużywane] x); koniec # OK
  • Dodano obsługę używania stałych jako indeksów i nazw w krotkach. KEY = "s" foo = {s: "String", n: 0} wstawia foo[KEY].rozmiar
  • Do interfejsu File API dodano nowe metody File#delete?, umożliwiające usuwanie plików i katalogów. i Dir#delete?, które zwracają wartość false, jeśli brakuje pliku lub katalogu.
  • Wzmocniono ochronę metody File.tempfile, która obecnie nie pozwala na stosowanie znaków null w liniach tworzących nazwę pliku.
  • Dodano zmienną środowiskową NO_COLOR, która wyłącza podświetlanie kolorów w wynikach kompilatora i interpretera.
  • Praca w trybie tłumacza została znacznie usprawniona.

Źródło: opennet.ru

Dodaj komentarz