11.03.20244 min
Adam Kukołowicz

Adam KukołowiczCo-founderBulldogjob

Gleam - wszystko, co musisz wiedzieć o nowym języku programowania

Poznaj nowy język programowania Gleam, ideę jego stworzenia i sprawdź, czym się wyróżnia oraz jakie są jego słabe strony.

Gleam - wszystko, co musisz wiedzieć o nowym języku programowania

Została wydana pierwsza stabilna wersja języka programowania Gleam i to dobra okazja, żeby zobaczyć, o co w ogóle tu chodzi. Sprawdźmy, czy Gleam ma potencjał na wygospodarowanie sobie niszy na rynku.

Założenia Gleama są proste - jest to funkcyjny język, który oferuje solidny system typów, dzięki czemu ma sprawdzić się w tworzeniu i utrzymywaniu aplikacji o wysokiej jakości.

Ma mieć zastosowanie głównie na backendzie aplikacji webowych, czy do obsługi baz danych, dzięki niskim opóźnieniom i wysokiej współbieżności. Działa na maszynie wirtualnej Erlanga, więc nic dziwnego, że kwestie związane z siecią są jego mocną stroną.

Skąd wziął Gleam?

Autor języka, Louis Pilfold, na jednej z konferencji opowiadał historię powstania Gleama:

Pisałem w wielu wspaniałych językach, ale za każdym razem, gdy tworzyłem w jednym z nich, myślałem: super by było użyć tu innego. Za każdym razem, gdy pisałem w Elm, myślałem: nie ma tu dobrej współbieżności. Szkoda, że nie mogę tego napisać w Elixirze. Gdy pisałem w JavaScript, myślałem sobie: szkoda, że nie mam tu narzędzi z Rusta. Pomyślałem sobie, że może dałoby radę wziąć wszystkie te rzeczy, które lubię z tych języków i połączyć je w jeden? Czy mogę zrobić coś, co to osiągnie?

Odpowiedzią jest właśnie Gleam, czerpiący z języków takich jak Go, Rust, Elm, OCaml, Erlang, Elixir czy nawet JavaScript.

Cechy języka

BEAM i współbieżność

Jak już wspomniałem, jest to język funkcyjny, uruchamiany na maszynie wirtualnej Erlanga (BEAM). Integracja z BEAM jest tu kluczowa, bo dzięki temu można używać bibliotek Erlanga oraz Elixira. To z pewnością ułatwi start, bo w tym momencie ekosystem Gleama jest niewielki i jest garstka bibliotek dedykowanych temu językowi.

Z użycia BEAM-a wynika kilka innych cech. Mamy tu wielordzeniowy model współbieżności, oparty na aktorach, co, jak udowadnia np. Erlang, pozwala na uruchamianie milionów współbieżnych zadań. Jest też garbage collector, działający współbieżnie, więc nie ma tu zjawiska globalnego GC pause.

System typów

Jedną z zalet Gleama ma być system typów. Język jest statycznie typowany, nie ma null (istnieje Nil jako typ, ale pusta wartość nie jest dozwolona w innych typach), nie ma niejawnych konwersji typów, wyjątków.

Zamiast tego język oferuje jasne, nawet dla nowicjusza, komunikaty o błędach. Ma wsparcie dla algebraicznych typów danych czy typów generycznych. Założenie było tu takie, by typy były ściśle pilnowane, co ułatwia potem sprawny refactoring.

Tooling

Kolejną cechą Gleama jest to, że jest dostarczony z paletą podstawowych narzędzi. Ma wbudowany kompilator i narzędzia do budowania, formater, serwer języka do integracji z IDE i manager pakietów. Co ciekawe, kod w Gleam można też “skompilować” do JavaScript czy TypeScript, a narzędzia do tego są dostarczane razem z językiem.

A tak wygląda kawałek kodu w Gleam:

fn spawn_task(i) {
  task.async(fn() {
    let n = int.to_string(i)
    io.println("Hello from " <> n)
  })
}

pub fn main() {
  // Run loads of threads, no problem
  list.range(0, 200_000)
  |> list.map(spawn_task)
  |> list.each(task.await_forever)
}


Jak widać, nawet w taki krótkim kawałku kodu zauważalnych jest sporo ficzerów znanych z innych jezyków funkcyjnych.

Do czego Gleam się nadaje, a do czego nie?

Język najlepiej sprawdzi się w aplikacjach webowych na backendzie, szczególnie tam, gdzie współbieżność jest ważna.

Żeby nie było jednak zbyt kolorowo, ma też sporo ograniczeń. Nie uruchamia się ani w przeglądarce, ani na urządzeniach mobilnych. Nie ma biblioteki graficznej, co sprawia, że nie nadaje się do GUI. Nie jest też to najlepszy kandydat na aplikacje linii poleceń, ze względu na czas startu aplikacji oraz trudności związane z tworzeniem natywnych binarek. Pod kątem obliczeń też nie jest demonem prędkości.

Tak więc nie jest to kolejny język ogólnego przeznaczenia, a raczej narzędzie dostosowane do potrzeb wydajnych aplikacji serwerowych.

Czy Gleam odniesie sukces?

Wiele osób w social mediach wypowiedziało się już pochlebnie na temat języka. Doceniają pragmatyczność Gleama i skupienie na aspektach, które liczą się w tworzeniu solidnych aplikacji backendowych. Na start z pewnością bardzo pomoże fakt, że łatwo można w nim używać bibliotek Erlanga i Elixira.

Zapytałem twórcę języka, Louisa, czy są języki programowania, które chciałby zastąpić Gleamem, odpowiedział:

Nie chcę zastępować żadnych! Myślę, że świetnie, gdy twórcy języków pracują razem i sprawiają, że każdy z nich jest lepszy.

Ma to sens o tyle, że Gleam z jednej strony ma być tak prosty, jak to możliwe, a z drugiej, przynajmniej na razie ma jasno zdefiniowane zastosowania. Jest więc dobrym kandydatem do przetestowania w mikroserwisie.

Jeżeli chcesz dowiedzieć się więcej o języku Gleam, to zobacz stronę projektu: gleam.run

<p>Loading...</p>