abclinuxu.cz AbcLinuxu.cz itbiz.cz ITBiz.cz HDmag.cz HDmag.cz abcprace.cz AbcPráce.cz
AbcLinuxu hledá autory!
Inzerujte na AbcPráce.cz od 950 Kč
Rozšířené hledání
×
    dnes 10:22 | Humor

    Už jste se prolétli na webu Google Earth? Přibyl tam Simulátor letu (Nástroje / Simulátor letu). Funguje i bez účtu Google [𝕏].

    Ladislav Hagara | Komentářů: 0
    dnes 09:55 | Nová verze

    Byla vydána nová verze 4.7 (𝕏, Bluesky, Mastodon) multiplatformního open source herního enginu Godot (Wikipedie, GitHub). Přehled novinek i s náhledy v příspěvku na blogu.

    Ladislav Hagara | Komentářů: 0
    včera 13:33 | Nová verze

    Mastodon (Wikipedie) - sociální síť, která není na prodej - byl vydán ve verzi 4.6. Přehled novinek s náhledy v oznámení na blogu.

    Ladislav Hagara | Komentářů: 0
    včera 12:44 | IT novinky

    V Edici CZ.NIC, knižní řady správce české národní domény, vychází nová kniha Martina Malého Kódy, buildy, firmwary. Autor po půl roce od vydání předchozího titulu přichází se svou již sedmou knihou, tentokrát zaměřenou na vývoj programového vybavení pro embedded zařízení. Publikace s podtitulem Základy vývojářského řemesla pro tvůrce hobby elektroniky nabízí praktického průvodce pro všechny, kdo své projekty vytvořené s Arduinem

    … více »
    Ladislav Hagara | Komentářů: 0
    včera 11:44 | Komunita

    V Brně na FIT VUT probíhá dvoudenní open source komunitní konference DevConf.CZ 2026. Na programu je celá řada zajímavých přednášek, lightning talků, meetupů a workshopů. Přednášky lze sledovat i online na YouTube kanálu konference. Aktuální dění lze sledovat na Matrixu, 𝕏 nebo Mastodonu.

    Ladislav Hagara | Komentářů: 0
    včera 04:22 | Nová verze

    Byla vydána nová verze 15.1 svobodného unixového operačního systému FreeBSD. Podrobný přehled novinek v poznámkách k vydání.

    Ladislav Hagara | Komentářů: 1
    17.6. 19:11 | Zajímavý projekt

    Vývojáři Ubuntu představili projekt Myna, tj. iniciativu zaměřenou na přidání funkce převodu řeči na text do prostředí desktopu Ubuntu. Dle plánu již v Ubuntu 26.10.

    Ladislav Hagara | Komentářů: 2
    17.6. 18:33 | Zajímavý software

    Společnost Epic Games představila nový open source systém pro správu verzí Lore navržený pro "bezprecedentní škálovatelnost dat i týmů a optimalizovaný pro projekty, včetně her a zábavy, které kombinují kód s velkými binárními soubory, aby uspokojil potřeby vývojářů i umělců". Zdrojové kódy jsou k dispozici na GitHubu pod licencí MIT.

    Ladislav Hagara | Komentářů: 0
    17.6. 15:33 | IT novinky

    Úřad pro ochranu hospodářské soutěže (ÚOHS) provedl v říjnu 2024 místní šetření u společnosti Seznam.cz. Úřad prověřoval důvodné podezření na možné protisoutěžní jednání, konkrétně zneužití dominantního postavení. Krajský soud v Brně v květnu 2025 konstatoval, že toto šetření bylo nezákonné. Nejvyšší správní soud (NSS) včera rozhodl, že šetření bylo provedeno v souladu se zákonem. Krajský soud bude muset případ posoudit znovu.

    Ladislav Hagara | Komentářů: 0
    17.6. 12:22 | IT novinky

    Byl představen skládací telefon Commodore Callback 8020. Ani hloupý, ani chytrý. Pro fanoušky Commodore a digitálního minimalismu. Bez webového prohlížeče a sociálních sítí. S předinstalovaným WhatsAppem. S operačním systémem Sailfish OS.

    Ladislav Hagara | Komentářů: 6
    Které desktopové prostředí na Linuxu používáte?
     (11%)
     (8%)
     (2%)
     (16%)
     (31%)
     (3%)
     (6%)
     (3%)
     (15%)
     (26%)
    Celkem 1939 hlasů
     Komentářů: 30, poslední 3.4. 20:20
    Rozcestník

    Chybové hlášky překladačů

    22.2.2006 21:05 | Přečteno: 1633× | Plané filozofování

    Je mi líto, zase to bude o C++ (ale i o Adě:-). Při programování člověk občas udělá chybu. A obvykle ocení její přesnou diagnostiku, neboť to je velice dobrý předpoklad k nápravě.

    Některá prostředí poskytují velmi vtipný popis chyby - například překladač Ady GNAT poté, co nalezne neznámý identifikátor v následujícím kódu:

    procedure Test is
            procedure Launch_Missile is
            begin
                    null;
            end;
    begin
            Launch_Misile;
    end;
    

    zahlásí toto:

    test.adb:7:09: "Launch_Misile" is undefined
    test.adb:7:09: possible misspelling of "Launch_Missile"

    Tedy navrhne správné řešení. Hodí se to, šetří to nervy a čas. (V jedné konferenci jistý člověk propagoval, že podobné chyby by překladač měl opravovat automaticky. Za pár let by se začala na informatických školách vyučovat "psychologie překladačů" :-)

    Na opačném konci spektra je C++. Udělal jsem malý pokus a předhodil překladači následující nesprávný kód.

    #include <algorithm>
    #include <list>
    using namespace std;
    
    int main()
    {
            list<int> foo;
            sort(foo.begin(), foo.end());
    }
    Vypadá to celkem nevinně, ale je to mazaná sémantická chyba. Chybové hlášení vypadá asi takto:

    /usr/lib/gcc/i486-linux-gnu/4.0.3/../../../../include/c++/4.0.3/bits/stl_algo.h: In function 'void std::sort(_RandomAccessIterator, _RandomAccessIterator) [with _RandomAccessIterator = std::_List_iterator<int>]': pokus.cpp:8: instantiated from here /usr/lib/gcc/i486-linux-gnu/4.0.3/../../../../include/c++/4.0.3/bits/stl_algo.h:2569: error: no match for 'operator-' in '__last - __first' /usr/lib/gcc/i486-linux-gnu/4.0.3/../../../../include/c++/4.0.3/bits/stl_algo.h: In function 'void std::__final_insertion_sort(_RandomAccessIterator, _RandomAccessIterator) [with _RandomAccessIterator = std::_List_iterator<int>]': /usr/lib/gcc/i486-linux-gnu/4.0.3/../../../../include/c++/4.0.3/bits/stl_algo.h:2570: instantiated from 'void std::sort(_RandomAccessIterator, _RandomAccessIterator) [with _RandomAccessIterator = std::_List_iterator<int>]' pokus.cpp:8: instantiated from here /usr/lib/gcc/i486-linux-gnu/4.0.3/../../../../include/c++/4.0.3/bits/stl_algo.h:2213: error: no match for 'operator-' in '__last - __first' /usr/lib/gcc/i486-linux-gnu/4.0.3/../../../../include/c++/4.0.3/bits/stl_algo.h:2215: error: no match for 'operator+' in '__first + 16' /usr/lib/gcc/i486-linux-gnu/4.0.3/../../../../include/c++/4.0.3/bits/stl_algo.h:2216: error: no match for 'operator+' in '__first + 16' /usr/lib/gcc/i486-linux-gnu/4.0.3/../../../../include/c++/4.0.3/bits/stl_algo.h: In function 'void std::__insertion_sort(_RandomAccessIterator, _RandomAccessIterator) [with _RandomAccessIterator = std::_List_iterator<int>]': /usr/lib/gcc/i486-linux-gnu/4.0.3/../../../../include/c++/4.0.3/bits/stl_algo.h:2219: instantiated from 'void std::__final_insertion_sort(_RandomAccessIterator, _RandomAccessIterator) [with _RandomAccessIterator = std::_List_iterator<int>]' /usr/lib/gcc/i486-linux-gnu/4.0.3/../../../../include/c++/4.0.3/bits/stl_algo.h:2570: instantiated from 'void std::sort(_RandomAccessIterator, _RandomAccessIterator) [with _RandomAccessIterator = std::_List_iterator<int>]' pokus.cpp:8: instantiated from here /usr/lib/gcc/i486-linux-gnu/4.0.3/../../../../include/c++/4.0.3/bits/stl_algo.h:2129: error: no match for 'operator+' in '__first + 1' /usr/lib/gcc/i486-linux-gnu/4.0.3/../../../../include/c++/4.0.3/bits/stl_algo.h:2219: instantiated from 'void std::__final_insertion_sort(_RandomAccessIterator, _RandomAccessIterator) [with _RandomAccessIterator = std::_List_iterator<int>]' /usr/lib/gcc/i486-linux-gnu/4.0.3/../../../../include/c++/4.0.3/bits/stl_algo.h:2570: instantiated from 'void std::sort(_RandomAccessIterator, _RandomAccessIterator) [with _RandomAccessIterator = std::_List_iterator<int>]' pokus.cpp:8: instantiated from here /usr/lib/gcc/i486-linux-gnu/4.0.3/../../../../include/c++/4.0.3/bits/stl_algo.h:2135: error: no match for 'operator+' in '__i + 1'

    A v čem je chyba? No algoritmus řazení potřebuje přistupovat k řazeným datům přímo, vyžaduje iterátor třídy RandomAccessIterátor. Jenže kontejner v mém příkladu je zřetězený seznam, takže jeho iterátor podporuje pouze sekvenční procházení.

    Jenže to se z takové šílené hlášky člověk (přímo) nedozví. Problém je, že překladač uvažuje v intencích "přenositelného assembleru", kdežto STL jsou tuny abstrakce. A to je propast jako hrom, takže zkoumaná chyba se projeví někde hluboko ve střevech standardní knihovny (neexistence přetíženého operátoru "-").

    Uznávám, že mé srovnání je trochu nefér, první chyba je primitivní, druhá rafinovaná. Nicméně do takové Javy můžete napsat, co chcete, a stejně chybová hláška nebude mít dva kilobajty.

           

    Hodnocení: 86 %

            špatnédobré        

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

    Komentáře

    Vložit další komentář

    22.2.2006 21:19 machr | skóre: 2 | blog: machr
    Rozbalit Rozbalit vše Re: Chybové hlášky překladačů
    C++ RULEZ !!!
    (__) (oo) /-------\/ / | || * ||----|| ~~ ~~
    22.2.2006 21:35 Jarek Čecho | skóre: 13 | blog: Jarcec_Zone | Koprivnice
    Rozbalit Rozbalit vše Hlasky C++ compileru
    Jo no s tim mam taky vlastni zkusenosti :-(

    Resit pak takoveto problemy je na dlouhou dobu, to radeji prislusnou cast smazu a pokusim se ji udelat nejak jinak :-/
    22.2.2006 21:38 Sinuhet | skóre: 31
    Rozbalit Rozbalit vše Re: Chybové hlášky překladačů

    Pane paskma, vy si z nas normalne robite prcu. Pro ty, kdo tento vtip zcela nepochopili, male postouchnuti:

    $ g++-4.0 -D _GLIBCXX_CONCEPT_CHECKS test.cc
    
    ... 57 radek erroru, posledni dva (zaverecny zalomeny a odsazeny taby) ...
    
    test.cc:8:   instantiated from here
    /usr/lib/gcc/i486-linux-gnu/4.0.3/../../../../include/c++/4.0.3/bits/boost_concept_check.h:223:
    	error: conversion from 'std::bidirectional_iterator_tag' to
    	non-scalar type 'std::random_access_iterator_tag' requested
    
    22.2.2006 21:55 paskma | skóre: 13 | blog: Paskmův blog
    Rozbalit Rozbalit vše Re: Chybové hlášky překladačů
    Hmm, hezký trik. Jeden z důvodů, proč píšu blog jsou takovéhle komentáře.
    22.2.2006 21:59 Jarek Čecho | skóre: 13 | blog: Jarcec_Zone | Koprivnice
    Rozbalit Rozbalit vše Trik...
    No me osobne GCC takovyto vystup neradkuje, takze najit tento dulezity radek v tom zmatku je na dost dlouhou praci...
    22.2.2006 22:16 Michal Vyskočil | skóre: 60 | blog: miblog | Praha
    Rozbalit Rozbalit vše Re: Chybové hlášky překladačů
    Hezká fičurka :-)
    When your hammer is C++, everything begins to look like a thumb.
    .. avatar 22.2.2006 22:45 .. | skóre: 4 | blog:
    Rozbalit Rozbalit vše Re: Chybové hlášky překladačů
    pekneee, jeste dalsi figle v tomhle smeru?
    22.2.2006 22:02 #Tom
    Rozbalit Rozbalit vše Re: Chybové hlášky překladačů
    To je proto, aby v C++ dělali jenom chytří a všímaví lidé, kteří si umějí kód zkontrolovat i bez překladače. :-)
    elviin avatar 23.2.2006 02:50 elviin | skóre: 29 | blog: elviin | Plzeň-Praha
    Rozbalit Rozbalit vše Re: Chybové hlášky překladačů
    Nastroj pro upravu hlasek: stlfilt
    elviin avatar 23.2.2006 15:40 elviin | skóre: 29 | blog: elviin | Plzeň-Praha
    Rozbalit Rozbalit vše Re: Chybové hlášky překladačů
    Zkuste stlfilt: prekladace
    Comeau C++
    gcc 2.95.x/3.x (incl. DJGPP) (Dev-C++ compatible)
    MSVC++ 6/7.x/8.x (incl. "Whidbey" and Dinkum Libraries)
    Metrowerks CodeWarrior Pro 7/8
    Borland C++ / C++Builder
    Intel C++ 7/8
    EDG Front End (Generic)
    Digital Mars C++
    23.2.2006 13:55 jekub | skóre: 9 | blog: noblog
    Rozbalit Rozbalit vše Možná hloupý dotaz, ale
    c++ == gcc?

    spojovat chybové hlášení překladače s jazykem ...
    23.2.2006 14:58 Kero | skóre: 2
    Rozbalit Rozbalit vše Re: Možná hloupý dotaz, ale
    Toto je vysledek z MS VS 2005. Myslim, ze je o neco lepsi.
    
    ------ Build started: Project: STLerror1, Configuration: Debug Win32 ------
    Compiling...
    main.cpp
    C:\Program Files\Microsoft Visual Studio 8\VC\include\algorithm(2754) : error C2784: 'reverse_iterator<_RanIt>::difference_type std::operator -(const std::reverse_iterator<_RanIt> &,const std::reverse_iterator<_RanIt2> &)' : could not deduce template argument for 'const std::reverse_iterator<_RanIt> &' from 'std::list<_Ty>::_Iterator<_Secure_validation>'
            with
            [
                _Ty=int,
                _Secure_validation=true
            ]
            C:\Program Files\Microsoft Visual Studio 8\VC\include\xutility(1818) : see declaration of 'std::operator -'
            .\main.cpp(8) : see reference to function template instantiation 'void std::sort<std::list<_Ty>::_Iterator<_Secure_validation>>(_RanIt,_RanIt)' being compiled
            with
            [
                _Ty=int,
                _Secure_validation=true,
                _RanIt=std::list<int>::_Iterator<true>
            ]
    C:\Program Files\Microsoft Visual Studio 8\VC\include\algorithm(2754) : error C2784: 'reverse_iterator<_RanIt>::difference_type std::operator -(const std::reverse_iterator<_RanIt> &,const std::reverse_iterator<_RanIt2> &)' : could not deduce template argument for 'const std::reverse_iterator<_RanIt> &' from 'std::list<_Ty>::_Iterator<_Secure_validation>'
            with
            [
                _Ty=int,
                _Secure_validation=true
            ]
            C:\Program Files\Microsoft Visual Studio 8\VC\include\xutility(1818) : see declaration of 'std::operator -'
    C:\Program Files\Microsoft Visual Studio 8\VC\include\algorithm(2754) : error C2784: 'reverse_iterator<_RanIt>::difference_type std::operator -(const std::reverse_iterator<_RanIt> &,const std::reverse_iterator<_RanIt2> &)' : could not deduce template argument for 'const std::reverse_iterator<_RanIt> &' from 'std::list<_Ty>::_Iterator<_Secure_validation>'
            with
            [
                _Ty=int,
                _Secure_validation=true
            ]
            C:\Program Files\Microsoft Visual Studio 8\VC\include\xutility(1818) : see declaration of 'std::operator -'
    C:\Program Files\Microsoft Visual Studio 8\VC\include\algorithm(2754) : error C2784: 'reverse_iterator<_RanIt>::difference_type std::operator -(const std::reverse_iterator<_RanIt> &,const std::reverse_iterator<_RanIt2> &)' : could not deduce template argument for 'const std::reverse_iterator<_RanIt> &' from 'std::list<_Ty>::_Iterator<_Secure_validation>'
            with
            [
                _Ty=int,
                _Secure_validation=true
            ]
            C:\Program Files\Microsoft Visual Studio 8\VC\include\xutility(1818) : see declaration of 'std::operator -'
    C:\Program Files\Microsoft Visual Studio 8\VC\include\algorithm(2754) : error C2676: binary '-' : 'std::list<_Ty>::_Iterator<_Secure_validation>' does not define this operator or a conversion to a type acceptable to the predefined operator
            with
            [
                _Ty=int,
                _Secure_validation=true
            ]
    C:\Program Files\Microsoft Visual Studio 8\VC\include\algorithm(2754) : error C2780: 'void std::_Sort(_RanIt,_RanIt,_Diff,_Pr)' : expects 4 arguments - 3 provided
            C:\Program Files\Microsoft Visual Studio 8\VC\include\algorithm(2873) : see declaration of 'std::_Sort'
    Build log was saved at "file://c:\Documents and Settings\student\My Documents\Visual Studio 2005\Projects\STLerror1\STLerror1\Debug\BuildLog.htm"
    STLerror1 - 6 error(s), 0 warning(s)
    ========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========
    
    
    Jsem odpůrcem GPL, ale ne odpůrce svobodného softwaru. Jen software pod MIT licencí je opravdu svobodný.
    23.2.2006 15:21 Aleš Kapica | skóre: 52 | blog: kenyho_stesky | Ostrava
    Rozbalit Rozbalit vše Re: Možná hloupý dotaz, ale
    Jasně.. až na to, že mi okno uteklo až někam za Ural...
    23.2.2006 22:21 Kero | skóre: 2
    Rozbalit Rozbalit vše Re: Možná hloupý dotaz, ale
    promin, pouzil jsem nejaky awkckovy skript text2html a pri nahledu jsem si toho nevsiml.
    Jsem odpůrcem GPL, ale ne odpůrce svobodného softwaru. Jen software pod MIT licencí je opravdu svobodný.
    23.2.2006 16:04 paskma | skóre: 13 | blog: Paskmův blog
    Rozbalit Rozbalit vše Re: Možná hloupý dotaz, ale
    No o moc lepší to tedy není. Překladač se prostě shání po operátoru "-".
    23.2.2006 17:50 #Tom
    Rozbalit Rozbalit vše Taky nic moc
    V tom výpisu je těch keců docela hodně a taky z toho nic moc nevyplývá. Z monitoru to dost trčí, 356 znaků na řádek je hodně. A v konzoli 80x24 je to úplně nejlepší. :-)

    Založit nové vláknoNahoru

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