Typový system versus unittesty

BoneFlute

  • *****
  • 1 983
    • Zobrazit profil
Re:Typový system versus unittesty
« Odpověď #855 kdy: 23. 10. 2018, 16:17:28 »
Já v tom vidím rozdíl:
...
- u typového systému duplikuju obsah své metody/funkce jako ověření výsledku, ten nezávislý pohled tam není.

Rozumím. A měl by si pravdu. Ale myslím si, že ten tvůj předpoklad není nutný. Dovedu si představit, kdy typem určím druh výsledku, ale nechám prostor pro různé implementace. Dokonce jsem tu uváděl i jednoduchý příklad.


Kit

Re:Typový system versus unittesty
« Odpověď #856 kdy: 23. 10. 2018, 16:34:40 »
Myslim, ze nema na mysli vyvojare typoveho systemu, ale vyvojare co ho pouzije. Tzn. toho sameho, ktery alternativne pouzije testy. Tzn. napriklad sebe. tebe, nebo me ;-)

Ahá! To pak jo.

V takovém případě bych zdůraznil expresivitu a deklarativnost typů. Napsat nebo použít typ je IMHO výrazně snazší a bezpečnější než napsat testy. Snazší, když to umíš, samozřejmě. Ale to opět platí o obém.

Obávám se, že srovnáváš typy s jednotkovými testy, ale měly by se srovnávat funkcionální typy s objektovými třídami. Z toho vyplývá, že jednotkové testy nesoupeří s typy, ale jsou něčím navíc, tedy se s typy (resp. s třídami) vzájemně doplňují.

agent

Re:Typový system versus unittesty
« Odpověď #857 kdy: 23. 10. 2018, 17:16:42 »
Rozumím. A měl by si pravdu. Ale myslím si, že ten tvůj předpoklad není nutný. Dovedu si představit, kdy typem určím druh výsledku, ale nechám prostor pro různé implementace. Dokonce jsem tu uváděl i jednoduchý příklad.
Druh výsledku (např pro funkci počítající x2 to dejme tomu bude int od 0 do nekonečna) mi moc nepomůže, když potřebuju ověřit, jestli mi to ve skutečnosti nevrací x2/2.
 

Bacsa

Re:Typový system versus unittesty
« Odpověď #858 kdy: 23. 10. 2018, 20:43:51 »
Myslim, ze nema na mysli vyvojare typoveho systemu, ale vyvojare co ho pouzije. Tzn. toho sameho, ktery alternativne pouzije testy. Tzn. napriklad sebe. tebe, nebo me ;-)

Ahá! To pak jo.

V takovém případě bych zdůraznil expresivitu a deklarativnost typů. Napsat nebo použít typ je IMHO výrazně snazší a bezpečnější než napsat testy. Snazší, když to umíš, samozřejmě. Ale to opět platí o obém.
Obávám se, že srovnáváš typy s jednotkovými testy, ale měly by se srovnávat funkcionální typy s objektovými třídami. Z toho vyplývá, že jednotkové testy nesoupeří s typy, ale jsou něčím navíc, tedy se s typy (resp. s třídami) vzájemně doplňují.
"Funkcionální" typy a třídy à la OO jsou dva různé koncepty. Jinak to o tom vzájemném doplňování jsem ve stejném znění psal výše, prosím neopičit se  :P

Bacsa

Re:Typový system versus unittesty
« Odpověď #859 kdy: 23. 10. 2018, 20:48:30 »
Rozumím. A měl by si pravdu. Ale myslím si, že ten tvůj předpoklad není nutný. Dovedu si představit, kdy typem určím druh výsledku, ale nechám prostor pro různé implementace. Dokonce jsem tu uváděl i jednoduchý příklad.
Druh výsledku (např pro funkci počítající x2 to dejme tomu bude int od 0 do nekonečna) mi moc nepomůže, když potřebuju ověřit, jestli mi to ve skutečnosti nevrací x2/2.
Toto je příklad intrinsic proof v silných typových systémech. V takovém případě funkce nevrací jen int, ale taky "důkaz" (proof), typicky nějaký zobecněný součtový typ, který zajišťuje korektnost. Jednoduché příklady má ve své knize Sitnikovski, doporučuji.


BoneFlute

  • *****
  • 1 983
    • Zobrazit profil
Re:Typový system versus unittesty
« Odpověď #860 kdy: 23. 10. 2018, 21:12:35 »
Obávám se, že srovnáváš typy s jednotkovými testy, ale měly by se srovnávat funkcionální typy s objektovými třídami. Z toho vyplývá, že jednotkové testy nesoupeří s typy, ale jsou něčím navíc, tedy se s typy (resp. s třídami) vzájemně doplňují.

Nemohu souhlasit. Typy ve funkcionálním jazyce se chovaj stejně jako typy v objektovém jazyce. Tedy takové porovnání je neužitečné. Já chci srovnat typy s jednotkovými testy. V tom vidím potenciál. Tedy nevyplývá z toho to co tvrdíš, že z toho vyplývá.

BoneFlute

  • *****
  • 1 983
    • Zobrazit profil
Re:Typový system versus unittesty
« Odpověď #861 kdy: 23. 10. 2018, 21:15:13 »
Rozumím. A měl by si pravdu. Ale myslím si, že ten tvůj předpoklad není nutný. Dovedu si představit, kdy typem určím druh výsledku, ale nechám prostor pro různé implementace. Dokonce jsem tu uváděl i jednoduchý příklad.
Druh výsledku (např pro funkci počítající x2 to dejme tomu bude int od 0 do nekonečna) mi moc nepomůže, když potřebuju ověřit, jestli mi to ve skutečnosti nevrací x2/2.

No ano, v tom nejsme ve sporu. Já uvažuji, proč by typový systém měl být tak omezený, aby vracel jen 0 .. nekonečno? Jde vyjádřit i víc.

Kit

Re:Typový system versus unittesty
« Odpověď #862 kdy: 23. 10. 2018, 21:19:39 »
"Funkcionální" typy a třídy à la OO jsou dva různé koncepty. Jinak to o tom vzájemném doplňování jsem ve stejném znění psal výše, prosím neopičit se  :P

Jsou to různé koncepty, ale dá se srovnávat analogie. Co je pro OOP třída, to je pro FP typ. V OOP se píší testy, ve FP se programy dokazují.

Kit

Re:Typový system versus unittesty
« Odpověď #863 kdy: 23. 10. 2018, 21:22:30 »
Obávám se, že srovnáváš typy s jednotkovými testy, ale měly by se srovnávat funkcionální typy s objektovými třídami. Z toho vyplývá, že jednotkové testy nesoupeří s typy, ale jsou něčím navíc, tedy se s typy (resp. s třídami) vzájemně doplňují.

Nemohu souhlasit. Typy ve funkcionálním jazyce se chovaj stejně jako typy v objektovém jazyce. Tedy takové porovnání je neužitečné. Já chci srovnat typy s jednotkovými testy. V tom vidím potenciál. Tedy nevyplývá z toho to co tvrdíš, že z toho vyplývá.

Typy nejsou v OOP důležité, jsou jen atributem objektu. FP je na typech postaveno.

BoneFlute

  • *****
  • 1 983
    • Zobrazit profil
Re:Typový system versus unittesty
« Odpověď #864 kdy: 23. 10. 2018, 21:37:22 »
V OOP se píší testy, ve FP se programy dokazují.
To určitě nelze takto generalizovat.

Typy nejsou v OOP důležité, jsou jen atributem objektu. FP je na typech postaveno.
To zcela jistě není pravda. Jak je takové Clojure postaveno na typech? Java bez interfaců by byla méně než poloviční.


Každopádně mě ani nijak zvlášť nezajímá rozdíl mezi FP a OOP; ten je celkem jasný. Mě zajímá schopnost typů na úkor testů.

Bacsa

Re:Typový system versus unittesty
« Odpověď #865 kdy: 23. 10. 2018, 21:43:42 »
Obávám se, že srovnáváš typy s jednotkovými testy, ale měly by se srovnávat funkcionální typy s objektovými třídami. Z toho vyplývá, že jednotkové testy nesoupeří s typy, ale jsou něčím navíc, tedy se s typy (resp. s třídami) vzájemně doplňují.

Nemohu souhlasit. Typy ve funkcionálním jazyce se chovaj stejně jako typy v objektovém jazyce. Tedy takové porovnání je neužitečné. Já chci srovnat typy s jednotkovými testy. V tom vidím potenciál. Tedy nevyplývá z toho to co tvrdíš, že z toho vyplývá.
Typy nejsou v OOP důležité, jsou jen atributem objektu.
Ha, tak tohle tesat do kamene.

Bacsa

Re:Typový system versus unittesty
« Odpověď #866 kdy: 23. 10. 2018, 21:46:26 »
Obávám se, že srovnáváš typy s jednotkovými testy, ale měly by se srovnávat funkcionální typy s objektovými třídami. Z toho vyplývá, že jednotkové testy nesoupeří s typy, ale jsou něčím navíc, tedy se s typy (resp. s třídami) vzájemně doplňují.

Nemohu souhlasit. Typy ve funkcionálním jazyce se chovaj stejně jako typy v objektovém jazyce. Tedy takové porovnání je neužitečné. Já chci srovnat typy s jednotkovými testy. V tom vidím potenciál. Tedy nevyplývá z toho to co tvrdíš, že z toho vyplývá.
FP je na typech postaveno.
To tak obecně neplatí, původní (beztypový) λ-počet je taky čisté FP a po typech ani vidu. To jen Haskell a spol. s typy stojí a padají.

Kiwi

Re:Typový system versus unittesty
« Odpověď #867 kdy: 23. 10. 2018, 22:26:51 »
V OOP se píší testy, ve FP se programy dokazují.
To určitě nelze takto generalizovat.

Typy nejsou v OOP důležité, jsou jen atributem objektu. FP je na typech postaveno.
To zcela jistě není pravda. Jak je takové Clojure postaveno na typech? Java bez interfaců by byla méně než poloviční.


Každopádně mě ani nijak zvlášť nezajímá rozdíl mezi FP a OOP; ten je celkem jasný. Mě zajímá schopnost typů na úkor testů.
Java zrovna není příliš dobrý příklad objektového jazyka. Je to spíš takový objektový paskvil.

Kit

Re:Typový system versus unittesty
« Odpověď #868 kdy: 23. 10. 2018, 22:45:16 »
V OOP se píší testy, ve FP se programy dokazují.
To určitě nelze takto generalizovat.

Typy nejsou v OOP důležité, jsou jen atributem objektu. FP je na typech postaveno.
To zcela jistě není pravda. Jak je takové Clojure postaveno na typech? Java bez interfaců by byla méně než poloviční.

Každopádně mě ani nijak zvlášť nezajímá rozdíl mezi FP a OOP; ten je celkem jasný. Mě zajímá schopnost typů na úkor testů.

Takže jsme se dopracovali k tomu, že typy nejsou důležité ani v OOP, ani ve FP. Typy jsou užitečné, ale nejsou nezbytné.

Clojure není čistě funkcionálním jazykem, dá se v něm psát i strukturovaně nebo objektově.

Kdysi jsem si napsal javovskou aplikaci (plugin do Vimu) ve které jediným rozhraním byl Object. Žádné přetypování, elegance sama. Smalltalk je důkazem, že se bez typů obejdeme, ale bez testů nikoli.

Kit

Re:Typový system versus unittesty
« Odpověď #869 kdy: 23. 10. 2018, 22:54:11 »
Každopádně mě ani nijak zvlášť nezajímá rozdíl mezi FP a OOP; ten je celkem jasný. Mě zajímá schopnost typů na úkor testů.

Důkaz sporem: Napiš jedinou netriviální aplikaci, kterou po úspěšné kompilaci předáš zákazníkovi jako hotovou. Nesmíš ji ani jednou spustit, ani žádnou její komponentu. Pokud to svedeš, tak ti pogratuluji, že ses vyhnul testům a že sis vystačil s typy.