Co si myslíte o OOP?

v

Re:Co si myslíte o OOP?
« Odpověď #810 kdy: 09. 01. 2019, 16:17:55 »
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?
jestli potřebujete funkci inc1234567 tak dobře vám tak


lopatka

Re:Co si myslíte o OOP?
« Odpověď #811 kdy: 09. 01. 2019, 17:03:30 »
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.

Skoro nikto, ale niekto predsa. Navyše, otázka znie "čo si myslíte o oop". Až to tu skôr "skoro nikto" nerieši, miesto toho je tu ďalší flame ako ide s dynamicky typovaným jazykom dosiahnuť to isté, ako so staticky typovaným. Čo je v samom princípe nezmysel a zbytočnosť, nejde proste s dynamicky typovaným dosiahnuť navlas to isté, čo so staticky typovaným. A ani naopak, to isté so staticky, ako s dynamickým. A že tu našli nejaké podobnosti? No iste, a naprosto očakávane, to však ani len nemá zmysel riešiť.

Proste debata s niekoľko sto príspevkami a drvivá väčšina odveci, s nulovou praktickou hodnotou. Proste super...

operator

Re:Co si myslíte o OOP?
« Odpověď #812 kdy: 09. 01. 2019, 18:54:31 »
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.
Už před nehodou Hindenburgu došlo k řadě nehod vzducholodí, většinou způsobených špatným počasím. Žádná vážnější nehoda se však netýkala Zeppelinů, ty držely pozoruhodný rekord v bezpečnosti letecké dopravy; např. Graf Zeppelin bezpečně nalétal více než 1,6 miliónu kilometrů, mj. i první úplný oblet zeměkoule a dopravila 12000 pasažérů. Firma Zeppelin hrdě zdůrazňovala, že na jejích vzducholodích se nikdy nezranil jediný pasažér.

Katastrofa Hindenburgu to zcela změnila. Efektní filmové záběry a vzrušený rozhlasový komentář přímo z místa neštěstí zcela zničily důvěru veřejnosti ve vzducholodě. Taková negativní publicita znamenala konec Zeppelinů a dopravy prostřednictvím ohromných vzducholodí vůbec. Sesterský stroj Hindenburgu Graf Zeppelin II létal ještě dva roky na výzvědné a propagační lety, ale to už byla jen labutí píseň, ukončená začátkem 2. světové války.

Zdroj wikipedia.

Nehoda teto nejvetsi vzducholode a spousta obeti natrvalo zmenila letecky prumysl. Do vzducholodi se prestalo investovat.

operator

Re:Co si myslíte o OOP?
« Odpověď #813 kdy: 09. 01. 2019, 18:59:46 »
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í.
Na vyvoj mam pocitac, ale vzhledem k citlivosti nekterych zakazek s ohledem na kybernetickou bezpecnost si tam nemohu stahovat a instalovat kdejaky brak z netu. Na hrani si mi plne staci tablet.

operator

Re:Co si myslíte o OOP?
« Odpověď #814 kdy: 09. 01. 2019, 19:02:25 »
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í.
:-)) Ohledne moznosti zneuznaneho a neuspesneho haskellu mi muzes veset buliky na nos, ohledne bezne pouzivanych jazyku v komercni sfere nikoliv.


operator

Re:Co si myslíte o OOP?
« Odpověď #815 kdy: 09. 01. 2019, 19:05:22 »
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.
Tim ze jsem vyvratil vase tvrzeni, ze typova kontrola pred spustenim programu je domenou statickych typu? :-)

operator

Re:Co si myslíte o OOP?
« Odpověď #816 kdy: 09. 01. 2019, 19:14:57 »
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'
To co ukazujes ty je dynamicka kontrola za chodu programu, to co ukazuji ja je kontrola pred spustenim. Program mypy je type checker. Nainstaluj si ho prikazem 'python -m pip install -U mypy'

Rozdil poznas, kdyz kod upravis na

Kód: [Vybrat]
def inc(x:int)->int:
    return x+1

if  __name__ == '__main__':
    print(inc(3))
    if  False:
        print(inc('4'))

Kit

Re:Co si myslíte o OOP?
« Odpověď #817 kdy: 09. 01. 2019, 19:32:10 »
To co ukazujes ty je dynamicka kontrola za chodu programu, to co ukazuji ja je kontrola pred spustenim. Program mypy je type checker. Nainstaluj si ho prikazem 'python -m pip install -U mypy'

Rozdil poznas, kdyz kod upravis na

Kód: [Vybrat]
def inc(x:int)->int:
    return x+1

if  __name__ == '__main__':
    print(inc(3))
    if  False:
        print(inc('4'))

V tom případě by mělo fungovat i tohle:
Kód: [Vybrat]
def inc(x:int)->int:
    return x+1

if False:
    print(inc(3))
    print(inc('4'))

Re:Co si myslíte o OOP?
« Odpověď #818 kdy: 09. 01. 2019, 19:57:10 »
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.
Tim ze jsem vyvratil vase tvrzeni, ze typova kontrola pred spustenim programu je domenou statickych typu? :-)

Myslis, ze muzes porad mluvit to dynamickem jazyku kdyz pouzijes staticky type checker?

operator

Re:Co si myslíte o OOP?
« Odpověď #819 kdy: 09. 01. 2019, 20:04:02 »
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.
Jedna se o naprosto primitivni funkci. Predstav si implementaci neceho slozitejsiho, treba md5(). Jak si typem overis vsechny pripady? Nebo jak si overis vsechny pripady u formatmonth() z calendar?
Kód: [Vybrat]
>>> import calendar
>>> print(calendar.LocaleTextCalendar().formatmonth(2019, 2))
   February 2019
Mo Tu We Th Fr Sa Su
             1  2  3
 4  5  6  7  8  9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28
A to jsme jeste porad u jednoduchych veci. Ted si predstav, ze mas overovat spravnost sloziteho vystupu typu webova stranka, video nebo hudebni skladba.

operator

Re:Co si myslíte o OOP?
« Odpověď #820 kdy: 09. 01. 2019, 20:06:22 »
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?
jestli potřebujete funkci inc1234567 tak dobře vám tak
Tohle uz ma jiny principialni problem. Ten typ je radove slozitejsi nez sama funkce, takze je tu otazka, kdo bude kontrolovat spravnost zapisu typu :-).

operator

Re:Co si myslíte o OOP?
« Odpověď #821 kdy: 09. 01. 2019, 20:12:55 »
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.
Tim ze jsem vyvratil vase tvrzeni, ze typova kontrola pred spustenim programu je domenou statickych typu? :-)

Myslis, ze muzes porad mluvit to dynamickem jazyku kdyz pouzijes staticky type checker?
Jiste, protoze vyrazy se porad vyhodnocuji az za chodu programu a typy jsou svazane s hodnotami. Nebo si myslis, ze python je staticky jazyk? Interpret pythonu zustava naprosto stejny a type hinty ignoruje, jsou vyhrazeny pro externi nastroje.  Uz se blizite k pochopeni toho, co jsou ve skutecnosti staticke typy a ze jim prisuzujete vlastnosti, ktere jim nejsou vlastni a lze jich dosahnout alternativne.

Kit

Re:Co si myslíte o OOP?
« Odpověď #822 kdy: 09. 01. 2019, 20:25:10 »
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?
jestli potřebujete funkci inc1234567 tak dobře vám tak
Tohle uz ma jiny principialni problem. Ten typ je radove slozitejsi nez sama funkce, takze je tu otazka, kdo bude kontrolovat spravnost zapisu typu :-).

Mělo to jiný principiální problém už pro funkci inc5. Nenapadlo mě, že na to někdo 5× použije (S n) nebo ještě hroznější zápis.

v

Re:Co si myslíte o OOP?
« Odpověď #823 kdy: 09. 01. 2019, 20:30:22 »
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?
jestli potřebujete funkci inc1234567 tak dobře vám tak
Tohle uz ma jiny principialni problem. Ten typ je radove slozitejsi nez sama funkce, takze je tu otazka, kdo bude kontrolovat spravnost zapisu typu :-).
haskell není jazyk s nejpokročilejším typovým systémem, ale je hodně rozšířený a ma jiné výhody
pro srovnání idris:
Kód: [Vybrat]
inc : (n : Nat) -> (m : Nat ** m = n + 1)
inc n = (n + 1 ** Refl)
přírůstek můžete přepsat podle potřeby, pokud se liší v typu a těle, neprojde typecheckerem

Re:Co si myslíte o OOP?
« Odpověď #824 kdy: 09. 01. 2019, 20:41:22 »
pro srovnání idris:
Kód: [Vybrat]
inc : (n : Nat) -> (m : Nat ** m = n + 1)
inc n = (n + 1 ** Refl)
přírůstek můžete přepsat podle potřeby, pokud se liší v typu a těle, neprojde typecheckerem
Pripomnel jsi mi, ze jsem se chtel - az budu mit nekdy trochu vic casu na ptakoviny* - na nejaky jazyk s dependent types podivat. Idris je horky kandidat. Pouzival jsi ho nekdy trochu vic? Doporucil bys ho na hrani nebo radsi neco jinyho?

* takze nejspis nejdriv tak v duchodu