Zobrazit příspěvky

Tato sekce Vám umožňuje zobrazit všechny příspěvky tohoto uživatele. Prosím uvědomte si, že můžete vidět příspěvky pouze z oblastí Vám přístupných.


Příspěvky - BoneFlute

Stran: 1 ... 90 91 [92] 93 94 ... 133
1366
Vývoj / Re:Typový system versus unittesty
« kdy: 18. 06. 2018, 16:05:12 »
A zatímco úzká skupinka akademiků si posilovala své ego a pocit nadřazenosti teoretizováním o abstraktních problémech, někdo reálný napsal reálný program, který pomohl vyřešit konkrétní problém.

Nic proti akademikům, ale pokud chybí alespoň elementární porce pokory, zbude jen prázdnota a nadutost.

/* Možná je hodnocení moc příkré, ale po přečtení vlákna si nemohu pomoct. */
Tak já mám k papírovým akademikům dost daleko. Ale to, že jsem přičichl k statickým typům, dokonce i nedobrovolně nakouklu do teorie typů (grupy axiomy a tyhlencty vymyšlenosti) mi dost otevřelo oči. A začal jsem se i u pitomejch jazyků jako je php, java, javascript, nebo python uvažovat jinak. Snad ku prospěchu věci.

Třeba u mě se opakuje scénář: píšu v Javě, načichnu tím stylem. Po nějaké době mě to začne rozčilovat. Pak zkouším nějaký projekt a tak si řeknu, že to tentokrát zkusím v Pythonu. Nejdřív nadšení, jak jde všechno snadno a krásně, a pak když navzdory incrementálnímu vývoji už třetí den nedělám nic jiného než že spouštím aplikaci a opravuju chyby mě to začne štvát z druhé strany. Tak se vrátím zpět k Javě. Tam mě začne štvát, že žádné typy neumí, tak zkusím Scalu, Haskell...

U Haskellu to byla zatím největší spokojenost. Poněkud náročné na hlavu, ale jinak se dá. Nejvíc mě zatím vadilo, když mi totálně vyhnil cabal. Tak ale za to jazyk nemůže.

1367
Vývoj / Re:Typový system versus unittesty
« kdy: 18. 06. 2018, 15:00:15 »
Psal jsem, že v tom nejsem expert...ale ta idea je něco ve stylu
Kód: [Vybrat]
(ty typy musí být nějak jinak, ale nedám to dohromady)
add :: (HNat a, HNat b, HAdd a b c) => a -> b -> c
add ... následuje přičítání jedničky, pokud první argument není 0...
Je to dost zbytečné cvičení, a tak trošku to přesměrovává problém od "spletl jsem se v pojmenování" na "spletl jsem se v typu". Ale svým způsobem to je třeba odpověď na autorovu otázku - ano, typový systém odhalí chyby v kódu, ale jak odhalí chyby v typech?
Ano, křížová kontrola. Přiznávám unittestům bod :-)
Stejně jako se můžeš splést v typu, můžeš se splést v testu. Jenže jako v testu kontroluješ, zda to testuje co má pohledem, stejně tak můžeš u typu. Jako v testu kontroluješ změnu oproti předchozímu, stejně tak to umí elm u typů.

Takže zůstává jen ta křížová kontrola, kdy u testů to píšu dvakrát. Jenže, stejně tak může kompilátor generovat usecase, a ty ukazovat... No ale to už jsme zase trochu jinde.

Citace
Ale u typoveho systemu nutis nepritele, aby prinesl program s dalsimi (strojove overitelnymi) castmi...
Teď nerozumím - typový systém třeba Javy umí rozhodnout Null/NonNull (někdy...) bez ohledu na to, že to vlastně v tom typovém systému "není". Ty typeclassy FromJSON/ToJSON jsou udělány tak, že kompiler kompatibilitu prostě rozhodnout nemůže. Halting problém byl v tom smyslu, že i kdyby na to kompiler šel analýzou kódu jako Java, tak tu property "fromJSON . toJson = Just" stejně nemůže (obecně) rozhodnout.

Předpokládám, že kompiler:
Mám json element číslo, převést na string a zpět. Element string, detto. Element Struct obsahující číslo, na string a zpět. Dále je to rekursivní, takže to už nemusím.

Asi by se našlo něco, kde by to začalo být hodně divoké. Jenže pak je otázka, zda v takovém případě by si nevylámal zuby i unittest. Nevím.

1368
Vývoj / Re:Typový system versus unittesty
« kdy: 18. 06. 2018, 14:49:57 »
Chjo, tak jinak.

Předpokládejme, že Pepa píše program a nechce v něm mít chyby. A chce využít všechny možnosti, ale co nejjednodušším způsobem. A co nejrychlej. Takže:
- Je lepší při chybě program nepřeložit a dostat rovnou hlášku "type mismatch @ line 256", než týden procházet logy
- Je lepší, pokud má funkci
Kód: [Vybrat]
speed_t avgSpeed( distance_t distance, time_t time) { ... } 

a vyběhne na něj při překladu rovnou varování, že prohodil argumenty, než když na to přijde tesťák náhodou
- A chce mít podchyceno, že se opravdu implementuje správný vzorec, takže dá i unit test, který ho upoyorní, že ten výpočet je blbě.
- A protože chce vědět, jestli větší celek programu běhá správně, hodít am i integrační testy.

Takže s čím se to dělá efektivně ohlídá datový typ (bez práce a před commitem), co se dělá ohlídá unit test.

Pokud se i "s čím to dělám" musí (v základu) hlídat unit testem, tak je něco blbě (= jazyk stojí za starou bačkoru)

Integrační testy sem prosím netahat.

1369
Vývoj / Re:Typový system versus unittesty
« kdy: 18. 06. 2018, 14:47:27 »
Dále jsem se poučil studiem nějakých věcí, že typy jsou mnohem víc, než to, co nám ukazuje Java.
To rozhodně, v Javě je typový systém dost primitivní. Na druhou stranu čím mocnější typový systém, tím delší doba překladu, na jedné přednášce o Coqu si pochvalovali, jak jim překladač dokazuje korektnost, ale překlad trval hodiny kvůli závislostním typům.
Jsem si toho vědom. Na druhou stranu se to dá (snad) obejít. Třeba tím (naivně), že při dev procesu ty typy mám vypnuté, a teprve při releasu tomu dám nažrat.

1370
Vývoj / Re:Typový system versus unittesty
« kdy: 18. 06. 2018, 14:45:06 »
To není to co tvrdíš.
Jak to, že ne? Je to chyba v kódu, jednotkový test tu chybu odhalí, žádný použitelný typový systém jí nezabrání ani neodhalí. Je to tedy vyvrácení vašeho tvrzení, že by bylo možné všechny jednotkové testy nahradit typovým systémem.
elm-package odhalí

Tak snad pro vás bude inspirativní alespoň to, že největší slabinou jednotkových testů je to, že testují jenom případy, u kterých autor testů předpokládá, že by u nich mohl nastat problém. A dále to, že jedna z nejpodstatnějších dovedností programátora je právě schopnost odhalit ty problematické situace.
Je mi líto, to moc dobře vím. Je to jeden z důvodů proč typy mám rád.

1371
Vývoj / Re:Typový system versus unittesty
« kdy: 18. 06. 2018, 14:40:08 »
Akorát nevím jestli je v původním dotazu míněn typový systém javy - hádám že jsou míněny mnohem silnější typové systémy, které toho garantují mnohem víc. Možná by mohl BoneFlute upřesnit?

Úplně ten nejlepší (Agda, Idris, Eff) a ještě o kousek dál. Bavím se čistě na poli teorie. Takže to, že to bude nepraktické nevadí. Nerozhodnutelnost už samozřejmě ano. Přičemž zase ne zas tak teorie, abych třeba nemohl prohlásit, že "typový systém má omezení, že dokáže rozhodnout jen pro prvních milión prvočísel", třeba.

1372
Vývoj / Re:Typový system versus unittesty
« kdy: 18. 06. 2018, 14:36:42 »
Jirsák by musel udělat tu stejnou chybu na dvou místech nezávisle, aby ji neodhalil. Tobě stačí překlep na jednom místě ve znaménku.

Křížová kontrola, tomu rozumím. Mám výhrady, ale beru :-) Takže to máme dva.

1373
Vývoj / Re:Typový system versus unittesty
« kdy: 18. 06. 2018, 14:34:42 »
Chces inspiraci nebo jednoduchou a celkem rozumnou odpoved?
Tak ideálně to druhé. Ale spokojím se i s tím prvním.

1374
Vývoj / Re:Typový system versus unittesty
« kdy: 18. 06. 2018, 14:32:58 »
Mně připadá, že je triviálně vidět, že ta funkce add() je špatně pojmenovaná (a případně má špatnou dokumentaci), což nevyřeší žádný typový systém. Ale budu rád, když mne vyvedete z omylu.

Ukaž mi unittest s témže.

Bavíme se (doufám) o tvrzení, že typy plně nahradí unittesty. Nic víc neřeším.

Kód: [Vybrat]
def add(x: int, y: int) -> int:
    """
    >>> add(1, 1)
    2
    """
    return x - y
Stejně tak může být:
Kód: [Vybrat]
def add(x: int, y: int) -> int:
    """
    >>> add(1, 1)
    3
    """
    return x + y

Každopádně toto by měli řešit závislostní typy. Já jsem si to přeložil jako:
Kód: [Vybrat]
add x y == y * succ x

1375
Vývoj / Re:Typový system versus unittesty
« kdy: 18. 06. 2018, 14:26:07 »
Já dělám v javě, která silný typový systém má,

Tak ano, Java silný typový systém má, ale co si budem povídat, stojí za starou belu. V porovnáním s takovou Scalou, a to přitom ani ta nevyužívá všeho, co se dá typy udělat.

Jinak k příkladům, které jsi uvedl: null, změna signatury, změna chování, překlep, dokumentace chování - to všechno typy zvládnou (zvládli by).

1376
Vývoj / Re:Typový system versus unittesty
« kdy: 18. 06. 2018, 14:17:43 »
Bavíme se (doufám) o tvrzení, že typy plně nahradí unittesty. Nic víc neřeším.
Bavíme se o vašem tvrzení, že by unittesty byly plně nahrazeny typy.

Ukaž mi unittest s témže.
To opravdu takovou trivialitu neodkážete napsat sám? Tu chybu odhalí už takhle primitivní test, který nezkoumá žádné mezní stavy, ale prostě jen otestuje jeden jednoduchý nezajímavý případ.

Kód: [Vybrat]
int add(int x, int y) {
  return x - y
}

int sub(int x, int y) {
  return x - y
}

assert add(3, 2) == 5
assert sub(3, 2) == 1

To není to co tvrdíš.

Sorry, tvé příspěvky nejsou vůbec inspirativní. Nebudu se tedy tebou již zabejvat.

1377
Vývoj / Re:Typový system versus unittesty
« kdy: 18. 06. 2018, 13:59:19 »
Mně připadá, že je triviálně vidět, že ta funkce add() je špatně pojmenovaná (a případně má špatnou dokumentaci), což nevyřeší žádný typový systém. Ale budu rád, když mne vyvedete z omylu.

Ukaž mi unittest s témže.

Bavíme se (doufám) o tvrzení, že typy plně nahradí unittesty. Nic víc neřeším.

1378
Vývoj / Re:Typový system versus unittesty
« kdy: 18. 06. 2018, 13:36:00 »
Tak ono jaksi uz v principu typy resi (ne nutne dost zevrubnou) kontrolu pro vsechny mozne hodnoty, zatimco testy jenom pro nejake konkretni (at uz zadane nebo v pripade property based testu generovane) hodnoty.

ta kontrola může být dost komplikovaná. Samotnou definici typu potom musíte testovat na nějakých konkrétních hodnotách. Napadá mě třeba typ reprezentující číslo kreditní karty. Je docela jedno, jestli je validace součástí typu nebo v samostatné funkci.

Co na té kartě chceš testovat?

https://en.wikipedia.org/wiki/Luhn_algorithm

Díky. V tomto případě mi stále ještě fantazie neselhává. Ale díky.

1379
Vývoj / Re:Typový system versus unittesty
« kdy: 18. 06. 2018, 13:30:04 »
Tak ono jaksi uz v principu typy resi (ne nutne dost zevrubnou) kontrolu pro vsechny mozne hodnoty, zatimco testy jenom pro nejake konkretni (at uz zadane nebo v pripade property based testu generovane) hodnoty.

ta kontrola může být dost komplikovaná. Samotnou definici typu potom musíte testovat na nějakých konkrétních hodnotách. Napadá mě třeba typ reprezentující číslo kreditní karty. Je docela jedno, jestli je validace součástí typu nebo v samostatné funkci.

Co na té kartě chceš testovat?

1380
Vývoj / Re:Typový system versus unittesty
« kdy: 18. 06. 2018, 13:27:16 »

Pak jsem se dožral a napsal jsem si generátor všech možností - tedy dle mého chápání něco jako statický typ.

Tak to je nejake divne chapani...
Tak samozřejmě :-) Ber to prosím s rezervou.

Já si z typů beru to, že
- jsou deklarativní (a ideálně expresivní) - deklarativní s důrazem na "popisné"
- jsou ultimátní, tedy pokrývají všechny scénáře
- počítá to stroj
- a samozřejmě nesmíme zapomenout na záruky

Dále jsem se poučil studiem nějakých věcí, že typy jsou mnohem víc, než to, co nám ukazuje Java. A snažím se zchladit své nadšení hledáním, kde to má hranice. Protože zatím všechny případy nějaké logiky, které mě napadali tak se při troše fantazie dali typy popsat.

Stran: 1 ... 90 91 [92] 93 94 ... 133