Je C++ dobrá volba na větší projekt?

vyvojar

Je C++ dobrá volba na větší projekt?
« kdy: 02. 08. 2015, 22:48:14 »
Nemám zrovna velkou zkušenost s C++ co se týče nějakých větších projektů (jazyk jako takový ovládám myslím celkem solidně).
Pokaždé když jsem ale něco většího dělal, tak jsem poměrně dost částu trávil tím, že jsem přemýšlel, jestli mám vracet hodnotou nebo ukazatel, kdo pak uvolní pameť atd.. V podstatě to vždycky vede na použití shared pointrů, které čítají reference a objekt uvolní, když už na něj žádná reference neexistuje. Nevýhodou shared pointrů je, že se pro to čítání referencí používají atomické instrukce (compare and swap) a ty jsou přece jenom o něco ménně efektivní.
No co tím chcí říct, jestli má cenu vůbec používat C++, pokud tedy nejde o projekt, který opravdu vysloveně potřebuje ze železa vyždímat úplné maximum.
Dlé mého názoru je daleko lepší použití Javy, protože JVM se posouvá dál a dál a čím dál tím víc se výkonnost blíží jazykům, které se překládají přímo do nativních instrukcí procesoru. Samozřejmě ať každý používá co umí a v čem se mu dělá lépa, ale objektivně kdy má cenu volit C++?


javaman

Re:Je C++ dobrá volba na větší projekt?
« Odpověď #1 kdy: 02. 08. 2015, 23:09:57 »
Odpověděl sis sám. Na všechno velké je Java ideální. Výkon luxusní a celkově to má vše, co bys našel jinde. C++ je pro honibrky na fórech, ale reálně je to s ním horší.

sfasdf

Re:Je C++ dobrá volba na větší projekt?
« Odpověď #2 kdy: 02. 08. 2015, 23:27:21 »
objektivně kdy má cenu volit C++?
-lowlevel. Konkretnu instrukciu v Jave nezavolas.

-nativne API v Jave priamo nezavolas, zostava ti JNI a to zase pada k niecomu kompilovanemu. Ked ma program spajat alebo intenzivne vyuzivat C API, tak to nema zmysel robit v Jave

-praca s resourcami, ak je jej vela. V C++ sa premenne destruuju, ked vyjdu zo scope. V Jave nic take automaticke nie je a programator si to musi vzdy osetrit, takze tam lahsie spravi chyba. (Finalizer je v tomto zmysle nanic, kedze sa nemusi zavolat)

-predpovedatelnost. V Jave sa sice da napisat aj herny engine aj kodek videa, ale obidve da dost prace, aby to pri GC bezalo plynule.

Radek Miček

Re:Je C++ dobrá volba na větší projekt?
« Odpověď #3 kdy: 02. 08. 2015, 23:52:37 »
Alternativně lze místo Javy použít C# - pro nízkoúrovňový kód máte k dispozici i ukazatele a ruční alokaci paměti.

Citace
V C++ sa premenne destruuju, ked vyjdu zo scope.

Což je užitečné pouze v případě, kdy je životnost zdroje vázána na scope.

Citace
Finalizer je v tomto zmysle nanic, kedze sa nemusi zavolat

Destruktor se rovněž nemusí zavolat.

Citace
predpovedatelnost

To také nemusí být tak jednoduché - např. při lavinovitém uvolňování paměti (musíte to rozdělit, což GC v Javě udělá za vás).

%@@#$

Re:Je C++ dobrá volba na větší projekt?
« Odpověď #4 kdy: 03. 08. 2015, 03:28:57 »
Tak co se memory managementu týče, C++ je jednoznačně rychlejší, na tom se snad shodneme. Jestli to má být náročná aplikace, tak bych C++/C určitě zvážil. Celkově si prostě kvůli výkonu radši vyberu C/C++ aplikaci než něco v Javě. Ale je to něco za něco... když se vám runtime stará o paměť, tak se samozřejmě vyvíjí snáz. Jestli to je něco co se bude neustále vyvíjet a kde je rychlost vývoje důležitá, Javu bych zvážil.


gamer

Re:Je C++ dobrá volba na větší projekt?
« Odpověď #5 kdy: 03. 08. 2015, 04:09:24 »
Ta otázka je položena dost nešťastně. Nelze to rozhodnout bez dalších znalostí o projektu a týmu. Jako člověk, který rozhoduje o tom, jestli zvolit Javu nebo C++, bys měl projít zhruba takovou úvahou:

Poběží to na serveru? Java
Poběží to na klientovi? C++
Potřebuju, aby to mělo definované latence? C++
Je mi jedno, že se to občas na nějakou dobu zasekne? Java
Potřebuju, aby to bylo co nejvíc portabilní a běželo to i na slabém HW? C(++)
Vědí ostatní programátoři v týmu, co je to pointer? Ne? Java
Vědí co je to pointer, ale naposledy ho použili ve škole, když dělali semestrálku? Java
Půlka týmu si raději vezme dovolenou, když zaslechne slova segfault, coredump a gdb? Java
Hodí se mi nějaká technologie/framework, kterou přímo nabízí C++ nebo Java?

Další body do rozhodovací tabulky si už doplň podle konkrétního projektu.

kasld=ec

Re:Je C++ dobrá volba na větší projekt?
« Odpověď #6 kdy: 03. 08. 2015, 06:35:41 »
Pujde na neco pouzit rozsahla knihovna dostupna jen v jave? Java

Mirek

Re:Je C++ dobrá volba na větší projekt?
« Odpověď #7 kdy: 03. 08. 2015, 06:59:03 »
Řekl bych, že tím cos napsal sis odpověděl už sám - asi ti zbývá jen ta Java.

zboj

  • *****
  • 1 507
    • Zobrazit profil
    • E-mail
Re:Je C++ dobrá volba na větší projekt?
« Odpověď #8 kdy: 03. 08. 2015, 08:43:21 »
C++ je poněkud náročnější na programátora. Výhodou Javy je GC a knihovny. Nicméně pokud je k dispozici dobrý programátor, lze z C++ vyždímat víc.

Radek Miček

Re:Je C++ dobrá volba na větší projekt?
« Odpověď #9 kdy: 03. 08. 2015, 09:32:21 »
Potřebuju, aby to mělo definované latence? C++

V Javě můžete použít real time GC.

V C++ si naopak musíte pohlídat již zmíněné lavinovité uvolňování paměti (real time GC to pohlídá za vás).

Radek Miček

Re:Je C++ dobrá volba na větší projekt?
« Odpověď #10 kdy: 03. 08. 2015, 09:38:16 »
Tak co se memory managementu týče, C++ je jednoznačně rychlejší, na tom se snad shodneme.

Paměť pro některé datové struktury může být rychlejší spravovat pomocí GC (samozřejmě v C++ si GC můžete implementovat, nicméně pohodlnější může být použít nějaký jazyk s GC).


vyvojar

Re:Je C++ dobrá volba na větší projekt?
« Odpověď #11 kdy: 03. 08. 2015, 09:57:48 »
Tak co se memory managementu týče, C++ je jednoznačně rychlejší, na tom se snad shodneme. Jestli to má být náročná aplikace, tak bych C++/C určitě zvážil. Celkově si prostě kvůli výkonu radši vyberu C/C++ aplikaci než něco v Javě. Ale je to něco za něco... když se vám runtime stará o paměť, tak se samozřejmě vyvíjí snáz. Jestli to je něco co se bude neustále vyvíjet a kde je rychlost vývoje důležitá, Javu bych zvážil.

No já jsem slyšel, že GC v HotSpot je vůbec nejrychlejší memory management (tzn. by měl být i efektivnější než implementace malloc). Těžko říct, jak to objektivně nějak srovnat. Asi celkový čas strávený alokacemi/dealokacemi u nějakého většího programu je nejmenší. Padlo to někde v přednášce  "Understanding Java Garbage Collection", co byla na Java One 2014 konferenci.

mc

Re:Je C++ dobrá volba na větší projekt?
« Odpověď #12 kdy: 03. 08. 2015, 10:06:48 »

Což je užitečné pouze v případě, kdy je životnost zdroje vázána na scope.


Ve kterém případě není životnost zdroje vázána na některý scope?

Re:Je C++ dobrá volba na větší projekt?
« Odpověď #13 kdy: 03. 08. 2015, 10:19:20 »
Ve kterém případě není životnost zdroje vázána na některý scope?
Nejde o to, jestli na některý, ale jestli na nějaký konkrétní.

Radek Miček

Re:Je C++ dobrá volba na větší projekt?
« Odpověď #14 kdy: 03. 08. 2015, 10:24:14 »

Což je užitečné pouze v případě, kdy je životnost zdroje vázána na scope.


Ve kterém případě není životnost zdroje vázána na některý scope?

Často je vázána na nějakou událost. Například soubor / databázi můžete chtít zavřít, když všichni (nebo někteří) klienti uzavřou spojení. Nebo píšete asynchronní výpočet pomocí callbacků. Pokud netrváte přímo na zdrojích, tak dalším příkladem jsou různé dokazovače, které odvozují formule v logice - když například odvodíte, že musí platit formule (A nebo B), a poté odvodíte, že musí platit A, tak formuli (A nebo B) můžete odstranit - tj. životnost (A nebo B) končí v okamžiku, kdy jste odvodil A.