Názor k článku Common Lisp: žralok mezi programovacími jazyky od tzl - Trochu to rozvedu: z pohledu standardu jsou typové...

  • Článek je starý, nové názory již nelze přidávat.
  • 14. 4. 2022 14:18

    tzl

    Trochu to rozvedu: z pohledu standardu jsou typové deklarace slibem kompilátoru, že dané proměnné (funkce, mezivýsledky, ...) jsou daného typu, a pokud nejsou, jde o nedefinovanou situaci a může se stát cokoliv.

    Ty deklarované typy mohou být od "cokoliv" přes "celé číslo" po třeba "buď NIL, nebo pole prvočísel délky 23 a libovolné šířky"; nevím co umožňuje za anotace Python takže neporovnám.

    Jak se k tomu staví konkrétní implementace je na ní, a typicky také na hodnotě nastavení optimizací (což jsou taky deklarace). Konkrétně sbcl, pokud si pamatuji, postupuje podle kombinace nastavení deklarovaného safety a speed, a buď kontroluje vše, nebo zjednodušeně (např, deklaraci "celé číslo buď od -17 do -7, nebo od 7 do 17" zjednoduší na běhovou kontrolu "od -17 do 17").

    Kromě toho sbcl při kompilaci sleduje typy proměnných v určité míře a varuje pokud něco "nesedí" vzhledem k deklarovaným typům a známým funkcím a operátorům. Ale všechno z té deklarace při kompilaci neověřuje.

    Třeba v příkladu nahoře: nepozná jestli do pole ukládáme prvočíslo, ale pokud odvodí že přistupujeme k 24 sloupci pole, tak varuje. A příslušný kód rovnou zkompiluje jako vyvolání chyby INVALID-ARRAY-TYPE-ERROR.