Przyzwyczajenie do języków w stylu Go i Rust

0

Ostatnio chodzą mi po głowie 2 języki - Go i Rust. Oba wydają się być przeznaczone pod programowanie systemowe lecz możliwe jest również pisanie czegoś innego np. webservices, co interesuje mnie bardziej niż tworzenie niskopoziomowych rzeczy.

Sprawdziłem losowe przykłady pokazujące składnie i pierwsze wrażenia są negatywne. Dziwne konstrukcje, jakieś nowe koncepcje (np. crates w Rust) a może to tylko rebranding pojęć. Nie wiem czy jest sens próbować biorąc pod uwagę, że ostatnio żonglowałem językami C#, JS i Python. Z drugiej strony może dobrym pomysłem będzie poznanie możliwości Go lub Rust.

Jakie są wasze opinie na temat tych języków?

0

lecz możliwe jest również pisanie czegoś innego np. webservices, co interesuje mnie bardziej niż tworzenie niskopoziomowych rzeczy.

To nie ruszaj na sile tych jezykow, d'oh.

Jak nie zalezy Ci na wysrubowaniu performancu to taka Scala wydaje sie przyjemniejsza niz Rust. A Go to juz w ogole dziwny jest choc ciekawy ;)

Dziwne konstrukcje, jakieś nowe koncepcje (np. crates w Rust)

Tutaj by chyba trzeba bylo wymienic borrow-checkera a nie crates :P

2

Pacze na ten post i próbuje sobie odpowiedzieć co jest problemem tej dyskusji. Twoje wewnętrzne samopoczucie? :D

0

Oczywiście w wolnym czasie sprawdzę te języki tzn. popiszę trochę kodu lecz ciekawi mnie skąd wziął się hype na Rust lub Go. W moim odczuciu składnie tych języków nie należą do najczytelniejszych, ale może wynikać to tylko z braku obycia. Ciekawi mnie wasze zdanie czy macie podobne odczucia a może sposoby jak przyzwyczajać się do tego, co oferuje dany język ;p

4

Go to nie jest język aplikacji biznesowych tylko dla infry. Tam sprawdza się dobrze jako takie lepsze C. Niemniej ludzie próbują wciskać na siłę w inne zastosowania typu aplikacje webowe.

Generalnie wypowiem się o Go bo trochę liznąłem, a Rust nadal czeka na lepsze czasy:

  • Podejdź do Go z nastawieniem lepsze C i będzie OK, podjedź z nastawieniem lepsza Java i będzie tragedia
  • Do pewnych rzeczy np. deklaracja typów na wspak trzeba się przyzwyczaić
  • Język nie jest wolny od pitfall'i - niestety nie wiem jak to się stało ale nil'e, panic'i, złe użycie errorów (tak że masz goły message bez kontekstu), okropne zachowanie slice'ów (append potrafi zwrócić nowy lub stary slice), mutable na każdym kroku, dziwne reguły widoczności, brak generyków (w sierpniu o ile dobrze pamietam ma być pierwsza wersja z generykami GA) sprawiają że NIE jest to dobry język do nauki programowania (lub jako pierwszy język).

Tyle z wad, największą zaletą języka jest prostota. Przeczytasz 300 stronicową książkę (vs 700 stron na Java/C#) i wszystko wiesz. Język mieści się w głowie. Jedyne rzeczy na które trzeba uważać to goroutines (może być na przykład goroutine leak, jak się nie odbierze wszyskich wiadomości z channela o ograniczonej pojemności). Poza tym język prosty jak budowa cepa.

Czy warto? może tak, może nie. Sam oceń jakie są szanse że tego użyjesz. Generalnie nauka dla nauki nie ma sensu. Lepiej powiedzieć zrobię X, i Go będzie się do tego lepiej nadawał. Lub z drugiej strony np. używam Prometheusa (który jest w Go) i chciałbym kontrybuować.

Na koniec czego może nauczyć ciebie Go:

  • programowania współbieżnego operatego o przesyłanie wiadomości (ale ehm.. jak ktoś pisał w JS i otarł się o workery lub onMessage to miał to samo).
  • podejścia żeby wszystko nawet najmniejszą pierdołę zrównoleglać.
  • obsługi błędów w hyperrównoległym kodzie (powiedzmy sobie szczerze, z tym to i Java ma kłopoty, w C# jest hack na async ale nie wiem czy by wytrzymał w starciu z 10k vthreadów) gdzie call stack może być totalnie bez sensu (więc go w Go nie ma).
  • doceniać wyjątki, sporo osób nie docenia bo nie wie jak się żyje bez nich. Nawet funkcyjne języki jak się robi 1/0 rzucają wyjątki.
1

Jeśli podoba Ci się Python i JS to w Rust raczej będziesz się męczył. Raz, że jest bardzo silne typowanie, dwa: nacisk na poprawność, trzy: borrow checker - jeśli do tej pory pisałeś tylko w języka z GC to na początku może być ciężko.
Jeśli pisałeś wcześniej w C lub C++ to Rust powinien Ci przypaść do gustu. Język jest bardzo eksprewywny, czytelny i łatwy do refactoringu. Wszystko zależy co chcesz robić, jeśli zależy Ci na poprawności / wydajności to ok, jeśli zależy Ci na tym aby mieć coś małego działającego byle szybko to raczej nie. Jeszcze dodatkowo kwestia, że Rust kompiluje się WebAsm, więc tu też są drzwi otwarte.

2

Dziwne konstrukcje, jakieś nowe koncepcje (np. crates w Rust).

crates dziwne? Bez przesady, tak samo można powiedzieć o JS, że ma jakieś NPM i package.json.
To, co dziwne w Rust to przede wszystkim lifetimes i borrow checker.
Plus w zależności od twojego backgroundu mogą być dla dziwne albo normalne takie rzeczy jak manualna kontrola pamięci, statyczne typowanie, generyki, traity.

Oczywiście w wolnym czasie sprawdzę te języki tzn. popiszę trochę kodu lecz ciekawi mnie skąd wziął się hype na Rust lub Go.

Rust rozwiązuje choćby problemy z bezpiecznym dostępem do pamięci w językach systemowych (bolączka C/C++), czyli jest jednocześnie szybko i bezpiecznie.

I to jest jedna z podstawowych wartości dodanych (i potwierdzona zainteresowaniem dużych graczy, np. Microsoftu).

Poza tym są i inne powody:

  • Rust jest jednym z języków, które można łatwo skompilować do WebAssembly i odpalić w przeglądarce (po to, żeby przyśpieszyć działanie apek przeglądarkowych). Więc jest to ciekawe zastosowanie, ponieważ apki przeglądarkowe mają ciągłe problemy z wydajnością, to ludzie szukają sposobów, żeby je przyśpieszyć

  • Rust czerpie ciekawe koncepcje z innych języków (i np. w Rust jest fajny pattern matching, nie pamiętam czym inspirowany, ale jakimś językiem funkcyjnym). Plus przypomina trochę Ruby'ego. Ogólnie więc jest to język ciekawy, fajny w pisaniu.

  • błędy kompilatora dość jasno mówią ci, co masz źle (więc z jednej strony jest to językiem z pewnym progiem wejścia, z drugiej strony kompilator ci pomaga).

  • jest to język niszowy, na który jest hype i ludzie się nim jarają (samonakręcająca się przepowiednia). Czyli hipsterstwo i chęć bycia fajnym, że się robi coś w Rust (i ludzie potem są na pierwszej stronie HackerNewsów, że zrobili X w Rust). Przy czym nie należy lekceważyć hype'u. Spójrzmy na JavaScript, który przez ostatnią dekadę właśnie w podobny sposób się rozwijał - na fali hype'u i mody na to, żeby wszystko przepisywać na JavaScript, żeby pokazać, że się da. Teraz JavaScript jest już mainstreamowy, wstyd w nim pisać, natomiast są nowe języki na horyzoncie dla osób, które chcą być fajne. Jednym z takich języków jest Rust.

  • jest to coś trochę odmiennego od tego, w czym się pisało wcześniej, więc wypaleni programiści innych języków mogą na nowo odkryć radość programowania

1

Go - dobry do kompilowalnych skryptów. Można pisać w nim większe rzeczy, ale stosunkowo dużo się robi powtórzeń. Najfajniejsze cechy to CSP + fakt, że język jest bardziej odporny na przeinżynierowanie rozwiązań.

Rust - ja w tym języku nie widzę niczego szczególnego. Wygłaskany C++, dobra rzecz jeśli ktoś rzeczywiście potrzebuje C++ i chce sobie użyć. Sam język to fajny temat dla specjslistów, zwiększa szanse na greenfield i spotkanie ciekawych ludzi.

3

A mnie to dziwi, że jest 2021, a ludzi nadal w językach programowania odrzuca składnia, a nie być może semantyka.

1
enedil napisał(a):

A mnie to dziwi, że jest 2021, a ludzi nadal w językach programowania odrzuca składnia, a nie być może semantyka.

Zależy w której grupie programistów. Inaczej będzie z pierwszym lub "pierwszym" *) językiem. Inaczej dla kogoś kto w naście lat aktywnie przetrawił 10 języków w 3 paradygmatach.
Finezje semantyki są dla naprawdę doświadczonych

Przecież pierwsze ewangelizacje nt PHP były, że jest taki jak C (czyli ma klamerki - a C był rzekomo znany przez masy ludzi) - ktoś mówił o kolosalnie innej semantyce???

*) pierwszy w apostrofach np drugi język po Hello Wold w C++, po nauce proceduralnej Javy w wymiarze 100 linii projektu itd. Builderowiec "znający" C++ itd...
Przecież to są ludzie, którzy w CV piszą "znam język"

1

Czy z Eclipse IDE do Rusta zrobię sobie krzywdę? Znałem je w najlepszych latach całkiem dobrze.
Bo Jetbrainsy to chyba tylko płatne???

1

Bo Jetbrainsy to chyba tylko płatne???

Wtyczka do Rusta nie jest płatna. Działa w IntelliJ community edition. Z drugiej strony, nie działa w pełni. Dla przykładu: nie działa debugowanie.

1 użytkowników online, w tym zalogowanych: 0, gości: 1