Mikrokontroléry RP2350A a RP2350B jsou již volně v prodeji. Představeny byly v srpnu loňského roku společně s Raspberry Pi Pico 2.
GIMP 3.0 byl oficiálně vydán (Mastodon, 𝕏). Přehled novinek v poznámkách k vydání.
Od 6. do 19. dubna proběhne volba vedoucího projektu Debian (DPL, Wikipedie) na další funkční období. Kandidují Gianfranco Costamagna, Julian Andres Klode, Andreas Tille a Sruthi Chandran.
Korespondenční seminář z programování (KSP) pražského Matfyzu pořádá i letos jarní soustředění pro začátečníky. Zváni jsou všichni středoškoláci a starší základoškoláci, kteří se chtějí naučit programovat, lépe uvažovat o informatických úlohách a poznat nové podobně smýšlející kamarády. Úplným začátečníkům bude určen kurz základů programování a kurz základních algoritmických dovedností, pokročilejším nabídneme různorodé
… více »Joe Brockmeier z Linux Weekly News vyzkoušel různé forky webového prohlížeče Mozilla Firefox: především GNU IceCat, Floorp, LibreWolf a Zen. V článku shrnuje, v čem se liší od výchozí konfigurace Firefoxu, co mají za vlastní funkcionalitu, jak a kým jsou udržované atd.
Byl vydán Debian 12.10, tj. desátá opravná verze Debianu 12 s kódovým názvem Bookworm. Řešeny jsou především bezpečnostní problémy, ale také několik vážných chyb. Instalační média Debianu 12 lze samozřejmě nadále k instalaci používat. Po instalaci stačí systém aktualizovat.
Byla vydána nová verze 4.5 svobodného notačního programu MuseScore (Wikipedie). Představení novinek v oznámení v diskusním fóru a také na YouTube.
Byla vydána nová verze 8.6.0 správce sbírky fotografií digiKam (Wikipedie). Přehled novinek i s náhledy v oficiálním oznámení (NEWS). Nejnovější digiKam je ke stažení také jako balíček ve formátu AppImage. Stačí jej stáhnout, nastavit právo ke spuštění a spustit.
O víkendu probíhá v Praze na Karlově náměstí 13 konference Installfest 2025. Na programu je celá řada zajímavých přednášek a workshopů. Vstup je zdarma. Přednášky lze sledovat i online na YouTube.
Byla vydána nová verze 2.49.0 distribuovaného systému správy verzí Git. Přispělo 89 vývojářů, z toho 24 nových. Přehled novinek v příspěvku na blogu GitHubu a v poznámkách k vydání.
C++ je bohatý jazyk, který není nutné používat komplet.Ehm, bohatý v čem? Mě to fakt nedochází, STL vypadá jen jako sada modulů která umožňuje složitě dělat to co je v ostatních jazycích přirozené (foreach, kontejnery a vůbec složitější datové struktury/algoritmy nezávislé na typu). API veskrze na úrovni C (nebo jsem na něj prostě nenarazil). Jediné bohatství kterého jsem si vědom spočívá v tom, že je jako windows - lidi ho masivně používají.
Ale ne, ja nechci obhajovat D a tvrdit jak je lepší. Nejspíš jsem ho ani neměl zmiňovat.Ale zmínil. Pokud máš rád D, tak ho prostě používej a zapomeň na C++. Mám ale pocit, že to s tím D nebude tak růžové, proč jinak bys tu řešil C++?
Z mého pohledu je C++ zastaralý, dost ubohý jazyk, na kterém se podepisuje roubování, jak do něj rvali nové vlastnosti. To co dnes ostatní jazyky berou jako samozřejmost, tak normální že o tom nikoho ani nenapadne přemýšlet se podle toho co jsem zatím zjistil dělá v C++ tak krkolomně že je to až neuvěřitelné. Navíc ty standardy (které jsou navíc kompilátory divně podporované, viz string ve struktuře) jednou za milénium, hrůza a děs.Řekni konkrétně, co ti vadí.
Tak nějak jsem čekal že mi někdo řekne - C++ je dobré, protože támhleto, neměl bys ho zatracovat, protože tohle, má svou vnitřní krásu a vlastně dává smysl.Na to si musíš udělat pohled sám. Já neznám jiný jazyk než C++, ve kterém bych mohl psát nízkoúrovňově i vysokoúrovňově.
Ehm, bohatý v čem? Mě to fakt nedochází, STL vypadá jen jako sada modulů která umožňuje složitě dělat to co je v ostatních jazycích přirozené (foreach, kontejnery a vůbec složitější datové struktury/algoritmy nezávislé na typu). API veskrze na úrovni C (nebo jsem na něj prostě nenarazil). Jediné bohatství kterého jsem si vědom spočívá v tom, že je jako windows - lidi ho masivně používají.Já třeba STL nepoužívám, protože se mi nelíbí jeho návrh. To samé platí o jiných věcech. Kontejnery si můžeš naprogramovat vlastní, memory alokátory napsat vlastní, sakra jaký jazyk ti dává takovou svobodu? V C++ můžeš psát cokoliv.
Možná že moje předchozí příspěvky působily jako že jsem zkušený, nebo si to aspoň myslím, ale opak je pravdou. Nejsem sice začátečník, úvody a sytaxi už mám za sebou, něco pár desítek svých miniprojektů jsem už v lecčem napsal, zkoušky udělal. Teď řeším co dál. Kde je ta další meta? Jak se stát něčím víc? Všichni se tolik věnují začátečníkům, až vytvářejí tak silnou kouřovou clonu, že přes ní není vidět co dělat poté, co přestanete být začátečníci.Začni něco programovat. Já fakt nevím, jak vnímáš programování. Pro mě je programování zábava a business, pro některé jen business, a pro další jen zábava (a od toho se odvíjí použité jazyky). Pokud nechceš používat C++, tak ho nepoužívej a zkus si vydělat v jiném jazyce, třeba tom D. Pak uvidíš, jestli tvoje představy nebyly jen zbytečně zaujaté. Kdybys programoval 10 let v D a 10 let v C++, rád bych si přečetl tvoje názory, ale takto je to prostě jen takový výkřik do tmy.
Ale zmínil. Pokud máš rád D, tak ho prostě používej a zapomeň na C++. Mám ale pocit, že to s tím D nebude tak růžové, proč jinak bys tu řešil C++?Prostě proto že je to lingua franca a do nedávna jsem měl za to, že by mělo patřit ke vzdělání každého programátora.![]()
Kdybys programoval 10 let v D a 10 let v C++, rád bych si přečetl tvoje názory, ale takto je to prostě jen takový výkřik do tmy.Protože to zase bereš jako obhajobu D a machrování s tím že je lepší. Já to fakt neměl v úmyslu, zmínil jsem D jen proto, že je to podobný jazyk a poslední dobou jsem se ho učil. Cílem celého tohohle threadu nemělo být přesvědčovat všechny ostatní o tom že D/whatever je lepší, ale přesvědčit mě, že C++ za to stojí.
Začni něco programovat. Já fakt nevím, jak vnímáš programování.Programuju něco skoro pořád. Hlavně v pythonu. Zábava, prostředek sebevyjádření, způsob realizace vlastních cílů, v nepříliš vzdálené době možná způsob obživy.
API veskrze na úrovni C (nebo jsem na něj prostě nenarazil).Však o to právě jde. STL je víceméně rovnocená ANSI C co se týče efektivity, ale přidává podstatně inteligentnější překladač. Třeba iterátory se mi velmi zalíbily když jsem si uvědomil, že vlastně pracuji s ukazateli, ale bez spousty drbání okolo a s podstatně lepší (byť ne dokonalou) typovou kontrolou. Jazyku které mají hezčí kontejnery je možná spousta, ale výkonově není srovnatelný žádný z nich.
jde temer vzdy vyvoj od slozitych bastlu s mnoha vyjimkami k jednodussim
+1
Dokonalé není to, kam už není co přidat, ale to, odkud už nejde nic odebrat.
Dneska by treba lide znali v 90. letech C++ meli problem prijmout Javu - tehdy to problem nebyl, protoze byla o poznani jednodussi.
Tohle mě osobně třeba na Javě vadí. Místo odebírání a zjedodušování se tam přidávají věci, které šly (a IMHO nijak krkolomě) dělat i ve "staré" javě. Neříkám, že jsou k ničemu, to jistě ne, ale ten jazyk se bez nic obešel.
Jinak doporučuju se podívat do knihovny Qt.
A pak se pro změnu podívejte třeba na nějaký tutorial Gtk. Tam si na každém druhém řádku říkáte, o co by to bylo jednodušší a přehlednější, kdyby to bylo napsané v C++.
Její vývojáři hodili většinu konstrukcí C++ do koše a používají jen jeho celkem malou podmnožinu
To, že se na konkrétní projekt hodí použít jen část toho, co jazyk umí, přeci neznamená, že je ten jazyk špatně navržený. Pro jiný projekt se zase může mnohem lépe hodit použít celou mašinerii templates a container classes ze standardní C++ knihovny.
Naopak, jednou z klasických začátečnických chyb je představa, že za každou cenu musím využít všechno, co mi jazyk nabízí. Když jsem s C++ začínal, také jsem si představoval, že musím overloadovat operátory a používat templates jen pro ten pocit, aniž by to reálně přinášelo cokoli jiného než jen znepřehlednění zdrojáků. Problém je, když někdo takhle jen nahlédne do dveří, zůstane u představy, že C++ programy takhle vypadat musejí, na základě toho jazyk odsoudí a plive na něj po fórech.
Ano, je spousta programů napsaných v C++, ze kterých se chce člověku zvracet. Jenže přesně totéž se dá říct o céčku nebo Javě - a vlastně kterémkoli jazyce. A ani v jednom případě to automaticky neznamená, že ty jazyky jsou špatné.
Ano, je spousta programů napsaných v C++, ze kterých se chce člověku zvracet. Jenže přesně totéž se dá říct o céčku nebo Javě - a vlastně kterémkoli jazyce. A ani v jednom případě to automaticky neznamená, že ty jazyky jsou špatné.Jo, ale jsou jazyky, kde napsat nepřehlednou změť, co třeba i nějak funguje jde snadno (např. Perl, kde sice mám za 5 minut utilitku co bych ji v C++ psal 2 hodinym, ale když se na to podívám za týden, tak už se ve vlastním kódu nevyznám), a pak jsou jazyky, kde už jazyk sám o sobě čistotu kódu trochu hlídá (např. Java). C++ bez templatů a přetěžování operátorů může vyústit v poměrně přehledný kód (není tam tolik věcí co by svádělo k výrobě bordelu), ale když se to s operátory a templaty přežene, tak vznikne změť ve které se není snadné vyznat.
try { ... } catch(Exception e) {}a bylo to vyreseny. Vim, prasarna, ale ten prekladac me proste nedal jinou moznost... btw. nakonec to v tom programu zustalo...
Jinak ja bych tu vyjimku v ty funkci nakonec obslouzil...
Ne, ale predstirat, ze tam zadna obsluha byt nemusi/nema, je prasarna.Nemusi byt. V programu, ktery mam jen jako prototyp, to prasarna neni. Samozrejme, podle teorie autoru a zastancu Javy je programovani tovarni vyroba, nikoli inzenyrstvi, a proto prototyp nikdy nepotrebujeme, protoze neexistuji zadna prekvapeni, vsechno je hned zname a jasne, a muzeme zacit vytvaret hned hotovy produkt v cele sve krase. (Timto odpovidam i podleshovi.)
(Timto odpovidam i podleshovi.)To není pravda, já jsem psal o něčem jiném. Problém toho že programování není (přes veškerou snahu) inženýrství (tedy "tovární výroba") platí všude a jeho souvislost se staticky typovanými jazyky rozhodně nemůžu považovat za prokázanou.
Predne, inzenyrstvi a tovarni vyroba neni totez. Inzenyrstvi je navrh, a to znamena, ze neni jeste vsechno jasne, jak to bude v realnem svete fungovat. Muze se napriklad ukazat, ze ta nova lepsi architektura je proti te stare necitelne prilis pomala. Nebo se muze ukazat, ze ta krasna knihovna, co chceme pouzit, neni uplne to prave. Dabel je temer vzdycky v detailech. Proto ma smysl vyrobit prototyp, ktery neresi chyby, ale ukazuje problemy tohoto typu. Ze se to v SW prumyslu az tak casto nedela je jiny problem. Naopak tovarni vyroba je - kdyz to vyrobite podle specifikace, bude to zarucene fungovat. Tak se pristupuje k vyrobe SW, a je to IMHO dost zoufale.To že se nejprve dělá prototyp či model je sice hezké, ale hlavní vlastností inženýrství je právě to že výsledkem je jasná specifikace podle které to bude zaručeně fungovat. Takže ano, není to totéž, ale je tam silná souvislost: inženýrství implikuje tovární výrobu. Nebo lepé řečeno to je naopak: tovární výroba vyžaduje inženýrství. No a jelikož SW inženýrství má docela zásadní problémy, tak tovární výroba nefunguje. Bohužel je stále rozšířen názor, že výroba SW je inženýrství a tedy že tovární výroba fungovat bude... Samozřejmě, to je zase terminologická diskuse, nechci se moc hádat o tom co vlastně znamená slovo inženýrství - důležité ale je, že ten problém IMO není ve vytváření prototypů (to se dělá a ne vždy to pomůže, ďábel totiž právě bývá v detailech jako jsou chybové stavy) ale právě ve vytváření specifikací.
Co se tyce jeste toho inzenyrstvi, tu filozofii "napsat program nahrubo a pak ho upravovat" mam od Paula Grahama, podle ktereho ji dobre vyjadruje Common Lisp a ja s nim souhlasim.Souhlasím, ale IMHO spíš odpovídá řemeslné výrobě. Jeden z důvodu proč osobně razím heslo, že výroba SW je řemeslo.
Remeslo spojuje oboji - jak navrh (inzenyrstvi, i kdyz v mensim mnozstvi), tak vyrobu.Tak nevím - je to souhlas nebo nesouhlas? Pokud nesouhlas, v čem přesně?
1. Kdyz uz neco nekde byt musi, proc to tam musim psat? Proc to proste nedela prekladac implicitne? Od ceho jsou varovani?Co má překladač dělat implicitně? Napsat za tebe obsluhu výjimky? Bohužel ten požadavek tam je a překladač s tím nic nemůže udělat. Na druhou stranu bych se bez povinného ošetření / deklarace vyhození výjimky taky obešel, někdy to opravdu otravuje.
2. Druhy duvod je, ze se tenhle druh zbytecneho nasili (vsechny vyjimky musi byt osetrene, vsechny funkce musi byt ve tride, atd.) resi generovanim kodu. Coz spojuje nevyhody obojiho - nemate varovani, ze jste to opominul, a neosetrena vyjimka trci v kodu, o duplikaci kodu nemluve.Všechny výjimky nemusí být ošetřené, nevím jak jsi na to přišel. Požadavek, že metoda je součástí třídy je také asi podle tebe u objektového jazyka nečekaný (a to Java zdaleka není čistě objektová). A když fakt nechceš tu obsluhu psát, tak tam přidáš
throws
a necháš to probublat nahoru. V rozumném IDE otázka jednoho kliknutí myši.
Tomu poslednímu nerozumím, to varování nemám jen případě, že jsem prase a "obsluhu" vyřeším prázdným blokem. To ale opravdu není problém jazyka ani překladače, jak se extremni lama pokouší dokázat.
Na druhou stranu přiznávám, že kdybych měl všechno (zdaleka nemyslím jen výjimky), co se v Javě musí psát ťukat ručně, tak mi to taky bude vadit. Ale naštěstí IDE tento problém poměrně efektivně řeší.
Cela ta filozofie vychazi z mylne predstavy, ze programovani je tovarni vyroba a ne inzenyrstvi. Jazyky skutecne navrzene proto druhe totiz umoznuji nejdriv napsat program "nahrubo", a pak teprve ho vylepsovat.Inženýrství? To je přeci totéž co tovární výroba. Asi myslíte umění nebo věda... Každopádně, v naprosté většině případů platí že se program napíše "nahrubo" a pak se na něj nesahne dokud není potřeba něco opravit.
Tohle je jen taková snužka jakýchsi dojmů pocitů v pár větách.Ehm. Tím tohle myslíš tvůj, nebo můj příspěvek?
C++ je multiplatformní. (určitě více než D).Vzhledem k tomu, že D je součástí gnu compileru (gdc) a existují i překladače překládající do čistého C, nějak se mi moc nezdá že C++ je víc multiplatformější.
foreach (type item in set)
{
/* do something to item */
}
for (int& i: myint)
{
std::cout << i;
}
V C++ dělám a upřímně, všechno se mi na něm taky nelíbí, ale pořád mi přijde jako nejmenší zlo oproti C#, Javě a dynamickým jazykům. A nechci po nikom, aby mě přesvědčoval o opaku. Navíc mám pocit, že o ti ani nejde, vzhledem k tónu, se chceš jen hádat.
Tobě C++ přijde dementní, aniž by jsi uvedl důvody.Já o tom nechci nikoho přesvědčovat, proto jsem neuváděl proč.
Jaký foreach máš na mysli?for_each
Navíc mám pocit, že o ti ani nejde, vzhledem k tónu, se chceš jen hádat.Já už nevím jak to mám napsat jinak. Smrtelně vážnej dopis, vytisklej na papíru co se používá k na těch pozvánkách k pohřbu? Lidi už jsou tak zvyklí na flame, že pomalu není možné se vážně dotázat na něco netradičního, protože v tom každý hledá něco víc.
template<class T> struct print : public unary_function<T, void> { print(ostream& out) : os(out), count(0) {} void operator() (T x) { os << x << ' '; ++count; } ostream& os; int count; }; int main() { int A[] = {1, 4, 2, 8, 5, 7}; const int N = sizeof(A) / sizeof(int); print<int> P = for_each(A, A + N, print<int>(cout)); cout << endl << P.count << " objects printed." << endl; }
QList<int> list; list << 1 << 4 << 2 << 8 << 5 << 7; foreach (const QString &str, list) { qDebug() << str; } qDebug() << list.count() << "objects printed.";
list<int> A = {1, 4, 2, 8, 5, 7}; for_each(A.begin(), A.end(), [](int x)->void { cout << x << endl; } ); cout << A.size() << " objects printed." << endl;aby to nebolo tak jednostranné.
ale jedná se jen o členění pro snazší orientaci.To je ale hned po samotné funkčnosti ten nejdůležitější důvod.
Rozhodně větší než tenhle "dotaz" v poradně… :-)
Pro řadu lidí je C++ dobrým kompromisem mezi pohodlným, ale neefektivním programováním v Javě nebo C# na jedné straně a vysoce efektivním, ale často nepohodlným programováním v C na straně druhé. Pokud vás C++ neoslovilo, je to váš názor, ale nepočítejte s tím, že jeho kategorické odsouzení někým, kdo jazyk v podstatě nezná, přesvědčí vývojáře existujících projektů, že mají C++ zavrhnout a přepsat vše do C nebo Javy.
Jazyky jako D nemá smysl řešit, jejich zastoupení je natolik mizivé, že jakmile je použijete, odsoudíte projekt do kategorie "one man show".
Naopak, ja si myslim, ze taketo otazky maju zmysel.Zmysel tá otázka má. Ale nepatrí do poradne. Odpoveďou (nech už je akákoľvek) totiž nie je rada ale názor. Neviem si predstaviť, že niekto bude prehľadávať poradňu, pretože potrebujem riešenie problému o ktorom sa tu diskutuje. Skutočne to patrí do blogu. A keď už som tu: zmysel C++ vidím v tom, že je objektové a pritom jeho výstupom je jednoducho ".exe". Nie bytekód vykonávaný javou, ani nie skript vykonávaný pythonom, ... Na systém neinštaluješ celý podsystém (JRE/Python/Perl/... ), ktorému stačí podhodiť (v podstate dátový) súbor a ten podsystém dokáže na systéme prakticky čokoľvek. (nehovorím o extrémoch ako je java kompilovaná do exe, alebo MS office, s VB interpreterom) C++ nie je samozrejme všeliek, ale sú situácie, kedy je vhodné.
C++ po zkoumání a přemýšlení nad ním vypadá jako totálně nepoužitelný krám. Jsem jen člověk, určitě jsem v tomhle udělal chybu, vždyť ho přece používá tolik lidí! Prosím, řekněte mi někdo, že se mi to jen zdálo a ukažte mi, že za to stojí.
Ovšem pokud děláš věci, kde je lépe použít jiný jazyk, není nutné se C++ učit.Já chci umět všechno, ne jen úzce zaměřené věci.
Když se ti něco nelíbí a nezajímá tě to, tak to prostě nedělej a nezamořuj tím poradnu. Je to snadné.To je právě ta chyba. Mě to zajímá, ale jsem z toho zhnusen.
Pokud čekáte, že Vás zde ve vašem přesvědčení někdo podpoří, tak ano, zhruba polovina lidí Vás podpoří a 2. polovina Vám bude říkat, že je C++ dobrý jazyk. Když budete furt tlačit na pilu vyvoláte akorát flame.Ne, to nečekám, chtěl jsem přece pravý opak! Mám názor, pohled relativního začátečníka, který C++ zatím nelichotí a chtěl jsem aby mi byl vyvrácen někým kdo C++ rozumí líp než já. Aby mě prostě argumenty někdo přesvědčil, že jsem to pochopil špatně. Jenže vzhledem k tomu co jsem se zatím dozvěděl to vypadá, že se mnou částečně souhlasí všichni, protože jediné argumenty byly "používá to každý" a "je to výkonné" :/
Mám názor, pohled relativního začátečníka, který C++ zatím nelichotí a chtěl jsem aby mi byl vyvrácen někým kdo C++ rozumí líp než já.
A toho jste chtěl docílit tím, že jste začal vykřikovat věci jako:
absolutně nechápu, proč někdo používá tak dementní jazyk jako je C++ … čím víc do něj pronikám, tím víc mi připadá jako špatnej vtip. Vždyť je to tak giganticky kolosální sbírka vyjímek, podivností a omezenosti. Proč v tom někdo vůbec dělá? … prvně jsem ho nepochopil, pak nevěřícně zíral a pak se začal smát … Vážně, co někdo na C++ vidí? … Mistrovství v C++ pohodím někde na nádraží a budu radši dělat něco užitečnějšího.
Ale možná máte úplnou pravdu a nechápaví jsme my, protože tohle je naprosto normální způsob, jak vyjádřit, že něčemu nerozumíte a potřebujete to vysvětlit…
Ale možná máte úplnou pravdu a nechápaví jsme my, protože tohle je naprosto normální způsob, jak vyjádřit, že něčemu nerozumíte a potřebujete to vysvětlit…Hm. To proto že jsem do toho částečně nevědomky promítl víc věcí najednou. Je to dotaz, žádost o pomoc, vyjádření pocitu a zároveň průzkum bojem s cílem otestovat kompaktnost názoru střetem s názory zkušenějších programátorů. Postupně jsem svůj názor na základě reakcí upravoval a spolu s tím měnil svůj postoj a požadavky. Možná to byla chyba. Spokojen?
for (int &i: kontejnet) {...}
. Tak půlka překladačů jej už podporuje (mj. GCC a Clang).
Neexistence klasického for cyklu (ne, dělat for cyklus tak, že alokuji pole od jedné do N, a pak přes něj iteruji je dosti úchylné)Pokud myslíš „klasický“ for cyklus z C, tak je to jen alternativní zápis while, tedy v pythonu je.
pokud má člověk jinou představu o počtu mezer v tabu než kompilátor, tak prostě smůlaKombinování tabů a mezer je prasárna snad všude.
Python má pár zajímavých vlastností, ale na většinu věcí to není dobrá volba.Přijde mi to přesně naopak - python má pár nepěkných vlastností a na většinu věcí to je dobrá volba.
for i in xrange(10):
.
Odsazování je běžné v pseudokódu a Python se snaží být spustitelný pseudokód. Překladač nezajímá, jak odsazujete, pokud odstazujete konzistentně (ale to po vás budou požadovat i v coding standards u jiných jazyků).
JIT existuje, jmenuje se PyPy, ale zatím nepodporuje všechny konstrukce. Python ale hlavně funguje jako skriptovací jazyk nad céčkovými knihovnami, takže ta rychlost může být snadno mnohem vyšší, než dosahuje Java.
Python má generátory, něco, co C neumí (ale C++ ano), takže for cyklus lze napsat i bez alokace pole: for i in xrange(10):
.
Teď už je to možná lepší, ale kdysi byl ten obyčejný předgenerovaný range v manuálu a ve většině examplů co ležely na netu. Je to sice spíš blbost některých uživatelů než velký nedostatek jazyka, nicméně řadí to Python do kategorie jazyků "svádí k prasárnám".
Odsazování je běžné v pseudokódu a Python se snaží být spustitelný pseudokód. Překladač nezajímá, jak odsazujete, pokud odstazujete konzistentně (ale to po vás budou požadovat i v coding standards u jiných jazyků).Tam je rozdíl, že coding standards musí člověk dodržovat až v okamžiku commitu, takže když si někam do zdrojáku pastnu nějaký debugovací kód o kterém vím, že před commitem půjde zase pryč, tak ho nemusím v jazycích co nevyžadují přesné odsazení formátovat. A jsou i vyjímečné případy, kdy je lepší něco poodsazovat pro přehlednost trochu jinak než jak je to v coding standards,
JIT existuje, jmenuje se PyPy, ale zatím nepodporuje všechny konstrukce. Python ale hlavně funguje jako skriptovací jazyk nad céčkovými knihovnami, takže ta rychlost může být snadno mnohem vyšší, než dosahuje Java.Java (nebo skoro cokoliv) nad céčkovými knihovnami bude taky rychlá :) Jak moc použitelné je PyPy s částí jazyka co to podporuje? I když jak na stránce projektu vidím odstavec "Known differences that are not going to be fixed" tak koukám, že s univerzální použitelností to asi nebude tak žhavé ... Tuším někde někdo zmiňoval, že konstrukce a široké možnosti jazyka (možnost přicpávat různé funkce a atributy skoro do čehokoliv, o věcech typu "eval" nemluvě) výrobu dobrého JIT kompilátoru vcelku dosti znesnadňují až znemožňují.
if True:
(či if False:
, pokud chcete zakomentovat celý blok)
Navíc změnit odsazení u celého bloku zvládne mnoho schopnějších editorů na pár klávesových zkratek (či kliků).
Python bych tedy spíše viděl jako skriptovací jazyk pro propojení mnoha externích knihoven než jako plnohodnotný jazyk pro psaní všeho.Tedy v podstatě ideální aplikační jazyk pro psaný jakýchkoli frontendů a případně na prototypy core funkcionality, která se v případě potřeby napíše v C.
Jinak idea že v C++ se napíše jádro a pak se to obalí aby to šlo použít v pythonu asi nebude tak jednoduchá. V jednom projektu jsme to zkoušeli, ale dopadlo to nakonec tak, že já jsem napsal C++ část a ten kdo psal pythoní wrapper nakonec prohlásil že na to kašle, že je to šílené a že to radši místo v Pythonu celé napíše v C++.Njn, to je tak když se kombinují jazyky, které se rozcházejí... moduly pro python se boudou IMO daleko lépe psát standardně v C než se patlat s C++.
No vidíš, podle mě zase diskuze jasně naznačila, že C++ má široké zastoupení na trhu, a lze si jeho osvojením vydělat hodně penězTo jsem věděl už předtím.
Já osobně uvítám, když tento jazyk budou používat lidé, kteří mu rozumí;)Nikdy jsem pokud se nepletu nepsal že mu nerozumím, nebo že mi dělá nějaký problém něco z něj pochopit.
Nikdy jsem pokud se nepletu nepsal že mu nerozumím
Explicitně ne, ale je to dostatečně zřetelné.
nebo že mi dělá nějaký problém něco z něj pochopit.
Pochopit jazyk neznamená naučit se jeho syntaktické konstrukce a v případě C++ to platí dvojnásob. To, že jsem tu a tam něco opravoval v perlových skriptech a nedávno prováděl netriviální backport v YCP, neznamená, že o sobě mohu tvrdit, že jsem ty jazyky pochopil. Na druhou stranu, po těch letech praxe si to už o C++ tvrdit troufám, přestože složitější triky s templates z hlavy nesypu a když jednou za uherský rok potřebuji použít pointer na metodu, raději si syntaxi nejdřív někde zkontroluji. Právě u tak bohatých jazyků jako C++ je nejdůležitější cit pro to, co používat běžně, co občas, co jednou za čas a co třeba nepoužít nikdy (což ale pořád neznamená, že někdo jiný s jiným přístupem a jinými potřebami nemůže mít to rozdělení diametrálně odlišné). Ten cit nezískáte přečtením učebnice ani napsáním pár prográmků.
Váš problém není v tom, že byste nepochopil, jak fungují templates nebo jiné prvky jazyka C++. Je v tom, že si myslíte, že přečtení jedné učebnice a pár příspěvků v diskusi (k nimž jste navíc přistupoval už s předem uzavřeným názorem a to, co v nich nebylo souladu s tímto názorem, jste ignoroval) vám dalo dostatečné pochopení a nadhled, abyste mohl hodnotit, jestli je ten jazyk dobrý nebo špatný (nebo dokonce dementní).
Právě u tak bohatých jazyků jako C++ je nejdůležitější cit pro to, co používat běžně, co občas, co jednou za čas a co třeba nepoužít nikdy (což ale pořád neznamená, že někdo jiný s jiným přístupem a jinými potřebami nemůže mít to rozdělení diametrálně odlišné).Je možné že se pletu, ale na základě informací co jsem zde získal to vypadá tak, že každý programátor používá jen určitou část C++, která mu vyhovuje, když to přeženu, tak vlastní dialekt. Někteří dokonce používají knihovny (Qt), které z něj dělají jiný jazyk nekompatibilní se sebou samým. To mi zrovna jako výhoda nepřijde.
Je možné že se pletu, ale na základě informací co jsem zde získal to vypadá tak, že každý programátor používá jen určitou část C++, která mu vyhovuje, když to přeženu, tak vlastní dialekt. Někteří dokonce používají knihovny (Qt), které z něj dělají jiný jazyk nekompatibilní se sebou samým. To mi zrovna jako výhoda nepřijde.A to mě naopak jako výhoda přijde. C++ je poměrně univerzální jazyk, ve kterém se dají věci dělat různými způsoby. Což znamená, že uživatele nesvazuje více než je nutné. Rozhodně nebylo cílem C++, aby každý používal všechny jeho aspekty, ale aby si každý (uživatel/projekt) vybral tu cestu, která se mu hodí. To není obhajoba C++, to je prostě fakt :) Nicméně, rozhodnutí jaký jazyk se učit je více-méně nezávislé na jazyku samotném, ale především na předpokládaném využití (stále se snažím naznačit, že tvůj myšlenkový postup je pochybný). Opět utíkám k analogii s přirozenými jazyky, kdy si také vybírám jazyk, od kterého očekávám široké uplatnění a je mi dost jedno, že Esperanto je (asi) úžasně logické, když se s ním nikde nedomluvím.
A to mě naopak jako výhoda přijde. C++ je poměrně univerzální jazyk, ve kterém se dají věci dělat různými způsoby. Což znamená, že uživatele nesvazuje více než je nutné. Rozhodně nebylo cílem C++, aby každý používal všechny jeho aspekty, ale aby si každý (uživatel/projekt) vybral tu cestu, která se mu hodí. To není obhajoba C++, to je prostě fakt :)Obecně vzato bych s tebou uměl i souhlasit... kdybys nemluvil o C++. Líbí se mi některé flexibilnější jazyky, které nevnucují jeden konkrétní způsob a dávají programátorovi flexibilní prostředky a možnost vyřádit se. Ale přijde mi (subjektivně), že C++ mezi ně nepatří a jeho flexibilita jako výhoda moc nefunguje.
Jasně jsem psal, že jsem C++ měl na střední i na VŠ a nepřečetl jsem jednu učebnici, ale hned několikJeště jsem neviděl programátora, který by se jazyk naučil přečtením knih. Až napíšeš v C++ milión řádků kódu, tak můžeš tento dotaz v poradně zopakovat, a věř mi, že tvoje argumentační schopnosti budou úplně jinde. Teď si ale de-fakto v pozici, kdy pomlouváš jazyk, o kterém z praktického hlediska (psals tu 1000 řádků) nevíš zhola nic
Někteří dokonce používají knihovny (Qt), které z něj dělají jiný jazyk nekompatibilní se sebou samýmProsimtě, nešiř tu bludy! Qt je obyčejná knihovna pro C++, která podporuje možná více překladačů, které si schopný vyjmenovat. Řeší nějaký problém (více problémů), jako třeba stl, boost, webkit, atd... Pokud je C++ tak na nic, tak proč se v tom píšou komerční aplikace, hry, překladače, jiné jazyky, webové prohlížeče, atd...?
Až napíšeš v C++ milión řádků kódu, tak můžeš tento dotaz v poradně zopakovat, a věř mi, že tvoje argumentační schopnosti budou úplně jinde.Takže tvrdíš, že na to abych si o jazyku mohl udělat názor (a tedy zjistil jestli mi vůbec stojí za to mu věnovat čas abych ho mohl plně pochopit) musím napsat milion řádků? To vypadá jako deadlock. Milion řádků nenapíšu protože nevím jestli za to stojí a nevím jestli za to stojí, protože jsem nenapsal milion řádků. Nice.
Teď si ale de-fakto v pozici, kdy pomlouváš jazyk, o kterém z praktického hlediska (psals tu 1000 řádků) nevíš zhola nicNo, však ani netvrdím že ne. Proto jsem založil tohle vlákno jako dotaz s jistou žádostí o to aby mi někdo pomohl změnit názor. Kdybych chtěl pomlouvat, napíšu blog.
Pokud je C++ tak na nic, tak proč se v tom píšou komerční aplikace, hry, překladače, jiné jazyky, webové prohlížeče, atd...?Zatím mám pocit že je to ze stejného důvodu jako hlavní motivace která zazněla několikrát v této diskuzi - používají ho všichni ostatní. Trochu to připomíná windows, nemyslíš?![]()
Prosimtě, nešiř tu bludy! Qt je obyčejná knihovna pro C++, která podporuje možná více překladačů, které si schopný vyjmenovat.Neměl jsem v plánu šířit bludy. Šlo mi o to že Qt zavádí novou syntaxi a nová klíčová slova, co jsem tak pochopil. Defakto tak z C++ dělá jiný jazyk. Ale možná jsem to pochopil špatně.
Šlo mi o to že Qt zavádí novou syntaxi a nová klíčová slova, co jsem tak pochopil. Defakto tak z C++ dělá jiný jazyk. Ale možná jsem to pochopil špatně.IMHO jsi to pochopil správně. Pokud nějakou knihovnou změníš syntaxi, tvoříš nový jazyk. Pokud je změna konzistentní se zbytkem aplikace, je to v pořádku. Pokud bys hledal jazyk, ve kterém si můžeš vytvořit vlastní syntaxi i metodiku používání, zkus už zmíněný Common Lisp.
Pokud jazyk bude používat 7 lidí tak je to jazyk k ničemu… (nebo na velmi specifickou věc).Libovolný jazyk který dnes používá osm a více lidí určitou dobu používalo sedm lidí.
Ale jinak doporučuji dát se na politiku, uplatníte svou schopnost, dělat závěry v souladu ze svým přesvědčením, bez ohledu na názory ostatních, které jste si „vyžádal“.To vám vadí že automaticky nepřejímám názory ostatních a prvně o nich přemýšlím, dávám je do kontextu mého vidění světa, porovnávám je, zkoumám motivaci řečníka a až teprve poté je možná přijmu za své? Nebo čistě ten fakt, že po té co jsem vyslechl názory ostatních jsem neprohlásil "sláva, už vidím, c++ je lék na vše a vlastně vůbec ten nejlepšejší jazyk pod sluncem" ?![]()
Takže tvrdíš, že na to abych si o jazyku mohl udělat názor (a tedy zjistil jestli mi vůbec stojí za to mu věnovat čas abych ho mohl plně pochopit) musím napsat milion řádků?Tvrdím, že bez programování se jazyk nenaučíš. Milión řádků ber orientačně, spíš jako nějakou metu (a aplikuj na jakýkoliv jazyk).
No, však ani netvrdím že ne. Proto jsem založil tohle vlákno jako dotaz s jistou žádostí o to aby mi někdo pomohl změnit názor. Kdybych chtěl pomlouvat, napíšu blog.Bez toho, aniž bys jazyk aktivně používal, názor nezměníš.
Zatím mám pocit že je to ze stejného důvodu jako hlavní motivace která zazněla několikrát v této diskuzi - používají ho všichni ostatní. Trochu to připomíná windows, nemyslíš?Podle mě C++ v současné době nemá konkurenci, co se některých vlastností týče. Ale chápu to tak, že pro tebe je to spíš nevýhoda.
Neměl jsem v plánu šířit bludy. Šlo mi o to že Qt zavádí novou syntaxi a nová klíčová slova, co jsem tak pochopil. Defakto tak z C++ dělá jiný jazyk. Ale možná jsem to pochopil špatně.Ono je to pořád C++. Kdybys to bral takto, tak bys mohl tvrdit, že Gtk není C, protože používá GObject a spoustu maker. Ale sorry za zbytečnou ofenzívu;)
Prosimtě, nešiř tu bludy! Qt je obyčejná knihovna pro C++… a
moc
je obyčejný program, který žere text a bleje jiný text.
na druhou stranu, pokud používáš skriptovací jazyky, asi tě rychlost nezajímá.Ať se tu větu snažím přežvýkat jak se ji snažím přežvýkat, vždy mi z ní vycházní nesmyslná implikace (nebo prostě kec).
No tak sem přihoď link na nějaký rychlý skriptovací jazyk, tos mohl udělat přece hned.Já jsem jen poukazoval na nesmyslnost toho tvrzení. S rychlostí skriptovacích jazyků to nemá nic společného. Ale na to bys musel uvažovat trochu v širším kontextu než si jen v hlavě představit benchmark.
Nechceš se ty naučit číst v širším kontextu, když to ostatním vyčítáš?Máš tedy asi na mysli užší kontext, ne?
Jinak nechápu v čem mé tvrzení bylo špatně. Obecně je známé, že skriptovací jazyky jsou většinou dynamicky typované a nenabízí takový výkon jako kompilované jazyky typu C++. Já v tom vidím logiku. Když se podívám na seznam skriptovacích jazyků ( http://en.wikipedia.org/wiki/List_of_programming_languages_by_category#Scripting_languages ), tak bych z těch nejpoužívanějších za výkonný označil asi jen ActionScript (ty další neznám, můžeš doplnit).Jak říkám, ty se na to díváš jenom z pohledu benchmarků. Ale uživatele aplikace popravdě řečeno vůbec nezajímá, jestli je na aplikaci nebo část aplikace použitý benchmarkově pomalejší jazyk, nebo ne. Na výsledné aplikaci je zajímavá její odezva, rychlost jejích operací a dejme tomu ještě spotřeba prostředků. A použití dynamického jazyka ještě neimplikuje, že to bude pomalé a nepoužitelné. Když se ty jazyky používají správně a na správný účel, nemusí to uživatel vůbec poznat.
Jak říkám, ty se na to díváš jenom z pohledu benchmarků. Ale uživatele aplikace popravdě řečeno vůbec nezajímá, jestli je na aplikaci nebo část aplikace použitý benchmarkově pomalejší jazyk, nebo ne. Na výsledné aplikaci je zajímavá její odezva, rychlost jejích operací a dejme tomu ještě spotřeba prostředků.Já vidím technologie jako celek též, toto fakt nechápu kam tím míříš. Ale na druhou stranu neznám jiný způsob, jak zjistit rychlost nějakého celku, než udělat testy jednotlivých komponent. Podle mě výkon celku je suma výkonu všech jeho komponent.
A použití dynamického jazyka ještě neimplikuje, že to bude pomalé a nepoužitelné.Já jsem nic takového nikde nepsal.
Když se ty jazyky používají správně a na správný účel, nemusí to uživatel vůbec poznat.Můžeš definovat "správně a na správný účel"?
Podle mě výkon celku je suma výkonu všech jeho komponent.To je podle mě jen další nesmysl, nehledě na to, že bych chtěl vidět jednotku, ve které ten výkon budeš měřit.
Můžeš definovat "správně a na správný účel"?Doporučuju tento pojem chápat intuitivně, tedy hodnotit podle výsledku.
Jinak, čekal jsem, že se někdo chytne, a vzpomene MOC:)Což to je v pořádku, že si ho někdo vzpomene. Co jsem ale nečekal, je že se najde někdo jiný, kdo ho okamžitě označí za šiřitele bludů. Já nikde netvrdím, že generovat kód je špatné. Ale generovat ho, a přitom předstírat, že to nedělám, mi přijde už trošku na hlavu.
Generování kódu jsem viděl i u GLib (marshall), a taky to neznamená, že už to není C. Dále tu máme DBus, a další věci, kde se něco podobného používá.Já nevidím důvod se v tom dál pitvat a snažit se dokázat, že Qt se používá v čistém C++. Na případu Glib je vidět, jak se snažíš chytit se stébla trávy. Napsal jsem několik aplikací za použití Glib a žádná z nich se nemusí preprocesovat jinak než standardním céčkovým preprocesorem. Dbus jsem taky v nějaké té aplikaci použil a rovněž jsem k tomu speciální preprocesor nepoužil. Ale to se bavím o faktech, ne o tom, jestli je to dobře nebo špatně.
Já nevidím důvod se v tom dál pitvat a snažit se dokázat, že Qt se používá v čistém C++.Qt se používá v čistém C++, paradoxně je přenositelnější než jiné C++ knihovny. Toto jsou fakta, o kterých se chceš bavit, je tak?
Na případu Glib je vidět, jak se snažíš chytit se stébla trávy. Napsal jsem několik aplikací za použití Glib a žádná z nich se nemusí preprocesovat jinak než standardním céčkovým preprocesorem. Dbus jsem taky v nějaké té aplikaci použil a rovněž jsem k tomu speciální preprocesor nepoužil.Já jsem zase napsal nějaké věci v Qt, kde jsem nepoužil MOC, dokazuje to něco?
Ale to se bavím o faktech, ne o tom, jestli je to dobře nebo špatně.Fakt je, že nemáš rád Qt a asi ani C++. Fakt je, že nevidíš rozdíl mezi MOC a preprocessorem. Fakt je, že bavit se ze zaslepeným člověkem nemá smysl, atd...
Qt se používá v čistém C++, paradoxně je přenositelnější než jiné C++ knihovny. Toto jsou fakta, o kterých se chceš bavit, je tak?Asi se nemá cenu o tom bavit, když máme k dispozici protichůdná fakta :).
Já jsem zase napsal nějaké věci v Qt, kde jsem nepoužil MOC, dokazuje to něco?Ne víc než to, že umíš Qt používat nestandardním způsobem.
Fakt je, že nemáš rád Qt a asi ani C++.To je fakt, který nijak nezastírám, a ani ho nepoužívám k přibarvování faktů.
Fakt je, že nevidíš rozdíl mezi MOC a preprocessorem.Vztah mezi MOC a preprocesorem jsem vyčetl kdysi z nějaké dokumentace Qt a ten vztah byl podle nich inkluze.
Fakt je, že bavit se ze zaslepeným člověkem nemá smysl, atd...Vidím, že na víc než ad hominem se nezmůžeš. Zřejmě ti uniká rozdíl mezi „bavit se s někým“ a „cíleně někoho urážet“. Na to mi zbývá odpovědět jediné. Mě neurazíš.
Asi se nemá cenu o tom bavit, když máme k dispozici protichůdná fakta :).Fakt je, že si začínám připadat jako v sitkomu
Ne víc než to, že umíš Qt používat nestandardním způsobemNeřekl bych. Pokud nevytváříš vlastní třídy, které dědí z QObject/zděděných z QObject, tak MOC nepotřebuješ. Třeba když děláš jen nějaké kreslení do QImage, tak tyto požadavky splňuješ.
To je fakt, který nijak nezastírám, a ani ho nepoužívám k přibarvování faktů.Já si nejsem tak jistý.
Vztah mezi MOC a preprocesorem jsem vyčetl kdysi z nějaké dokumentace Qt a ten vztah byl podle nich inkluze.Oni sami nazývají MOC jako Meta-Object-Compiler. Mi osobně ten Compiler sedí víc.
Vidím, že na víc než ad hominem se nezmůžeš. Zřejmě ti uniká rozdíl mezi „bavit se s někým“ a „cíleně někoho urážet“.Sorry, asi máme hranice citlivosti někde jinde, urážení v diskuzi o C++ mě nijak nenaplňuje.
class Něco { public slots: void hello(QString); signals: void world(QString); }
class Něco { public: void hello(QString); boost::signal<void(QString)> world; };
Ještě jsem neviděl programátora, který by se jazyk naučil přečtením knih. Až napíšeš v C++ milión řádků kódu, tak můžeš tento dotaz v poradně zopakovat, a věř mi, že tvoje argumentační schopnosti budou úplně jinde. Teď si ale de-fakto v pozici, kdy pomlouváš jazyk, o kterém z praktického hlediska (psals tu 1000 řádků) nevíš zhola nicJá bych nezahazoval ani názor člověka po 1000 řádcích. Říká to o jazyku zase něco úplně jiného, než jak ho berou ostřílení C++káři.
Prosimtě, nešiř tu bludy! Qt je obyčejná knihovna pro C++Takové mám nejradši. Píšou o bludech a ve stejné větě nepokrytě lžou, nebo alespoň šíří své další bludy.
Prostě otevři očiJS má hodně plusů :). Řekl bych že paradoxně možná víc než C++, v určitém smyslu (samozřejmě ne, když se je snažíš používat na to samé).Já jsem tu nedávno psal do diskuze celkem záporné věci o JS, a tento víkend chci zkusit node.js
Docela zajímavé pak je spojení JS a C++ ... (QtScript)Mě právě přijde daleko zajímavější spojení JS a C. Už jenom proto, že se mi nelíbí implementace OOP v C++, a tím pádem u mě ztrácí oproti C veškeré výhody a zbývají už jen nevýhody. Subjektivní pohled, samozřejmě.
no, tak napiš, co je tedy Qt, když ne knihovna pro C++A když ti vysvětlím, na co upozorňoval Bystroušák, přestaneš se vůči někomu chovat tak nesmyslně konfrontačně? Qt používá upravenou syntaxi C++, která ve standardních kompilátorech bez speciálního preprocesoru nefunguje. Mám za to, že to je to, na co Bystroušák narážel. Jinak ano, mezi lidma taky nemluvím exaktně a uklouzne mi, že Qt je knihovna pro C++. Ale tys ho označil za šiřitele bludů, přitom měl pravdu v tom, že se používá nestandardní varianta jazyka.Váš komentář
A když ti vysvětlím, na co upozorňoval Bystroušák, přestaneš se vůči někomu chovat tak nesmyslně konfrontačně?Nevyhýbej se odpovědi, a napiš co je Qt, když ne C++ knihovna
Qt používá upravenou syntaxi C++, která ve standardních kompilátorech bez speciálního preprocesoru nefungujeToto byla perla! MOC není preprocessor, ale to ty určitě moc dobře víš
Jinak ano, mezi lidma taky nemluvím exaktně a uklouzne mi, že Qt je knihovna pro C++. Ale tys ho označil za šiřitele bludů, přitom měl pravdu v tom, že se používá nestandardní varianta jazyka.A to je právě ten problém. Ty označuješ MOC za nějakou nestandardní variantu jazyka (dokonce preprocessor), přitom to co z toho leze si můžeš klidně napsat sám - ten nástroj jen slouží pro ulehčení této práce. Označení "upravená syntax jazyka C++" je taky zcela mimo, protože takovou syntax by asi C++ překladač těžko přeložil.
Ty označuješ MOC za nějakou nestandardní variantu jazyka (dokonce preprocessor), přitom to co z toho leze si můžeš klidně napsat sám - ten nástroj jen slouží pro ulehčení této práce.
To, co jste napsal, platí i o jakémkoli jiném preprocesoru - třeba i o tom standardním céčkovém. Co je tedy podle vás moc
, když ne preprocesor?
Co je tedy podle vás moc, když ne preprocesor?Já osobně bych MOC označil za generátor kódu, ale v žádném případě za preprocesor.
In computer science, a preprocessor is a program that processes its input data to produce output that is used as input to another program.viz wiki Kterou část moc nesplňuje?
Nó, jako jó, v čiré obecnosti lze 99 % počítačových programů označit za překladače, protože čtou nějaký vstup, provádějí nějaké transformace a zapisují nějaký výstup. A většina z nich budou zároveň preprocesoryAle uznej, že to už je obecnost v běžném světě nepraktická.
Dneska uz je vsechen potrebny software napsany(neba alespon rozepsany) a neni moc duvodu/sanci zacinat jako osamely vlk na zelene louce.Francouzská akademie kdysi chtěla zrušit patentový úřad s odůvodněním, že už vše bylo vynalezeno. Obden si píši programy, které přede mnou nikdo nenapsal nebo je někdo napsal pro mne nevyhovujícím způsobem.
Obden si píši programy, které přede mnou nikdo nenapsal nebo je někdo napsal pro mne nevyhovujícím způsobem.Jsem na tom podobně. Sice ne obden, ale není měsíc kdy bych nějaký ten script nenapsal (je teda fakt že většina z nich má nějaký význam jen pro mě).
Fajn, budu se těšit na váš padesátiřádkový Firefox… :-)
Ale teď vážně: jsou věci (a není jich málo), které se dají napsat na 50 řádků. Ale stejně tak jsou věci (a těch je ještě víc), které na 50 řádků nenapíšete, ani kdybyste se na hlavu postavil. Vykřikovat dogmata typu "programy mají být krátké" je krátkozraké.
Mimochodem, mohl byste trochu rozvést úvahu
Programy mají být krátké. Třeba jen proto, aby se daly snáze rozdělit na více vláken/procesorů.
Nenapadá mne, jak souvisí délka programu s tím, jestli bude moci využívat více procesorů.
Tohle není univerzální pravda. Ano, třeba ve funkcionálním paradigmatu se skutečně velmi lpí na tom, aby procedury byly krátké, ale třeba zrovna u céčka je to podle mě jedno. Pokud mám funkci, která obstaravá velkou funkcionalitu, tak mě nezajímá, jak je dlouhá. Je to promě in-out box.Neúměrně dlouhé funkce i v C většinou ukazují na hodně hodně špatný návrh aplikace.
problem jsou slozity funkce ne dlouhy. Co je to slozita funkce je tezky definovat, ale obecne bych se dival spis na pocet odsazeni nez pocet radku. Kdyz treba potrebujes sequencne provest hodne jednoduchych operaci, tak je ok to udelat v jedny funkci protoze i kdyz bude dlouha tak nebude slozita...Proto jsem použil slovo většinou.
/* !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*/ ///////////////// INICIALIZACE ZARIZENI /////////////// /* !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*/ bla bla /* !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*/ ///////////////// NAHRAVANI DAT DO ZARIZENI /////////// /* !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*/ bla blato nesnáším :) od toho lze použít proceduru, která tu inicializaci udělá, druhou která načte ta data, a správně je obě pojmenovat, a popsat v dokumentaci :)
problem jsou slozity funkce ne dlouhy. Co je to slozita funkce je tezky definovat, ale obecne bych se dival spis na pocet odsazeni nez pocet radku. Kdyz treba potrebujes sequencne provest hodne jednoduchych operaci, tak je ok to udelat v jedny funkci protoze i kdyz bude dlouha tak nebude slozita...Užitečnou metrikou je počet větvení. Což v mnoha případech odpovídá tomu počtu odsazení, nicméně odsazení se dá zbavit různými triky: break, continue, goto (huh) nebo "fortranovsky" přes speciální proměnné (to je horor jen pro silné nervy).
Staci mit funkci ktera treba zpracovava data ze site a zaroven je nejak zapisuje do souboru, a uz mate pri kazdem volani te I/O operace podminku, zda skoncila v poradku. Nakonec jeste musite mit nejakou recovery logiku, kazdou tu chybu vypisujete minimalne do logu, takze to mate 50 radku a 5 vnorenych ifu jen to hvizdne. A to jsem jeste nezminil treba zamykani, nebo jakykoli malloc je treba osetrit - to s tou delkou take umi zamavat.Na to jsou přece výjimky. Konkrétně na oddělení logiky a vyrovnání se s chybami. Když je v C nemáte, tak si je tam dodělejte. Nejprimitivnější metoda je např. "if cosi goto error", další možnost je longjmp, nebo nějaká vlastní implementace. A nebo se na psaní "robustných" programů v C vykašlete rovnou.
Ja bych se na psani robustnich programu v C vykaslal, ale bohuzel nejsem v Matrixu a realita neni vzdycky jen moje volba.Když nemáte volbu tak to spíš zní jako byste byl v Matrixu. :)
STL není dobře navržená, např. iostream je naprosto otřesně navržený, to samý kontejnery (vector, map, unordered_map - podívej se, v co expanduje std::map<std::string, std::string> - hlavně na kompilátorech bez pořádný podpory typedefů chuťovka )
Porovnávat python a C++ je jak porovnávat hrušky s jabkama, ale porovnávat C++ a D smysl dává. Např. stringy v D jsou efektivnější - rychlejší, a přitom jsou to klasická pole znaků, stejně jako v Cčku - akorát operace s nimi jsou high-level, třeba slicing: string a = "hello world"; string b = a[6 .. $]" b je "world"
V C++ zůstávám u clib ..
není žádná speciální syntaxe, prostě se s tím pracuje stejně jako s poli.
int[] array = [ 5, 10, 15, 20 ];
int[string] hashmap = [ "foo":5, "bar":10 ];
hashmap["foobar"] = 156;
char[] mutable = "foo";
string immutable = "bar";
immutable(char)[] immutable = "this is the same as string"
int[] tenfifteen = array[1..2];
array.length += 1;
string sliced = immutable[8 .. 10]; // this is "the"
char[] str = "hello C++";
str[6 .. 8] = "D"; // it's "hello D" now
etc. etc. etc...... IMO mnohem pohodlnější a navíc i efektivnější než C++ stringy.
Navíc je plně ABI kompatibilní s Cčkem a obsahuje všechny jeho typy a má kromě vlastní knihovny i přístup do Clib; má garbage collector, a s pointery se pracuje stejně jako s normálními objekty ... apod apod.... vše je na oficiálních stránkách jazyka D.
Co se týče těch kontejnerů, v podstatě už jsem to řekl - myslím, že přístup jako v D je lepší - prostě udělat je jako builtin typy - pole a hashmapy. A string prostě jako pole znaků.
Ale na tomhle se asi nedohodnem, protože je to jiný přístup k věci.
a "usage of raw pointers is discouraged" .. :PPřemýšlel jsi někdy nad tím, proč?
nemanipulovat přímo s pamětí (tzn. pointery, {m,c,re}alloc, free, memcpyNa klasické přaci s pamětí nic špatného není (když to umíš
nepoužívat věci z libcStejný případ – libc je OK, ale může mít vedlejší efekty. C++ varianty jsou ošetřené. Většinou to nevadí, ale když už, stojí to za to a velice těžko se taková chyba hledá. Někdy to dělám, ale na vlastní riziko… Záleží i na překladači a platformě, je celkem pochopitelné že lidi na irc nemají čas u každé libc funkce zkoumat, jestli zrovna tvoje kombinace je košer.
Taky říkají, že "Cčkovitý C++ není 'proper C++' a C++ se tak psát nemá", ale IMO to je taky blbost.To je normální, že každý kdo se naučí programovat si ze všeho nejdřív vypěstuje názor, že všichni ostatní jsou blbci. Že to na co jsi si zvyknul v posledních pěti letech je důležitější než zkušenosti ostatních z předchozích padesáti let. Neboj, to časem přejde. Ani se nenaděješ a budeš sekat smartpointery a alokátory raz dva
STL není dobře navržená, např. iostream je naprosto otřesně navržený
Jen pro pořádek: iostream není součástí STL, to je jen takové matení pojmů ze strany lidí, kteří používají zkratku STL pro celou standardní C++ knihovnu.
Dá se ten gdc2 někde rozumně sehnat? Třeba balíček pro Ubuntu. Chtěl jsem rozjet D2 s Tango (ne přes proprietární DMD), ale našel jsem jen nějaký napůl mrtvý repozitář gdc bez návodu, jak to rozjet.
Ta stránka projektu vypadá dobře. Už jen balíček:)
Proč vlastně řeším to Tango: myslel jsem, že std.algorithm chybí ve Phobos. Nainstaloval jsem dmd, který by měl mít Phobos a std.algorithm mu nechybí. Mám v tom trochu chaos.
Zkusil jsem ještě gdc (Ubuntu 11.04). To std.algorithm nenajde. Asi to podporuje jen D1.
Na druhou stranu Phobos narozdíl od Tango nemá veselé IO, jako v C++:
Cout("Hello")(" ")("World").newline;
Wiki: DMD — The Digital Mars D compiler is the official D compiler by Walter Bright. The compiler front-end is licensed under both the Artistic License and the GNU GPL; the source code for the front-end is distributed with the compiler binaries. The compiler back-end source code is available but not under an open source license. It implements 1.0 and 2.0 versions.
Tak to vypadá, že ti možná zdroják ukáží, když začneš své programy prodávat. Ale kdo ví, jestli Walter Bright není zlý a nedal tam backdoor:)
Zkusil jsem ještě gdc (Ubuntu 11.04). To std.algorithm nenajde. Asi to podporuje jen D1.Jj, v Ubuntu jsou balíčky jen na D1. Co jsem tak četl, D2 se z toho dá udělat nakopírováním něčeho někam. Nedávno se někde v konferenci někdo ptal kdy tam budou D2 balíky a dostalo se mu odpovědi, že poté co bude D2 stable, takže tak. Jinak Tango má docela pěkné API pro práci s netem, to phobosu chybí. Já to vyřešil tak, že jsem si napsal vlastní modul pro práci s HTTP (uznávám, ne zrovna dokonalý) a teď mám rozepsaný HTML parser (něco podobného BeautifulSoup z pythonu). Další věc je, že phobos se stále vyvíjí, v 2.053 třeba přibyl kus API pro práci s emailovou adresou atp..
Tiskni
Sdílej: