Názor k článku Programovací jazyk Ada: nástroje pro řízení běhu programu od Miloslav Ponkrác - K tomuto nesmyslnému závěru jste došel jak? V C/C++...

  • Článek je starý, nové názory již nelze přidávat.
  • 7. 5. 2015 15:22

    Miloslav Ponkrác

    K tomuto nesmyslnému závěru jste došel jak?

    V C/C++ se míchají nesmyslně dvě věci, tj. datový typ a jeho binární reprezentace. Ada má ipso facto jen dva celočíselné typy: aritmetický a modulární. Více není potřeba, protože toto určuje všechny operace nad nimi.

    C/C++ má pouze jeden celočíselný typ: modulární (z hlediska terminologie Ady). Protože ovšem není schopno C/C++ určit rozsah datového typu, nesmyslně je zmnožuje do myriád názvů, které jsou ovšem stále modulárním celočíselným typem, ovšem s různými rozsahy hodnot: short/int/long/long long, atd. V Adě nic takového není třeba, protože rozsah si určítě explicitně pomocí zadání rozsahu hodnot čísel typu.

    Tedy Ada nahradí všechny C/C++ celočíselné typy jediným typem zvaným modulo celočíselné typy. Příklad:

    type Byte is mod 256; -- celočíselný integer s rozsahem 1 bajt

    Co autor článku bohužel nevysvětlil je že Integer typ v Adě se nechová jako v C/C++. Je to skutečně pravý matematický celočíselný typ. Při podtečení/přetečení se nepřetáří bitíky, takže 255+1 není -1 na 8bitovém typu, atd.

    Tedy typ Integer v Adě je celočíselný typ s tak pěkným chováním, v jakém se v jazycích C/C++ vůbec nevyskytuje. Takový typ v C/C++ neexistuje. V C/C++ existují pouze celočíselné typy, které Ada nazývá modulo typy. Skutečný aritmeticý celočíselný typ, který se více chová matematicky, než počítačově, jazyky C/C++ vůbec nemají.

    Tedy rozsah celočíselného typu, který jste měl na mysli, není na libovůli kompilátoru, ale na libovůli programátora. Protože máte k dispozici možnost rozsahu, takže třeba 32bitový znaménkový celočíselný typ (z hlediska rozsahu) v Adě programátor předepíše jako Integer range -2**31 .. 2**31-1, a je to. Zde žádná libovůle kompilátoru není.

    Ada je čistější jazyk, a odděluje datový typ a jeho rozsah do dvou samostatných věcí, které si můžete samostatně určovat. Takovou kontrolu celočíselných a jiných typů v C/C++ nenajdete, a proto není vůbec potřeba, aby typ měl určen rozsah, ten si přeci programátor explicitně určí dle své potřeby.

    To, že C/C++ naučil několik generací programátorů, že prasecké datové typy jsou normální, je bohužel smutná skutečnost.

    P.S.: Autor tohoto příspěvku píše v C++ několik desetiletí, a má C++ opravdu rád. Přesto datové typy v C++ jsou tou negativní stránkou C++ jazyka. Velmi negativní.

    Ing. Miloslav Ponkrác