Zobrazit příspěvky

Tato sekce Vám umožňuje zobrazit všechny příspěvky tohoto uživatele. Prosím uvědomte si, že můžete vidět příspěvky pouze z oblastí Vám přístupných.


Příspěvky - zboj

Stran: 1 ... 81 82 [83] 84 85 ... 101
1231
Vývoj / Re:Vyplatí se učit C++?
« kdy: 31. 12. 2015, 20:19:13 »
Vyhoda je, ze v Jave casto jen z JITu dostanete zadarmo vykon, pro ktery musite v C++ "makat".
Moje zkušenost v Linuxu je taková, že i triviální čistě aritmetický kód (bez nadměrných přístupů k memberům a k prvkům polí) je rychlejší v C++ než v Javě. To ale silně závisí na JIT a na překladači C++. U kompilátoru C++ nezáleží na časové náročnosti samotného překladu, záleží jen na výsledném strojovém kódu. JIT musí zvolit kompromis mezi časem překladu a výsledkem.

Naopak "makat" a dělat prasárny musím v Javě, aby výkonově dohnala přehledný ručně neoptimalizovaný kód v C++. Např. se to týká práce s binárními formáty, jak už tu někdo zmínil.
Pro C++ doporučuju clang, překládá rychleji než GCC a generuje kód pro všechny možné architektury (díky LLVM).

1232
Vývoj / Re:Vyplatí se učit C++?
« kdy: 31. 12. 2015, 19:37:40 »
Porovnám to pak na x86, ARM, MIPSu a PowerPC.

A tak se deje, ze vsichni, pokud neni opravdu zbyti (hry*, embeded), voli variantu malinko pomalejsi aplikaci + vice pameti (ktera je nyni smesne levna) a mene programovani (ktere je stale velmi drahe).

???



Pravda. Čili je to naopak, než co tu opakovaně (nesmyslně) zaznělo: V Javě, ne C++, se musí za účelem dosažení řádově srovnatelné rychlosti "prasit".

Jste si to spatne interpretoval - pokud chcete optimalizovat kdekoliv, tak spadnete k praseni. Pokud vyberete specifickou ulohu, u ktere z vlastnosti technologie vyplyva neefektivita... Uplne stejne se to muze udelat i naopak a "shodit" nejen C++ ale jakykoliv jazyk, jak ze jsou nevykone.

Pokud tohle povazujete za produkcni kod (reagujete na muj prispevek, takze asi ano), tak stejne pouzijete specializovanou knihovnu a neresite to takto kulatenim kola. Ocekavate, ze Java implementace bude pomalejsi, ale to jsem ja v prispevku, na ktery reagujete napsal, ze to tak casto bude :D. Rozdil je v tom, pokud bude opravdu rozdil ve vykonu i s pouzitim spec. knihovny, ze v Jave to zboucha kdejaky stredoskolak za chvilku, kdezto v C++ si za to reknou trochu vic a chvilka to byt nemusi. Vyhoda je, ze v Jave casto jen z JITu dostanete zadarmo vykon, pro ktery musite v C++ "makat".
Na mnohých příkladech je jasně vidět, že JIT mnoho výkonu nepřináší, a je jedno, je-li to způsobeno nedostatkem jazyka, nebo posunutým periheliem Merkuru. Knihovna nebyla použita schválně, a specializovaný seznam pro komplexní čísla v ní stejně není.

V širším kontextu se ukazuje, že jazyky s VM jsou slepou uličkou vývoje a připravily nás o celou jednu dekádu.

P.S. Rád si počkám na high-level kód v Javě "shazující" C++ (ale budu čekat dlouho, neb neexistuje, opět šlo jen o mlácení prázdné slámy...).

1233
Vývoj / Re:Vyplatí se učit C++?
« kdy: 31. 12. 2015, 18:50:59 »
Doufám, že se shodneme, že níže uvedený kód - odvar bottlenecku z jedné reálné javovské aplikace později přepsané do Go - je high-level. Takže vyzývám všechny, co si myslí, že umí Javu, a mají pět minut volného času, aby předvedli, jaký kód v Javě bude stejně rychlý. Porovnám to pak na x86, ARM, MIPSu a PowerPC.

Kód: [Vybrat]
class Complex {
public:
        double re;
        double im;
        Complex(double r, double i) : re(r), im(i) {}
        Complex operator+(const Complex& x) const {
                return Complex(re + x.re, im + x.im);
        }
};
...
std::vector<Complex> list;
for (auto y = Complex(0, 0); y.re < 10'000; y = Complex(y.re + 0.0001, y.im + 0.0001)) {
    list.emplace_back(y);
}
auto x = Complex(0, 0);
for (const auto& y : list) { x = x + y; }
std::cout << x;

V Javě to na rozdíl od C# naráží na absenci hodnotových typů a na absenci specializace generik. Tj. hádám, že v Javě bude třeba udělat specializovaný seznam pro třídu Complex; uvnitř takový seznam může být implementován jako dvě pole doublů.

Pravda. Čili je to naopak, než co tu opakovaně (nesmyslně) zaznělo: V Javě, ne C++, se musí za účelem dosažení řádově srovnatelné rychlosti "prasit".

1234
Vývoj / Re:Vyplatí se učit C++?
« kdy: 31. 12. 2015, 17:45:15 »
<trolling>Buďme rádi, že Java existuje, výběh pro patlaly se hodí. Noční můrou by bylo, kdyby se tato sorta lidí pokoušela psát aplikace v C nebo C++.</trolling>

Člověku, co zná jen Javu (a tudíž ji fanaticky hájí a vynáší do nebes, jako noef), se nedá vysvětlit, že C++ je stejně high level jazyk.

<trolling>Prase se taky těžko přesvědčuje, aby se neválelo ve vlastních ho..ech.</trolling>

Opravdu? Vidim tu snahu o trolling, protoze vas prispevek nejen, ze je jak od lopaty, navic je nepravdivy. (Coz nabizi otazku, zda opravdu neni od lopaty, ze...) Rozhodne neznam jen Javu, nejnovejsi verzi jsem dokonce snad ani nepouzil. Usekl jste si pekny trapas, vzdyt primo v tomto vlaknu propaguji Scalu a alternativni pristupy nekolikatou stranu (zminl jsem napr. i Haskell, Frege a F#).

A ze bych Javu vychvaloval, nebo dokonce "vynasel do nebes", to myslite opravdu vazne? Protoze asi nejste prilis bystry, tak mi nezbyva, nez se citovat:

... Nevim, jestli se citite urazen vyrokem, ze C++ je spatlanina (pejsek a kocicka), ale je to bohuzel pravda. A rozhodne to nerikam proto, abych "vyhral" diskuzi. Podobny nazor mam i na JavaScript, ve kterem nyni prevazne pracuji. A prestoze Java mi prijde o trochu lepsi, tak ma take hodne much (nejvetsi asi generika, ve srovnani s C# je to slabota, a to .NET moc nemusim). ...



Ja nepopiram high-level aspekt C++, jen jsem rikal, ze pokud pouzivate tento high-level pristup, tak je jedno, jestli delate v C++ nebo v Jave, dosahnete vykonostne stejneho vysledku (dokonce tu nekdo zminoval nejakou studii od Googlu). Pokud se pujde vice "low-level", tak velkym rozdilem bude cas a narocnost vyvoje vymenou za lepsi vykon. Tzn. napsat projekt v C++ vyjde zadavatele v kazdem pripade draz, nez v Jave. Vysledny produkt u high-level pristupu, pominu-li pametovou narocnost, bude davat stejne rychle stejne vysledky a tudiz je rozdilem pouze cena prace. Vzhledem k tomu, ze Java je navrzena tak, aby v ni mohl zacit delat skoro kdokoliv (az se nabizi ono drazdive slovo "opice"), se neni cemu divit, ze hodinova sazba zacinajiciho Javisty a CPPisty se asi budou pomerne dost lisit. No a u "low-level" pristupu s rucnim tunenim pristupu k pameti a opravdovymi zisky na vykonu to vyjde zakaznika velmi draho, protoze hodinova cena C++ profika je velmi vysoka. A tak se deje, ze vsichni, pokud neni opravdu zbyti (hry*, embeded), voli variantu malinko pomalejsi aplikaci + vice pameti (ktera je nyni smesne levna) a mene programovani (ktere je stale velmi drahe).

Predchozi tvzreni podporuje i Tiobe index. Nevim tedy, jak moc je realne vypovidajici, ale C++ vykazuje celkem patrny trend - dlouhodoby postupny pokles.

*: U indie her se davno pouzivaji "pomale" jazyky jako C# a Java. Co je zajimave, ze uz i do AAA her zacinaji prorazet, prestoze spise jen pro skriptovani a UI, jazyky a technologie jako Adobe Air (v podstate Flash, UI v MMORPG, napr. Tera), Lua (napr. addony ve WoW) nebo JavaScript (skriptovani v Unity Enginu).

PS: Patlat a bastlit se da v jakemkoliv jazyku, to ze delate v C++ z vas lepsiho programatora nutne nedela ;).

Doufám, že se shodneme, že níže uvedený kód - odvar bottlenecku z jedné reálné javovské aplikace později přepsané do Go - je high-level. Takže vyzývám všechny, co si myslí, že umí Javu, a mají pět minut volného času, aby předvedli, jaký kód v Javě bude stejně rychlý. Porovnám to pak na x86, ARM, MIPSu a PowerPC.

Kód: [Vybrat]
class Complex {
public:
        double re;
        double im;
        Complex(double r, double i) : re(r), im(i) {}
        Complex operator+(const Complex& x) const {
                return Complex(re + x.re, im + x.im);
        }
};
...
std::vector<Complex> list;
for (auto y = Complex(0, 0); y.re < 10'000; y = Complex(y.re + 0.0001, y.im + 0.0001)) {
    list.emplace_back(y);
}
auto x = Complex(0, 0);
for (const auto& y : list) { x = x + y; }
std::cout << x;

1235
Vývoj / Re:Vyplatí se učit C++?
« kdy: 31. 12. 2015, 16:53:26 »
Lua (napr. addony ve WoW) nebo JavaScript (skriptovani v Unity Enginu).
Souhlasím s tou Lua. Na skriptování nestvůr a jiných věcí asi není nic vhodnějšího.

PS: Patlat a bastlit se da v jakemkoliv jazyku, to ze delate v C++ z vas lepsiho programatora nutne nedela ;).

No hlavně nedělá horšího, pomalejšího nebo dražšího....

... i když, aby C++ programátor byl přínosný, musí být dobrý, a pokud je dobrý, nebude levný. Ale to možná platí i jinde.

To platí všude :)

1236
Vývoj / Re:Vyplatí se učit C++?
« kdy: 30. 12. 2015, 19:44:46 »
mna by zaujimalo, teda smerujem otazku na tych co mi odporucili FP, ze ako sa to da uplatnit v beznom zivote, v praci a ci sa to da sklbit aj s normalnymi jazykmi, napr F# so C#.
FP se teď cpe všude mozně, od Javy po Swift. Vzniká z toho kočkopes, nicméně určitě není na škodu základy FP znát, přinejmenším část se dá úspěšně uplatnit i v OO jazycích, zejména při konkurenčním programování. Kód v FP bývá také kratší, ale prý méně čitelný (posledně uvedené není můj názor, ale mnozí si stěžují).

1237
Vývoj / Re:Vyplatí se učit C++?
« kdy: 30. 12. 2015, 17:33:00 »
Stačí vzít std::tuple. Nebo tu strukturu kvůli pojmenování. Jinak třeba Swift umožňuje pojmenovat prvky tuplu.

Jj pojmenovani tuple si swift propujcil z jazyka D. Celkem pekny jazyk ten swift, zda se ze okopirovali jen to nejlepsi z vetsiny jazyku (mysleno pozitivne).
Přesně tak, a autoři se tím ani nijak netají. Žádný jiný jazyk nenabízí to, co Swift, na jednom místě. Navíc se překládá do LLVM IR a má pekelně rychlou standardní knihovnu. Hodně se inspiroval jazykem Go od Google.

1238
Vývoj / Re:Vyplatí se učit C++?
« kdy: 30. 12. 2015, 15:59:54 »
Rozumné jazyky (včetně C++ od verze C++11) mají tuples.

Já si zpravidla definuju třídu nebo strukturu (třídu public). Třeba jen kvůli názvům proměnných i z nějakého dokumentačního důvodu.

Jinak zrovna pro dva argumenty šlo použit
Kód: [Vybrat]
std::pair<int,int>
 make_pair(a,b)
pro tři se omezeně dalo použít
Kód: [Vybrat]
std::pair<std::pair<int, int>, int >
 make_pair(make_pair(a,b),c)


pro čtyři pak ještě
Kód: [Vybrat]
std::pair<std::pair<int, int>, std::pair<int, int>> 
make_pair(make_pair(a,b),make_pair(c,d))

Ono se pak blbě zjišťuje, co je první, druhý, třetí argument, takže jaký je problém s?
Kód: [Vybrat]
struct vysledek {
 int soucet;
 int pocet;
};
vysledek zpracuj(int[] vstup);


vypadá to hned čitelněji, hlavně pak při zpracování výsledku

A ono to je lepší používat i pro vstupní proměnné, třeba taková funkce co má 20 argumentů, to je fakt šílenost. Je lepší to narvat do struktury a taky si je mohu pojmenovat a vím co je co.

Oproti Jave je vysledek stále jen v C++ lokální proměnná, není třeba ji alokovat pomoci new

Stačí vzít std::tuple. Nebo tu strukturu kvůli pojmenování. Jinak třeba Swift umožňuje pojmenovat prvky tuplu.

1239
Vývoj / Re:Vyplatí se učit C++?
« kdy: 30. 12. 2015, 15:35:40 »
Výstupní proměnné považují za velké zlo, které mi v Javě vůbec nechybí a v PHP je nepoužívám. Na to je určen return. Také ti nic nebrání použít jako parametr metody objekt, který poslouží stejně dobře jako reference v C++.

V čem je to zlo? Třeba mám metodu a potřebuju z ní dostat třeba dva inty, počet a součet. Return, pokud jsi to ještě nezjistil, umí vrátit pouze jednu hodnotu / objekt. Takže buď na ně musím vytvořit extra třídu (opruz, naprosto zbytečné řádky v kódu a bajty v permgenu).

Nebo někteří experti nadefinují metodu s parametrem typu int[] a předpokládají, že to bude pole o dvou položkách. Strašná prasečina.

Udělat metodu

void zpracuj(int[] vstup, int &pocet, int &soucet);

by bylo naprosto nejelegantnější a nejjednodušší řešení, kdyby to šlo :(
Rozumné jazyky (včetně C++ od verze C++11) mají tuples.

1240
Vývoj / Re:Vyplatí se učit C++?
« kdy: 30. 12. 2015, 14:18:53 »
Já tedy programuju v C++ a nemám pocit, že bych něco dělal dlouho jen proto, že si někdo myslí, že v C++ se to musí programovat dlouho a je to složité.

<pošťuchování>Sekretářka co sčítá čísla z buňek v Excelu na kalkulačce, protože jí nikdo neupozornil, že to Excel umí sám, taky nemá pocit, že něco dělá zbytečně dlouho :D Stejně tak C++ programátor co právě strávil dva dny hledáním ošklivé paměťové chyby v programu taky bude tvrdit, že je nesmysl, že v C++ se programuje pomalu ;)</pošťuchování>

No a teď vážně:

V tom tvém výčtu dost postrádám vlastnost Javy, kterou osobně pokládám za killer feature: Anotace. Pokud vím, nic podobného C++ (a asi žádný jiný jazyk?) nemá a přitom je to naprosto geniální věc.

Pak jsou tu aspecty. Skvělá věc, i když, ve špatných rukou, řekl bych, až smrtelně nebezpečná :)

A reflexe. Člověk ji použije jednou / dvakrát za rok max (pokud víckrát, je prase), ale když, tak vytrhne trn z paty. Ta se v C++ dá do určité míry nahradit přes templaty, ale jen do určité míry. A naopak, co v Javě neumí generika se dá částečně obejít reflexí.

Naopak, s generiky žádný velký problém nemám (a za hack považuju spíš C++ generika, ale to je spíš filozofická otázka). Respektive jediný vážnější/nepříjemný problém, na který jsem za svoji praxi narazil je, že nejde napsat T.class.

Podobně vícenásobná dědičnost. Naprosto mi dostačuje možnost implementovat víc interfaces - ani se nepamatuji, kdy naposled mi to nestačilo. A přinejhorším se to dá obejít přes skládání.

Co mě naopak na Javě štve a uvedené není je neexistence výstupních proměnných.
V moderním C++ se paměťová chyba vyrábí dost těžko.

1241
Vývoj / Re:Vyplatí se učit C++?
« kdy: 30. 12. 2015, 14:17:03 »
a keby som sa chcel posunut dalej vo vyvoji napr. v .NET/C#, co by ste odporucali? Alebo vseobecne v software development. To C++ je mozno trosku fakt z cesty sa ucit, chcel som len ze na svoj osobny rozvoj, ale nema to zmysel. radsej nieco ine.
btw. uvazujem nad kupou knizky z nejakych tychto:

http://www.amazon.com/gp/product/0735667454/ref=s9_simh_hd_bw_p14_d0_i2?pf_rd_m=ATVPDKIKX0DER&pf_rd_s=merchandised-search-11&pf_rd_r=0WKK52JFVGPGZKSQYP19&pf_rd_t=101&pf_rd_p=5d93ad61-3c6e-574d-b199-b95bffe7d849&pf_rd_i=4011

http://www.amazon.com/Writing-High-Performance-NET-Code-Watson/dp/0990583430/ref=sr_1_46?s=books&ie=UTF8&qid=1451342246&sr=1-46

http://www.amazon.com/Code-Complete-Practical-Handbook-Construction/dp/0735619670/ref=pd_sim_14_6?ie=UTF8&dpID=515iO%2B-PRUL&dpSrc=sims&preST=_AC_UL160_SR131%2C160_&refRID=0A3HQWJGWQ2BXN1TJTC2
C++/CLI, to je .NET a občas se hodí. Případně C++/CX, to přímo komunikuje s .NET přes metadata. Jinak existuje také Swift pro .NET (lepší je ten pro Linux, ale kdyz není zbytí...).

1242
Vývoj / Re:Vyplatí se učit C++?
« kdy: 30. 12. 2015, 12:46:28 »
Já tedy programuju v C++ a nemám pocit, že bych něco dělal dlouho jen proto, že si někdo myslí, že v C++ se to musí programovat dlouho a je to složité. Taky si nepíšu nic v ASM, proč bych to dělal? Používám C++ spíš jako ... Javu. Používám vektory, mapy, stringy, streamy, iterátory atd, pokud už něco někde alokuju, tak na to používám chytré ukazatele, počítání referencí - já vím, že má problémy s cykly a není tedy plnhodnotnou náhradou GC, ale ... 95% problémů to nemusím řešit a GC je vlastně takový kanón na vrabce. Tam kde to musím řešit, tam se vždycky najde nějaké jiné řešení, třeba pomocí jednoduchého GC který řeší konkrétní případ (registrace a odregistrace uzlů do kontejneru stojícího mimo dynamickou strukturu, atd)

Když srovnám Javu a C++ z hlediska pohodlnosti vývoje, tak
  • 80% kódu v Javě se dá zapsat stejně v C++ a jeho vývoj bude trvat stejně dlouho
  • Java zvládá dobře správu paměti která způsobuje, že nad spoustou věcí nemusím přemýšlel, třeba právě u nějakých hodně propojených struktur, kde hrozí cykly
  • naopak C++ má RAII, který mi umožňuje nemyslet na uvolňování jiných resourců (síťová spojení, např., ale třeba různé věci okolo zámků a podobně. Dále samozřejmě různé buildery, které v destruktoru provedou vlastní sestavení výsledku a předání patřičnému příjemci
  • V C++ je výhodou generika, v Javě je to spíš hack a výsměnch
  • Java pro změnu má obrovské množství knihoven na všechno. Nemusím tak vymýšlet algoritmy, které již někdo vymyslel. Nevýhodou je, že ne všechny ty algoritmy jsou implementovány chytře a vyhovují mým potřebam. V C++ jsem si většinu knihovní báze musel napsat sám
  • V C++ lépe řeší různé binární formáty
  • V C++ zvládá lépe dědičnost, vícenásobnou dědičnost, virtuální dědičnost - jo, taky to často potřebuju. Java naopak je pochopitelnější pro méně zdatné jedince, protože tohle nemá
  • C++ má větší možnosti v definování vlastních operátorů, což otevírá možnosti k většímu přizpůsobení jazyka a přehlednějšímu kódu, přímočařejším zápisům, což ale u méně zdatných jedinců vede k prasení kódu a je kontraproduktivní. Java nic takového nemá, proto prasení kódu redukuje
Tento výčet popisoval zbývajících 20% rozdílů. Pokud někdo programuje rychleji v Javě, než v C++, bude to tím, že se naučil Javu a nenaučil se C++. U mě je to například obráceně.
Přesně tohle většina lidí není schopna pochopit...

1243
Vývoj / Re:Vyplatí se učit C++?
« kdy: 30. 12. 2015, 11:04:26 »
Ne.

Znas CLR, nauc se F#, to te posune uplne jinam. Souhlas s kolegou vyse co mluvil o haskellu atd.

Rozsiri ti to schopnost premyslet a uvazovat lepe o programech.
Naucit se c++, ti vezme hlavne hodne mentalnich sil s technicistnima vecma, ktere te ale tak daleko neposunou, protoze jsou c++ specific.

Veci co frci v F#, Clojure, Haskellu, se ted dostavaji do JavaScriptu a tim padem i do mainstreamu.

Vsak uz i C++ a Jave jsou lambdy vid, a to je teprve zacatek. To jak ted kazdej jde do FRP a Observables (RxJS,....) je taky dost posun v tom jak se co dela.

lambdy to je goto moderních programovacích jazyků, když někde potřebujete použít lambda výraz, znamená to, že aplikaci máte špatně navrženu a řešíte něco ad hoc, a aplikace se postupně stává nerošiřitelná a neudržovatelná. Kompaktní zápis je téměř vždy na škodu, zavádí magii a manýru do kódu, vytváří se tím vlastní jazyk programátora, který ztěžuje porozumění ostatním, roste redundance kódu, programátor pak místo na řešení problémů zaměřuje svou pozornost na vytváření efektních figur, přičemž není schopen je uzavřít do znovupoužitelných funkcí, protože mají jen ornamentální povahu a nenesou svůj vlastní obsah a vytvářejí šum v kódu. Jsou pak obdobou endogenních virů biologických systémů.

Budou-li programovat stroje, tak budou používat funkcionální jazyky, protože ty umožňují řešit problémy bez existence mentálního modelu problému, který strojům zatím není přístupný. A určitě kód naprogramovaný stroji nebude optimální a nebude rozšiřitelný, pokud bude potřeba změna, stroj starý kód zahodí a systém vygeneruje celý znovu, ostatně tak funguje i biologická evoluce, když hledá řešení. Bude to mít zajímavé důsledky, změny nebudou přinášet jen zlepšení, ale často zhoršení funkčnosti, protože proces generování bude založen na nějaké heuristice, která bude obměňovat dříve vygenerovaný systém a testovat dosažení požadované změny. Počet pokusů bude ovlivňován náklady a tlačen dolů, takže zákazník bude platit podle kvality náhodně dosaženého řešení.
Naopak, lambdy činí kód elegantnějším a čitelnějším. BTW goto není špatné, jen není pro patlaly.
naopak lamdy činí kód patlalů čitelnější :-) Jak poznáte kód patlala, když potřebujete udělat změnu, na mnoha místech musíte měnit totéž, nebo téměř totéž a nelze to vyhledat automatizovaně. A právě k tomu vedou lambdy, jsou stejně pohodlné jako goto, proto vedou na prasárny, protože nemusíte přemýšlet, když je používáte.
Zajímavý názor. Asi to chce konkrétní kód. Evidentně mluvíme každý o něčem jiném.

1244
Vývoj / Re:Vyplatí se učit C++?
« kdy: 30. 12. 2015, 11:03:19 »
..... z mala zkusenosti.....

Tak kdyz necemu nerozumim, nebo nemam zdroj tak o tom nemuzu diskutovat prece

Zacinam mit podezreni na trolla. Podle ceho soudite, ze nerozumim Jave/Scale? Nebo clovek musi rozumnet C++, aby byl schopen srovnat vykon (ne je psat) dvou implementaci v Jave a C++? Jednalo se o mensi projekty, ale nevidim duvod, proc se nepodelit o zkusenost, od toho tu snad je toto forum.

Z benchmarku, co jsem nasel, to vypadalo zatracene vyrovnane pro Javu a C++. Akorat s tim rozdilem, ze C++ varianta byla narocnejsi na vytvoreni. Myslim si, ze vykon C++ je casto precenovany. On se magicky nikde nenabere, pokud mate pomaly algoritmus, tak v Jave bude diky JITu s velkou pravdepodobnosti mnohem rychlejsi, nez v C++. Pokud mate rychly alogritmus, tak budto to nabouchate rychle v Jave a ono to bude prumerne rychle, anebo musite nasobne dele v C/C++ zatracene dobre naplanovat praci s pameti (odtud to "low-level"), abyste prekonali JIT a GC v Jave. Pak tedy samozrejme muzete zvolit i profesionalnejsi pristup v Jave, dosahnout velice solidniho vykonu, ale s kratsim casem na vyvoj.

Nevim, jestli se citite urazen vyrokem, ze C++ je spatlanina (pejsek a kocicka), ale je to bohuzel pravda. A rozhodne to nerikam proto, abych "vyhral" diskuzi. Podobny nazor mam i na JavaScript, ve kterem nyni prevazne pracuji. A prestoze Java mi prijde o trochu lepsi, tak ma take hodne much (nejvetsi asi generika, ve srovnani s C# je to slabota, a to .NET moc nemusim).

...
P.S. Je to univerzální tvrzení pro generický kód, ono se totiž v těch jazycích ani moc prasit nedá (nepočítám využití ASM apod., to jde všude a benchmark by v tom psal jen debil). Vsadím boty, že kód nevyužívající knihovny (psané pro většinu jazyků zhusta - proč asi - v C nebo přímo ASM), tj. testující jen kvalitu překladače, v Javě rychlejší nebude ani omylem. "Argument" o low-level a delším času na vývoj je ničím nepodložený rádobyargument nemající váhu. V tomto případě je ostatně validním argumentem jen kód.

Pokud ma jazyk rychle knihovny, tak pro spravne pouziti jazyka zvolime rychlou knihovnu - nemusime sami psat v C/C++/asm a dosahneme stejneho vysledku, jako nekdo v C++, ktery bude znovu kulatit kolo a velmi dlouho vyvijet neco, co uz pro jine technologie existuje "zadarmo". Co si pamatuju, tak v Jave volat prilist casto nativni kod je hodne nevyhodne, tim bysme si v benchmarku nepomohli (leda by se cely vypocet, ne casti, pocitali externe). V C++ lze jit opravdu nizko, ale rucne optimalizovat na urovni ASM a byt lepsi nez prekladac uz nyni obcas byva problem. Navic casova narocnost takoveho ukonu ve srovnani s prekladacem je rozdil mnoha radu.

To myslite vazne s tim, ze v C++ se vyviji rychleji nez v Jave/C#? Proto tyto "vyssi" jazyky vznikly, aby odstinily od bremene rucni udrzby pameti a programator se mohl soustredit na ukol misto reseni technickych detailu.

Validnim argumentem pro obecne tvrzeni je pouze kod? Pokud guru stravi tisic hodin ladenim dokonaleho trideni pro tabulku vitezu v singleplayer hre v asembleru a prijde pepa a zboucha to v Jave za pet minut, tak prestoze reseni od profika nese vyrazne lepsi vysledky, je nanic, protoze nikdo nezaplati 1k hodin specialisty na jednoduchy nekriticky ukol, pokud to zvladne stredoskolak za 5 minut.

Vzhledem k tomu, ze v C++ lze pouzit ASM, tak si troufam rict, ze vzdy pujde napsat rychlejsi nebo stejne rychle reseni jako v Jave. Pokud uplne ignorujeme cas (tim padem penize) potrebny pro vyvoj, pak je C++ vzdy lepsi nebo stejne dobre jako Java. Ne, jsem si zcela jisty, ze pri srovnavani jazyku nemuze byt jedinnou metrikou rychlost v benchmarcich, jinak by jsme totiz zustali navzdy u datlovani kodu ve strojovem jazyce.

Abych rekl pravdu, tak me take prekvapilo, jak srovnatelne si Java oproti C++ casto vede. Nejak tak podvedomne, asi pod vlivem nikdy nekoncici kampane odpurcu o pomalosti a nenazranosti Javy, jsem predpokladal, ze to bude alespon jednou tak pomale. Videt je to napr. v tomto clanku (ta pomalost Javy pro mensi narocnost je dana tim, ze se meril i start JVM, coz je IMO spatne).
Já se bavil o kvalitě překladače, ne knihoven, těch jsou v každém jazyce 3 p....e různé kvality. Abych to tedy upřesnil, opakuji, že kód napsaný v C++/Swiftu/Go nevyužívající optimalizovaných knihoven je řádově rychlejší než v Javě. To mám podložené kódem provádějícím složité matematické operace nad objekty, pro než neexistují knihovny (možná tak v R). A bavíme se o kódu v daném jazyce, ne v ASM. JIT je opravdu obdivuhodně rychlý, ale má své inherentní hranice.

Jinak mluvit v souvislosti s C++ o nízkoúrovňové správě paměti je záležitost 90. let a nezaslouží si dalšího komentáře. K tématu náročnosti Javy na paměť doporučuju akademické články od lidí z Googlu, jejichž závěr je, že výkon Javy je řádově (sic!) srovnatelný s nativními jazyky, pokud má k dispozici 4x více paměti, jinak rapidně klesá. Což plyne ze způsobu práce GC. Teď už nechám obhajobu C++ na jiných (někteří zdejší přispěvatelé C++ znají poměrně dobře), v diskuzi budu rád pokračovat nad konkrétním kódem.

1245
Vývoj / Re:Vyplatí se učit C++?
« kdy: 30. 12. 2015, 10:52:35 »
..... z mala zkusenosti.....

Tak kdyz necemu nerozumim, nebo nemam zdroj tak o tom nemuzu diskutovat prece

Zacinam mit podezreni na trolla. Podle ceho soudite, ze nerozumim Jave/Scale? Nebo clovek musi rozumnet C++, aby byl schopen srovnat vykon (ne je psat) dvou implementaci v Jave a C++? Jednalo se o mensi projekty, ale nevidim duvod, proc se nepodelit o zkusenost, od toho tu snad je toto forum.

Z benchmarku, co jsem nasel, to vypadalo zatracene vyrovnane pro Javu a C++. Akorat s tim rozdilem, ze C++ varianta byla narocnejsi na vytvoreni. Myslim si, ze vykon C++ je casto precenovany. On se magicky nikde nenabere, pokud mate pomaly algoritmus, tak v Jave bude diky JITu s velkou pravdepodobnosti mnohem rychlejsi, nez v C++. Pokud mate rychly alogritmus, tak budto to nabouchate rychle v Jave a ono to bude prumerne rychle, anebo musite nasobne dele v C/C++ zatracene dobre naplanovat praci s pameti (odtud to "low-level"), abyste prekonali JIT a GC v Jave. Pak tedy samozrejme muzete zvolit i profesionalnejsi pristup v Jave, dosahnout velice solidniho vykonu, ale s kratsim casem na vyvoj.

Nevim, jestli se citite urazen vyrokem, ze C++ je spatlanina (pejsek a kocicka), ale je to bohuzel pravda. A rozhodne to nerikam proto, abych "vyhral" diskuzi. Podobny nazor mam i na JavaScript, ve kterem nyni prevazne pracuji. A prestoze Java mi prijde o trochu lepsi, tak ma take hodne much (nejvetsi asi generika, ve srovnani s C# je to slabota, a to .NET moc nemusim).

...
P.S. Je to univerzální tvrzení pro generický kód, ono se totiž v těch jazycích ani moc prasit nedá (nepočítám využití ASM apod., to jde všude a benchmark by v tom psal jen debil). Vsadím boty, že kód nevyužívající knihovny (psané pro většinu jazyků zhusta - proč asi - v C nebo přímo ASM), tj. testující jen kvalitu překladače, v Javě rychlejší nebude ani omylem. "Argument" o low-level a delším času na vývoj je ničím nepodložený rádobyargument nemající váhu. V tomto případě je ostatně validním argumentem jen kód.

Pokud ma jazyk rychle knihovny, tak pro spravne pouziti jazyka zvolime rychlou knihovnu - nemusime sami psat v C/C++/asm a dosahneme stejneho vysledku, jako nekdo v C++, ktery bude znovu kulatit kolo a velmi dlouho vyvijet neco, co uz pro jine technologie existuje "zadarmo". Co si pamatuju, tak v Jave volat prilist casto nativni kod je hodne nevyhodne, tim bysme si v benchmarku nepomohli (leda by se cely vypocet, ne casti, pocitali externe). V C++ lze jit opravdu nizko, ale rucne optimalizovat na urovni ASM a byt lepsi nez prekladac uz nyni obcas byva problem. Navic casova narocnost takoveho ukonu ve srovnani s prekladacem je rozdil mnoha radu.

To myslite vazne s tim, ze v C++ se vyviji rychleji nez v Jave/C#? Proto tyto "vyssi" jazyky vznikly, aby odstinily od bremene rucni udrzby pameti a programator se mohl soustredit na ukol misto reseni technickych detailu.

Validnim argumentem pro obecne tvrzeni je pouze kod? Pokud guru stravi tisic hodin ladenim dokonaleho trideni pro tabulku vitezu v singleplayer hre v asembleru a prijde pepa a zboucha to v Jave za pet minut, tak prestoze reseni od profika nese vyrazne lepsi vysledky, je nanic, protoze nikdo nezaplati 1k hodin specialisty na jednoduchy nekriticky ukol, pokud to zvladne stredoskolak za 5 minut.

Vzhledem k tomu, ze v C++ lze pouzit ASM, tak si troufam rict, ze vzdy pujde napsat rychlejsi nebo stejne rychle reseni jako v Jave. Pokud uplne ignorujeme cas (tim padem penize) potrebny pro vyvoj, pak je C++ vzdy lepsi nebo stejne dobre jako Java. Ne, jsem si zcela jisty, ze pri srovnavani jazyku nemuze byt jedinnou metrikou rychlost v benchmarcich, jinak by jsme totiz zustali navzdy u datlovani kodu ve strojovem jazyce.

Abych rekl pravdu, tak me take prekvapilo, jak srovnatelne si Java oproti C++ casto vede. Nejak tak podvedomne, asi pod vlivem nikdy nekoncici kampane odpurcu o pomalosti a nenazranosti Javy, jsem predpokladal, ze to bude alespon jednou tak pomale. Videt je to napr. v tomto clanku (ta pomalost Javy pro mensi narocnost je dana tim, ze se meril i start JVM, coz je IMO spatne).
Tak spatlanina je i Swift, mnohem větší než C++ :)

Stran: 1 ... 81 82 [83] 84 85 ... 101