Co si myslíte o OOP?

operator

Re:Co si myslíte o OOP?
« Odpověď #795 kdy: 09. 01. 2019, 13:38:39 »
Tak jsem chtel overit tu haskell ukazku a zjistil, ze haskell je tak okrajovy jazyk, ze neni k dispozici v termuxu. Hledal jsem balicek s nazvem haskell nebo ghc. Seznam balicku: https://pastebin.com/kdfgUFRt To jen upevnuje me presvedceni, ze nema smysl ztracet cas okrajovymi nepodporovanymi jazyky.  Je schopen to nekdo predvest v jinem jazyku ktery je mezi balicky? (je tam kde co, rust, vala, erlang, java, ocaml, golang, clang, racket, ...)  Nebo se jedna ciste o schopnost haskellu, ktera je tu mylne prisuzovana jazykum se statickymi typy?
To je tak pitomá metrika (přítomnost v termuxu) a tak pitomý argument (když je to v Haskellu a opírá se to o statické typy, tak to nutně je demonstrace výhod statických typů)...

Srovnej. Implicitni pretypovani v jazyce C se take opira o staticke typy a prameni z toho nestabilita a chybovost programu napsanych v C. Je tedy nestabilitu a chybovost programu mozno oznacit za nevyhodu statickych typu? Nebo je to vlastnost jazyka, nikoliv statickych typu? 
Timhle muzes ukazat na Hindenburg a odstrelit tim myslenku na letani...
Dulezite je, ze reseni existuje a neco prinasi. A bez statickeho typovani ti fungovat nebude.
Dukaz pro toto tvrzeni?
Co se tyce Hindenburgu, nemas pravdu, ze to odstreli myslenku na letani. Stejne jako staticke typy neodstrali myslenku na programovani. Naopak to byl impulz pro vynalezani lepsiho letani, stroju tezsi nez vzduch.


Re:Co si myslíte o OOP?
« Odpověď #796 kdy: 09. 01. 2019, 13:43:24 »
Tak jsem chtel overit tu haskell ukazku a zjistil, ze haskell je tak okrajovy jazyk, ze neni k dispozici v termuxu. Hledal jsem balicek s nazvem haskell nebo ghc. Seznam balicku: https://pastebin.com/kdfgUFRt To jen upevnuje me presvedceni, ze nema smysl ztracet cas okrajovymi nepodporovanymi jazyky.  Je schopen to nekdo predvest v jinem jazyku ktery je mezi balicky? (je tam kde co, rust, vala, erlang, java, ocaml, golang, clang, racket, ...)  Nebo se jedna ciste o schopnost haskellu, ktera je tu mylne prisuzovana jazykum se statickymi typy?
To je tak pitomá metrika (přítomnost v termuxu) a tak pitomý argument (když je to v Haskellu a opírá se to o statické typy, tak to nutně je demonstrace výhod statických typů)...
Neni to demonstrace vyhod statickych typu, pokud je haskell jediny jazyk, ktery to umi. V takovem pripade je to demonstrace vyhoda haskellu. Na tom zalozene tvrzeni o statickych typech je argumentacni klam, predcasna generalizace.
Ale houby, umi to s drobnymi rozdily kopec jazyku (o Scale a F# tu uz rec sla), ten Haskell se proste bere jako "zlaty standard", co ho navic pomalu kazdy zna.
Zatim to spis vypada na vlastnost funkcionalnich jazyku, porad cekam na nejaky normalni. :-)

Normální? Oba jsou to multiparadigmatické jazyky.

operator

Re:Co si myslíte o OOP?
« Odpověď #797 kdy: 09. 01. 2019, 13:45:12 »
Ja si mezitim dovolim predvest moznost typove kontroly u dynamickeho jazyka.
Kód: [Vybrat]
~ $ mypy typehint.py
typehint.py:6: error: Argument 1 to "inc" has incompatible type "str"; expected "int"
~ $ cat typehint.py
def inc(x:int)->int:
    return x+1

if  __name__ == '__main__':
    print(inc(3))
    print(inc('4'))
~ $ mypy typehint.py
typehint.py:6: error: Argument 1 to "inc" has incompatible type "str"; expected "int"

operator

Re:Co si myslíte o OOP?
« Odpověď #798 kdy: 09. 01. 2019, 13:48:48 »
Tak jsem chtel overit tu haskell ukazku a zjistil, ze haskell je tak okrajovy jazyk, ze neni k dispozici v termuxu. Hledal jsem balicek s nazvem haskell nebo ghc. Seznam balicku: https://pastebin.com/kdfgUFRt To jen upevnuje me presvedceni, ze nema smysl ztracet cas okrajovymi nepodporovanymi jazyky.  Je schopen to nekdo predvest v jinem jazyku ktery je mezi balicky? (je tam kde co, rust, vala, erlang, java, ocaml, golang, clang, racket, ...)  Nebo se jedna ciste o schopnost haskellu, ktera je tu mylne prisuzovana jazykum se statickymi typy?
To je tak pitomá metrika (přítomnost v termuxu) a tak pitomý argument (když je to v Haskellu a opírá se to o statické typy, tak to nutně je demonstrace výhod statických typů)...
Neni to demonstrace vyhod statickych typu, pokud je haskell jediny jazyk, ktery to umi. V takovem pripade je to demonstrace vyhoda haskellu. Na tom zalozene tvrzeni o statickych typech je argumentacni klam, predcasna generalizace.
Ale houby, umi to s drobnymi rozdily kopec jazyku (o Scale a F# tu uz rec sla), ten Haskell se proste bere jako "zlaty standard", co ho navic pomalu kazdy zna.
Zatim to spis vypada na vlastnost funkcionalnich jazyku, porad cekam na nejaky normalni. :-)
Normální? Oba jsou to multiparadigmatické jazyky.
Normalni, to jest ty, ktere se bezne pouzivaji v komercni praxi.

Re:Co si myslíte o OOP?
« Odpověď #799 kdy: 09. 01. 2019, 13:49:23 »
Tak jsem chtel overit tu haskell ukazku a zjistil, ze haskell je tak okrajovy jazyk, ze neni k dispozici v termuxu. Hledal jsem balicek s nazvem haskell nebo ghc. Seznam balicku: https://pastebin.com/kdfgUFRt To jen upevnuje me presvedceni, ze nema smysl ztracet cas okrajovymi nepodporovanymi jazyky.  Je schopen to nekdo predvest v jinem jazyku ktery je mezi balicky? (je tam kde co, rust, vala, erlang, java, ocaml, golang, clang, racket, ...)  Nebo se jedna ciste o schopnost haskellu, ktera je tu mylne prisuzovana jazykum se statickymi typy?
To je tak pitomá metrika (přítomnost v termuxu) a tak pitomý argument (když je to v Haskellu a opírá se to o statické typy, tak to nutně je demonstrace výhod statických typů)...
To neni metrika, proste si to nemam kde zkusit a z toho plyne muj osobni nezajem.
Ty nemas pocitac? :-O
Kazdopadne jsou i REPLy online. A cele IDE online byvalo taky.
Zadny kam bych mohl instalovat cizi software. Online mohu zkusit.

...nebo si třeba koupit počítač? Pro programátora je to celkem užitečné vybavení.


Re:Co si myslíte o OOP?
« Odpověď #800 kdy: 09. 01. 2019, 13:49:48 »
Tak jsem chtel overit tu haskell ukazku a zjistil, ze haskell je tak okrajovy jazyk, ze neni k dispozici v termuxu. Hledal jsem balicek s nazvem haskell nebo ghc. Seznam balicku: https://pastebin.com/kdfgUFRt To jen upevnuje me presvedceni, ze nema smysl ztracet cas okrajovymi nepodporovanymi jazyky.  Je schopen to nekdo predvest v jinem jazyku ktery je mezi balicky? (je tam kde co, rust, vala, erlang, java, ocaml, golang, clang, racket, ...)  Nebo se jedna ciste o schopnost haskellu, ktera je tu mylne prisuzovana jazykum se statickymi typy?
To je tak pitomá metrika (přítomnost v termuxu) a tak pitomý argument (když je to v Haskellu a opírá se to o statické typy, tak to nutně je demonstrace výhod statických typů)...
Neni to demonstrace vyhod statickych typu, pokud je haskell jediny jazyk, ktery to umi. V takovem pripade je to demonstrace vyhoda haskellu. Na tom zalozene tvrzeni o statickych typech je argumentacni klam, predcasna generalizace.
Ale houby, umi to s drobnymi rozdily kopec jazyku (o Scale a F# tu uz rec sla), ten Haskell se proste bere jako "zlaty standard", co ho navic pomalu kazdy zna.
Zatim to spis vypada na vlastnost funkcionalnich jazyku, porad cekam na nejaky normalni. :-)
Normální? Oba jsou to multiparadigmatické jazyky.
Normalni, to jest ty, ktere se bezne pouzivaji v komercni praxi.

Tak to jsou normální.

BaldSlattery

Re:Co si myslíte o OOP?
« Odpověď #801 kdy: 09. 01. 2019, 13:58:53 »
Ja si mezitim dovolim predvest moznost typove kontroly u dynamickeho jazyka.
Kód: [Vybrat]
~ $ mypy typehint.py
typehint.py:6: error: Argument 1 to "inc" has incompatible type "str"; expected "int"
~ $ cat typehint.py
def inc(x:int)->int:
    return x+1

if  __name__ == '__main__':
    print(inc(3))
    print(inc('4'))
~ $ mypy typehint.py
typehint.py:6: error: Argument 1 to "inc" has incompatible type "str"; expected "int"
No vida, už jsi prozřel.

lopatka

Re:Co si myslíte o OOP?
« Odpověď #802 kdy: 09. 01. 2019, 14:28:54 »
Počas behu programu neviete, resp. nemáte istotu, čo dostanete na vstupe. Jediný rozdiel je, že pri hodnote nesprávneho typu staticky typovaný spadne, dynamicky typovaný zas môže pokračovať, ale najskôr nekorektne.

Ani jedno, ani druhé však nie je riešenie, ani pád, ani nesprávne fungovanie. A tak si v oboch prípadoch musíte sami, "manuálne" overovať typ.

Preto kde je tá ohromná výhoda statických typov? Že sa neuklepnem v development time? Veď to sa nemusím ani s dynamickým. A unit testy musím písať tak či onak.

Takže so staticky typovaným jazykom asi budem vyvíjať o niečo pohodlnejšie, ale ak viem čo robím, ani s dynamickým typovaným to nebude žiadna tragédia. Hlavne nevidím nič pravdy na tom, že sú staticky typované jazyky principiálne lepšie od dynamických.

A krátkozraké vyjadrenia od zjavných amatérov bez praxe, typu: "so staticky typovaným jazykom ani unit testy nie sú potrebné", to je úplný nonsens - ktokoľvek s praxou na čomkoľvek väčšom vie, že bez testov sa v tíme zaobísť nedá, že to by bolo veľmi tragické rozhodnutie.

Takže o čom to tu vlastne točíte? O tomto, že staticky typované jazyky sú lepšie? Iste, väčšinou sa s nimi bude robiť o niečo lepšie. Ale že dynamicky typované sú zlé, resp. úplne nefunkčné? Ani náhodou.

To je celé. Oboje nakrásne funguje. A že nejde s dynamicky typovaným jazykom dosiahnuť presne to isté, ako so staticky? Jasne. Len sa tu strápňujete, keď sa to silou mocou snažíte zrovnávať. Veď ani staticky typovaným nedosiahnete presne to isté, ako s dynamickým. No a? Veď to je pointa. Ale vy tu napriek tomu miešate hrušky s jablkami - dynamické so statickými, funkcionálny s oop prístupom a hádate sa o naprostých zbytočnostiach.

A prax - je fajn, že vieš Smalltalk, ale nemáš zamestnanie, lebo na minoritné jazyky v praxi sere pes. Ani s Go, ani s Rust dieru do sveta neurobíš a v ponukách si nemáš šancu vyberať. Nadávať na Java/PHP/JS je možno v móde, ale nezamestnanými, keďže pracovné ponuky sú hlavne o nich, o tých škaredých, nefunkčných, lopatám a bastličom určených jazykoch. A radšej zazobaná lopata, ako nezamestnaný "akademik na roote".

Kit

Re:Co si myslíte o OOP?
« Odpověď #803 kdy: 09. 01. 2019, 15:02:20 »
Měl jsem na mysli tohle:
Kód: [Vybrat]
inc5 :: Nat n -> Nat (S n)
inc5 (x: Int) = x + 7

Jak to odhalí chybu? Chtěl jsem zvýšit o 5, ale místo toho se mi hodnota zvýší o 7.

Tohle odhali chybu hned - nezkompiluje se to. Protoze v typu stale rikas, ze chces zvysovat o 1. Neco jineho by bylo neco jako:

Kód: [Vybrat]
inc5 :: Nat n -> Nat (S (S (S (S (S n)))))
inc5 (x: Int) = x + 7

Uz jsme to tady pred casem rozebirali. Jisty si muzes byt jen tak, ze to napises dvakrat a porovnas. Testy a dostatecne silny typovy system jsou jen dve ruzne moznosti, jak se priblizit tomu "napsat to dvakrat". Oba na to jdou z jine strany, takze v tom priblizeni maji vyhody a nevyhody. Ale ciste teoreticky (v tom limitnim pripade) lze jedno zcela nahradit druhym, je to vec vkusu.

Aha, takže úplně stejně to udělám, když budu chtít napsat funkci inc4096, která zvýší hodnotu o 4096?

Kit

Re:Co si myslíte o OOP?
« Odpověď #804 kdy: 09. 01. 2019, 15:20:48 »
Ja si mezitim dovolim predvest moznost typove kontroly u dynamickeho jazyka.
Kód: [Vybrat]
~ $ mypy typehint.py
typehint.py:6: error: Argument 1 to "inc" has incompatible type "str"; expected "int"
~ $ cat typehint.py
def inc(x:int)->int:
    return x+1

if  __name__ == '__main__':
    print(inc(3))
    print(inc('4'))
~ $ mypy typehint.py
typehint.py:6: error: Argument 1 to "inc" has incompatible type "str"; expected "int"

Ono to funguje i bez explicitní deklarace typů:
Kód: [Vybrat]
def inc(x):
    return 1 + x

if __name__ == "__main__":
    print(inc(3))
    print(inc('4'))
Kód: [Vybrat]
4
Traceback (most recent call last):
  File "inc.py", line 9, in <module>
    print(inc('4'))
  File "inc.py", line 5, in inc
    return 1 + x
TypeError: unsupported operand type(s) for +: 'int' and 'str'

Re:Co si myslíte o OOP?
« Odpověď #805 kdy: 09. 01. 2019, 15:41:22 »
Timhle muzes ukazat na Hindenburg a odstrelit tim myslenku na letani...
Dulezite je, ze reseni existuje a neco prinasi. A bez statickeho typovani ti fungovat nebude.
Dukaz pro toto tvrzeni?
Co se tyce Hindenburgu, nemas pravdu, ze to odstreli myslenku na letani. Stejne jako staticke typy neodstrali myslenku na programovani. Naopak to byl impulz pro vynalezani lepsiho letani, stroju tezsi nez vzduch.
To nemyslíš vážně s tím impulzem pro vynalézáním lepšího létání, že ne? Ta tragédie se stala v roce 1937. V té době už takové impulsy nebyly potřeba. Vzducholodě byly a kupodivu stále jsou (nyní zažívají určitou renesanci) poměrně okrajovou a velice speciální záležitostí, určenou pro specifické účely.

JS

Re:Co si myslíte o OOP?
« Odpověď #806 kdy: 09. 01. 2019, 15:55:43 »
Aha, takže úplně stejně to udělám, když budu chtít napsat funkci inc4096, která zvýší hodnotu o 4096?

V podstate jo, akorat pouzijes silnejsi typovy system, kde se to "funkce zvysuje o 4096" zapise v typech rovnou s konstantou 4096.

Neni to pak (co do psani) odlisne od toho, mit test, ktery overi, jestli je vystup skutecne o 4096 vyssi nez vstup.

Nicmene zatimco to prvni to donuti typechecker overit pro vsechny pripady, to druhe overi jen nektere situace. Nevyhodou prvniho pristupu ovsem je, ze nekdy to ten typechecker taky dokazat nemusi umet.

JS

Re:Co si myslíte o OOP?
« Odpověď #807 kdy: 09. 01. 2019, 16:00:27 »
Takže o čom to tu vlastne točíte? O tomto, že staticky typované jazyky sú lepšie? Iste, väčšinou sa s nimi bude robiť o niečo lepšie. Ale že dynamicky typované sú zlé, resp. úplne nefunkčné? Ani náhodou.

Myslim, ze slo o tu prvni otazku, a nikoli o tu druhou. Skoro nikdo tu netvrdil to druhe.

v

Re:Co si myslíte o OOP?
« Odpověď #808 kdy: 09. 01. 2019, 16:04:36 »
Aha, takže úplně stejně to udělám, když budu chtít napsat funkci inc4096, která zvýší hodnotu o 4096?

V podstate jo, akorat pouzijes silnejsi typovy system, kde se to "funkce zvysuje o 4096" zapise v typech rovnou s konstantou 4096.

Neni to pak (co do psani) odlisne od toho, mit test, ktery overi, jestli je vystup skutecne o 4096 vyssi nez vstup.
nebo se přidá pár type families a napíše se třeba
Kód: [Vybrat]
Nat' n -> Nat' (Plus (Exp (S (S Z)) (S (S (S (S (S (S (S (S (S (S (S (S Z))))))))))))) n)hnus, ale taky úplně umělý příklad

Kit

Re:Co si myslíte o OOP?
« Odpověď #809 kdy: 09. 01. 2019, 16:16:23 »
Aha, takže úplně stejně to udělám, když budu chtít napsat funkci inc4096, která zvýší hodnotu o 4096?
V podstate jo, akorat pouzijes silnejsi typovy system, kde se to "funkce zvysuje o 4096" zapise v typech rovnou s konstantou 4096.

Neni to pak (co do psani) odlisne od toho, mit test, ktery overi, jestli je vystup skutecne o 4096 vyssi nez vstup.
nebo se přidá pár type families a napíše se třeba
Kód: [Vybrat]
Nat' n -> Nat' (Plus (Exp (S (S Z)) (S (S (S (S (S (S (S (S (S (S (S (S Z))))))))))))) n)hnus, ale taky úplně umělý příklad

A co třeba kdybych chtěl funkci inc1234567, která bude přidávat 1234567? To budu zase vymýšlet podobnou bejkárnu?