Typový system versus unittesty

SB

Re:Typový system versus unittesty
« Odpověď #255 kdy: 21. 06. 2018, 12:50:33 »
To rozhodně ne, jak implicitní type cast prodlouží kód?

Tohle zrovna není dobrý příklad silného typového systému, spíš ojebávky (nehledě na to, že je to obecně problematický mechanismus). Zkuste jiný příklad zvýšení znovupoužitelnosti posílením typového systému, ať se tu nemusíme hádat.

Je třeba mít na paměti, že v jazycích s kontrolou typů v době překladu je tendence redukovat explicitní deklaraci typů. Logicky nikdo se nechce párat s psaním zbytečného kódu, ale chce vyzobat rozinky přísné a včasné typové kontroly. V běžných jazycích (OO i funkcionálních) se většina typů odvozuje (dedukuje). V kombinaci s rozhraními se použití dobře navržené knihovny obejde bez explicitních deklarací typů. V takovém C++ můžu mít téměř všude auto, včetně deklarací funkcí.

Jestli máte na mysli psaní "var" např. v Jávce, tak to je triviální dovození typu, kdy není pochyby. V jazycích OO (skutečných, ne imperativních hybridech) je komunikace místo voláním funkcí řešeno posíláním zpráv obsahujících selektor metody, takže typový systém by tu k ničemu nebyl, není co odvozovat!


SB

Re:Typový system versus unittesty
« Odpověď #256 kdy: 21. 06. 2018, 12:52:50 »
Smalltalk ale typy má.

Nemá. Jestli s tím máte problém, zkuste si představit javascriptové objekty ad-hoc.

Gődel

Re:Typový system versus unittesty
« Odpověď #257 kdy: 21. 06. 2018, 12:56:08 »
Jenže zatímco takový Lisp nebo Smalltalk jsou směšně jednoduché
Možná proto ono tvrzení, že každý reálně použitelný jazyk konverguje k Lispu :)
Otázkou tedy je, proč místo Lispu používáme náhražky :)
Alergie na závorky? ;)

Gődel

Re:Typový system versus unittesty
« Odpověď #258 kdy: 21. 06. 2018, 12:57:13 »
Tím, že jsem nucen používat explicitní typování tam, kde bych přetypovávat nemusel. Nemohu jednou funkcí sčítat int, float a spojovat stringy. Musím mít tři funkce.
Doporučuju přečíst si to ještě jednou a zamyslet se. Implicitní type cast obchází explicitní typování. Neboli prodloužení kódu se nekoná.
Jenže s implicitním typováním si vystačím jen u primitivních funkcí. Jakmile budu vytvářet cokoli složitějšího, musím si nadefinovat vlastní typy.
To je právě omyl. Z nějakého nepochopitelného důvodu evidentně rozšířený.

SB

Re:Typový system versus unittesty
« Odpověď #259 kdy: 21. 06. 2018, 12:58:23 »
Možná jde jen o slovíčkaření. Už tu byl uveden příklad Swiftu. Ve verzi 4.2 se silnějším typovým systémem se z stdlib smazalo hodně duplicitního kódu (specializací generik), který byl nahrazen jednou implementací pro mnoho typů (se společným protokolem). Obecnějšími se ty typy ovšem nestaly.

Supr. Tak teď ještě vykopejte ty "generika" (tj. zobecněný typovací systém) a ponechejte to netypové, a bude to (logicky) maximálně stejně velké, možná taky poloviční.


Gődel

Re:Typový system versus unittesty
« Odpověď #260 kdy: 21. 06. 2018, 12:59:17 »
Zkuste jiný příklad zvýšení znovupoužitelnosti posílením typového systému, ať se tu nemusíme hádat.
Už nejméně dvakrát jsem ho uváděl: podmíněná konformance. Vlastně třikrát. Stačí letmo mrknout na Swift.

v

Re:Typový system versus unittesty
« Odpověď #261 kdy: 21. 06. 2018, 12:59:24 »
Jenže zatímco takový Lisp nebo Smalltalk jsou směšně jednoduché
Možná proto ono tvrzení, že každý reálně použitelný jazyk konverguje k Lispu :)

Otázkou tedy je, proč místo Lispu používáme náhražky :)
časy se mění, lisp vznikl ve stejné době jako projekt použití jaderných zbraní na stavební práce

SB

Re:Typový system versus unittesty
« Odpověď #262 kdy: 21. 06. 2018, 13:05:18 »
Pozor, další myšlenka:

Opačně: Neobsahuje v sobě každý test z podstaty "typovou" kontrolu? Neboli vkládám-li na vstup diskrétní hodnoty a testuju-li výstupní diskrétní hodnoty (přísnější podmínka), netestuju zároveň i kategorii těch hodnot (volnější podmínka)?
furt je ten test jenom pro jednu volbu typů argumentů, u dynamického jazyka je možných voleb spousta

To je právě ten problém - testování kategorií hodnot ještě neznamená správnost kombinací jejich hodnot.
Takže se shodneme, že oba systémy jsou (to se ale dalo čekat) neúplné.

SB

Re:Typový system versus unittesty
« Odpověď #263 kdy: 21. 06. 2018, 13:06:27 »
Možná proto ono tvrzení, že každý reálně použitelný jazyk konverguje k Lispu :)

Opět nepodložené tvrzení. Doložte to.

jdusizasvym

Re:Typový system versus unittesty
« Odpověď #264 kdy: 21. 06. 2018, 13:08:36 »
Unit testy jsem nikdy neřešil, vždy si vše testuji sám vlastním systémem, že si vytvořím testovací třídu, která testuje veškeré elementární objekty (třídy, funkce), kdy ověřuji, zda na zadaný vstup leze zadaný výstup. Systém téměř debuggovat nemusím a pokud systém vykazuje chybu, vím hned, kde konkrétně je.

v

Re:Typový system versus unittesty
« Odpověď #265 kdy: 21. 06. 2018, 13:10:24 »
Pozor, další myšlenka:

Opačně: Neobsahuje v sobě každý test z podstaty "typovou" kontrolu? Neboli vkládám-li na vstup diskrétní hodnoty a testuju-li výstupní diskrétní hodnoty (přísnější podmínka), netestuju zároveň i kategorii těch hodnot (volnější podmínka)?
furt je ten test jenom pro jednu volbu typů argumentů, u dynamického jazyka je možných voleb spousta

To je právě ten problém - testování kategorií hodnot ještě neznamená správnost kombinací jejich hodnot.
Takže se shodneme, že oba systémy jsou (to se ale dalo čekat) neúplné.
asi nevím co je "kategorie hodnot"
se statickým typovým systémem můžete u některých funkcí dosáhnout vyčerpávajícího testování, u dynamického asi nikdy

v

Re:Typový system versus unittesty
« Odpověď #266 kdy: 21. 06. 2018, 13:15:23 »
testování kategorií hodnot
asi nevím co je "kategorie hodnot"
[/quote]
chytil jsem se do pasti?

Gődel

Re:Typový system versus unittesty
« Odpověď #267 kdy: 21. 06. 2018, 13:18:03 »
Diskuse se poněkud odklonila od původního tématu. Jako obvykle "type haters" nekriticky prosazují "čisté OOP". Přitom flexibilní (smalltalkovské) posílání zpráv a mocný typový systém s kontrolou v době překladu se ani v nejmenším nevylučují. Malý kvíz: který "čistě OO" jazyk má generika, varianci typů (to nemá ani C++ nebo Swift) a typovou kontrolu při překladu?

Gődel

Re:Typový system versus unittesty
« Odpověď #268 kdy: 21. 06. 2018, 13:19:20 »
Pozor, další myšlenka:

Opačně: Neobsahuje v sobě každý test z podstaty "typovou" kontrolu? Neboli vkládám-li na vstup diskrétní hodnoty a testuju-li výstupní diskrétní hodnoty (přísnější podmínka), netestuju zároveň i kategorii těch hodnot (volnější podmínka)?
furt je ten test jenom pro jednu volbu typů argumentů, u dynamického jazyka je možných voleb spousta

To je právě ten problém - testování kategorií hodnot ještě neznamená správnost kombinací jejich hodnot.
Takže se shodneme, že oba systémy jsou (to se ale dalo čekat) neúplné.
asi nevím co je "kategorie hodnot"
Kategorie je taková ta blbost s morfismama a funktorama a dalšíma fuj věcma :)

SB

Re:Typový system versus unittesty
« Odpověď #269 kdy: 21. 06. 2018, 13:27:31 »
Už nejméně dvakrát jsem ho uváděl: podmíněná konformance. Vlastně třikrát. Stačí letmo mrknout na Swift.

Tohle https://github.com/apple/swift-evolution/blob/master/proposals/0143-conditional-conformances.md je ono? Dopracováváme se zpět k myšlence, že dokonalý typový systém možná existuje, ale určitě je složitý jak prase? Tak to soráč květináč, ale to si radši nechám ten netypovaný systém s jednotkovými testy.