Nim vs Crystal vs Go

0

Czy może ktoś podać jakiś benchmark z tymi językami programowania, aby sprawdzić który z nich jest wydajniejszy? Wszystkie są kompilowane, chyba nie mają wskaźników ale mają odśmiecanie pamięci.
https://nim-lang.org/
https://crystal-lang.org/

0

Z uwagi na to ze Nim kompiluje sie do C zalozylbym ze przy zadaniach bez dynamicznej alokacji bedzie wygrywac Nim.

Natomiast jesli chodzi o GC to juz raczej dwa pozostale. Ale nie mam i nie znam na to benchmarkow.

0

@vpiotr: AFAIK nie da się używać Nim bez GC, więc nie ma to znaczenia.

@tedy wszystkie te języki mają wskaźniki, ale nie mają arytmetyki wskaźników (GC w końcu działa tylko na dynamicznie alokowanej pamięci, więc musisz mieć jakiś wskaźnik na nią). Co do pytania w temacie, to szybszy w jakich zastosowaniach? Czy do szybkości wliczasz czas developmentu albo refactoringu? Jaki program chcesz napisać? Czy znasz którykolwiek z tych języków lub ich "języki rodziców" (Python w przypadku Nim i Ruby w przypadku Crystal).

0

Jeśli chodzi nowe języki programowania oraz niszowe języki programowania to w tym zestawieniu tylko Rust dogania C i C++, a Go jest niesamowice wolny. Wolniejszy nawet od Javy w której na co dzień programuję.

1

IMO to nie ma znaczenia, bo często to algorytmy są wolne a nie języki programowania. Do czego potrzebny jest Ci ten benchmark? Pod jakim kątem? Poza tym np sieć potrafi tak spowolnić, że to będzie obojętne co chodzi pod maską. No chyba, że piszesz coś baaardzo niskopoziomowego, to wybiera się język pod usecase. Bez szerszego kontekstu ciężko powiedzieć.

0

Uczę się dopiero C i chciałem tworzyć programy okienkowe. Na razie wybrałem C potem nauczę się GTK3. Ale interesuje mnie drugi język programowania, który jest prostszy od C, ma czytelną składnie, jest bardziej nowoczesny, czyli posiada GC, brak wskaźników, mniejsze problemy z wyciekami pamięci, jest kompilowany, brak nullów i ma statyczne typowanie. Języki skryptowe mnie nie interesują. A do maszyn wirtualnych jvm. clr jakoś nie mam przekonania, zawsze te programy desktopowe działały wolno.

1

A do maszyn wirtualnych jvm. clr jakoś nie mam przekonania, zawsze te programy desktopowe działały wolno.

Scala ma wersję Native https://github.com/scala-native/scala-native podobnie jak Kotlin, ale jest narzędzie, które potrafi przekompilować już istniejące projekty Javowe, Scalowe, Kotlinowe, Clojurowe, etc do samodzielnego pliku wykonywalnego. Jest to native-image z GraalVM.
Instrukcja użycia native-image: https://www.graalvm.org/docs/reference-manual/aot-compilation/
Reszta dokumentacji: https://www.graalvm.org/
Repo GraalVM na GitHubie: https://github.com/oracle/graal

Szybkość takiej Javy skompilowanej AOT (ahead-of-time w przeciwieństwie do JIT = just-in-time) jest niestety obecnie sporo niższa niż zJITowanej: https://benchmarksgame-team.p[...]fastest/java-substratevm.html jednak AOT znacznie przyspiesza uruchamianie programów, np tutaj koleś skompilował Javowego klienta HTTP i ten staruje szybciej niż cURL: https://sites.google.com/a/at[...]runsin30msandusesonly4mbofram

Scala-Native już teraz osiąga wysoką wydajność, porównywalną z rozgrzaną JVMką: https://github.com/scala-nati[...]native/releases/tag/v0.4.0-M2 a przebija ją mocno w czasie uruchamiania (Scala-Native nie potrzebuje JITa oczywiście). Za jakiś czas (kilka lat?) GraalVM AOT powinien dogonić Scala-Native będąc jednocześnie dużo bardziej uniwersalnym (Scala-Native nie obsługuje zwykłych JARów). Oracle mocno w Graala inwestuje.

1

Jesli GUI jest Twoim celem to sprobuj:

  • Free Pascal plus Lazarus
  • C++ i Qt lub wxWidgets
  • Java plus Swing i Netbeans
1

@tedy: odpowiadam na komentarz, bo nie chce schodzić z merytoryką do komentarzy gdzie miejsce offtopu.

Pascal czy Lazarus a może nawet Delphi zupełnie nie jest tym samym co C. Niemniej też bym nie szedł w tym kierunku, bo Embarcadero to troll licencyjny i trzeba bulić ciężkie pieniądze za nie do końca dopracowane narzędzia (Delphi), a Lazarus nie nadaje się do użycia produkcyjnego (mimo, że są tutaj zapaleńcy co walczą dzielnie i tworzą w tym soft, ale to wszystko hobbystycznie, niszowo). Warto liznąć C++, ale nie nauczysz się go łatwo i mało kto tak na prawdę go potrafi. Ja bym polecił Tobie C# - jest multiplatformowe, no poza tym, że GUI to jedynie dobre na Windows a GUI multiplatformowe jeszcze w powijakach (Avalonia UI), lub Jave. Jeśli masz złe doświadczenia to z programem danych a nie z jvm czy clr - dobrze napisany soft działa szybko i wcale nie tak łatwo zepsuć mu wydajność. Sam używając C# pisałem systemy real time i serio się da i obecnie rozbudowane programy będą działały szybciej niż kompilowane, szczególnie jeśli kod pisze początkujący.

0

Z takich waznych rzeczy pamietaj ze ani nim ani crystal nie sa jeszcze w stabilnych wersjach. Jesli juz celujesz w cos "niszowego" to proponuje RUST'a lub właśnie Golang'a (chociaż sam jestem zhajpowany na nim'a ale raczej wole nie pisać czegoś co ma trafić na produkcję w rozwiązaniu które nie jest jeszcze w wersji stabilnej)

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