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 - Ondřej Novák

Stran: 1 ... 5 6 [7] 8 9 ... 38
91
Vývoj / Re:Vyplatí se učit C++?
« kdy: 07. 01. 2016, 00:42:08 »
Tohle rozhodně doporučuji vidět celé

https://www.youtube.com/watch?v=ltCgzYcpFUI

92
Vývoj / Re:Vyplatí se učit C++?
« kdy: 05. 01. 2016, 22:01:06 »
https://qrlogin.cz
https://btcseer.novacisko.cz

Snad jsi lepsi programator nez grafik a designer...
Kdyby to bylo hezký, tak to vypadá nedůvěryhodně :) - ne grafiku a design (grafický) není muj skill, ale pokud se chce někdo graficky vyřádit... qrlogin je na githubu, jeho dílo rád zamerguju a zveřejním.

93
Vývoj / Re:Vyplatí se učit C++?
« kdy: 04. 01. 2016, 14:34:15 »
Nedělám si srandu, ale dokážu v C++ generovat webové stránky stejně snadno jako v PHP. Tedy není to stejný, je to spíš vždycky kombinace vygenerování dat -> šablonovací jazyk -> webvoka. Donedávna jsem používal Seznamácký Teng, teď mám rozpracovaný jiný šablonovací jazyk, ale v zásadě je to fuk, normálně se v tom dá pracovat.

https://qrlogin.cz
https://btcseer.novacisko.cz

oba jsou to C++ webové servery, i když spíš hodně poháněné javascriptem.

94
Vývoj / Re:Vyplatí se učit C++?
« kdy: 31. 12. 2015, 22:57:23 »
Teda pánové, to nemáte na Silvestra lepší zábavu? Ale když už, měl bych jen takový lama dotaz. Když je tedy C++ rychlejší než Java, jak na vývoj tak rychlost výsledné apky, jak tu dokazuje Zboj, proč se tedy tak hojně Java používá? Je to tím, že je pro ni více knihoven na vše možné, než pro C++ a tím pádem je vývoj na ni přeci jen rychlejší, nebo je Java jen takový omyl, takové Cimrmanovské "tudy ne, přátelé"? Jinak já mám Javu rád. Neptejte se proč, když máte něco/někoho rádi, nehledejte v tom logiku..
To já nevím, ale základem pokroku je, že lidé zkouší slepé uličky a často neexistuje univerzální pravda.

95
Vývoj / Re:Vyplatí se učit C++?
« kdy: 31. 12. 2015, 22:34:35 »
To vypadá jako objevení dvou kol. Stařičký NeXTstep měl flag single-/multithreaded. A OpenStep zavedl vláknově lokální autorelease pooly. Obé už je bohužel legacy technology.
Vsadim se, že každý mluví o něčem jiném. Jestli ten flag měl per object, pak možná, ale neberu to jako vymýšlení kola, spíš jako řešení problému. Autorelease pool se obávám, že je něco jiného. Log změn referencí si přestav jako dva statické buffery pointerů, do jednoho píšu pointery u kterých se zvýšila reference do druhého u kterých se snížila reference. Jakmile jeden z nich je přeplněn, pak s jedním zámkem aktualizuju všechny reference a buffery resetuju. Mělo by to doufám snížit množství LOCKů sběrnice. Změna reference by měla být stejně rychlá jako singlethread reference counting a přitom MT safe.

PS: nenárokuju si patent, určitě to už někdo vymyslel a používá, já řeším pouze určitý problém

96
Vývoj / Re:Vyplatí se učit C++?
« kdy: 31. 12. 2015, 22:04:04 »
Největší problém reference countingu je obecně sdílení jedné proměnné mezi jádry procesoru. Je třeba používat interlocked increment/decrement. Ve svém kódu jsem to řešil tím, že objekt si eviduje, zda je sdílený mezi vlákny nebo ne, a pokud ne, pak se použije normální přičítání, které je rychlejší. Ale když v tom člověk udělá chybu, pak crash.

Teď testuju jiný způsob, kdy místo počítání referencí loguju to thread-local bufferu seznam všech pointerů, kde se mění reference. Jakmile buffer dojde, vezmu globální zámek, projdu buffer, upravím všechny countery, ty které dosáhnou nuly uvolním, vrátím globální zámek. Totéž se udělá před ukončení threadu. Ale nemám ještě žádné testy. Mělo by to mít výhodu, že evidování referencí si provádí každý vlákno samo, nevýhodu, že uvolnění objektu může dojít mnohem později, jestli vůbec (když při běhu nedojde k naplnění bufferu a thread nikdy neskončí)

97
Vývoj / Re:Vyplatí se učit C++?
« kdy: 31. 12. 2015, 21:07:57 »
No oni klasické GC navíc defragmentují paměť. Je to možné hlavně proto, že mají pod kontrolou všechny pointery. Měl jsem v C++ napsaný jednoduchý GC který dynamicky udržoval kostru v grafech referencí a tedy fungoval i s cykly (spouštěl se, jen když někdo zrušil referenci, která byla označena jako kostra grafu, a tehdy se snažil sestavit novou kostru a uvolnit všechny objekty, které se ocitly z kostry nedosažitelné), ale nepřišlo mi, že by byl rychlejší. Ony to totiž zdržují zejména alokace, tedy hledání volného místa ve fragmentované paměti a dealokace, tedy update tabulky volného místa.

V čistem C++ nejde moc dobře pod rukama programu defragmentovat paměť. Díky existenci raw pointerů nemám jistotu, že s pamětí zrovna někdo nepracuje (a i přes chytré ukazatele se raw pointery používaji, takovým nejtypičtějším raw pointerem je this)

98
Vývoj / Re:Vyplatí se učit C++?
« kdy: 31. 12. 2015, 16:16:25 »
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.

99
Vývoj / Re:Vyplatí se učit C++?
« kdy: 31. 12. 2015, 11:46:36 »
Především "výstupní parametr" v pravém slova neexistuje (jakkoliv se v tomto významu to slovo používá).

No, návratová hodnota je převzata z matematiky kdy funkce vrací jednu hodnotu, nebo vektor nebo matici. Ale já tvrdím že návratová hodnota neexistuje. Místo toho mám radši, když součástí argumentů je reference na místo, kam se má výsledek uložit. Umožňuje to mít funkci která má víc návratových hodnot ... když už může mít víc vstupních parametrů.

PS: Je to lehce silvestrovský příspěvek abych pošťouchnul zdejši evangelisty, nicméně třeba C++ takto návratovou hodnotu implementuje pro typy větší než integer. Podobný koncept používám u future/promise. Při otázce, zda je lepší, když funkce vrací future, nebo když ji předám promise volím spíš druhou možnost.

100
Vývoj / Re:Vyplatí se učit C++?
« kdy: 30. 12. 2015, 16:17:36 »
kam sa zas zvrtla ta diskusia???
Tím bych to uzavřel

101
Vývoj / Re:Vyplatí se učit C++?
« kdy: 30. 12. 2015, 15:47:50 »
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

102
Vývoj / Re:Vyplatí se učit C++?
« kdy: 30. 12. 2015, 15:36:26 »
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í.

No já jsem takový trochu staromódní. Přijde mi cokoliv co v runtime saha dynamicky na definice tříd jako prasečina. Anotace tam patří, byť je to nástroj a asi se někdy hodí. Trochu mě vadí jejich dvojkolejnost. Jsou v tom jak "jakési atributy" - deprecated, override, atd, ty najdeme i v C++ ať už přímo v normě, nebo  v nějakých implementacích přes #pragma (dá se to řešit před #define), a pak jsou tam runtime, které mají povahu spíš třídní konstanty...?

V C++ jsem schopen přetrpět RTTI, které umožňuje zeptat se objektu, zda náhodou neumí ještě nějaké jiné rozhraní (osobně na to mám vlastní systém, který ale v defaultu pro moji lenost nakonec zpravidla sáhne po RTTI - dynamic_cast ).

Vím že reflexe jsou super třeba na serializaci. I tak se mi častokrát vyplatilo mít oddělený formát od vnitřní reprezentace, což samozřejmě vedlo k nutnosti implementovat si vlastní serializaci - měl jsem speciální tabulku zvanou SerializeTypeInfo - přiřazovalo se k třídám identifikátory a uměl z objektu vytvořit identifikátor + zavolat serializaci a z identifikátoru vytvořit objekt a deserializovat ho. Hlavní výhodou bylo, že jsem mohl mít vícero tabulek a vícero identifikátorů pro případ, že bych generoval vícero formátů, kde každý objekt se dle typu formátu identifikoval jinak.

Reflexi a anotace a cokoliv kolem .class beru trochu jako pornografii. Program odhaluje svůj vnitřek až moc a vede to pak na limitace budoucích změn. Asi jako že taky nepřistupujeme k proměnným přímo ale používáme getry a nikdo nepřemýšlí proč je to dobrý nápad.

103
Vývoj / Re:Vyplatí se učit C++?
« kdy: 30. 12. 2015, 12:42:50 »
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ě.

104
Vývoj / Re:Vyplatí se učit C++?
« kdy: 29. 12. 2015, 00:17:03 »
Mně zase fascinuje to kvantum odborníků, kteří vědí, že C++ je lowlevel

Není.

Je to jako s javascriptem. Javascript je vlastně taky hodně lowlevel. Bez knihoven, node.js, JQuery, Angularu, Reactu a dalších nadstaveb by v tom taky programovali jen páni Programátoři.

C++ není jen standardní knihovna a (šílenej) boost - není to jen hromada nepřehledného kódu jak si někteří C++ guru a obdivovači B. Stroustrupa představují. V C++ jde psát i hezký kód a pomocí dobrých knihoven i pěkně čitelný, který se může co do rychlosti vývoje rovnat s Javou.

Problém je, že těch dobrých a známých knihoven moc není.

105
Vývoj / Re:Oplati sa ucit C++?
« kdy: 28. 12. 2015, 10:56:10 »
Určitě, ale připrav se na to, že se to musíš učit jako by jiný jazyk na světě neexistoval. Je to celoživotní partnerka. Pokud se začneš učit C++ vedle C#, Javy, pythonu, PHP a dalších rádobyjazyků, pak ho nikdy nepochopíš a nikdy ho nebudeš umět.

C++ je královská disciplína.

Stran: 1 ... 5 6 [7] 8 9 ... 38