Portál AbcLinuxu, 30. dubna 2025 10:12
Danny Kalev ve svém článku, který vyšel na webu softwarequalityconnection.com, představuje nejvýznamnější novinky v C++0x označovaném také jako C++11. V novém standardu známého programovacího jazyka jsou mimo jiné lambda výrazy, automatická detekce typu, sjednocení syntaxe pro inicializaci proměnných, klíčové slovo pro null pointer, delegující konstruktory a podobně. Změny jsou také ve standardní knihovně – jsou to například funkce fungující jako množinové kvantifikátory nebo knihovna pro práci s vlákny.
Tiskni
Sdílej:
Čím více a čím agresivněji se nějakému projektu předpovídá brzký zánik, tím déle obvykle přežije. Předpovídat zánik jazyku, který se pro účely systémového programování používá už 40 let a který po tu dobu své pozice (v této oblasti) stále posiluje, je poněkud odvážné…
To, že tu někteří prezentují emocionální a argumentačně prázdné výpady proti C++, neznamená automaticky, že musíte reagovat stejným způsobem.
protože C je de facto velmi malou podmnožinou C++Toto neni pravda, pomerne dost v praxi pouzivanych konstrukci z C nen soucasti C++. Prikladem budiz variadicka makra, otevrena pole a pokrocile literaly. Navic nektere konstrukce znamenaji v obou jazycich neco jineho.
blockquote
?
Jenom to, že když použiji jakýkoli element, musím pak nabouchat milióny dalších. Například poctivě označit odstavce elementem p – tudíž použitím jednoho elementu musím oelementovat všechno.Nojo, v předpovídání budoucnosti jste ještě neměl jediný omyl... ale blockquote používat neumíte a místo toho plácáte něco o odstavcích, než abyste to úplně normálně vyzkoušel a zjistil, že to co píšete, je nesmysl.
"Jazyk D ovšem s C++ kompatibilní není. Aby mohl C++ nahradit, musel by mít nástroj, který by dokázal využít C++ moduly a snadno přejít. To je nutnost. "
není vůbec potřeba konvertovat existující projekty, ale zajistit ABI kompatibilitu, což D má.
"Bohužel jazyk D nemá některé featury C++"
které?
"D také zrušil objektové pojetí C++ a dědičný styl přejal z Javy a funkcionálních jazyků."
to je naprosto v pořádku a správný krok.
"Základní problém je, že C++ bylo navrženo pro řešení praktických úkolů."
od kdy? Právě D je navrženo k praktickému použití, oproti C++, a proto netrpí některými mouchami C++ (píšu pro ábíčko seriál o D, vše bude popsáno)
"Něměl jsem pocit, že D řeší něco lépe, než řada existujících jazyků."
rozhodně lépe než C++, což je jeho cílem.
"C++ jako C s třídami neukáže ani 1% jeho efektivity."
možná ještě metaprogramming a operator overloading se občas hodí, ale stdlib, encapsulation, exceptions a spousta věcí z nové 0x specifikace je naprosto otřesných.
vezměme v potaz třeba tohle: http://ideone.com/sdPBZ Tento malý test dokazuje, že encapsulation v C++ je defektivní, protože to lze naprosto snadno obejít (díky tomu, že class v C++ je stále obyčejná struktura ve které lze použít offset)
nebo iostream - co je lepší?
std::cout << foo << " bah " << meh << " blah " << std::endl;
které je naprosto nepoužitelné při i18n/l10n, je delší a vypadá hnusně
nebo
printf("%i bah %f blah\n", foo, meh);
který je naprosto bez problému?
Argument "type safety" jsou kecy, buď je kód správně nebo blbě a to, že si někdo neumí správně ověřit parametry není můj problém.
V porovnání s D:
co je lepší?
string a = "hello world";
string b = a.substr(0, 5); // hello
nebo
char[] a = "hello world".dup;
char[] b = a[0 .. 5]; // hello
co je lepší?
std::map<string, int> mymap;
mymap.insert(std::pair<string, int>("foo", 5));
nebo
int[string] harr;
harr["foo"] = 5;
?
takhle by se dalo pokračovat do nekonečna..
<<
můžete rozšířit na libovolnou třídu, u printf()
to nejde (o dalších lahůdkách jako např. automatické překódování škoda ztrácet řeč). U druhého příkladu mi ten rozdíl nepřipadá tak velký, aby to byl nějak relevantní argument. Třetí příklad je podvod, protože i v C++ můžete napsat mymap["foo"] = 5
.
vezměme v potaz třeba tohle: http://ideone.com/sdPBZ Tento malý test dokazuje, že encapsulation v C++ je defektivní, protože to lze naprosto snadno obejít (díky tomu, že class v C++ je stále obyčejná struktura ve které lze použít offset)tohle je ukazka naprosto pokrivenyho mysleni. Encapsulation by melo chranit proti chybam a spatnymu pouziti, ne proti lidem. To ze kdyz se nekdo bude umyslne snazit to porusit tak se mu to povede je spis vyhoda...
píšu pro ábíčko seriál o D, vše bude popsáno
Skvělé! Už se těším:) Doufám, že to bude spíše o D2.
to jsi mě asi trochu nepochopil Já C++ netrolluju, já kritizuju jeho mouchy, sám C++ používám pro svůj projekt a ono se dá použít, ale jen jako "C with classes" .. ony ty "špatné" části jsou většinou jen volitelné, takže se dají "nepoužít" a C++ může být decentním jazykem..
A preto napr. toto ide v c++0x stale skompilovat, ze?
int main(){
auto int x = 5;
return x;
}
Videli ste vobec tie zmeny v pythone? Zmeny su aspon navonok relativne male a aspon velka cast z nich svoj vyznam urcite ma.
Navyse s trochou snahy sa da pisat kod pre obe verzie pythonu.
C++ nešel cestou Pythonu či Perlu, že vše změní už jen pro ten pocit, že to překopal.Python naštěstí tou cestou šel, měl hodně restů, které nešly v 2.x verzi opravit.
Osobně si myslím, že nejlepší cesta by v budoucnu byla sjednocení jazyků C a C++ do jednoho jazyka.Apage satanas. Naštěstí nám ale céčko zůstane :).
#define MyNULL NULL
a v budoucnu to pak jen přehodit #define MyNULL nullptr
a třeba si podivit co se stane Rozumím tomu opravdu dobře, že v C++0x budu muset přizpůsobit názvy metod třídy abych ji mohl pohodlně iterovat? Tedy, budou to muset být begin() a end()?Ne, neřekl bych, teda doufám. Jinak ale +1 k STL, imho koule na noze C++.
stdlib/STL je jedním z hlavních problémů jazyka C++.
pomalý kontejnery, streamy horší než v Cčku, pomalý stringy, nesourodý exceptions, debugování horší než v Cčku..
std::for_each
z hlavičky algorithm
, ale o v C++0x novém klíčovém slově foreach
.
vim ~/.emacs
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.