[C++] Dobranie języka do zadania...

0

Witajcie

Jakiś czas programuje w kilku językach, ale C++ i C były dla mnie znane tylko ze słyszenia, chociaż pare funkcji w Windows Embbeded napisałem to czuje się w tych dwóch językach jeszcze jak ort!. Problem tkwi w tym, że musze napisać pewną dość skomplikowaną aplikację, która wykonuje bardzo dużo obliczeń (i głównie to jest moim zmartwieniem). Do wyboru mam C#, JAVA, C++ Rzędy wielkości liczb wykorzystywanych w obliczeniach to double, long, i głównie tego typu liczby, czasami trafi się rodzynek np ushort, ale sporadycznie. Ok to ogólnie:

  • działam na windowsach,
  • operuje na danych z baz Sqlite, Acces
  • będę tworzył tymczasowe obiekty, na podstawie kilku tabel,
  • potrzebne mi będą również okienka i logowanie błędów,
  • OBLICZENIA, obliczenia, obliczenia, logarytmy, potęgi, dzielenia, sinusy

Teraz problem, w c++ z poradnikiem tworze funkcje :), nie znam zasad działania kolekcji i tworzenia zwalniania obiektów jak i ich zajmowanych zasobów. Dam sobie z tym rade w krótkim czasie w C#, myślę, że Java też się nie oprze, ale zastanawiam się czy jeśli zrobie jakąś klase singelton w c++ i będę ją wykorzystywał w c# czy nie wyjde na tym najlepiej, bo będzie szybko i powinno być wydajnie. Co wy na to ? Co doradzacie ?

PS. Czy c++ to język na który można postawić projekt, który będzie rozwijany i może będzie żył jeszcze za 6-8 lat ?

0

Jeśli znasz język nie najlepiej, to nawet nie myśl o pisaniu w nim projektu, który ma żyć kolejne 6-8 lat. Po prostu za rok będziesz chciał wszystko przepisać od nowa ;) Znasz C# - napisz w nim, nie zmarnujesz czasu na walkę z oknami, bazami, i resztą otoczki. Osobiście to bym się zastanawiał mocno nad zatrudnieniem C++ nawet do obliczeń numerycznych - kosmicznie szybciej NIE będzie, raczej.

Ostatecznie, zawsze możesz PÓŹNIEJ zmieniać niektóre części. Zaprojektuj dobrze moduły i klasy, zaimplementuj w C#. IMO dopiero w drugim kroku możesz niektóre klasy przepisać w C++/CLI, kiedy będziesz wiedział co działa wolno, i co optymalizować. Kwestie wydajności trudno przewidywać, najczęściej po profilowaniu okazuje się, że wolne są inne części kodu, niż się przypuszczało.

0

si3ma - szczerze, nie obraz sie o nic, mowie to neutralnie - jesli nie znasz C++ i tworzysz z "poradnikiem" nie wybieraj tego jezyka jako podstawy projektu ktory ma przezyc 6-8lat.. po prostu - z szacunku dla Twojego czasu i czasu osob ktore beda potem nad tym siedziec. cpp jest specyficzny, ma sporo 'haczykow' o ktorych przynajmniej dobrze jest miec swiadomosc.. zreszta, w ogole, wybierajac jezyk ktorego (praktycznie ujmujac) totalnie nie znasz, niejako z definicji, bedziesz popelnial mase bledow koderskich i projektowych ktore skutecznie zatruja Tobie/Wam/Im zycie w przyszlosci..

biorac pod uwage, ze piszesz pod winda, ze musisz sie jakos komunikowac z wzbogacona o Accessem, wez C#.. msoft sie w miare postaral zeby z poziomu .net/C# latwo sie wspolpracowalo SqlServerem, Accessem i innymi bazami danych

jesli chodzi zas o obliczenia - miedzy w C++ uzyskasz troche lepsza wydajnosc niz w C#, ale tak naprawde, "wiekszosc wzrostu wydajnosci" uzyskasz nie schodzac w operacje niskopoziomowe, a - lepiej projektujac wykonywanie obliczen i np. dzielac je sensownie na dostepne procesory. jeszcze byly sens np. samemu napisac dostosowany pod procesor kod w asm wykorzystujacy rozne specyficzne operacje, albo napisac kod w BGSP i wyslac go na karte graficzna do przeworzenia.. ale chyba nie chcesz az tak sie starac? ]:>

0

calego projektu na pewno nie w c++, sprobowalem napisać cos w c++/cli co będzie mi liczylo z dostarczonych danych pewne wartości i rzeczywiście przy 1.000.000 powtórzeń tych obliczeń różnica pomiedzy c# w obliczeniach na vectorach w bloku unsafe nie była taka duża. Było to różnica 0.7 sek a przy normalnym (obiekty i blokach "safe") kodzie az 6 sek na korzyść c++, więc zrobię to na wskaźnikach w c#, teraz tak się zastanawiam czy by właśnie tej pracy nie podzielić na wątki i o ile są dostępne to i na procesory. A co do postarania się żeby było szybciej to wiadomo, że ciągle się staramy :p, ale do asmb nie będę się posówał :p to różnica jednego położenia i zdjęcia ze stosu (może chodzi o fingerpirnt).

Da się jakoś rade ;)

Dzięki za poświęcony czas, elo

PS. skupiałem się na obliczeniach bo jest ich cała masa, a dane z zaledwie dwóch, trzech tabel ;)

0

nie mialem na mysli przepisania na assembler w takiej samej formie, a przepisania go z uzyciem np, instrukcji przetwarzania wektorowego, ktorych w C# nie uswiadczysz, chyba ze opakowane w funkcje biblioteki jakiejs:)

a jesli masz 2-3 tabele, to jeden pies.. takie zapytania sql to i mozna ze stringow+= zrobic... zalozylem ze przyjamniej parenascie skoro w ogole o bazie danych wspominasz;)

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