Zobrazit předchozí téma :: Zobrazit následující téma |
Autor |
Zpráva |
quas4
Založen: 18. 10. 2007 Příspěvky: 199
|
Zaslal: 3. srpen 2013, 13:08:17 Předmět: |
|
|
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 |
|
|
quas4
Založen: 18. 10. 2007 Příspěvky: 199
|
Zaslal: 3. srpen 2013, 13:16:20 Předmět: |
|
|
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 |
|
|
vitamin
Založen: 31. 07. 2013 Příspěvky: 7
|
Zaslal: 3. srpen 2013, 13:35:40 Předmět: |
|
|
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 |
|
|
quas4
Založen: 18. 10. 2007 Příspěvky: 199
|
Zaslal: 3. srpen 2013, 13:42:58 Předmět: |
|
|
Co z toho je v rozporu s tim co jsem psal? |
|
Návrat nahoru |
|
|
vitamin
Založen: 31. 07. 2013 Příspěvky: 7
|
Zaslal: 3. srpen 2013, 14:03:37 Předmět: |
|
|
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 |
|
|
quas4
Založen: 18. 10. 2007 Příspěvky: 199
|
Zaslal: 3. srpen 2013, 14:14:04 Předmět: |
|
|
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 |
|
|
Lemik
Založen: 30. 07. 2007 Příspěvky: 138
|
Zaslal: 3. srpen 2013, 19:35:40 Předmět: |
|
|
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 |
|
|
Weny Sky
Založen: 28. 07. 2007 Příspěvky: 241
|
Zaslal: 3. srpen 2013, 21:32:08 Předmět: |
|
|
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 |
|
Návrat nahoru |
|
|
mar
Založen: 16. 06. 2012 Příspěvky: 608
|
Zaslal: 3. srpen 2013, 21:48:01 Předmět: |
|
|
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 |
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 , 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 |
|
|
Lemik
Založen: 30. 07. 2007 Příspěvky: 138
|
Zaslal: 3. srpen 2013, 22:29:01 Předmět: |
|
|
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 |
|
|
quas4
Založen: 18. 10. 2007 Příspěvky: 199
|
Zaslal: 3. srpen 2013, 22:44:10 Předmět: |
|
|
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 |
|
|
mar
Založen: 16. 06. 2012 Příspěvky: 608
|
Zaslal: 3. srpen 2013, 22:45:52 Předmět: |
|
|
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 |
|
|
Lemik
Založen: 30. 07. 2007 Příspěvky: 138
|
Zaslal: 3. srpen 2013, 23:22:27 Předmět: |
|
|
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 |
|
|
mar
Založen: 16. 06. 2012 Příspěvky: 608
|
Zaslal: 3. srpen 2013, 23:57:49 Předmět: |
|
|
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 |
|
|
Weny Sky
Založen: 28. 07. 2007 Příspěvky: 241
|
Zaslal: 4. srpen 2013, 08:27:34 Předmět: |
|
|
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 |
|
Návrat nahoru |
|
|
|