abclinuxu.cz AbcLinuxu.cz itbiz.cz ITBiz.cz HDmag.cz HDmag.cz abcprace.cz AbcPráce.cz
Inzerujte na AbcPráce.cz od 950 Kč
Rozšířené hledání
×
    dnes 16:33 | Nová verze Ladislav Hagara | Komentářů: 0
    dnes 03:22 | Zajímavý článek

    V aktuálním příspěvku na blogu počítačové hry Factorio (Wikipedie) se vývojář s přezývkou raiguard rozepsal o podpoře Linuxu. Rozebírá problémy a výzvy jako přechod linuxových distribucí z X11 na Wayland, dekorace oken na straně klienta a GNOME, změna velikosti okna ve správci oken Sway, …

    Ladislav Hagara | Komentářů: 0
    dnes 00:11 | Nová verze

    Rakudo (Wikipedie), tj. překladač programovacího jazyka Raku (Wikipedie), byl vydán ve verzi #171 (2024.04). Programovací jazyk Raku byl dříve znám pod názvem Perl 6.

    Ladislav Hagara | Komentářů: 3
    včera 17:44 | Nová verze

    Společnost Epic Games vydala verzi 5.4 svého proprietárního multiplatformního herního enginu Unreal Engine (Wikipedie). Podrobný přehled novinek v poznámkách k vydání.

    Ladislav Hagara | Komentářů: 0
    26.4. 17:11 | Nová verze

    Byl vydán Nextcloud Hub 8. Představení novinek tohoto open source cloudového řešení také na YouTube. Vypíchnout lze Nextcloud AI Assistant 2.0.

    Ladislav Hagara | Komentářů: 12
    26.4. 13:33 | Nová verze

    Vyšlo Pharo 12.0, programovací jazyk a vývojové prostředí s řadou pokročilých vlastností. Krom tradiční nadílky oprav přináší nový systém správy ladících bodů, nový způsob definice tříd, prostor pro objekty, které nemusí procházet GC a mnoho dalšího.

    Pavel Křivánek | Komentářů: 9
    26.4. 04:55 | Zajímavý software

    Microsoft zveřejnil na GitHubu zdrojové kódy MS-DOSu 4.0 pod licencí MIT. Ve stejném repozitáři se nacházejí i před lety zveřejněné zdrojové k kódy MS-DOSu 1.25 a 2.0.

    Ladislav Hagara | Komentářů: 44
    25.4. 17:33 | Nová verze

    Canonical vydal (email, blog, YouTube) Ubuntu 24.04 LTS Noble Numbat. Přehled novinek v poznámkách k vydání a také příspěvcích na blogu: novinky v desktopu a novinky v bezpečnosti. Vydány byly také oficiální deriváty Edubuntu, Kubuntu, Lubuntu, Ubuntu Budgie, Ubuntu Cinnamon, Ubuntu Kylin, Ubuntu MATE, Ubuntu Studio, Ubuntu Unity a Xubuntu. Jedná se o 10. LTS verzi.

    Ladislav Hagara | Komentářů: 14
    25.4. 14:22 | Komunita

    Na YouTube je k dispozici videozáznam z včerejšího Czech Open Source Policy Forum 2024.

    Ladislav Hagara | Komentářů: 3
    25.4. 13:22 | Nová verze

    Fossil (Wikipedie) byl vydán ve verzi 2.24. Jedná se o distribuovaný systém správy verzí propojený se správou chyb, wiki stránek a blogů s integrovaným webovým rozhraním. Vše běží z jednoho jediného spustitelného souboru a uloženo je v SQLite databázi.

    Ladislav Hagara | Komentářů: 0
    KDE Plasma 6
     (75%)
     (8%)
     (2%)
     (15%)
    Celkem 859 hlasů
     Komentářů: 4, poslední 6.4. 15:51
    Rozcestník

    Nesnáším C++... ;-)

    8.2.2006 19:15 | Přečteno: 1698× | Plané filozofování | poslední úprava: 8.2.2006 19:19

    Ne, nebojte se s mou nesnášenlivostí to není tak horké. Jen mám rád miblog :-)

    Každý program obsahuje alespoň jednu chybu. A každý program v C++ obsahuje alespoň jednu zradu.

    Po letech něco dělám v C++ a v podstatě poprvé pořádně používám STL (za časů Borland C++ Builderu 3 používat STL fakt nešlo). Žil jsem v bláhové představě, že kontejnerové šablony představují bezpečnou alternativu ke konstrukcím z plain C, kterým assembler přímo kouká z očí. Bezpečností mám na mysli to, že každá operace se buď korektně provede nebo se vyvolá výjimka. Ó mé bláhové já, jak můžeš být tak bláhové?

    Kupříkladu tento program
    #include <vector>
    
    int main()
    {
        std::vector<int> v(1);
        int foo = v[1000000000];
    }
    

    žádnou výjimku nevyvolá. Normálně spadne na segmentation fault. Proč? Protože přetížený operátor indexování ([]) nekontroluje meze. Správné je použít metodu at(int). Následující kód

    #include <vector>
    
    int main()
    {
        std::vector<int> v(1);
        int foo = v.at(1000000000);
    }
    

    už padne hezky kultivovaně na výjimce. Myslím si, že by bylo lepší nechat operátor [] pro běžné použití a kontrolovat ho a mít speciální metodu at(int) pro nějaké úchylné časově kritické úseky. Jenže STL má vlastní hlavu. K čemu je mi krásný přetížený operátor, který nemůžu používat?

           

    Hodnocení: 39 %

            špatnédobré        

    Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

    Komentáře

    Vložit další komentář

    8.2.2006 19:25 Sinuhet | skóre: 31
    Rozbalit Rozbalit vše Re: Nesnáším C++... ;-)

    Boze, boze...

    Pretizeni operatoru [] je udelano takto kvuli tomu, ze std::vector ma modelovat plain pole z C. V C se [] nekontroluje, takze to same je i v STL. Kazdy to vi (a nebo to ma vedet), a proto pokud mu nezalezi na rychlosti, pouziva at, pokud naopak pozaduje maximalni vykon, ma tu [].

    To mate z toho, ze nectete dokumentaci.

    8.2.2006 19:31 paskma | skóre: 13 | blog: Paskmův blog
    Rozbalit Rozbalit vše Re: Nesnáším C++... ;-)
    Bože, Bože...

    No mě se tato logika právě nelíbí. Korektnost programu je pro mě důležitější než pár instrukcí navíc. Já bych operátor [] udělal tak, aby emuloval _funkčnost_ jeho obdoby z plain C, ne nutně i jeho nedostatky.

    Dokumentaci čtu, ale tohle mě překvapilo, pane chytrej.
    8.2.2006 19:44 VícNežNic | skóre: 42 | blog: Spáleniště | Ne dost daleko
    Rozbalit Rozbalit vše Re: Nesnáším C++... ;-)
    A musí být vždy nedostatek, že se nekontrolují meze?
    Copak toho není dost?
    8.2.2006 19:45 VícNežNic | skóre: 42 | blog: Spáleniště | Ne dost daleko
    Rozbalit Rozbalit vše Re: Nesnáším C++... ;-)
    I když, v tomhle případě, když o tom tak přemýšlím… se mi skoro zdá, že asi ano :-)
    Copak toho není dost?
    Luk avatar 8.2.2006 19:51 Luk | skóre: 47 | blog: Kacířské myšlenky | Kutná Hora
    Rozbalit Rozbalit vše Re: Nesnáším C++... ;-)
    To není chyba, to je vlastnost! Pokud mi na STL něco vadí, pak to rozhodně není tohle. Pokud přistupuji k prvkům kontejneru způsobem, který sám o sobě zaručuje, že se nemohu dostat mimo rozsah, nepotřebuji to znovu kontrolovat (a zbytečně se zdržovat). Pokud bych se mimo meze dostat mohl, použiju metodu at(), která kontrolu provádí. Nevidím na tom nic nelogického.
    Šifrování je absolutní nutnost a pomáhá chránit před nekalými živly
    9.2.2006 00:58 paskma | skóre: 13 | blog: Paskmův blog
    Rozbalit Rozbalit vše Re: Nesnáším C++... ;-)
    Jistě, že je to vlastnost, když je to popsáno v dokumentaci. Jde o to, jestli správná.

    Pokud přistupuji k prvkům kontejneru způsobem, který sám o sobě zaručuje, že se nemohu dostat mimo rozsah, nepotřebuji to znovu kontrolovat (a zbytečně se zdržovat).

    S tím zdržováním je to optimalizační fašismus. Optimalizace jako vypustit kontrolu mezí polí je dvacet let stará záležitost. Je mi líto, korektnost nade vše.

    A jak víte, který způsob to sám o sobě zaručuje? To si ke každému programu děláte formální důkaz? Pokud nějaká kontrola je možná a je dostatečně levná, má být zaplá, protože normální programátoři jako já dělají chyby. Třeba:
    for (unsigned i = myVector.size() -1; i <= 0; i--)
    {
    }
    
    Selže, protože přeteče unsigned, když je kontejner prázdný. A které pako tam dalo unsigned? No já, protože
    for (int i = 0; i < myVector.size(); i++)
    
    hází warning na porovnávání znamínkových a neznamínkových typů, pač size() vrací unsigned. No a když pak náhodou chci předělat pořadí, chyba je na světě.
    9.2.2006 08:17 Deleted [8409] | skóre: 14 | blog: darkblog
    Rozbalit Rozbalit vše Re: Nesnáším C++... ;-)
    Ja bych rekl, ze je spis dulezitejsi korektnost programatora, jak muzete cekat ze bude korektni program, kdyz bude spatne napsany? Jestlize pristupuji do pole za hranice nebo pred, je neco spatne.

    co takhle:

    uint i;
    uint count = myVector.size();

    for (i = count - 1; i != uint(-1); i--) {}

    nebo

    for (i = 0; i != count; i++) {}

    Ani jeden pripad neselze, je to tak tezke pochopit?

    Nekdy je proste vyhodne pouzit neznamenkove integery.
    9.2.2006 11:30 paskma | skóre: 13 | blog: Paskmův blog
    Rozbalit Rozbalit vše Re: Nesnáším C++... ;-)
    Když už udělám chybu, tak chci (pokud je to možné) rozumnou reakci a ne aby mi to ustřelilo nohu :-)
    for (uint i = count - 1; i != uint(-1); i--) {}
    
    Nezlobte se na mě, ale tohle považuji za hackerství. Triky nebrat.
    9.2.2006 11:44 #Tom
    Rozbalit Rozbalit vše Lepší?
    var
      I: Word;
    begin
      for I := Count - 1 downto 0 do
      begin
        { něco }
      end;
    end;
    
    9.2.2006 14:36 Deleted [8409] | skóre: 14 | blog: darkblog
    Rozbalit Rozbalit vše Re: Nesnáším C++... ;-)
    Myslim ze kod, ktery jsem napsal je dostatecne pochopitelny a neustreli nohu nikomu. Pokud si na takove programatorske urovni, ze si nejsi schopny uhlidat pole, tak pouzij vyssi programovaci jazyk, nebo si napis svou vlastni tridu, kterou budes kontrolovat.

    Kod potom bude vypadat nejak takto:
    char array[100];
    uint i;
    uint count = sizeof(array) / sizeof(array[0]);
    
    for (i = 0; i != count; i++) {
      if (i < count) array[i] ... neco;
    }
    
    neznamenkove by to mohlo vypadat treba takto:
    
    char array[100];
    int i;
    int count = sizeof(array) / sizeof(array[0]);
    
    for (i = 0; i != count; i++) {
      if (i >= 0 && i < count) array[i] ... neco;
    }
    

    jestli se ti to libi tak to pouzivej, ale kdyby takto byla naprogramovana kazda aplikace tak se daleko nedostanem.
    elviin avatar 9.2.2006 10:19 elviin | skóre: 29 | blog: elviin | Plzeň-Praha
    Rozbalit Rozbalit vše Re: Nesnáším C++... ;-)
    Lepe je pouzit nasledujici konstruce. Je to prehlednejsi, muzu menit kontejner z jednoho mista, vyznam promennych jasny.
        typedef vector<int>         vector_t;
        typedef vector_t::size_type vec_size;
        
        vector_t vec;
       
        ...
        ..
       
        vec_size count = vec.size();
        ...
        ..
    
    Jinak nemam pochopeni pro autora blogu. Necetl jste dokumentaci a navic si stezujete. K tomu jsem taky nachylny. Je lepsi pred zapisem do blogu hledat problem mezi zidli a klavesnici:)
    9.2.2006 12:30 machr
    Rozbalit Rozbalit vše Re: Nesnáším C++... ;-)
    	std::vector<int> x;
    
    	// ....
    
    	int c = x.size();
    	int* t = &x[c-1];
    	for(int i = c; i; i--, t--) {
    		printf("%d\n", *t);
    	}
    
    ... a jede to krasne bez zbytecnejch kontrol, bez varovani a bez chyb...

    PS: pokud nekdo propaguje kontrolu mezi poli, tak by mel zemrit na mucidlech :-D
    elviin avatar 9.2.2006 14:30 elviin | skóre: 29 | blog: elviin | Plzeň-Praha
    Rozbalit Rozbalit vše Re: Nesnáším C++... ;-)

    Nemyslim si, ze to je to pravy vorechovy. Co kdyz bude nahodou, ale jenom nahodou vektor prazdny. Navic popirate to, k cemu kontejnery slouzi: typ prvku uz znate. Ve vasem pripade bude kdokoliv muset prohlizet cely kod, aby ho updatoval. Konverzi velikosti kontejneru na int muzeme prijit k urazu. Ale jak pisete, asi vam to vzdycky projde:/

        vector_t::iterator      first =  vec.begin();
        const vector_t::iterator last =  vec.end();
    
        while(first != last)
            cout << *first++ << endl;
    
    9.2.2006 18:02 machr
    Rozbalit Rozbalit vše Re: Nesnáším C++... ;-)
    > Co kdyz bude nahodou, ale jenom nahodou vektor prazdny.

    - tak t bude neplatny ukazatel. To ale nevadi, protoze se stejne nepouzije...

    > Konverzi velikosti kontejneru na int muzeme prijit k urazu.

    To jako kdyby v nem bylo vic nez 2**31 polozek ????

    > Ale jak pisete, asi vam to vzdycky projde:/

    jj. a sem presvedcenej, ze muj zpusob je rychlejsi...
    9.2.2006 18:27 paskma | skóre: 13 | blog: Paskmův blog
    Rozbalit Rozbalit vše Re: Nesnáším C++... ;-)
    Rychlejší! No to nás všechny trápí. Vy asi programujete pro nějaký mikročip s taktem 4 kHz...
    9.2.2006 19:08 machr
    Rozbalit Rozbalit vše Re: Nesnáším C++... ;-)
    ne, ale to neznamena, ze by se melo zbytecne plytvat vykonem. Pristup k poli casto byva v nejvnitrnejsim cyklu a pokud ho 10x zpomalis, tak vysledek proste nemuze byt dobrej.

    Kdyz si tohle rekne kazdej programator, tak se pak clovek nestaci divit, kolik jsou dnestni programy schopny sezrat pameti a vykonu....
    9.2.2006 19:10 machr
    Rozbalit Rozbalit vše Re: Nesnáším C++... ;-)
    ne, ale to neznamena, ze by se melo zbytecne plytvat vykonem. Pristup k poli casto byva v nejvnitrnejsim cyklu a pokud ho 10x zpomalis, tak vysledek proste nemuze byt dobrej.

    Kdyz si tohle rekne kazdej programator, tak se pak clovek nestaci divit, kolik jsou dnestni programy schopny sezrat pameti a vykonu....
    elviin avatar 9.2.2006 20:34 elviin | skóre: 29 | blog: elviin | Plzeň-Praha
    Rozbalit Rozbalit vše Re: Nesnáším C++... ;-)
    > Co kdyz bude nahodou, ale jenom nahodou vektor prazdny?
    - tak t bude neplatny ukazatel. To ale nevadi, protoze se stejne nepouzije...

    Tak mi trochu pomozte. Rikate, neplatny ukazatel nevadi, resp. kdyz

    	int c = x.size();
    	int* t = &x[c-1];
    
    c bude 0, tak volani &x[-1] asi nevyjde nebo ano?

    > Konverzi velikosti kontejneru na int muzeme prijit k urazu.
    To jako kdyby v nem bylo vic nez 2**31 polozek ????

    Z principu. Proc proste nepouzit vector<int>::size_type, ktery se pouziva i pri kontrole mezi u at()?

    9.2.2006 21:13 machr
    Rozbalit Rozbalit vše Re: Nesnáším C++... ;-)
    t = &x[-1] vyjde. Prvek se totiz necte, jen se zjisti jeho ukazatel. Klidne to vyzkousej. samozrejme nesmis pouzit *t ...

    > Z principu. Proc proste nepouzit vector<int>::size_type, ktery se pouziva i pri kontrole mezi u at()?

    nechapu kde je problem. A abych se priznal tak moc nemam rad tyhle typy jako size_t, size_type a tak podobne. Proc proste nepouzit int?
    9.2.2006 21:26 machr
    Rozbalit Rozbalit vše Re: Nesnáším C++... ;-)
    abych jeste upresnil, jaktoze to vyjde. uvnitr je to delany priblizne nejak takhle:
    
            int & operator [] (int index) {
                    return pole[index];
            }
    
    
    pokud neni ve vektoru zadnej prvek, tak pole je pravdepodobne NULL. To ale nevadi, protoze navratovej typ funkce je int &. Takze se z pole nic necte, ale vrati se adresa pole + index. V nasem pripade 0 - sizeof(int) , coz je sice neplatna adresa, ale nicemu to nevadi, protoze ji stejne nepouzijem...
    9.2.2006 18:04 machr
    Rozbalit Rozbalit vše Re: Nesnáším C++... ;-)
    navic. ted sem si vsiml. to prochazis smerem dopredu, ale v puvodnim prispevku slo (pokud si pamatuju) o prochazeni pozpatku
    9.2.2006 20:53 Sinuhet | skóre: 31
    Rozbalit Rozbalit vše Re: Nesnáším C++... ;-)

    Nac tak slozite, tohle je priklad na jednu radku:

    std::copy(x.begin(), x.end(), std::ostream_iterator<int>(std::cout, "\n"));
    9.2.2006 22:44 Sinuhet | skóre: 31
    Rozbalit Rozbalit vše Re: Nesnáším C++... ;-)

    Pardon, ono se to tam ma cpat v obracen poradi.

    std::copy(x.rbegin(), x.rend(), std::ostream_iterator<intgt;(std::cout, "\n"));
    10.2.2006 19:37 Deleted [8409] | skóre: 14 | blog: darkblog
    Rozbalit Rozbalit vše Re: Nesnáším C++... ;-)
    Nejsem si tak jistý tou rychlostí, zkuste si zkompilovat nasledujici benchmark, zhotovil jsem ho asi pred mesicem, dnes trosku upravil pro nase ucely.

    Nezapomente si zvolit spravnou optimalizaci, tedy -O3 a nekdo muze zkusit jeste -funroll-loops nebo -funroll-all-loops

    #include <stdio.h>
    #include <stdlib.h>
    
    typedef unsigned long long uint64;
    typedef unsigned int uint;
    
    static __inline__ uint64 rdtsc(void)
    {
    	uint64 x;
    	__asm__ volatile (".byte 0x0f, 0x31" : "=A" (x));
    	return x;
    }
    
    #define SIZE (1024*16)
    #define OUTER_LOOP_SIZE (1024*256)
    
    /*
     * Benchmark optimalizace smycky
     */
    int main(int argc, char *argv[])
    {
    	uint tmp = 0;
    
    	uint a;
    	uint x;
    
    	char *str = (char *)malloc(SIZE);
    	char *ptr;
    	uint64 t;
    
    	if (!str) return EXIT_FAILURE;
    
    	t = rdtsc();
    	for (a = OUTER_LOOP_SIZE; a; a--) /* Velky cyklus, neni co optimalizovat */
    	{
    		/* maly cyklus, uvidime */
    		ptr = str;
    		for (x = 0; x != SIZE; x++) {
    			tmp += ptr[x];
    		}
    	}
    	t = rdtsc() - t;
    	printf("Test pro pristup pres index pole: %llu cycles\n", t);
    
    	t = rdtsc();
    	for (a = OUTER_LOOP_SIZE; a; a--) /* Velky cyklus, neni co optimalizovat */
    	{
    		/* maly cyklus, uvidime */
    		ptr = str;
    		for (x = 0; x != SIZE; x++) {
    			tmp += *ptr++;
    		}
    	}
    	t = rdtsc() - t;
    	printf("Test pro pristup pres pointery: %llu cycles\n", t);
    
    	printf("\n\nVypiseme tmp, protoze kompiler by mohl smycky vypustit %u\n", tmp);
    
    	free(str);
    	return EXIT_SUCCESS;
    }
    
    11.2.2006 16:14 machr | skóre: 2 | blog: machr
    Rozbalit Rozbalit vše Re: Nesnáším C++... ;-)
    zajimavy. a jeste zajimavejsi je, ze pokud prohodim poradi provadeni testu (nejdriv pres pointery a potom pres index), tak to vyjde naopak...

    dalsi zajimava vec je, ze se to o nekolik procent zrychlilo nahrazenim podminky != za < ...

    nechtel bych podcenovat optimalizator gcc, ale tenhle tenhle test je podle me dost specificka situace - malej cyklus, kterej je mozno rozvinout. Navic i v pripade pristupu pres index se pracuje s ukazatelem - s cimz bych si u pristupu k trude vektor nebyl tak jistej...
    (__) (oo) /-------\/ / | || * ||----|| ~~ ~~
    25.4.2006 09:51 Deleted [8409] | skóre: 14 | blog: darkblog
    Rozbalit Rozbalit vše Re: Nesnáším C++... ;-)
    Čtu si reakci az teď, je to sice už outdated, ale vím proč se neliší výsledek testu když se pořadí testu přehodí, myslel jsem že 16MB je dost velký buffer, ale i v nasem pripade ma na test vliv cache procesoru. Abych to upřesnil, nechtěl jsem právě tento vliv.

    Pokud má někdo opravdu zájem udělat si vlastí test rychlosti, asi bych doporučil pole, které se vleze do cache a pak už bude měřit opravdu rychlost kódu vygenerovaného kompilérem, protože přístup do RAM mimo cache ovlivní test jak jsme si mohli všimnout.

    Jinak děkuji za upozornění na '!=' a '<', je to zajímavé a nenapadlo by mě ani ve snu, že by mohl gcc vygenerovat lepší kód.
    8.2.2006 19:53 Sinuhet | skóre: 31
    Rozbalit Rozbalit vše Re: Nesnáším C++... ;-)
    Korektnost programu je pro mě důležitější než pár instrukcí navíc.

    Pokud pozadujete kontrolu, tak pouzivejte at - jak proste :).

    Já bych operátor [] udělal tak, aby emuloval _funkčnost_ jeho obdoby z plain C, ne nutně i jeho nedostatky.

    Nic vam nebrani v tom, abyste si s vyuzitim standardniho vytvoril vlastni, patricne upraveny kontejner.

    Predstavte si, ze existuji exoti, kteri to nepovazuji za nedostatek, ale za vyhodu.

    9.2.2006 01:01 paskma | skóre: 13 | blog: Paskmův blog
    Rozbalit Rozbalit vše Re: Nesnáším C++... ;-)
    Nic mi nebrání napsat si svůj jazyk s vlastními knihovnami. Jenže já chci standardní univerzální řešení zadarmo a s co nejmíň nedostatky :-)
    9.2.2006 20:56 Sinuhet | skóre: 31
    Rozbalit Rozbalit vše Re: Nesnáším C++... ;-)
    Nebyla rec o psani nove knihovny, nebo cele nove implementace vektoru.
    8.2.2006 19:56 Michal Vyskočil | skóre: 60 | blog: miblog | Praha
    Rozbalit Rozbalit vše Re: Nesnáším C++... ;-)
    Myslím, že samotný Bjarne Stroustrup řekl, že zatímco v C se můžete říznout do prstu, v C++ si můžete ustřelit rovnou celou nohu ;-)
    When your hammer is C++, everything begins to look like a thumb.
    8.2.2006 20:03 Michal Vyskočil | skóre: 60 | blog: miblog | Praha
    Rozbalit Rozbalit vše Re: Nesnáším C++... ;-)
    Achjo, kdybych si nadpis "Nesnáším XXX" patentoval, mohl jsem být milionář ;-)
    When your hammer is C++, everything begins to look like a thumb.
    8.2.2006 20:08 VícNežNic | skóre: 42 | blog: Spáleniště | Ne dost daleko
    Rozbalit Rozbalit vše Re: Nesnáším C++... ;-)
    Pak bych v ilegalitě sepisoval pamflety "Nesnáším Michala Vyskočila" :-)
    Copak toho není dost?
    8.2.2006 20:11 Michal Vyskočil | skóre: 60 | blog: miblog | Praha
    Rozbalit Rozbalit vše Re: Nesnáším C++... ;-)
    Moji právníci by si tě už našli :-D
    When your hammer is C++, everything begins to look like a thumb.
    Marek Bernát avatar 8.2.2006 20:41 Marek Bernát | skóre: 17 | blog: Arcadia
    Rozbalit Rozbalit vše Re: Nesnáším C++... ;-)
    Žiadny problém. Máš fantastickú Javu, kde stringy môžeš indexovať pomocou chatAt() a všetky výnimky sú ošetrené. Nech sa páči.

    Nám smrteľníkom nechaj škaredé C++, ktoré sa nikdy nespráva, tak ako má a padá na každom kroku. Díky.
    physics.stackexchange.com -- Q&A stránky o fyzike v štýle StackOverflow.
    Luk avatar 8.2.2006 20:53 Luk | skóre: 47 | blog: Kacířské myšlenky | Kutná Hora
    Rozbalit Rozbalit vše Re: Nesnáším C++... ;-)
    C++ se opravdu někdy nechová, jak má. Ale za to může kompilátor, ne jazyk. A i když mi některé věci v STL nesedí, netvrdím, že je horší (ale ani lepší) než podobné věci v Javě.
    Šifrování je absolutní nutnost a pomáhá chránit před nekalými živly
    8.2.2006 20:57 VícNežNic | skóre: 42 | blog: Spáleniště | Ne dost daleko
    Rozbalit Rozbalit vše Re: Nesnáším C++... ;-)
    I v úžasné Javě se občas dějí zajímavé věci :-) Třeba tu.
    This method is public as an implementation side effect. do not call or override.
    Copak toho není dost?
    Marek Bernát avatar 8.2.2006 23:12 Marek Bernát | skóre: 17 | blog: Arcadia
    Rozbalit Rozbalit vše Re: Nesnáším C++... ;-)
    Ja mám na C++ veľmi zvláštny pohľad. Je to totiž prvý normálny jazyk, v ktorom som sa naučil robiť. Takže je to určitá zmes nostalgie a takisto aj dlhodobá skúsenosť. Ale medzičasom som videl už asi desať iných jazykov a pochopil som, že STL a niektoré ďalšie fičúrky sú len dolepené a to tak, že nie moc dobre.

    Proste C++ to nemá ľahké. Je to niečo medzi C a objektovými jazykmi. Preto ho céčkari, ani javisti nemôžu mať radi. Ich vec.

    No a pre mňa je to proste staré dobré C++. Neriešim to. Programuje sa mi v ňom dobre a to mi stačí :-)
    physics.stackexchange.com -- Q&A stránky o fyzike v štýle StackOverflow.
    9.2.2006 01:04 paskma | skóre: 13 | blog: Paskmův blog
    Rozbalit Rozbalit vše Re: Nesnáším C++... ;-)
    Samozřejmě, že mám Javu a C#. Jenomže tenhle projekt má nějaký legacy kód v plain C a C++ je pak cesta nejmenšího odporu.
    Marek Bernát avatar 9.2.2006 10:48 Marek Bernát | skóre: 17 | blog: Arcadia
    Rozbalit Rozbalit vše Re: Nesnáším C++... ;-)
    Ako kedy. Ak ti C++ vadí príliš, tak by si mohol zauvažovať nad wrapperrom toho legacy kódu do Javy. Ale zrejme ti až tak nevadí :-)
    physics.stackexchange.com -- Q&A stránky o fyzike v štýle StackOverflow.
    8.2.2006 21:03 Miloslav Ponkrác | blog: miloslavponkrac
    Rozbalit Rozbalit vše Re: Nesnáším C++... ;-)
    Pan paskma jakožto neúnavný hanič C++ :-)) Ok, nahodím udičku. Já mám verzi STL, která nejenže všechno hlídá a vyhazuje výjimky, ale kontroluje skutečně každou blbost. Takže přístup mimo rozsah pole u vectoru? Okamžitě výjimka. Použiji neplatný iterátor, je výjimka. Použiji iterátor na jiný objekt, než je platné, a šup výjimka. Já si na své STL nestěžuju...

    Já asi napíšu zápis Miluju C++, protože C++ je jazyk, který považuji za nejlepší staticky typovaný kompilovaný jazyk, se kterým jsem se kdy setkal.
    Marek Bernát avatar 8.2.2006 23:17 Marek Bernát | skóre: 17 | blog: Arcadia
    Rozbalit Rozbalit vše Re: Nesnáším C++... ;-)
    Já asi napíšu zápis Miluju C++, protože C++ je jazyk, který považuji za nejlepší staticky typovaný kompilovaný jazyk, se kterým jsem se kdy setkal.
    Neviem, či toto mal byť vtip, ale ak nie, tak si pozri haskell. Je to najlepší staticky typovaný kompilovaný jazyk, s ktorým som sa stretol :-)
    physics.stackexchange.com -- Q&A stránky o fyzike v štýle StackOverflow.
    9.2.2006 01:12 Miloslav Ponkrác | blog: miloslavponkrac
    Rozbalit Rozbalit vše Re: Nesnáším C++... ;-)
    No tak nevím, Haskell zrovna nemusím, opravdu ne.

    Ona je taky otázka co u Haskellu znamená kompilovaný jazyk. Teoreticky zkompilovat se dá úplně všechno, naprosto každý jazyk do čehokoliv, ale já s C++ měl na mysli jazyk, který je prostě přímo dělaný na to, že z něj vyleze stroják a výsledná rychlost a efektivita kódu tomu odpovídá.

    Možná jsem měl ještě napsat, že C++ považuji za nejlepší staticky typovaný, imperativní jazyk efektivně kompilovatelný do nativního kódu.

    Ona je taky otázka, jestli v případě funkcionálního jazyka bych si vybral zrovna Haskell, ale to už je trochu off topic takže to nebudu rozvíjet.
    Marek Bernát avatar 9.2.2006 10:46 Marek Bernát | skóre: 17 | blog: Arcadia
    Rozbalit Rozbalit vše Re: Nesnáším C++... ;-)
    No napríklad z GHC vylieza natívny kód. Dokonca vie kompilovať aj do C. A ten kód je navyše veľmi rýchly vo väčšine prípadov, pretože matici si za posledných 50 rokov dali dosť roboty s optimalizáciou. Ale máte pravdu, neviem ani ja, či nie sú ešte rýchlejšie funkcionálne jazyky.

    Ale ak máte na mysli imperatívny jazyk, tak potom súhlasím :-)
    physics.stackexchange.com -- Q&A stránky o fyzike v štýle StackOverflow.
    9.2.2006 00:48 paskma | skóre: 13 | blog: Paskmův blog
    Rozbalit Rozbalit vše Re: Nesnáším C++... ;-)
    Abych pravdu řekl, nepátral jsem po tom, jetli mnou kritizované chování je předepsáno standardem nebo je to jen záležitost stdlibc.

    Jakou používáte implementaci STL? Tu od SGI?
    elviin avatar 9.2.2006 10:28 elviin | skóre: 29 | blog: elviin | Plzeň-Praha
    Rozbalit Rozbalit vše Re: Nesnáším C++... ;-)

    Reseni neni hledat tu spravnou implementaci, kde to delaji, tak "jak to vyhovuje memu zpusobu programovani". Co prenositelnost? Ale precist si dokumentaci. Chovani [] pri prekroceni mezi neni definovane. Tzn. ze kontrola muze byt provadena, ale nemusi.

    Ze standardu je to proste nedefinovane, a tak by se mel clovek k tomu postavit.

    9.2.2006 21:12 Sinuhet | skóre: 31
    Rozbalit Rozbalit vše Re: Nesnáším C++... ;-)
    Pan Ponkrac ma zrejme na mysli specialni debugovaci verzi STL. Neco takoveho je treba k nalezeni u g++.

    Založit nové vláknoNahoru

    ISSN 1214-1267   www.czech-server.cz
    © 1999-2015 Nitemedia s. r. o. Všechna práva vyhrazena.