Go i Rust - jak odróżnić potencjalnie nowy, dobry krok w rozwoju osobistym od chwilowej mody?

0

Co może dać nauka tych nowych, "modnych" typu Go i Rust? Żaden z nich nie daje gwarancji zatrudnienia na polskim rynku (jeszcze mało firm ich używa), żaden z nich nie pozwala też na zrobienie niczego czego nie mógbym zrobić w językach które już znam. Mało tego, ich ekosystemy są mniej rozbudowane z racji ich wieku. Często poruszane są kwestie wydajnościowe, jednak na ile to ma znaczenie w dobie taniej mocy obliczeniowej i przeładowanych Electronowych aplikacji?

Warto oczywiście poszerzać choryzonty horyzonty, ale czy macie wyznaczoną granicę kiedy powiedzieć "stop"? W którym momencie nauka nowych języków przestaje być produktywna? Macie jakieś doświadczenia z tym związane? Jak odróżnić hype od potencjalnie dobrego kierunku rozwoju?

6

żaden z nich nie pozwala też na zrobienie niczego czego nie mógbym zrobić w językach które już znam

W assemblerze tez sie wszystko da zrobic. Chyba nie w tym rzecz, co?

Jak odróżnić hype od potencjalnie dobrego kierunku rozwoju?

Problem jest taki, ze cos co jest przehypowane moze sie przyjac i za X lat byc standardem a cos co jest super kierunkiem w branzy, zwyczajnie przepasc w odmentach internetu.


Ja bym chyba w pierwszej kolejnosci patrzyl na jezyki, gdzie mozesz spojrzec na sprawe z innej strony. Czyli jak np. znasz Jave/C# to uczenie sie tego drugiego byc moze nie ma wiekszego sensu. Natomiast fajnie wziac np. Haskella i zobaczyc jak wyglada FP. Czesc z tej wiedzy mozesz przeciez nawet w imperatywnych jezykach aplikowac bo preferencja niemutowalnosci czy inne FP-rzeczy dobrze sie tam sprawdzaja. Ale jak znasz N jezykow funkcyjnych to byc moze nauka N+1szego to strata czasu?

I w tym kontekscie Go to np. takie lepsze C (tudziez gorsze bo ma GC) i jesli nie siedzisz w low level to Ci sie nie spodoba nawet.

1

@iteredi: Mnie GO wydał się taką mieszanka C i pythona więc zabrałem się za naukę. Programuję w nim jakieś 2 lata (1.5 - komercyjnie) i dziennie dostaję średnio 5 ofert na LinkedIn, albo maila. Na początku sporo ofert było z Niemiec, stanów czy Szwecji, teraz jednak widzę coraz więcej ofert z biura w Polsce. Nie wiem czy warto, mnie się podoba i dopóki mam frajdę z pisania w tym języku będę to robić. Potem pewnie przerzucę się na Rust, bo strasznie fajnie mi się w nim pisze, a na stare lata na Haskell bo trzeba się szanować :p

1

Zalety go = ?

Zalety rusta poza low lvl mem safe = ?

4

@szatkus:

Odczekać parę lat

ładny wykres standaryzowango ;) rozkładu normalnego
jednak "co z tą sigma"
Java, JavaScript mają już 25 lat i nie ma odważnego który by zawyrokował gdzie na krzywej jest ich obecny status.
C++ 36 lat i trzyma się nieźle
C prawie tak stary jak czas w Unix ;)

Więc odczekać parę lat?

0

@WeiXiao: Pytałeś o zalety więc go: https://yourbasic.org/golang/advantages-over-java-python/
Edit.
Kompletnie zapomniałem o jednej genialnej rzeczy - gotchas - jakie to jest fajne i ułatwia życie :)

Go ma też sporo wad. Niektórzy będą narzekać na brak generyków (za chwilę będą), "straszny" error handling, brak enumow, taki sobie typedef'ing, taki nie do końca OOP (choć ja nie uważam tego za wadę, brak jakiegoś standardu do obsługi pieniędzy (decimal) trzeba korzystać z zewnętrznych bibliotek.

Rust - nie znam się to się wypowiem - przy takim samym nakładzie pracy masz kod, który jest porównywalnie szybki a o wiele bezpieczniejszy. Znając C, łatwiej jest takiemu programiście przerzucić się na Rust, douczyć się borrow niż babrać w C++ - nie moja opinia. Community rust jest prześwietne, tak dużo pomocnych i pozytywnych osób to nigdy chyba nie widziałem.

1

Go ma już 11 lat https://blog.golang.org/11years w sumie niedużo, ale nie jest to nowość tak samo jak Rust. Oczywiście nie ma takiej popularności jak inne języki, bo ciężko się przebić.

Ja się uczę GO i robię małe projekty do wewnętrznego użytku w firmie Od lat w technologii MS, na GO trafiłem przez przypadek i mi się spodobał. Fanie wyjść ze stajni jednego dostawcy i spróbować czegoś innego. Tylko ja już nie mam dylematów z cyklu czy język pozwoli mi się rozwinąć. Po 20 latach kodowania perspektywa jest inna 😉

5
WeiXiao napisał(a):

Zalety rusta poza low lvl mem safe = ?

Nie rozumiem dlaczego Rust jest często szufladkowany jako język do niskiego poziomu, kiedy on potrafi być znacznie wyżej-poziomowy od Javy, Kotlina, C# i pewnie paru innych języków głównego nurtu używanych do pisania zwykłych aplikacji, gdzie wydajność nie ma znaczenia.

Główną zaletą Rusta nie jest wydajność. Tzn. wydajność jest oczywiście niewątpliwą zaletą, ale to nie jest nic nowego, w końcu C, C++, D są też bardzo wydajne i blisko sprzętu. Świetna wydajność jest tak tylko przy okazji.

Rust jest prawdopodobnie pierwszym popularnym językiem z systemem typów afinicznych. Do tego posiada wiele bardzo fajnych mechanizmów wysokopoziomowych:

  • uniemożliwienie wyścigów danych (data races)
  • statyczna kontrola czasu życia obiektów, łącznie z kontrolą zasobów innych niż pamięć (RAII - chyba jedna z najlepszych cech C++)
  • współdzielenie danych jest jawne w kodzie
  • const-correctness zrobione dobrze
  • mechanizm traitów (type-classes) jak w Haskellu lub Scali, zdecydowanie silniejsze od OOP
  • pattern matching
  • metaprogramowanie (makra, adnotacje)
  • async/await

Do tego jeszcze dorzućmy całkiem fajne narzędzia jak cargo, clippy czy fmt które kładą na łopatki wszystko co dotąd widziałem w popularnych językach (jak muszę dotknąć gradle lub mavena to czuję się jakbym się przeniósł do poprzedniego wieku).

Te wszystkie rzeczy powodują, że dużo łatwiej pisać czysty, trudny do popsucia kod. To jest tak jakby kolejny poziom statycznego typowania.

I co ciekawe, sam język wcale nie jest jakiś bardzo skomplikowany. Jest zdecydowanie mniejszy niż Python i Java.

1

Nawet jakby te technologie miały faktycznie zniknąć za 5 lat (na co się nie zanosi, bo zdążyły już obrosnąć wystarczająco dużą masą) nauka ich nie musi być czasem straconym. Co doświadczenie, to doświadczenie, sporo można się nauczyć nawet pracując w nieudanych językach/frameworkach/środowiskach/narzędziach - chociażby po to, by na własnej skórze się przekonać co nie działa i się nie sprawdza, by móc chłodzić zapały i zapędy kolejnych pokoleń nieświadomych entuzjastów, gotowych po raz kolejny włazić w tę samą dziurę i potykać się o te same przeszkody.

Parę lat temu zacząłem się uczyć Mongo, bo wypada przecież znać jakieś NoSQL-e. Ogółem moja opinia o tej bazie jest raczej przykra, a doświadczenia mało przyjemne, teraz raczej do niczego bym jej nie użył, przekładając nad nią inne technologie, w tym stare, poczciwe RDBMS-y. Z punktu widzenia projektowania takiej super zoptymalizowanej ścieżki rozwoju zawodowego był to zatem zły krok, bo zmarnowałem czas na technologię, której teraz ani nie używam, ba! odradzam innym. Ale właśnie dzięki temu, że się jednak wybrałem w te rejony mogę teraz odradzać, wskazując na własne, anegdotyczne doświadczenia. To też jakieś obycie, jakaś wiedza, jakieś obeznanie. Pozytywnym jest spróbowanie różnych narzędzi i różnych technologii chociażby dlatego, by wiedzieć której użyć dla jakiegoś konkretnego problemu, ponieważ zawsze środki dobiera się do celu i czasem jakiś język czy framework zwyczajnie pasuje bardziej w danej sytuacji.

Żaden z nich nie daje gwarancji zatrudnienia na polskim rynku

Czy w dobie pracy zdalnej, którą dodatkowo podkręciła sytuacja z pandemią, jest jeszcze tak ważne oglądanie się na lokalny rynek?

Mało tego, ich ekosystemy są mniej rozbudowane z racji ich wieku.

No, jeżeli boisz się wychodzenia ze strefy komfortu składania aplikacji z gotowych klocków, to faktycznie nie masz wyjścia, jak pozostanie przy największych graczach :)

PS: Żeby była jasność, ano Go ani Rust nie uważam za języki złe/nieudane. W obu pisało się przyjemnie, oba mają i swoje zalety i wady. Narzędzia jak narzędzia, dobiera się do celu, projektu, zastosowania, sytuacji, konkretnego problemu, doświadczenia reszty zespołu itd

0

Sama nauka języka da ci z pewnością nowe doświadczenie intelektualne ale niestety niewiele może zmienić na rynku pracy pod kątem twojej wartości bo język to ważna ale nie jedyna kompetencja jakiej dziś oczekuje się od programisty. Poza Go powinieneś umieć Dockera i Kubernetes albo chmury albo umieć pisać microservices i REST API, do tego dzisiaj nie szuka się prawie juniorów więc wiele ogłoszeń wymaga doświadczenia komercyjnego w Go. Też interesuję się Go i takie ogłoszenie widzę.

5

Jak odróżnić hype od potencjalnie dobrego kierunku rozwoju?

Jak jest wsparcie iluś dużych korporacji, to znaczy, że coś jest na rzeczy, a Rustem się duże korporacje interesują (np. AWS, Google, Huawei, Microsoft dołączyły do Rust Foundation).

Mało tego, ich ekosystemy są mniej rozbudowane z racji ich wieku.

JavaScript też miał mało rozbudowany ekosystem, ale w pewnym momencie zaistniał trend przepisywania wszystkiego, co się da na JavaScript (“Any application that can be written in JavaScript, will eventually be written in JavaScript.”). W Rust dzieje się to samo teraz - jest trend Rewrite Everything In Rust, gdzie też ludzie na pokaz piszą rzeczy w Rust, żeby wylądować w HackerNewsach, więc pompują ekosystem.

Często poruszane są kwestie wydajnościowe, jednak na ile to ma znaczenie w dobie taniej mocy obliczeniowej i przeładowanych Electronowych aplikacji?

No nie, tak nie będziemy rozmawiać. To zdanie pokazuje wszystko, co jest złe w obecnym frontendzie - zrobić zamulającą kobyłę, bo przecież moc obliczeniowa jest tania, każdy przecież może dokupić gamingowy sprzęt, żeby odpalić stronkę czy apkę w Electronie, a jeśli nie może, to niech mu zamula, ważne, żeby zapłacił za premium.

Warto oczywiście poszerzać choryzonty,

Poszerzać choryzonty? Nie warto. Nikt dobrze jeszcze nie wyszedł na takiej czynności ;)

0

A chcesz kiedyś zmienić pracę na taką gdzie będziesz pracował w takim języku? Czy jesteś gotów cofnąć się do juniora? Gdyż pewnie takie stanowisko zaproponują ci firmy w technologi, w której nie masz komercyjnego doświadczenia. Oczywiście taka nauka może cię rozwinąć, ale moim zdaniem nauka nowych jezykaów - aczkolwiek ciekawa - jest trochę przereklamowana. Dla obecnego pracodawcy jest to średnio wartościowe. Nie wiem, w czym piszesz, ale raczej bym szukał języka bardziej różnego od tego, co robisz aktualnie. Jak piszesz w obiektówce to jakiś funkcyjny i na odwrót.
Jak naprawdę chcesz zwiększyć swoją konkurencyjność na runku to może warto poświęcić ten czas na pracę nad umiejętnościami miękkimi, a nie na kolejnym językiem.

2
UglyMan napisał(a):

A chcesz kiedyś zmienić pracę na taką gdzie będziesz pracował w takim języku? Czy jesteś gotów cofnąć się do juniora?

Nie zgodzę się. Jak masz braki programistów w nowym języku to biorą seniorów z innego języka na mida/seniora w nowym języku. Oprócz tego niektóre firmy nie obchodzi brak doświadczenia komercyjnego w tym języku tylko jak zrobisz zadanie rekrutacyjne lub jak wypadniesz na rozmowie

1

Mam jednego klienta, dla którego przepisałem 2 scrapery (z Pythona na Rusta). Nie zrobiłem tego, bo musiałem, tylko chciałem (m.in. uczyć się Rusta). A w zasadzie miałem taki kaprys.

Moje wnioski:

  1. Scraper w Rust jest tak samo niezawodny jak scraper w Pythonie (tak, w Pythonie trzeba umieć pisać, to, że to jeden z najpopularniejszych języków, to nie oznacza, że z automatu wszyscy co mają Python w CV potrafią w nim pisać)
  2. Scraper w Pythonie jest w stanie osiągnąć taką wydajność, że wszyscy Cię zablokują za flood API/strony. Sprawdzone wielokrotnie, oczywiście nie polecam.
  3. Dostępność bibliotek - nie wiem czy wymaga to komentarza? Chyba nie. Strzelam jednak, że nigdy, ale to nigdy, czy to Rust czy Go (który ma fajne liby do web scrapingu) nie osiągną "jakości" obecnych libów w Pythonie, po prostu nie widzę tego.
  4. Pisanie scrapera - Rust restrykcyjnie "pilnuje" składni, to i dobrze i źle. Dobrze - bo "wymusza" pisanie starannego kodu i krótkich funkcji, aby nie wpaść w problemy z borrow checkerem, źle - bo w Pythonie, nawet przy pisaniu tzw. niezawodnym (nadmiarowy kod sprawdzający typy i wyjątki), osiągnie się to samo wielokrotnie szybciej i prościej.
  5. Binarka Rusta jest prostsza w deploju, ale docker sprawia, że apka w Python/Rust jest tak samo łatwo deplojowalna.

Ogólne podsumowanie jest takie, że zarabiałem X na scraperze w Pythonie, zarabiam X gdy jest w Ruście. Klient nie zauważył różnicy, VPS jest ten sam. Polecam dobierać technologie do potrzeb i nie sugerować się hypem.

0

@Krolik: wymieniłeś problemy, które często nie zależą od języka, a od projektu i architektury głównie. Jak jesteś w projekcie, w którym takie problemy z Pythonem występują, to nie wydaje mi się to winą samego języka.

Odpowiadając na "pierwszą rzecz z brzegu" posłużę się screenshotami z bpythona, choć to jeden z wielu dostępnych ułatwiaczy życia (ciekawe, czy jest coś takiego dla Rusta?)

Dokumentacja słaba, no sprawdźmy...

Warto dodać, że jest autouzupełnianie i te podpowiedzi dostaję na bieżąco. Ale ponoć to słaby opis, więc sprawdźmy działanie:

Stało się jak napisano. Nic nie zwrócono, więc funkcja nic nie zwraca, na logikę. Nie wiem co tu jest trudnego i złego w dokumentacji - jeszcze lepszą konsolę ma PyCharm z wywalonymi zmiennymi obok. Więc nie wiem czy chcesz na tych polach porównywać Rusta z Pythonem, bo to iście karkołomne będzie.

Jeszcze raz powtarzam, kończąc dyskusję (bo spodziewam się nowych "warunków" księżycowych): poproszę o mierzalne rzeczy, że w Ruście jesteś bardziej produktywny czy coś. Albo miernik czystości kodu, albo "kompletności dokumentacji", czy na co sie tam powołujesz, bo z wpisu na wpis ciągle powołujesz się na coś nowego. Ja dyskutuję z liczbami i danymi, a nie z odczuciami. Sytuacja u Ciebie w projekcie jest również nieweryfikowalna z zewnątrz, chyba, że to projekt OS, ale to wtedy rzuć linkiem do kodu i pokaż 2 takie same narzędzia, napisane w Ruście i Pythonie i pokaż, że w Ruście jest ono jakkolwiek prościej napisane.

3

@TurkucPodjadek: Porównujesz coś co jest na rynku już spory szmat czasu. Daj chwilę RUST'owi. Już teraz masz https://depth-first.com/articles/2020/09/21/interactive-rust-in-a-repl-and-jupyter-notebook-with-evcxr/ tylko patrzeć jak będzie projekt jak ten bpython. Ja używam VSC i jeśli chodzi o podpowiadanie to nie widzę różnicy między Pythonem, a Rustem.

3

W kwestii porównania ekspresywności Python vs Go vs Rust: https://www.nicolas-hahn.com/python/go/rust/programming/2019/07/01/program-in-python-go-rust/
Ogólnie ciekawy wpis, bo gostek napisał ten sam program w trzech językach.

Statystyki kodu:

$ cloc diffimg-rs
       7 text files.
       7 unique files.                              
       3 files ignored.

github.com/AlDanial/cloc v 1.86  T=0.01 s (561.4 files/s, 27057.1 lines/s)
-------------------------------------------------------------------------------
Language                     files          blank        comment           code
-------------------------------------------------------------------------------
Rust                             3             32             10            168
Markdown                         1              5              0             15
TOML                             1              1              2              8
-------------------------------------------------------------------------------
SUM:                             5             38             12            191
-------------------------------------------------------------------------------

$ cloc diffimg-python
       9 text files.
       9 unique files.                              
       3 files ignored.

github.com/AlDanial/cloc v 1.86  T=0.01 s (843.3 files/s, 44813.8 lines/s)
-------------------------------------------------------------------------------
Language                     files          blank        comment           code
-------------------------------------------------------------------------------
Python                           5             42             22            179
Markdown                         1             30              0             63
Bourne Shell                     1              6              4             26
-------------------------------------------------------------------------------
SUM:                             7             78             26            268
-------------------------------------------------------------------------------

Jak widać samego kodu w Pythonie i Ruście jest bardzo zbliżona ilość, nie ma żadnego 2x narzutu, w Rust jest nawet minimalnie mniej kodu.

Z kodu natomiast widzę, że przynajmniej wersja Rust nie jest zrównoleglona. Zrównoleglenie tego kodu do dopisanie dosłownie 3 linii. A jak jest w Pythonie?
Bo jak ostatnio chciałem zrównoleglić wysyłanie requestów do serwera to mnie szlag trafił jak poryte to było. Rust jest IMHO dużo wyżej-poziomowy niż Python. Ze znanych mi języków ekspresywnością ustępuje tylko Scali.

A wracając do tematu głównego wątku -
dla mnie istotne jest czy nowa technologia wprowadza faktycznie jakąś nową jakość. Coś, co:

  1. jest ważne
  2. nie zostało rozwiązane nigdzie indziej, lub przynajmniej wiąże się z jakimś dużym bólem lub nakładem pracy

W przypadku Rust można z całą pewnością powiedzieć, że Rust rozwiązał ból związany z undefined behaviour w zarządzaniu pamięcią oraz programowaniu współbieżnym bez wprowadzania dodatkowych kosztów w runtime. To jest duża rzecz, bo dotąd nikomu to się nie udało. Wszystkie inne języki poszły na łatwiznę wprowadzając dodatkowy narzut pamięciowy / czasu wykonania (często znaczny, jak w przypadku Pythona, Rubyego czy nawet Javy). Dlatego nie jest to chwilowa moda.

Chwilowa moda to jest jak powstaje język o nieco innej składni, który w sumie nie rozwiązuje żadnego problemu nierozwiązanego nigdzie indziej, ale zyskuje wielką popularność tylko dlatego, że ktoś w nim napisał fajną bibliotekę - sztandarowy przykład Ruby i RoR. Po czasie takie same biblioetki zostały napisane w innych językach i przewaga okazała się ulotna. Moim zdaniem podobnie jest teraz z Pythonem i Numpy / Pandas. Samego Pythona prawie nikt by kijem nie dotknął gdyby nie biblioteki. Ale biblioteki są dość łatwe do przeportowania, więc to nie będzie działać wiecznie,.

5

Moim zdaniem Rust powinien się skupić na wypieraniu C++, a nie na walce na wszystkich frontach naraz.

Nagły wzrost popularności Pythona w ostatnich latach jest wśród ludzi, którzy nie są stricte programistami i nie chcą się uczyć o projektowaniu aplikacji (np. kwestie typu gdzie jakiej abstrakcji użyć, albo jakiej struktury danych). Dla przykładu JPMorgan uczy Pythona trejderów i analityków: https://www.efinancialcareers.co.uk/news/2020/06/jpmorgan-python-training-analysts-and-traders

0

@Krolik:

Z kodu natomiast widzę, że przynajmniej wersja Rust nie jest zrównoleglona. Zrównoleglenie tego kodu do dopisanie dosłownie 3 linii. A jak jest w Pythonie?
Bo jak ostatnio chciałem zrównoleglić wysyłanie requestów do serwera to mnie szlag trafił jak poryte to było.

Kocham Pythona i kocham równoległość -- niestety, osobno. W Pythonie w praktyce nie ma równoległości (vide: GIL), a jeśli chcesz prawdziwą, to musi być oparta o procesy systemowe... :/

0

@Krolik: ja nie wiem co Ty porównujesz, ale Ci pomogę:

https://github.com/nicolashahn/diffimg/blob/master/diffimg/diff.py - 70 linii kodu, z czego 21 linii to komentarze, czyli efektywnie 49 linii
https://github.com/nicolashahn/diffimg-rs/blob/master/src/lib.rs - 130 linii kodu, z czego 7 to komentarze, efektywnie 123 linie kodu

Widać, że różnica jest tutaj więcej niż 2 krotna jak chodzi o linie kodu. Przynajmniej w mojej matematyce.

2
Wibowit napisał(a):

Moim zdaniem Rust powinien się skupić na wypieraniu C++, a nie na walce na wszystkich frontach naraz.

Ale niby dlaczego?

Zauważ, że C++ to jest w sumie bardzo potężny i uniwersalny język, ale ma kilka problemów:

  • undefined behaviour i masa pułapek w które można wpaść nieświadomie
  • naleciałości historyczne i dużo duplikujących się (makra/template, rzutowanie w stylu C itp) lub niepotrzebnych mechanizmów (OOP)
  • miejscami marna ergonomia i dużo certolenia z mało istotnymi szczegółami technicznymi (nagłówki, makefiles itp.)

Coś co zostanie po usunięciu problemów może mieć dużo szersze zastosowania niż pierwowzór. Wiele języków stworzono właśnie po to aby uniknąć problemów C++, np. Javę. Rust rozwiązuje je inaczej więc siłą rzeczy staje się dla nich konkurencją, a nie tylko dla C++.

0

@TurkucPodjadek: Przecież sam autor pisze, że to porownanie jest lekko śmieszne.. a dodatkowo:

Its source code is also only about 3kb, but including the Pillow dependency, it weighs in at 24mb(!). Again, not a fair comparison because I’m using a third party imaging library, but it should be mentioned.

Mnie bardziej się podoba, ze autor cieszy się z poznawania nowych jezyków, dostrzega zalety i wady, ale przede wszystkim ma fun z tego co robi.

0

@TurkucPodjadek:

Po przesiadce z pythona/php zauważalne zmniejszenie ilości błędów, ci sami devi a mniej fuckupow na produkcji XD. W pewnych miejscach widoczny wzrost wydajności przy takim samym nakładzie pracy na napisanie kodu. — Dregorio 2021-02-21 22:17

EDIT: to akurat o Go

0

@stivens: czy jeśli napiszę, że ja jestem bardziej produktywny w Pythonie, to będzie to jakiś dowód na coś? Bo zastanawiam się, co tutaj uznaje się za dowód. Widzimi się, czy coś obiektywnie mierzalnego?

Ja znalazłem taką stroną porównawczą: https://rosetta.alhur.es/compare/Python/Rust/# - masz konkretne algorytmy/zadania i widzisz porównanie w ilości kodu i outputu. Nie mówię, że to ostateczne rozwiązanie kwestii, ani, że to najlepszy test z cyklu co "lepsze", bo narzędzia dobiera się do odpowiedniego problemu. Z tym nie dyskutuję. Jak również z tym, że w Ruście będzie mniej błędów - to oczywiste, ale nigdy nie będzie się w takim języku pisać coś szybciej niż w Pythonie (zakładając, że oba mogą być zastosowane do tej samej domeny problemu)

1

A w jaki sposob udowodnisz mi, ze jestes bardziej produktywny w Pythonie? Przeciez LoC nie uwzglednia debugowania, pozniejszego czytania kodu, fuckupow.

Jesli mi powiesz ze w Pythonie robisz mniej bledow to zwyczajnie nie uwierze bo w najlepszym przypadku robisz tyle samo (ale to chyba musialbys byc jakims nad-programista). Ale tego nawet nie probujesz mowic - fair.

EDIT: czy Ty na prawde klepiesz kod 24/7 (czy tam 8/5) i nawet nie odwrywasz palcow od klawiatury, ze 20 linijek w ta czy tamta jest wazniejsze od jakosci?

0

No właśnie ilość linii ma małe znaczenie. Nawet w tym przykładzie, który wkleiłem widać, że obydwa źródła są mniej więcej na tym samym poziomie abstrakcji. W wersji z Rust nie ma jakichś kosmicznych ceregieli z lifetime'ami, borrow checkerem czy zarządzaniem pamięcią. W wersji Rust nie widać w ogóle niskopoziomowych szczegółów. To nie jest taka różnica jak między asmem i C, czy przetwarzaniem tekstu w C używając funkcji strxxx a Perlu używającym regexpów.

0

@stivens:

A w jaki sposob udowodnisz mi, ze jestes bardziej produktywny w Pythonie? Przeciez LoC nie uwzglednia debugowania, pozniejszego czytania kodu, fuckupow.

Jesli mi powiesz ze w Pythonie robisz mniej bledow to zwyczajnie nie uwierze bo w najlepszym przypadku robisz tyle samo (ale to chyba musialbys byc jakims nad-programista).

Dla złośliwości można odwrócić pytanie: jak udowodnisz, że jesteś bardziej produktywny w Ruście?

Bo zdaje mi się, że przed samym językiem programowania i tym, ile on nam błędów zwali na głowę jest architektura aplikacji. To architektura aplikacji zrobi z najszybszego języka najwolniejszy, a z najbardziej "poprawnego", najbardziej zabugowany. I nie będzie miało znaczenia, czy to będzie Python, Haskell, Rust, Go czy coś innego.

Więc zakładam, że porównanie dotyczyć będzie tej samej aplikacji, napisanej w dwóch różnych językach, ale działających w obrębie tej samej architektury. Tu wówczas dochodzimy do takich problemów, jak np. dostępność bibliotek - język popularniejszy, będący na rynku dłużej, siłą rzeczy będzie ich miał więcej, a wśród tej większej ilości będzie więcej tych lepszej jakości - wynika wprost z matematyki, nawet jak założymy, że np. w teorii dla Rusta powinno być więcej "dobrych", bo w Ruście piszą bardziej "świadomi" i doświadczeni programiści. Ale tu znowu siła złego wchodzi. Więc pisząc w języku mniej popularnym maszą większą szansę, że trafisz na brak odpowiedniej biblioteki - więc albo będzie pisać ją od zera, albo zrobisz obejście w architekturze i zdelegujesz taska do innego mikroserwisu - w każdym z tych przypadków tracisz tę "produktywność"

Zresztą, wróćmy do kwestii "poprawności" i debugowania. Strzelam w ciemno, że IDE do Rusta, cokolwiek bierzemy za nazwę, nie ma takiego toolingu jak IDE do Pythona (PyCharm) - debugger, profiler, cała reszta. Oczywiście pisząc w Pythonie "na pałę", zrobię więcej błędów i więcej będe debugował, bo język mi na to pozwala. Rust mi na to nie pozwoli. Przy czym, jak wspomniałem: w Ruście (w stosunku do Pythona) będzie mniej błędów, które mają związek z użyciem lub niewłaściwym użyciem systemu typów, ale błędów już typowo biznesowych będzie podobna liczba.

Teraz, w zasadzie ostatnio, miałem przypadek, że w Ruście poszedł w stringu niewłaściwy identyfikator (nie od tego rekordu, co powinien - oba mają identyczną długość i są stringiem - po prostu pomyliłem miejsca w zapytaniu). Standardowo system typów tego nie złapie, jak polegam "tylko" na String. Oczywiście, zaraz ktoś wyskoczy z argumentem, tym, że mogłem opakować w jakiegoś strukta, albo w jakiegoś enuma, to miałbym jakąś pewność - że używam właściwego ID - tylko, że zwiększa to znacząco nakład pracy (w stosunku do prostego użycia stringa).
W Pythonie zrobię podobny błąd (chyba, że mypy zdecyduję się użyć, wtedy też mam szansę go wyłapać - tylko mypy zwiększa znacząco nakład pracy po stronie Pythona), więc nie czaruję się, że któryś mnie nie zawiedzie, tylko to sama baza danych sprawdza te identyfikatory po swojej stronie, zamiast polegać na "bezbłędnych" językach.

0

Na Razie Rust-a jako takiego dobija właśnie ów brak bibliotek, bo w jaki temat bym nie popatrzył, to brakuje masy rzeczy, co "konkurencja" ma już dobrze zrobione i wypróbowane. Web Scrapping...? Pustki w bibliotekach do selektorów CSS i XPath. Aplikacja desktopowa...? Praktycznie same wrappery na biblioteki C/C++. Web development...? Tak, ale jak sama ta strona przyznaje, kombajnu pokroju Django nie ma i trzeba samemu wszystko spinać. Gamedev...? Niby coś się dzieje, statnio sporo szumu (również u nas na mikroblogu ktoś wrzucał) zrobił nowy framework Bevy, do tego jest starszy Amethyst, jeszcze starszy Piston, żaden jako-taki nie jest kompletny. Nie ma startu do środowiska C++, gdzie są giganci jak Unreal (z 20 latami rozwoju na karku) czy CryEngine, małe, społecznie rozwijane silniki jak Urho, czy też osobne renderery, które można wsiąść, by jak z klocków postawić własny silnik (Filament, BFGX, dziadek Ogre). Lista na wzór tej jest po prostu biedna. A już pomijając samą dostępność bibliotek, co chociażby z kwestią kompilacji na konsole? O ile wiadomo, wsparcie jest praktycznie zerowe.

I tak, można twierdzić, że biblioteki przyjdą z czasem i community je zrobi, ale to trochę jednak tak nie działa. Bo kolosy jak Qt czy OpenCV mają z 20 lat przewagi i nie stoją w miejscu, czekając aż się je dogoni. Zastępowanie technologii nowszymi językami jest niestety szalenie mozolne. Widać to chociażby po programowaniu numerycznym, gdzie wciąż szwendają się staruszki pisane w Fortranie, tyle że schowane za zasłoną z bardziej przyjaznych interfejsów. Ponoć ostatnie lata trwał ten słynny szał "przepisujemy wszystko na Rusta", wykrywał we wszelkich rankingach ulubionych języków - w praktyce jednak tego nie widać. Argumenty, że "poczekajcie, będą biblioteki" słyszałem w niezmienionej formie już od paru lat. A czasy się zmieniły, to już nie te lata, gdy każdy projekt był pisany od zera i każda gra miała własny silnik. Teraz jest era frameworków i pierwsze co robi programista, to szuka gotowego rusztowania by się w nim rozgościć.

Tak że, język może i przyjemny, ale moja śmieszna gra pisana dla zabawy po godzinach jednak powstaje w C++...

2

Praktycznie same wrappery na biblioteki C/C++

A dlaczego to miałoby być złe? Utrudnia to co najwyżej instalację, bo libki C++ musisz kompilować po ichniemu a nie z użyciem Cargo, ale jeśli masz dobre bindingi, to wszystko ładnie działa.

W Pythonie większość popularnych bibliotek jak numpy czy pandas to też wrappery na biblioteki pisane w C++.

0

@Królik a co pan sądzi o frameworku Tauri napisanym w Rust. To będzie jakaś alternatywa dla Elektrona i Fluttera?
https://tauri.studio/en/

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