Forum Gry Hobby Sprzęt Rozmawiamy Archiwum Regulamin

Forum: Pytanie do zawodowych programistow: C++ czy Rust ?

27.06.2019 13:30
Tlaocetl
1
Tlaocetl
196
Ocenzurowano

Pytanie do zawodowych programistow: C++ czy Rust ?

Nie programowalem od wielu lat, wiec podpytam ekspertow.
Mam do napisania maly projekt inzynierski. Ze wzgledu na ogromna liczbe iteracji - chodzi o obliczenia statystyczne - zalezy mi na wydajnosci. Pierwszym pomyslem bylo C++ ale czytam ostatnio o Rust. Co radzicie wybrac?
Wyniki chcialbym wizualizowac przez strone web, dopisac kawalek kodu w jakims jezyku webowym, czy mozna skorzystac z gotowych frameworkow? Z jakich srodowisk i narzedzi wspierajacych korzystacie? Moze projekt w przyszlosci sie rozrosnie, zastanawiam sie nad systemem kontroli wersji.
Z gory dzieki za sensowne podpowiedzi.

27.06.2019 13:40
2
odpowiedz
Orbital
0
Legionista

Myślę, że prędzej, a przynajmniej znacznie większą ilość ekspertów znajdziesz na stackoverflow, czy podobnej stronie, niż na forum o grach komputerowych (tylko trzeba brać pod uwagę, że Rust jest ich nową ulubioną zabawką).

post wyedytowany przez Orbital 2019-06-27 13:43:30
27.06.2019 14:12
3
odpowiedz
Likfidator
120
Senator

Pamiętaj, że możesz korzystać z wielu języków i budować projektu z wielu komponentów. Jeśli zależy Ci na wydajności, to możesz zbudować dedykowany program obliczeniowy w C++, używający tylko absolutnie podstawowych bibliotek i funkcji, by nie komplikować kodu i znacząco ułatwić poszukiwanie błędów i wycieków pamięci, a cały interfejs zbudować na jakimś języku zarządzanym, czy webowym komunikującym się z procesem obliczeniowym.

Dobrą praktyką jest dzielenie projektów na mniejsze komponenty i definiowanie sposobów komunikacji między nimi, tak by łatwo było rozwijać, czy podmieniać na inne pojedyncze komponenty.

Jeśli zależy ci na wydajności, to zobacz, czy czasem nie ma dostępnych algorytmów wielowątków, czy takich do przetwarzania równoległego na GPU dla problemu, który chcesz rozwiązać.

Ja bym zaczął od zwykłej konsolkowej aplikacji C++, która przyjmuje plik z danymi na wejściu i plik wyjściowy do zapisania wyników. Później zbudował do tego GUI i ewentualnie rozbudował aplikację obliczeniową C++ o komunikację między procesową, by w GUI zaimplementować pogląd dla stanu obliczeń i możliwość wstrzymania czy anulowania.

Do stworzenia GUI warto pomyśleć o frameworkach i innych gotowcach ułatwiających większość rzeczy.

Nie wiem co to za projekt, ale jeśli to ma być używane regularnie, to można pomyśleć o serwerze na mikro dystrybucji linuxa, by wycisnąć pełną moc ze sprzętu, albo nawet wykupić dostęp do chmury obliczeniowej i przetwarzać na zewnętrznej maszynie.

post wyedytowany przez Likfidator 2019-06-27 14:12:54
27.06.2019 15:52
elathir
4
odpowiedz
elathir
97
Czymże jest nuda?

Olej C++, ten język to potęga w rękach profesjonalisty i mordęga w jakichkolwiek innych. Co więcej jeżeli tych obliczeń statystycznych nie musisz liczyć w miliardach iteracji na godzinę to radę czy to Java, czy jeszcze lepiej C#. Do tego dojdzie łatwiejsza integracja z webem, bo C++ nie służy do tego i jest to strasznie upierdliwe. Osobiście polecam C# z racji, iż widać po tej technologii, że wyciągnęła wnioski z błędów Javy (nie bez powodu kopiują jego rozwiązania do Kotlina).

A jeżeli obliczenia są naprawdę niewiarygodnie ciężkie i operują na dużych ilościach danych to i tak najwydajniejsza będzie DB z racji możliwości wydajnych operacji na kolekcjach.

Bo co masz na myśli mówiąc ogromną liczbę iteracji? Tysiące? Miliony? Miliardy? Tryliony? Oraz jak złożonych iteracji? Średnie? Odchylenia standardowe? Czy jakieś własne wielokrokowe algorytmy?

Z doświadczenia wiem, że jak ktoś kto nie jest naprawdę dobry w C++ przez własne błędy uzyska dużo niższa wydajność niż w C#, który na błędy jest dużo bardziej odporny. Zwłaszcza jeżeli chodzi o operacje na wątkach, gdzie w C++ trzeba dość dobrze architekturę ogarniać podczas gdy w C# framework zrobi to za ciebie z olbrzymią skutecznością, ty musisz tylko wyznaczyć fragmenty kodu do wykonania asynchronicznego a to czy wykonać je będzie lepiej równolegle i synchronicznie to już sam .net oszacuje co sprawdzi się lepiej. W C++ ludzie mają tendencję do nadmiernego spamowania wątkami co spowalnia działanie apki przez fakt, że ponad połowa zasobów idzie na to by tworzyć wątki dla operacji trwających ułamki sekund.

Moja rada:
Jeżeli web ma być śmiesznie prosty i tylko prezentować wyniki to C# z MVC
Jak web ma być konkretny i ładny z wypasem to C# + Rest Api + Angular
Narzędzia VS Studio, wersja darmowa da radę jak projekt nie jest komercyjny dla C#, VC Code dla Angulara, jak projekt jest komercyjny to VS code dla obydwu.

I żadnej komunikacji plikowej, to jest wolne i upierdliwe. Jak możesz to unikaj. Zwłaszcza, jeżeli ma być tego sporo, operowania na plikach ważących dziesiątki jak nie setki GB to nic przyjemnego a debugowanie błędów w nich to mordęga.

Co do nowoczesnych języków interpretowanych, świetna sprawa, ale napisanie w nich wydajnych ciężkich obliczeń w wielu iteracjach wymaga trochę wiedzy a w często trudniej o proste tutoriale niż do C#, który ma ich zatrzęsienie.

Co do Rusta, jeżeli jest dość obiecujący, ale jeżeli chodzi o biblioteki to jest totalna bieda. Niby są ale połowa się do niczego nie nadaje, ot takie sklepane na szybko. Ogól nie język bardziej dla kogoś kto ma czas i ochotę nauczyć się czegoś, co za dwa lata może być naprawdę świetne. Na twoim miejscu jednak wziąłbym coś dojrzalszego. Zresztą jest to język bardziej pod programowanie systemowe i w tym kierunku jest rozwijany.

Jak podasz więcej szczegółów co do tego co zamierzasz zrobić to mogę bardziej pomóc. Bo od charakterystyki danych i obliczeń dużo zależy. Np. jak będą to głównie operacja na dużych wolumenach danych ale proste matematycznie to wyniósłbym je do języka bazodanowego, dobry Sql na MsSql lub Oraclu (ewentualnie postgre za nic MySql bo utknął w latach 90 i jest koszmarnie niewydajny) będzie w takim wypadku o rząd wielkości szybszy niż cokolwiek co napiszesz gdzie indziej.

post wyedytowany przez elathir 2019-06-27 16:14:01
27.06.2019 16:15
blood
5
odpowiedz
blood
241
Legend

Nie jestem obecnie programistą z zawodu, ale przewałkowałem kilkadziesiąt języków programowania podczas studiów IT. Gdybym miał obecnie przysiadać do projektu i decydując się na narzędzia i stos technologiczny, którego po prostu się najprzyjemniej używa i ma szeroki zakres zastosowania, to wybrałbym C#, ASP.NET Core MVC i Angular jak wspomniał kolega wyżej, jeśli coś bardziej zaawansowanego w warstwie prezentacji ma się dziać. Visual Studio + Resharper to świetne narzędzia i ciężko o przyjemniejsze środowisko programowania wg. mnie. Jako, że .NET Core jest open source to można sobie to spokojnie hostować na Linuxie i np NGINX.

Jeśli chodzi o statystykę, to językiem pod nią skonstruowanym jest R.

post wyedytowany przez blood 2019-06-27 16:16:46
Forum: Pytanie do zawodowych programistow: C++ czy Rust ?