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 ... 41 42 [43] 44 45 ... 133
631
Vývoj / Re:Zkušenosti s TypeScriptem
« kdy: 28. 03. 2020, 23:10:45 »
Nestalo se mi, že by mě obtěžovalo napsání Typové signatury. Zato se mi bolestně běžně stává, že mi absence typů schází. Čímž se kruhem dostáváme k tomu, že někdy to fakt záleží na preferencích. Pro někoho napsání těch několika málo typů může být stopka.
Nechápeš to. Nejde jen o to, že musíš napsat anotaci, ale že tě statické typy hrubě omezují v návrhu programu. Je to neflexibilní, a jakákoliv snaha dostat do návrhu flexibilitu je těžkopádná  a zkostnatělá. 
Ukaž příklad, jinak se o tom nemá smysl bavit.

Základní princip je, že s proměnnými pracuji abstraktně. V následujícím příkladu pracuji se třemi prvky, řádkem, elementem řádku a indexem. Proto používám tři tomu odpovídající proměnné.

Kód: [Vybrat]
>>> row = '1, 2, 3, 4, 5'
>>> row = row.split(',')
>>> row = [int(elm) for elm in row]
>>> for idx, elm in enumerate(row):
...     row[idx] = idx * elm
...
>>> print(sum(row))
40

Výborně. Konečně jsem dostal z dynamicky uvažujícího programátora konkrétní materiál.

Pokud to chápu dobře, tak tebe zásadně omezuje skutečnost, že za účelem čitelnosti kódu (tak chápu tu motivaci) potřebuješ možnost měnit typ té proměnné row. Správně? Je tam ještě něco, nebo to je všechno?

Jak zásadně omezující, nebo naopak tvé řešení výhodnější je toto:
Kód: [Vybrat]
row = '1, 2, 3, 4, 5'
   .split(',')
   .map(\i, x -> i * int(x))
print(sum(row))

632
Vývoj / Re:Zkušenosti s TypeScriptem
« kdy: 28. 03. 2020, 22:58:49 »
Jo, to je ta samá esoterika, jako když někdo neumí myslet ve scheme/haskellu, prologu nebo smalltalku, abychom vytáhli nějaké ikonické jazyky, zastupující různá paradigmata, tedy způsoby myšlení.

Ezoterika to není proto, že tak člověk musí umět myslet. Ezoterikou to nazývám proto, protože to neumíš vysvětlit.

Já to vysvětlit umím, je to záležitost způsobu myšlení. To je vysvětlení. Problém je, že to nedovedeš pochopit, protože je ti je buď cizí myšlenka, že jsou různé způsoby myšlení nebo ti nedochází důsledky. A je to platné obecně. Obecně platí, že způsob myšlení, na který jsi zvyklý a který je pro tebe proto komfortní determinuje tvé možnosti, omezuje tě.

Jak říkám, ezoterika. Úplně klasická. Nic o co by se dalo opřít. Jen spousta třpytek a nabubřelých frází.

633
Vývoj / Re:Zkušenosti s TypeScriptem
« kdy: 28. 03. 2020, 22:38:19 »
Jo, to je ta samá esoterika, jako když někdo neumí myslet ve scheme/haskellu, prologu nebo smalltalku, abychom vytáhli nějaké ikonické jazyky, zastupující různá paradigmata, tedy způsoby myšlení.

Ezoterika to není proto, že tak člověk musí umět myslet. Ezoterikou to nazývám proto, protože to neumíš vysvětlit.

Smalltalk je třeba typickej příklad jazyka, který jsem pochopil, ale který mi nesedl. Pas de problem.

Strkat Scheme do stejné kategorie jako Haskell, no...

Ani u jednoho ze zmíněných jazyků bych neměl nějaký kardinální problém vysvětlit, vo co de (netvrdím, že by mi to nějak zvlášť šlo, ale základní principy bych snad dal). Dokážeš to samé jako obhájce a evidentně zkušený a zapálený vývojář v dynamických jazycích? A budu tolerantní - pokud nebudeš šermovat vatou "to bys' nepochopil". (Ve skutečnosti by mě to opravdu zajímalo.)

634
Vývoj / Re:Zkušenosti s TypeScriptem
« kdy: 28. 03. 2020, 21:53:19 »
Nestalo se mi, že by mě obtěžovalo napsání Typové signatury. Zato se mi bolestně běžně stává, že mi absence typů schází. Čímž se kruhem dostáváme k tomu, že někdy to fakt záleží na preferencích. Pro někoho napsání těch několika málo typů může být stopka.

Nechápeš to. Nejde jen o to, že musíš napsat anotaci, ale že tě statické typy hrubě omezují v návrhu programu. Je to neflexibilní, a jakákoliv snaha dostat do návrhu flexibilitu je těžkopádná  a zkostnatělá. 

Ukaž příklad, jinak se o tom nemá smysl bavit.


A nechápeš to proto, že prostě neumíš myslet v dynamicky typovaném jazyku, neumíš myslet dynamicky. Proto ti v něm chybí statické typy, bez nich neumíš dobře programovat a naopak neumíš využít výhod jazyku dynamického.

Ezoterika, jasný.

635
Vývoj / Re:Zkušenosti s TypeScriptem
« kdy: 28. 03. 2020, 18:16:48 »
Co jsou zač ty nevýhody?
Dynamický dispatch je pomalejší.
Ech. Něco jiného než rychlost?

636
Vývoj / Re:Zkušenosti s TypeScriptem
« kdy: 28. 03. 2020, 17:43:03 »
plně automatická inference existuje, a používá se například u Javascriptu (pravděpodobně nejen). Ten vezme ten kód, celej se přeloží do nějaké té interní reprezentace, všechny typy se zahodí, a podle logiky toho kódu se vymyslí nové.
V tom žádná inference není.

Samozřejmě. Protože všechno je plně automatické :-)

Jinak ten problém s kovariantním polem hezky ukazuje, kde se dynamický runtime hodí. Typová kontrola v tomto případě ověří přiřazení a za běhu program nepadne. Je to vykoupeno nevýhodami jinde, ale jako příklad hezké.

V tomto se neshodnem. Respektive se mi zdá, že si každý pod pojmem dynamický/statický představujeme něco jiného.

Co jsou zač ty nevýhody?

637
Vývoj / Re:Zkušenosti s TypeScriptem
« kdy: 28. 03. 2020, 14:35:39 »
Zajímalo by mě, kde se reálně využije dynamičnost kódu? Z integer je kdesi v kódu najednou string a na základě toho se program větví jinak nebo co? Mě neskutečně irituje, že jsem některé projekty v php nepředělal na striktní typy, protože se pak všude musí dělat harakiry, aby se mi int porovnával opravdu jako int. Na chybu se pak přijde třeba za rok nebo vůbec.

Je to vývoj. V době, kdy psát typy byl neskutečný opruz, byly jazyky jako Python živá voda. Pak se v mainstreamu objevila typová inference a dobré vlastnosti z Pythonu a dalších jazyků a naopak Python umožňuje typy psát a kontrolovat pomocí statické analýzy. Na druhou stranu si nedělejme iluze, že kontrola v době kompilace nebo nějaký linter objeví všechny chyby a některé nebudou na vhodnou chvíli čekat i ten rok.

V dynamických jazycích lze psát poměrně robustní kód i bez typových anotací, ale je to náročnější na code review a chce to cvik. Ty anotace se budou určitě ve větších projektech používat víc a víc.

Dále, napsat jazyk bez statických typů je mnohem jednodužší (krásný příklad budiž Lua, kde díky tomu, že typy hodili na bedra uživatelů, tak mohli zkrouhnout jazyk a engine do fantasticky malé libky). Kvalitní typy jsou další svět sám pro sebe, a aby to bylo užitečné,  tak tomu dotyční, kteří jazyk vymejšlejí musí rozumět. Což není samozřejmé, a navíc se to historicky taky vyvíjí.

638
Vývoj / Re:Zkušenosti s TypeScriptem
« kdy: 28. 03. 2020, 14:28:57 »
To je pravda, ale s tou výhradou, že plně automatickou inferenci udělat nelze.
Ještě takové drobné pošťouchnutí. Pokud bychom to vzaly trochu obecněji, tak plně automatická inference existuje, a používá se například u Javascriptu (pravděpodobně nejen). Ten vezme ten kód, celej se přeloží do nějaké té interní reprezentace, všechny typy se zahodí, a podle logiky toho kódu se vymyslí nové.

639
Vývoj / Re:Zkušenosti s TypeScriptem
« kdy: 28. 03. 2020, 14:21:09 »
Samozřejmě. Znamenalo by to, že si pouze myslíte, že jste odstranil 100 % (všimněte si mezery za číslem) chyb, ale ve skutečnosti vám jich tam ještě 50 % (opět si všimněte mezery za číslem) zůstalo.
V tom případě 50% nalezených chyb v době kompilace je super, a beru to.

Výborně. Tak teď, když už víme, že nám typová kontrola (zdaleka) nepochytá všechny chyby, je na čase zvážit, zda se nám vyplatí ji na chytání chyb zavádět a zvyšovat tím složitost kódu a snižovat jeho dynamičnost a obecnost.
Neřešte to znovu, už se to tu řešilo, a zjistilo se, že každý soudruh to má jinak. Věnujte se místo toho raději pravopisu, ten by naopak měl mít každý soudruh stejný (= dle pravidel).
Nutno ale podotknout, že v dnešní době chytrých jazyků s typovou inferencí už typová kontrola přináší jen benefity (žádné zvyšování složitosti kódu ani snižování dynamičnosti či obecnosti se již nekoná).
To je pravda, ale s tou výhradou, že plně automatickou inferenci udělat nelze.

Nestalo se mi, že by mě obtěžovalo napsání Typové signatury. Zato se mi bolestně běžně stává, že mi absence typů schází. Čímž se kruhem dostáváme k tomu, že někdy to fakt záleží na preferencích. Pro někoho napsání těch několika málo typů může být stopka.

640
Vývoj / Re:Zkušenosti s TypeScriptem
« kdy: 27. 03. 2020, 20:05:17 »
Samozřejmě. Znamenalo by to, že si pouze myslíte, že jste odstranil 100 % (všimněte si mezery za číslem) chyb, ale ve skutečnosti vám jich tam ještě 50 % (opět si všimněte mezery za číslem) zůstalo.
V tom případě 50% nalezených chyb v době kompilace je super, a beru to.

Výborně. Tak teď, když už víme, že nám typová kontrola (zdaleka) nepochytá všechny chyby, je na čase zvážit, zda se nám vyplatí ji na chytání chyb zavádět a zvyšovat tím složitost kódu a snižovat jeho dynamičnost a obecnost.
Neřešte to znovu, už se to tu řešilo, a zjistilo se, že každý soudruh to má jinak. Věnujte se místo toho raději pravopisu, ten by naopak měl mít každý soudruh stejný (= dle pravidel).

Jak říkáš, některé věci jsou otázkou každého soudruha.

Nutno ale podotknout, že v dnešní době chytrých jazyků s typovou inferencí už typová kontrola přináší jen benefity (žádné zvyšování složitosti kódu ani snižování dynamičnosti či obecnosti se již nekoná).

641
Vývoj / Re:Zkušenosti s TypeScriptem
« kdy: 27. 03. 2020, 19:05:30 »
...Ja preferuji silněji typovaná prostředí - chyby jsou nalezeny již v době kompilace...

Nechtěl jste napsat „některé chyby“?
A kdyby to bylo 50% všech chyb? Měnilo by to význam?

Samozřejmě. Znamenalo by to, že si pouze myslíte, že jste odstranil 100 % (všimněte si mezery za číslem) chyb, ale ve skutečnosti vám jich tam ještě 50 % (opět si všimněte mezery za číslem) zůstalo.
V tom případě 50% nalezených chyb v době kompilace je super, a beru to.
50% je paráda, ovšem tedy za předpokladu nekryptických chybových hlášek. Ale už i překladače C++ se polepšily.

Rust má chybovky příkladný, řekl bych. Z čehož vyvozuji, že to jde :-)

642
Vývoj / Re:Zkušenosti s TypeScriptem
« kdy: 26. 03. 2020, 21:38:08 »
...Ja preferuji silněji typovaná prostředí - chyby jsou nalezeny již v době kompilace...

Nechtěl jste napsat „některé chyby“?
A kdyby to bylo 50% všech chyb? Měnilo by to význam?

Samozřejmě. Znamenalo by to, že si pouze myslíte, že jste odstranil 100 % (všimněte si mezery za číslem) chyb, ale ve skutečnosti vám jich tam ještě 50 % (opět si všimněte mezery za číslem) zůstalo.
V tom případě 50% nalezených chyb v době kompilace je super, a beru to.

643
Vývoj / Re:Doporučte programovací jazyk pro Windows
« kdy: 26. 03. 2020, 01:36:19 »
Tenhle hnus je nějaká forma unique nebo distinct?

.filter((num, index, nums) => nums.indexOf(num) == index)

Ano, to je unique, a neni to Lua, ale Javascript - to je takovy ten jazyk, ktery brzo prevalcuje Python, a ktera ma dneska spousta Javistu v zaloze :D

Tvl tady Pythonisti ani neznaji monady, a pritom my to v Jave pouzivame uz od verze 1.8  8)
Tydlencty "monady" mame v Pythonu odjakziva.
Monády jsou pro malé děti, pro profíka jsou triády.
Počkej, počkej, já jsem zatím teprve u diád... Takhle ty profíky nikdy nedoženu. Kruci, zatr, krám!

644
Vývoj / Re:Zkušenosti s TypeScriptem
« kdy: 26. 03. 2020, 01:34:23 »
Mně vždy přišlo, že pokud se použije typová inference, tak se zdrojový kód staticky typovaný neliší od dynamicky typovaného. Některé jazyky to neumožňují u všech deklarací, ale teoreticky to jde a třeba v C++ už jde psát bez explicitních typů (s plnou kontrolou při překladu).

Může být.

Když si vybavím kód v Javascriptu, Pythonu - tak vidím jiný druh práce s kódem, než třeba v Haskellu. Haskell sice má typovou inferenci, takže je ukecanej stejně málo jako Python, ale ty typy tam cítíš. Opíráš se o ně. Stavíš na nich. To mi v Pythonu nebo Javascriptu nepřijde. Tam typy, respektive třídy používáš jako konstrukční nástroje, kdy dědíš (a mixuješ) do bezvědomí.

Další věc je, ale to už je dost specialita statického typování - tak u Haskellu máš "buď a nebo". Ten kód je takovej jakože ultimátní. Když do toho pustíš data, tak ti to buď správně sežere, nebo ti to vyhodí chybu. U Pythonu je to větší sázka do loterie.  Ale to je asi známá věc.

PS:
Mluvím o kódu, se kterým přicházím do styku. Samozřejmě pak ještě záleží na rukou.

645
Vývoj / Re:Zkušenosti s TypeScriptem
« kdy: 25. 03. 2020, 19:36:35 »
Osobně mám zkušenost, že Typy nutí uvažovat konkrétním způsobem
To mě zaujalo. Jakým? Případně jaké typy, primitivní, generické, závislostní...? Že odchytnou většinu chyb je jasné, ale to specifické uvažování mě zajímá.

To sem si zase naběh'.

Nemám to tak promyšlené, takže prosím o shovívavost.

Když nemám typy, tak pracuju s chlívečkama. Sem dej tohle číslo, pak hoď sem, tam se s ním bude počítat. Vzniká kód ve stylu:
Kód: [Vybrat]
foo.title = "Mr"
if foo.sex:
  foo.title = "Ms"
foo.title += ": "
foo.title += name
foo.title += " "
foo.title += surname

Když mám typy, alespoň takové ty hodně blbé aka Java, C#, tak bude tendence to někam uklízet. Ale moc to nefunguje.

Když se přitlačí s imutabilitou, tak začne víc dekompozice na stromeček:
Kód: [Vybrat]
Foo(buildName(src1, src2), buildSurname(src1, src4))

když nemohu přetěžovat funkce/metody, tak píšu hodně switch:
Kód: [Vybrat]
function renderAny(x):
  switch (type(x)):
     case "Application":
       return renderApplication(x)
     case "Window"
       return renderWindow(x)
     default:
        error()

Pokud mám k dispozici imutabilitu, statické typování tak mám tendenci to stavět jako kompozici funkcí. (Pokud ne, tak taky, ale protože jsem už ovlivněnej.) Opírám se o to, že mi sem přijde typ Person. Zatímco když nemám typy, tak počítám s tím, že mi sem přijde struktura obsahující name, surname. S typem Person nemohu to co se strukturou.

Když mi přijde třída Renderable tak jí renderuju. Protože tak nějak uvažuju, že ty záruky se vztahují jen na Renderování. Zatímco když mám funkci render přijímající sturkturu, tak renderuju tu strukturu. A přirozeně i něco vypočítám navíc, něco si odložím, něco vytáhnu pokoutně...

Asi to nebude všechno, jen prvotní co mě napadlo.

Stran: 1 ... 41 42 [43] 44 45 ... 133