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 12:22 | Komunita

    Sovereign Tech Fund, tj. program financování otevřeného softwaru německým ministerstvem hospodářství a ochrany klimatu, podpoří vývoj FFmpeg částkou 157 580 eur. V listopadu loňského roku podpořil GNOME částkou 1 milion eur.

    Ladislav Hagara | Komentářů: 0
    dnes 01:55 | Komunita

    24. září 2024 budou zveřejněny zdrojové kódy přehrávače Winamp.

    Ladislav Hagara | Komentářů: 6
    včera 23:33 | Nová verze

    Google Chrome 125 byl prohlášen za stabilní. Nejnovější stabilní verze 125.0.6422.60 přináší řadu oprav a vylepšení (YouTube). Podrobný přehled v poznámkách k vydání. Opraveno bylo 9 bezpečnostních chyb. Vylepšeny byly také nástroje pro vývojáře.

    Ladislav Hagara | Komentářů: 0
    včera 21:11 | Nová verze

    Textový editor Neovim byl vydán ve verzi 0.10 (𝕏). Přehled novinek v příspěvku na blogu a v poznámkách k vydání.

    Ladislav Hagara | Komentářů: 0
    včera 20:55 | Nová verze

    Byla vydána nová verze 6.3 živé linuxové distribuce Tails (The Amnesic Incognito Live System), jež klade důraz na ochranu soukromí uživatelů a anonymitu. Přehled změn v příslušném seznamu. Tor Browser byl povýšen na verzi 13.0.15.

    Ladislav Hagara | Komentářů: 0
    včera 13:33 | IT novinky

    Dnes ve 12:00 byla spuštěna první aukce domén .CZ. Zatím největší zájem je o dro.cz, kachnicka.cz, octavie.cz, uvycepu.cz a vnady.cz [𝕏].

    Ladislav Hagara | Komentářů: 5
    včera 13:22 | Nová verze

    JackTrip byl vydán ve verzi 2.3.0. Jedná se o multiplatformní open source software umožňující hudebníkům z různých částí světa společné hraní. JackTrip lze instalovat také z Flathubu.

    Ladislav Hagara | Komentářů: 0
    včera 12:22 | Pozvánky

    Patnáctý ročník ne-konference jOpenSpace se koná 4. – 6. října 2024 v Hotelu Antoň v Telči. Pro účast je potřeba vyplnit registrační formulář. Ne-konference neznamená, že se organizátorům nechce připravovat program, ale naopak dává prostor všem pozvaným, aby si program sami složili z toho nejzajímavějšího, čím se v poslední době zabývají nebo co je oslovilo. Obsah, který vytváří všichni účastníci, se skládá z desetiminutových

    … více »
    Zdenek H. | Komentářů: 0
    včera 03:11 | Nová verze

    Program pro generování 3D lidských postav MakeHuman (Wikipedie, GitHub) byl vydán ve verzi 1.3.0. Hlavní novinkou je výběr tvaru těla (body shapes).

    Ladislav Hagara | Komentářů: 6
    15.5. 23:11 | Bezpečnostní upozornění

    Intel vydal 41 upozornění na bezpečnostní chyby ve svých produktech. Současně vydal verzi 20240514 mikrokódů pro své procesory řešící INTEL-SA-01051, INTEL-SA-01052 a INTEL-SA-01036.

    Ladislav Hagara | Komentářů: 0
    Podle hypotézy Mrtvý Internet mj. tvoří většinu online interakcí boti.
     (74%)
     (5%)
     (11%)
     (10%)
    Celkem 295 hlasů
     Komentářů: 16, poslední 14.5. 11:05
    Rozcestník

    Chybové hlášky překladačů

    22.2.2006 21:05 | Přečteno: 1543× | 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: 51 | 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.