Co si myslíte o OOP?

agent

Re:Co si myslíte o OOP?
« Odpověď #450 kdy: 04. 01. 2019, 20:52:10 »
...Takze pocitam, ze soucasny trend je (velmi pomaly) postupny navrat ke statickemu typovani diky rozsireni typove inference.
A když to už někdo opravdu potřebuje dynamicky, tak třeba c# mu vychází vstříc datový typem dynamic (třeba jako parametry metod).


agent

Re:Co si myslíte o OOP?
« Odpověď #451 kdy: 04. 01. 2019, 20:54:17 »
Tedy datový typ není moc vhodné slovo v téhle souvislosti, takže dejme tomu "datový typ"  ;D

tipař

Re:Co si myslíte o OOP?
« Odpověď #452 kdy: 04. 01. 2019, 21:11:05 »
Ja to vidim podobne jako Inkvizitor - taky jsem Python zacal pouzival okolo roku 2001, a v te dobe to bylo prijemne jednodussi nez vsechno ostatni okolo. Pozdeji jsem si oblibil Common Lisp a Haskell, ale Python mi porad jde nejlepe.

Ale zacinat znovu, tak rovnou u Haskellu... jak uz jsem ti psal, s dobrou typovou inferenci se vyhoda dynamickeho typovani znacne snizuje. Takze pocitam, ze soucasny trend je (velmi pomaly) postupny navrat ke statickemu typovani diky rozsireni typove inference.
Takže když si to shrnu, dynamické typování nemá žádné principielní výhody. Jen je to zkrátka a dobře jednodužší na implementaci a naučení. Můžeme se bavit o tom, že je tu jakýsi historický balast, který si vývojáři nesou (například představa ukecanosti, představa pouze základních typů, nepochopení důsledků typové kontroly, etc) vytvářející mýtus výhod, ale jinak asi nic výraznějšího tam nebude. Souhlas?
+1

Re:Co si myslíte o OOP?
« Odpověď #453 kdy: 04. 01. 2019, 21:50:15 »
Ja to vidim podobne jako Inkvizitor - taky jsem Python zacal pouzival okolo roku 2001, a v te dobe to bylo prijemne jednodussi nez vsechno ostatni okolo. Pozdeji jsem si oblibil Common Lisp a Haskell, ale Python mi porad jde nejlepe.

Ale zacinat znovu, tak rovnou u Haskellu... jak uz jsem ti psal, s dobrou typovou inferenci se vyhoda dynamickeho typovani znacne snizuje. Takze pocitam, ze soucasny trend je (velmi pomaly) postupny navrat ke statickemu typovani diky rozsireni typove inference.
Takže když si to shrnu, dynamické typování nemá žádné principielní výhody. Jen je to zkrátka a dobře jednodužší na implementaci a naučení. Můžeme se bavit o tom, že je tu jakýsi historický balast, který si vývojáři nesou (například představa ukecanosti, představa pouze základních typů, nepochopení důsledků typové kontroly, etc) vytvářející mýtus výhod, ale jinak asi nic výraznějšího tam nebude. Souhlas?
+1

Kdyz se nam tu tedy formuje nejaky konsenzus... Tak se zeptam.
Z toho co tu ctu to vypada, ze staticke typovani (a la haskell) ma jistou evolucni vyhodu pred dynamickym.
Z dlouhodobeho hlediska muzeme tedy predokladat vymizeni dynamicky typovanych jazyku?
(at uz tim, ze se prestanou pouzivat, nebo tim, ze do nich typy proniknou)
Nejake odhady kdy to bude?



tipař

Re:Co si myslíte o OOP?
« Odpověď #454 kdy: 04. 01. 2019, 21:55:43 »
Ja to vidim podobne jako Inkvizitor - taky jsem Python zacal pouzival okolo roku 2001, a v te dobe to bylo prijemne jednodussi nez vsechno ostatni okolo. Pozdeji jsem si oblibil Common Lisp a Haskell, ale Python mi porad jde nejlepe.

Ale zacinat znovu, tak rovnou u Haskellu... jak uz jsem ti psal, s dobrou typovou inferenci se vyhoda dynamickeho typovani znacne snizuje. Takze pocitam, ze soucasny trend je (velmi pomaly) postupny navrat ke statickemu typovani diky rozsireni typove inference.
Takže když si to shrnu, dynamické typování nemá žádné principielní výhody. Jen je to zkrátka a dobře jednodužší na implementaci a naučení. Můžeme se bavit o tom, že je tu jakýsi historický balast, který si vývojáři nesou (například představa ukecanosti, představa pouze základních typů, nepochopení důsledků typové kontroly, etc) vytvářející mýtus výhod, ale jinak asi nic výraznějšího tam nebude. Souhlas?
+1

Kdyz se nam tu tedy formuje nejaky konsenzus... Tak se zeptam.
Z toho co tu ctu to vypada, ze staticke typovani (a la haskell) ma jistou evolucni vyhodu pred dynamickym.
Z dlouhodobeho hlediska muzeme tedy predokladat vymizeni dynamicky typovanych jazyku?
(at uz tim, ze se prestanou pouzivat, nebo tim, ze do nich typy proniknou)
Nejake odhady kdy to bude?

A v čem by dělaly lopaty? Dynamicky typované jazyky jsou pro lidi, kteří ještě neumí programovat a chtějí nějak jednoduše začít.


abc

Re:Co si myslíte o OOP?
« Odpověď #455 kdy: 04. 01. 2019, 23:16:21 »
Takže když si to shrnu, dynamické typování nemá žádné principielní výhody. Jen je to zkrátka a dobře jednodužší na implementaci a naučení. Můžeme se bavit o tom, že je tu jakýsi historický balast, který si vývojáři nesou (například představa ukecanosti, představa pouze základních typů, nepochopení důsledků typové kontroly, etc) vytvářející mýtus výhod, ale jinak asi nic výraznějšího tam nebude. Souhlas?

Dynamicky typovaný jazyky si serou do huby, viz PHP. Snažíme se v něm dělat jakoby byl staticky typovanej, přitom ale nemáme featury jako přetížení, generiku a navíc dynamický typy proměnnejch a type hinty ještě k tomu snižujou výkon.

JS

Re:Co si myslíte o OOP?
« Odpověď #456 kdy: 04. 01. 2019, 23:20:59 »
Z dlouhodobeho hlediska muzeme tedy predokladat vymizeni dynamicky typovanych jazyku?
(at uz tim, ze se prestanou pouzivat, nebo tim, ze do nich typy proniknou)
Nejake odhady kdy to bude?

Muj nazor je, ze se toho nedozijes (tzn. nestane se to do 40 let  :)).  Podle me dojde k tomu, ze vznikne nova forma typove inference, ktera bude pouzivat jen typove tridy. Takze kompilator bude typy urcovat uplne sam (pripadne s nejakymi lehkymi hinty). Pak to bude v podstate jen zalezitost kompilatoru, jestli je urci behem kompilace nebo to zkompiluje s typovou kontrolou za behu - v jazyce to tak jako tak pujde zapsat i bez typu.

BaldSlattery

Re:Co si myslíte o OOP?
« Odpověď #457 kdy: 04. 01. 2019, 23:49:09 »
Z dlouhodobeho hlediska muzeme tedy predokladat vymizeni dynamicky typovanych jazyku?
(at uz tim, ze se prestanou pouzivat, nebo tim, ze do nich typy proniknou)
Nejake odhady kdy to bude?
kompilator bude typy urcovat uplne sam (pripadne s nejakymi lehkymi hinty).
Tohle už některé jazyky mají.

Kit

Re:Co si myslíte o OOP?
« Odpověď #458 kdy: 04. 01. 2019, 23:56:05 »
Dynamicky typovaný jazyky si serou do huby, viz PHP. Snažíme se v něm dělat jakoby byl staticky typovanej, přitom ale nemáme featury jako přetížení, generiku a navíc dynamický typy proměnnejch a type hinty ještě k tomu snižujou výkon.

V PHP přetěžování nechybí, to sis asi s něčím spletl. K čemu generika, když si mohu strom poskládat z čehokoli? Typehinty vůbec používat nemusíš. Kde je problém?

Blbec

Re:Co si myslíte o OOP?
« Odpověď #459 kdy: 05. 01. 2019, 00:47:26 »
Jako starý Pythonista...
Mohu tě požádat o odpověď na mou otázku?

Důvody pro použití dynamických typů:
1. za běhu měnitelný systém (znám jen Erlang)
2. prototypování (takové to, když potřebuješ jen něco zkusit, a upřesňovat to budeš pozdějc)
3. neumím, nebo jazyk neumí typy

Doplníš další? (Kromě těchto scénářů nevím o ničem, kdy by netypování (př. dynamické typování) bylo užitečné.)

4. pripady, kdy staticky typovy system je prilis prisny a nepovoli preklad programu, ktery by dynamicky jazyk v pohode zvladnul a navic je takovy program lidsky intuitivni
Jediné co se mi vybavilo jsou IO monády v Haskellu. Jinak mě nenapadá, kdy by měl být typový systém příliš přísný. A i u těch IO monádách je to vlastně lepší, než bez toho.

Přijde mi to jako kombinace 2ky a neznalosti.

Chlape, ty si nejdřív něco nastuduj o typových systémech, než budeš rozdávat pravdy.
Existujou validní programy, který statickej jazyk neuzná. Žádnej statickej typovej systém nebude nikdy dostatečně silnej na to, aby uznal všechny validní programy - viz Godelovy věty o nekompletnosti.

http://logan.tw/posts/2014/11/12/soundness-and-completeness-of-the-type-system/

BoneFlute

  • *****
  • 1 987
    • Zobrazit profil
Re:Co si myslíte o OOP?
« Odpověď #460 kdy: 05. 01. 2019, 02:18:52 »
Chlape, ty si nejdřív něco nastuduj o typových systémech, než budeš rozdávat pravdy.
Existujou validní programy, který statickej jazyk neuzná. Žádnej statickej typovej systém nebude nikdy dostatečně silnej na to, aby uznal všechny validní programy - viz Godelovy věty o nekompletnosti.

http://logan.tw/posts/2014/11/12/soundness-and-completeness-of-the-type-system/

Opět, Přijde mi to jako kombinace 2ky a neznalosti. Samozřejmě, že tento problém existuje, a statické jazyky si s ním umějí poradit.

JS

Re:Co si myslíte o OOP?
« Odpověď #461 kdy: 05. 01. 2019, 07:50:20 »
Existujou validní programy, který statickej jazyk neuzná. Žádnej statickej typovej systém nebude nikdy dostatečně silnej na to, aby uznal všechny validní programy - viz Godelovy věty o nekompletnosti.

http://logan.tw/posts/2014/11/12/soundness-and-completeness-of-the-type-system/

IMHO to je spis teoreticky problem, v praxi se to resi pridanim dodatecneho axiomu (s tim, ze se stale preferuje neuplnost pred nekorektnosti). Nevim o tom, ze by zatim nekdo potreboval vic nez "jeden" axiom, kterym je otypovani rekurzivnich typu. (Mozna se to deje kdyz prejdeme k zavislostnim typum nebo jinym typovym rozsirenim, nevim.)

Snad me nekdo doplni. Mam pocit, ze je to jako v matematice - po axiomu nekonecna a vyberu uz jsou v podstate dalsi pridavane axiomy dost exoticke a clovek je na bezne problemy nepotrebuje.

JS

Re:Co si myslíte o OOP?
« Odpověď #462 kdy: 05. 01. 2019, 07:53:39 »
Z dlouhodobeho hlediska muzeme tedy predokladat vymizeni dynamicky typovanych jazyku?
(at uz tim, ze se prestanou pouzivat, nebo tim, ze do nich typy proniknou)
Nejake odhady kdy to bude?
kompilator bude typy urcovat uplne sam (pripadne s nejakymi lehkymi hinty).
Tohle už některé jazyky mají.

Nejsem si jisty, zda myslime totez - asi by bylo lepsi uvest priklad. V Haskellu existuji pro to rozsireni, ale zatim to jeste neni uplne ono - selzou pokud vysledny typ neni implikovan jednoznacne.

UF

Re:Co si myslíte o OOP?
« Odpověď #463 kdy: 05. 01. 2019, 11:20:18 »

Kdyz se nam tu tedy formuje nejaky konsenzus... Tak se zeptam.


tady se formuje leda tak velky h0vn0

Kiwi

Re:Co si myslíte o OOP?
« Odpověď #464 kdy: 05. 01. 2019, 16:34:39 »
Obávám se, že takto statické typování nefunguje. Všechny příklady tebou naznačného spektra možností mohu řešit. A statické typování mi bude hodně pomáhat. (A nemusím to dělat ručně.)

Zkusme být konkrétní. Bylo tu uvedeno parsování JSONu. Řešil bych to určitě staticky. Rozhodování zpracování podle typu dat? Staticky. Rozhodnování podle dat - to si nejsem jist, co myslíš. Jak se mohu rozhodovat podle dat? Čeho se mohu chytnout? Můžeš uvést příklad?
Netvrdím, že to nejde. Kdyby to nešlo, tak by většina praktických problémů byla neřešitelná staticky typovanými jazyky. Jenže to, co vnímáš jako cosi, co ti bude hodně pomáhat, já často vnímám jako klacky motající se pod nohama.
Takže něco takového jako když já po milióntý prvý pouštím celou aplikaci, a píšu druhou miliardu testů, aby to pokrylo alespoň 5procent všech možnejch chyb? :-)
Toto asi už bude o pocitech, takže to nerozebírejme. Zajímají mě tedy asi spíše nějaké racionálnější argumenty.
Jaká miliarda testů? Používám jak jazyky staticky typované, tak dynamicky a nepozoruji, že by programy v těch druhých padaly nějak častěji.

Rozhodování podle dat, tím myslím IF size > 5 cm THEN ...
Rozhodování podle typu, tím myslím IF (x hasMagnitude) THEN ...
Rozhodování bez ohledu na typ, tím myslím IF x > 5 THEN ..., bez ohledu na to, co to "x" je, protože mě zajímá jen odpověď na otázku, zda "to" je větší než 5.
Rozumím. Tak první bude nějaká funkce. Druhé bude pattern matching na typ. A třetí se řeší třídou/interfacem. Viz odpověď dále.
A v dynamicky typovaném Smalltalku se to vše vyřeší jedním a tím samým mechanismem.

Viděl jsi často, že by hostinský točil pivo do papírové krabice, přestože mu v tom nic nebrání? Jistě by šlo zařídit, aby se pípa odjistila jen v případě, že pod sebou detekuje konkrétně určený značkový půllitr. Mě by popadl rapl a ta pípa by letěla na smetiště hned v okamžiku, kdy by mi odmítala pustit pivo do džbánku.
Smysl statických typů je zajistit, aby se něco takového nestalo. Když zůstaneme u přirovnání, tak ty budeš muset hostinského zaškolit, a ještě nainstalovat kameru, aby si ho sledoval, zda nečepuje pivo přímo do pusy. A stejně ho neuhlídáš. Zatímco já tam budu moct dát cedulku "samoobslužná pípa".

Každopádně ve statickém jazyce zajistím, že ta pípa se odjistí jen v případě, kdy je do čeho načepovat. Džbánek ano, papírová krabice ne.

V případě dynamických typů ten problém máš samozřejmě taky. Ale buď ho neřešíš, a doufáš, že všechno dobře dopadne. Nebo testuješ jak blbej, a pak doufáš, že všechno dobře dopadne.
Ale to je často zbytečně defenzivní přístup. Velké komplikace kvůli něčemu, čemu se dá předejít i jinak - prakticky tak, že pípu obsluhuje jedině personál k tomu kompetentní. Podobně je jednodušší namalovat na silnici plnou čáru než všude stavět svodidla.


Co je na tašce na rohlíky tak provokativního? Do datového typu rohlík dám jen rohlík a seznam rohlíků není nic jiného než taška na rohlíky. V době překladu vím, že mám datový typ, do kterého můžu naskládat jedině rohlíky. Jistě, mohu vytvořit i datový typ, do něhož jdou sázet rohlíky a housky. Ale i tuto situaci musím předvídat v době překladu.
Ano, musím to předvídat v době překladu. To je jediné, v čem máš pravdu. Jinak fakt neuvažuju, tak jak popisuješ.
Kontainer na rohlíky bych dělal v případě, kdy chci jen rohlíky. Takže to bude třeba recept na jednohubky. Protože ten dělám zásadně z rohlíků.
Ale když budu brát do krámu nějakou tašku, tak bych byl idiot se omezovat takhle, ne. Budu definovat jiná omezení. Ta, která budou užitečná.
Akorát jsi přidal nicneříkající přívlastek ke slovu "omezení", abys ho nějak ospravedlnil. Která to jsou a proč? Opět - pro mě často zbytečně restriktivní způsob myšlení.

Neznám moc jazyků, které by obsahovaly "rohlík" jako jeden ze základních typů.
Taky nás nic takového nezajímá. Doba typování ala jazyk C je naštěstí už dávno pryč.
A jaká je tedy dnes doba?

Budu-li chtít modelovat nákupní tašku, tak jako nejjednodušší případ mě napadá nějaká kolekce, třeba seznam. Ale pořád mi tu BoneFlute nevysvětlil, seznam čeho by to optimálně měl být a jakou by to mělo výhodu oproti obecné dynamicky typované kolekci.
Toho, čeho potřebuješ. To přirovnání je debilní, ale tak můžeš mít nákupní tašku na pečivo. Takže obecný typ pro pečivo. Nebo typ TuháHmota, aby si tam nečepoval to pivo. Atd.

Pak samozřejmě můžeš dojít k závěru, že nevíš, a že tam chceš dát cokoliv. Tak dáš typ *, a budeš tam moct uložit opravdu cokoliv.
A proč? Když tu kolekci využívá nějaký modul, který už má na jiném místě zajištěno, že tam přijde jen patřičný typ objektů, tak není důvod to opět někde specifikovat a kontrolovat. Dokonce to bude komplikace, když se změní protokol na vyšší úrovni. Zatímco u nespecifikovaného typu by nebylo nutné zasahovat do daného modulu vůbec, v tomto případě se tím vše úplně zbytečně rozbije.

Trošku bych to přeformuloval:
Statickej jazyk: "hele, čím víc mi řekneš podrobností předem, tím líp ti pomůžu".
Dynamickej jazyk: "hele, mě to nezajímá, cpi si tam co chceš, stejně si to budeš hlídat ty, já ti nepomůžu, ani mě nenapadne".
Naprosto v pořádku. Úplně stejně argumentují známí, kteří sympatizují s levicovými stranami. A nedokážou pochopit, když jim říkám, že nechci, aby mě stát vodil za ručičku, protože se umím vodit sám. Ale chtěl bych zdůraznit, že jsem prvotně reagoval na odpověď na Kitův komentář, v němž výslovně zmiňoval objektové jazyky. Nikdo tam po překladači nechce, aby něco takového hlídal, protože to je plně v kompetenci objektu.


- V dynamickém typování ti aplikace furt padá (ideálně na produkci), protože jsi nevychytal všechny chyby (nic ti nepomáhá).
Podobné předsudky jsem taky míval, dokud jsem v tom nezačal dělat. A, světe div se, žádné neustálé padání se nekoná. Přiznám se, že mě to samotného překvapilo, ale v dynamicky typovaných jazycích se vyvíjí trošku jinak - musíš u toho trochu změnit způsob uvažování. Ze začátku má člověk nutkání dopisovat typovou kontrolu ručně, ale to je ve skutečnosti antipattern. To platí třeba i v Pythonu (viz Idiomatic Python), ale třeba v takovém objektovém Smalltalku je to přímo do očí bijící. Prostě typová kontrola je také kompetence objektů. A ono to funguje, a velmi dobře!