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 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
    25.4. 12:44 | Nová verze

    Byla vydána nová stabilní verze 6.7 webového prohlížeče Vivaldi (Wikipedie). Postavena je na Chromiu 124. Přehled novinek i s náhledy v příspěvku na blogu. Vypíchnout lze Spořič paměti (Memory Saver) automaticky hibernující karty, které nebyly nějakou dobu používány nebo vylepšené Odběry (Feed Reader).

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

    Chybové hlášky překladačů

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