.[ ČeskéHry.cz ].
for( : ) pro více kontejnerů
Jdi na stránku Předchozí  1, 2, 3  Další
 
odeslat nové téma   Odpovědět na téma    Obsah fóra České-Hry.cz -> C / C++
Zobrazit předchozí téma :: Zobrazit následující téma  
Autor Zpráva
quas4



Založen: 18. 10. 2007
Příspěvky: 199

PříspěvekZaslal: 3. srpen 2013, 13:08:17    Předmět: Odpovědět s citátem

vitamin napsal:

S tymto nesuhlasim, nie je dobre pliest dokopy C a C++.


C++ JE C s tim ze jsou v nem navic implementovany tridy a podobne - jinymi slovy C je podmnozinou C++ (stejne tak je C podmnozinou Obj-C). Bylo by potreba si rozpitvat co presne je v c++ template. Je to makro? Pak neplati ze dynamicke jazyky templaty je nemaji. Stejne tak v nekterych dynamickych jazycich lze mit statickou typovou kontrolu (v clojure to jde).

Jasne, jadrem meho prispevku nebyla primarne snaha porovnat imperativni a dynamicky funkcionalni jazyk ale upozornit na to ze od jazyka se odviji i zpusob mysleni nad problemem. A v c/c++ podle mych zkusenosti neni dobrou cestou prilis abstrahovat ale vhodnejsi je se drzet "pri zemi" a mit v hlave napriklad i to ze je pro cpu a jeho cache vhodnejsi iterovat 3 datove struktury kazdou zvlast namisto uvah udelat to v jednom cyklu. Protoze po c/c++ sahnu zejmena kdyz potrebuju rychlost.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
quas4



Založen: 18. 10. 2007
Příspěvky: 199

PříspěvekZaslal: 3. srpen 2013, 13:16:20    Předmět: Odpovědět s citátem

vitamin napsal:

edit:
Co sa tyka iteratorov, tak tie niesu v c++ moc "bezpecne" a lahko sa da vytvorit neplatny iterator modifikovanim kontaineru. To uz si musi osetrit programator.


jj. a to prave imho vede zase k tomu citatu (a stalo se to za pouziti vyssi abstrakce ze?). V Go nebo v Rust se takova derefence nestane protoze nejsou postaveny nad C a uz pri jejich navrhu nad tim nekdo uvazoval.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
vitamin



Založen: 31. 07. 2013
Příspěvky: 7

PříspěvekZaslal: 3. srpen 2013, 13:35:40    Předmět: Odpovědět s citátem

https://en.wikipedia.org/wiki/C%2B%2B#Philosophy:
citace:

1) C++ is designed to give the programmer choice, even if this makes it possible for the programmer to choose incorrectly
2) C++ does not incur overhead for features that are not used (the "zero-overhead principle")
...


Kazdy jazyk ma inu filozofiu a hodi sa na ine ucely.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
quas4



Založen: 18. 10. 2007
Příspěvky: 199

PříspěvekZaslal: 3. srpen 2013, 13:42:58    Předmět: Odpovědět s citátem

Co z toho je v rozporu s tim co jsem psal?
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
vitamin



Založen: 31. 07. 2013
Příspěvky: 7

PříspěvekZaslal: 3. srpen 2013, 14:03:37    Předmět: Odpovědět s citátem

Jazyky ako Go, C#, Java, Clojure... ti nedavaju na vyber a musis pouzivat veci ako GC, vynimky... Kvoli bezpecnosti ti neumoznuju priamo manipulovat s pametov, v pripade Go zas nemas kontrolu nad alokaciou dat. Inlinovat asm je uplne tabu...

C++ ti nebrani urobit blbost. C++ ta nenuti pouzivat GC, vynimky, dokonca kompilatory maju prepinace ktore zakazu vyuzivat casti rtti.To samozrejme vedie k tomu ze programovat pre c++ je zlozitejsie, ale mas vecsiu kontrolu nad programom.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
quas4



Založen: 18. 10. 2007
Příspěvky: 199

PříspěvekZaslal: 3. srpen 2013, 14:14:04    Předmět: Odpovědět s citátem

S tim urcite souhlasim a ani o tom nijak nepochybuju - naopak:
vitamin napsal:
Kvoli bezpecnosti ti neumoznuju priamo manipulovat s pametov
jen potvrzuje ten citat, ne? Ten rozpor s tim co jsem psal jaksi stale nevidim.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Lemik



Založen: 30. 07. 2007
Příspěvky: 138

PříspěvekZaslal: 3. srpen 2013, 19:35:40    Předmět: Odpovědět s citátem

quas4 napsal:
vitamin napsal:

S tymto nesuhlasim, nie je dobre pliest dokopy C a C++.


C++ JE C s tim ze jsou v nem navic implementovany tridy


C++ od dob C with Classes docela pokročilo... Pokud nad C++ uvažuješ jako C s třídami, pak to také není zrovna dobrý způsob myšlení nad problémem.

Osobně dám přednost kódu, co je pro mě čitelnější (bohužel zpracovávat ASM z hlavy neumím), takže např auto z tohoto hlediska nevítám s otevřenýma rukama. V okamžiku, kdy Code::Blocks bude správně odvozovat typ proměnné a code-completion napovídat, pak nebudu mít žádný problém používat auto.

Tady mě mrzí, že c++ zůstává bez meta-informací o typech, protože to by mohlo dosti pomoci code-completion a dalším nástrojům usnadňujícím vývoj.

BTW clojure se mi zdá hůře čitelný než C++ kód, ale i to je o preferencích.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Weny Sky



Založen: 28. 07. 2007
Příspěvky: 241

PříspěvekZaslal: 3. srpen 2013, 21:32:08    Předmět: Odpovědět s citátem

quas4 napsal:
C++ JE C s tim ze jsou v nem navic implementovany tridy a podobne - jinymi slovy C je podmnozinou C++ (stejne tak je C podmnozinou Obj-C).

To bohuzel vubec neni pravda. C++ neni "C s tridama" a C neni podmnozinou C++. Je potreba to zduraznit, aby se tato fama nesirila porad dal a dal Wink
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
mar



Založen: 16. 06. 2012
Příspěvky: 535

PříspěvekZaslal: 3. srpen 2013, 21:48:01    Předmět: Odpovědět s citátem

Weny Sky napsal:

To bohuzel vubec neni pravda. C++ neni "C s tridama" a C neni podmnozinou C++. Je potreba to zduraznit, aby se tato fama nesirila porad dal a dal Wink

No souhlasím, že C++ je mnohem víc, než C a třídy (nikde zároveň ale není psáno, že musím použít všechny featury C++ v každém projektu jen proto, abych měl pocit, že můj kód je cool Smile, s druhou částí ale nesouhlasím.
Kdyby to byla pravda, nemohl bych přece linkovat C knihovny z C++, což se běžně dělá (kdo nepoužívá např. zlib, vorbis, SDL a i systémové knihovny, pokud to za tebe neobstará nějaký C++ wrapper ...).
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Lemik



Založen: 30. 07. 2007
Příspěvky: 138

PříspěvekZaslal: 3. srpen 2013, 22:29:01    Předmět: Odpovědět s citátem

Linkovat C knihovny můžeš i z jiných jazyků, protože tady jde o interface knihovny a o tom vědět jak ji volat. To že C++ může linkovat C knihovny je proto, že ví jak je volat...

Resp. mluvím o calling convention a o symbolech.


Naposledy upravil Lemik dne 3. srpen 2013, 22:44:42, celkově upraveno 1 krát
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
quas4



Založen: 18. 10. 2007
Příspěvky: 199

PříspěvekZaslal: 3. srpen 2013, 22:44:10    Předmět: Odpovědět s citátem

jen pro jistotu: Stojim si za tim ze C je podmnozinou C++.

edit pro puntickare: je pravda ze existuji konstrukce ktere nejsou mezi c a c++ kompatibilni ale ty povazuju za pomerne minoritni a vzhledem ke slozitosti gramatiky (obzvlast c++) je az zarazejici jak malo techto konstrukci je. Popis napriklad zde: http://en.wikipedia.org/wiki/Compatibility_of_C_and_C%2B%2B


Naposledy upravil quas4 dne 3. srpen 2013, 22:53:59, celkově upraveno 1 krát
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
mar



Založen: 16. 06. 2012
Příspěvky: 535

PříspěvekZaslal: 3. srpen 2013, 22:45:52    Předmět: Odpovědět s citátem

Ano, máš pravdu, to byl špatný příklad. Nicméně platí, že C kód můžu přeložit C++ překladačem (c->cpp nebo cc) a v 99% to dopadne dobře (i když nebudu mít extern "C", tak prostě jenom exportované symboly budou mít C++ name mangling), což v jiných jazycích jaksi neudělám. To bude tím, že C je subset C++, protože C++ vychází z jeho syntaxe.
Že se liší v detailech a některý kód mi C++ nevezme, protože nějaká konstrukce bude zakázaná (nejsem chodící encyklopedie standardu), nepovažuji za argument, že C není subset C++.
EDIT: i kdyz můžeš volat z jiných jazyků, potřebuješ vzít C headery a předělat je do toho daného jazyka (což může být někdy docela záhul). Kdežto v C++ můžu přímo includovat header (jediné, co případně budu muset udělat, bude obalit include extern "C" {}, pokud v headeru není #ifdef __cplusplus, což většinou bývá).
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Lemik



Založen: 30. 07. 2007
Příspěvky: 138

PříspěvekZaslal: 3. srpen 2013, 23:22:27    Předmět: Odpovědět s citátem

K tomu jestli máme nebo nemáme C považovat za podmnožinu C++ si myslím může nejlépe poradit původní autor:
http://www.stroustrup.com/bs_faq.html#C-is-subset
http://www.stroustrup.com/bs_faq.html#difference
http://www.stroustrup.com/bs_faq.html#C-slash (tenhle mám nejradši)
(je to cca 5 odpovědí hned pod sebou)

"C++ is not a descendant of C99; C++ and C99 are siblings"

Podle mě je chyba uvažovat o C jako o podmnožině. Pokud chceš psát v C, budeš psát v C a budeš kompilovat pod C kompilátorem. Pokud chceš psát C a kompilovat pod C++, no, proč ne, ale neříkej každému, že C je přece podmnožina C++. Ikdyž do C++ kompilátoru dáš C kód, vyleze Ti C++ objekt. Můžeme být pouze rádi, že si vůbec dali tu práci se zpětnou podporou kódu C, který nemá typovou bezpečnost, nemá podporu správy paměti jako součást jazyka atd.

Teď už máme C++11 a C11 a řekl bych, že dnes je to spíše naopak, že C dostává prvky z C++ jako multithreading aj. Pokud si mermomocí chcete říkat, že píšete v C, pak jistě používáte c kompilátor s c std knihovnou. Až někdy budete chtít/budete moci/muset přejít na C++, máte pravděpodobnost, že to půjde, aniž budete muset dělat nějaké změny.

Mimochodem nebojte, auto jako v C++11 v C není...
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
mar



Založen: 16. 06. 2012
Příspěvky: 535

PříspěvekZaslal: 3. srpen 2013, 23:57:49    Předmět: Odpovědět s citátem

Lemik napsal:
Ikdyž do C++ kompilátoru dáš C kód, vyleze Ti C++ objekt.

Vyleze ti úplně stejný formát, jenom symboly budou pojmenované jinak.

Co se týka Stroustroupa, mj. píše:
"In the strict mathematical sense, C isn't a subset of C++." (aneb pro hnidopichy ne, pro mě ano)
"Thus, C++ is as much a superset of ANSI C as ANSI C is a superset of K&R C and much as ISO C++ is a superset of C++ as it existed in 1985."
Cos citoval, se týkalo C99 a to je podle mě už slovíčkaření. I přes to je překryv Cxy a C++zw víc než 99%, což mně stačí.
Na závěr: pokud někdo bude psát v C libku a bude chtít, aby ji ostatní používali, tj. i ti, co používájí C++, měl by se v headerech takovýchto konstrukcí vyvarovat. V .c ať si používá C99 (nebo novějších) kostrukcí kolik chce, to už nikoho nezajímá.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Weny Sky



Založen: 28. 07. 2007
Příspěvky: 241

PříspěvekZaslal: 4. srpen 2013, 08:27:34    Předmět: Odpovědět s citátem

100x opakovana lez bude porad lzi. C neni a nikdy nebylo podmnozinou C++ a muzete si tvrdit co chcete.

Naprosto jednoduchy semanticky priklad:
sizeof('x') vysledkem je v C zpravidla 4 (velikost datoveho typu int)
sizeof('x') vysledkem v C++ je ovsem 1 (velikost datoveho typu char)

Kdyz k tomu sedne blbec, ktery si mysli, ze je C podmnozinou C++ a bude podle toho v C psat, tak se pak bude sakra divit. No a clovek, ktery zase C zna, tak nebude tvrdit, ze je to podmnozina C++.

Zkuste si priznat, ze nemate pravdu, protoze ji opravdu nemate. Argumenty, ze nejste chodici znalci standardu, ze 99 % znamena podmnozina, ze si za tim proste stojite, bych cekal spis na Novinky.cz nebo Blesk.cz, ale ne na tady Razz
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
Zobrazit příspěvky z předchozích:   
odeslat nové téma   Odpovědět na téma    Obsah fóra České-Hry.cz -> C / C++ Časy uváděny v GMT + 1 hodina
Jdi na stránku Předchozí  1, 2, 3  Další
Strana 2 z 3

 
Přejdi na:  
Nemůžete odesílat nové téma do tohoto fóra
Nemůžete odpovídat na témata v tomto fóru
Nemůžete upravovat své příspěvky v tomto fóru
Nemůžete mazat své příspěvky v tomto fóru
Nemůžete hlasovat v tomto fóru


Powered by phpBB © 2001, 2005 phpBB Group


Vzhled udelal powermac
Styl "vykraden" z phpBB stylu MonkiDream - upraveno by rezna