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

zboj

  • *****
  • 1 507
    • Zobrazit profil
    • E-mail
Re:Je C++ dobrá volba na větší projekt?
« Odpověď #30 kdy: 04. 08. 2015, 04:39:20 »
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.

V GC je alokace O(1), malloc (nebo new) občas může trvat déle. U většiny aplikací je to stejně jedno.


JS

Re:Je C++ dobrá volba na větší projekt?
« Odpověď #31 kdy: 04. 08. 2015, 07:50:11 »
V tom, ze Python ma GIL a zjevne se s tim nic moc delat nebude. Coz je v 21. stoleti ponekud trapne :)

Proc by to bylo trapne? Realita je, ze nikdo nevi co s tim. A pokud vim, tak GIL je problem pouze u CPU-bound aplikaci, ktere jsou napsane primo v Pythonu. GIL neznamena, ze Python nemuze provadet veci konkurentne (jako treba GUI vlakna), ani to neznamena, ze ho externi knihovna nemuze obejit. Konecne, kdyby se GIL odstranil, znamenalo by to snizit vykon jednoduchych (jednovlaknovych) skriptu, coz je asi tak 90% vyuziti Pythonu. Navic, diverzita je dulezita; kdyby vsechno fungovalo (/bylo navrzene) jako JVM, jaky by to melo smysl?

Froggy

Re:Je C++ dobrá volba na větší projekt?
« Odpověď #32 kdy: 04. 08. 2015, 08:17:26 »
Mé zkušenosti z mnoha projektů: Záleží na použití: pokud děláš multiplatformní GUI, pak C++ a Qt; GUI pro Linux, pak C++ a GTK nebo KDE libs; GUI pro Windows, pak C# a .NET. Pro embeded GUI je vhodný specializovaný framework a C++ - ale s úspěchem lze použít i C# a Javu (záleží na OS a procesoru). Pro servery - opět záleží, co děláš - pokud je potřeba komunikace s HW nebo nízkoúrovňový přístup, tak C/C++. Pro práci s DB potom Java nebo C#. Mně se upřímně Java moc neosvědčila, takže doporučuji C#. Javu zde sice mnoho lidí doporučovalo, ale upřímně - neznám žádnou rychlou velkou aplikaci v Javě - zejména, pokud jde o GUI. Navíc k Javě se v mém okolí většinou uchýlí lidé, co moc programovat neumí (nic proti Javě samotné) a ten kód podle toho pak vypadá. V C++/C# týmech najdu většinou kvalitnější programátory - čímž neříkám, že v Javě není mnoho opravdových borců, co píšou skvělý SW! Naopak v C++ týmech zas najdu hodně exotů.

Re:Je C++ dobrá volba na větší projekt?
« Odpověď #33 kdy: 04. 08. 2015, 08:43:13 »
Souhlasím, že v GUI aplikacích to využiju parádně, moje vyjádřená pochybnost (Python jako lepidlo) se však týkala jen grafické vrstvy GUI aplikace. Proto nekliknu a nepřepočítává... po kliknutí se spustí nativní aplikace, jejíž procesorový čas řídí OS a ne Python. Zatímco já si povídám skrz guiksicht s Pythonem, nativní aplikace vyřeší multiprocesorově problém a výsledek přichystá Pythonu na podnose, kde si ho příležitostně vyzvedne a použije v komunikaci se mnou.
Spouštět pro každou GUI událost (to nemusí být jenom kliknutí, ale třeba i najetí myší do nějaké oblasti) by bylo tragicky neefektivní a nedělá se to tak. Když už se chce tahle masařka Pythonu obejít, dělá se to tak, že se GIL releasne (to má nějaké předpoklady) a provede se nativní kód v novém vláknu. Nebo se v novém vláknu spustí celý nový interpret. Každopádně to znamená, že v tom novém vláknu nemůžeš volně manipulovat s datovými strukturami, se kterými jinak v Pythonu pracuješ.

Pokud by se to dělalo tak, jak píšeš, tak by tam ten Python byl jenom na ozdobu, protože drtivá většina zpracování by jela v tom jiném jazyce.

Proc by to bylo trapne? Realita je, ze nikdo nevi co s tim.
No právě. A to je v 21. století poněkud trapné, že se v jazyce nedá rozumně psát konkurentní aplikace...

A pokud vim, tak GIL je problem pouze u CPU-bound aplikaci, ktere jsou napsane primo v Pythonu. GIL neznamena, ze Python nemuze provadet veci konkurentne (jako treba GUI vlakna), ani to neznamena, ze ho externi knihovna nemuze obejit.
Jasně. Ale je to prostě opruz, musí se to řešit, vznikají chyby, kód je složitější... Je to prostě podobná berlička jako když do by-design jednovláknového JavaScriptu namatleš tisíce callbacků (ideálně vnořených tak do 5. až 75. úrovně) a pak ti z toho jde hlava kolem...

Konecne, kdyby se GIL odstranil, znamenalo by to snizit vykon jednoduchych (jednovlaknovych) skriptu, coz je asi tak 90% vyuziti Pythonu.
Nemám proti Pythonu vůbec nic, je to podle mě nadstandardně pěkný jazyk a na skripty ho používám moc rád, ale na větší věci (a to je naše téma) se podle mě moc nehodí, hlavně kvůli GILu a ani volitelné podpoře typů. Že je dneska móda cpát Python všude a ohýbat ho na všechno, je jiná věc.

Navic, diverzita je dulezita; kdyby vsechno fungovalo (/bylo navrzene) jako JVM, jaky by to melo smysl?
Na tom něco je. Potom ale jestli je semafor dobře navržený na to, aby řídil dopravu, nemusí být úplně dobrý nápad ho používat jako soustruh. Od toho tu je prostě soustruh, který se na to hodí líp :)

Radek Miček

Re:Je C++ dobrá volba na větší projekt?
« Odpověď #34 kdy: 04. 08. 2015, 09:15:25 »
Navic, diverzita je dulezita; kdyby vsechno fungovalo (/bylo navrzene) jako JVM, jaky by to melo smysl?

Nemusí být úplně jako JVM. Například nemusí mít jednu velkou haldu, jenž sdílí všechna vlákna, může mít i více hald a jen některé z nich mohou být sdílené více vlákny.


Re:Je C++ dobrá volba na větší projekt?
« Odpověď #35 kdy: 04. 08. 2015, 09:18:23 »
No právě. A to je v 21. století poněkud trapné, že se v jazyce nedá rozumně psát konkurentní aplikace...
Tohle musím upřesnit: ne v jazyce, ale v jeho konkrétní implementaci. IronPython ani JPython afaik GIL nemají.

perceptron

Re:Je C++ dobrá volba na větší projekt?
« Odpověď #36 kdy: 04. 08. 2015, 09:55:10 »
Citace
Javu zde sice mnoho lidí doporučovalo, ale upřímně - neznám žádnou rychlou velkou aplikaci v Javě - zejména, pokud jde o GUI.
ebay amazon twitter linkedin foursquare (ok nieco z toho je scala)

gui java je zriedkava: prakticky je mozne vidiet len netbeans, eclipse a intellj ideu. alebo nieco na rich client platforme. alebo gui pre predaj listkov na vlaky na slovensku.

Re:Je C++ dobrá volba na větší projekt?
« Odpověď #37 kdy: 04. 08. 2015, 10:23:43 »
Spouštět pro každou GUI událost (to nemusí být jenom kliknutí, ale třeba i
najetí myší do nějaké oblasti) by bylo tragicky neefektivní... že v tom novém vláknu nemůžeš volně manipulovat s datovými strukturami, se kterými jinak v Pythonu pracuješ.
Pro každou událost ne, na spoustu z nich přeci stačí ten Pythonskej 'multithreading', s nejvyšší jemností jedné python-instrukce. Problémy se přeci dají plus-mínus rozdělit do dvou disjunktních množin:
- na ty, které trvají delší dobu a na tuto delší dobu nebudou potřebovat další manipulaci s
datovými strukturami
- na ty druhé ;-)

Asi mám díky své nezkušenosti špatnou představu o potřebách pro skutečně velké projekty, protože jsem zatím nevylezl ze svého písečku, na kterém mnou zmíněná představa dokonale funguje O:-) Pro skutečně hodně paralelizované věci má zřejmě Java+Clojure trumf v rukávu ... diverzita rulez!, díky za trpělivost :-)



Jann

Re:Je C++ dobrá volba na větší projekt?
« Odpověď #38 kdy: 04. 08. 2015, 10:31:59 »
Mé zkušenosti z mnoha projektů: Záleží na použití: pokud děláš multiplatformní GUI, pak C++ a Qt; GUI pro Linux, pak C++ a GTK nebo KDE libs; GUI pro Windows, pak C# a .NET. Pro embeded GUI je vhodný specializovaný framework a C++ - ale s úspěchem lze použít i C# a Javu (záleží na OS a procesoru). Pro servery - opět záleží, co děláš - pokud je potřeba komunikace s HW nebo nízkoúrovňový přístup, tak C/C++. Pro práci s DB potom Java nebo C#. Mně se upřímně Java moc neosvědčila, takže doporučuji C#. Javu zde sice mnoho lidí doporučovalo, ale upřímně - neznám žádnou rychlou velkou aplikaci v Javě - zejména, pokud jde o GUI. Navíc k Javě se v mém okolí většinou uchýlí lidé, co moc programovat neumí (nic proti Javě samotné) a ten kód podle toho pak vypadá. V C++/C# týmech najdu většinou kvalitnější programátory - čímž neříkám, že v Javě není mnoho opravdových borců, co píšou skvělý SW! Naopak v C++ týmech zas najdu hodně exotů.

GUI, GUI, GUI… Rozhodovat se o jazyku, v němž mám napsat nějaký projekt, na základě předpokládaného GUI, tak tomu říkám úchylárna pro 21. století. Říkám to pořád – někteří lidé by se opravdu měli zabývat něčím jiným než vývojem programů.

nula

Re:Je C++ dobrá volba na větší projekt?
« Odpověď #39 kdy: 04. 08. 2015, 21:02:49 »
Ja bych rekl:
 pokud mas neomezene prostredku(no, proste hodne casu/programatoru/problem je paralelizovatelny) a potrebujes brutalni vykon, popripade potrbujes mit garantovane doby reakci, tak C++. Pokud ten vykon nepotrebujes a potrebujes to mit hotovo rychleji/levneji, ci potrebujes aby to mohl maintenovat lecjaky lempl, tak Java.
Pokud to neni vubec narocne na vykon a chces usetrit naklady na vyvoj jeste vic, a neni to prilis rozsahly sytem(kde se uz sakra projevi typovany jazyk), tak Python.

Re:Je C++ dobrá volba na větší projekt?
« Odpověď #40 kdy: 04. 08. 2015, 21:42:44 »
Co je velkej projekt. Předně bych velký projekt rozdělil na malé projekty. Já mám (pod správou) třeba hodně věcí v C++, zpravidla servery. Aplikace jsou v Javě, v Objective C (hádejte které), ale na serverech se používá i PHP. Na webovkách javascript. Jedna komponenta je napsaná v C#

skvee

Re:Je C++ dobrá volba na větší projekt?
« Odpověď #41 kdy: 04. 08. 2015, 22:31:23 »
Chces vydelat prachy? Java

Chces si honit brko ve sklepe pred ostatnima zombikama? Instrukce

Re:Je C++ dobrá volba na větší projekt?
« Odpověď #42 kdy: 04. 08. 2015, 23:29:41 »
Chces vydelat prachy? Java

Chces si honit brko ve sklepe pred ostatnima zombikama? Instrukce
Umět assembler je dobré aspoň pasivně. Onehdy jsem řešil, jak tento kód

Kód: [Vybrat]
flag = (b==true?1:0)

může způsobit, že v proměnné flag bude číslo 52 (GCC 4.8)

Až průzkumem přeloženého kódu na úrovni -O3 jsem zjistil, v čem je zakopanej pes.

nou

Re:Je C++ dobrá volba na větší projekt?
« Odpověď #43 kdy: 05. 08. 2015, 08:41:24 »
Ake datove typy su ten flag a b? A teda v com bol problem?

nula

Re:Je C++ dobrá volba na větší projekt?
« Odpověď #44 kdy: 05. 08. 2015, 11:57:02 »
Chces vydelat prachy? Java

Chces si honit brko ve sklepe pred ostatnima zombikama? Instrukce

To je samozrejme pi... jak mraky.Nevsim jsem si, ze by se poradne hry delaly treba v Jave.
Java ma svoje vyhody v rychlosti vyvoje a nevyhody ve vykonu aplikace. Vetsinou se o vykon aplikace(pripadne setreni prostredku) nejedna, proto nema smysl se trapit s c++.