Jak validovat DTO v dynamicky typovaném jazyce?

BoneFlute

  • *****
  • 1 987
    • Zobrazit profil
Re:Jak validovat DTO v dynamicky typovaném jazyce?
« Odpověď #75 kdy: 25. 01. 2022, 16:56:24 »
Ale Idris tady tvrdil, že než statické verzus dynamické, to je mnohem zásadnějším rozdílem silné verzus slabé. […]
Tak jak teda?
Je teda silné verzus slabé "jen" o vhodném/nevhodném samo konvertování, nebo je v tom víc?
Evidentně jsem měl na mysli jinou definici silné vs. slabé (je jich několik a žádná “závazná”). Já mám zažitou tu o typovém runtimu.
Můžeš to ještě jednou, pro pořádek, shrnout?


zvlášť když se někdo odmítá bavit o C/C++ :)
To skutečně odmítám.


Pokud je tohle jen "programátorský prožitek", tak se všechny výpočetně úplné jazyky liší jen v tom prožitku. Ty kategorie silný/slabý jsou samozřejmě neostré, ale to je jakákoliv klasifikace.

Jestli je důležitější rozdíl silný/slabý nebo statický/dynamický netuším. Obojí přináší dost znatelné důsledky. A ano, esence toho slabého typování jsou IMO ty automatické konverze.
Já nemám absolutně nic proti tomu sprostě řvát na autory jazyků, aby je dělali s maximálním uživatelským prožitkem = bez automatické konverze.

A ano, esence toho slabého typování jsou IMO ty automatické konverze.
Děkuji za odpověď. Budu tě nadále všude citovat ;-)


Ink

  • *****
  • 670
    • Zobrazit profil
    • E-mail
Re:Jak validovat DTO v dynamicky typovaném jazyce?
« Odpověď #76 kdy: 25. 01. 2022, 17:05:22 »
Mohl bych třeba namítnout, že tyhle věci by programátor nějak obsáhnout mohl a že ta taxonomie se nějak dělat musela. Co mi přijde ale zásadnější, je že bool by se do této situace v rozumně psaném kódu neměl nikdy dostat - už podle názvů proměnných by mělo být jasné, co je číslo (počet) a co je bool.
Tahle situace nastane úplně hravě. Stačí třeba omylem přehodit parametry funkce o pár úrovní zanoření výš. V dynamicky typovaném jazyce z názvu parametru nezjistím, co je uvnitř, protože to přišlo zvenku. Slabé typování k tomu  pak přidá bonusové WTF, kdy taková situace neskončí chybou ani v runtime, ale tichou a nenápadnou konverzí na totální nesmysl.

Tohle je ale obecný problém. Mám tři parametry typu int, prohodím je a sčítám hrušky s jablky. Jak píše Idris, type alias s nutností explicitního castu tohle celkem řeší, pokud ovšem všechny tři parametry nejsou typu "cena v Kč"...

Úplně stejně blbá situace v Pythonu (a jiných jazycích) nastane, když se číselná konstanta z jedné množiny pošle do proměnné, kde má být jiná množina povolených konstant. A enum to taky nezachrání, to by se k němu musel Python chovat jinak.

Idris

  • *****
  • 2 286
    • Zobrazit profil
    • E-mail
Re:Jak validovat DTO v dynamicky typovaném jazyce?
« Odpověď #77 kdy: 25. 01. 2022, 17:11:29 »
Evidentně jsem měl na mysli jinou definici silné vs. slabé (je jich několik a žádná “závazná”). Já mám zažitou tu o typovém runtimu.
Můžeš to ještě jednou, pro pořádek, shrnout?
Vyšel jsem z té přísnější definice, že slabě typovaný je jazyk, který za běhu vůbec na typy nehledí a špatné explicitní přetypování vede do pekel (segfault nebo tak něco).

Pokud upřednostňuješ tu definici s implicitním přetypováním — proti gustu žádný dišputát — bude ale slabě typované například C#. Prostě můžu sčítat hrušky s jabkama tím, že z hrušky udělám jabko, ale k tomu musím vědět, že jde o hrušku, a ne třeba bagr.

Je trochu nešťastné, že obě tato dělení mají tak zmatenou terminologii, ale rozhodně to je zajímavé téma.

Idris

  • *****
  • 2 286
    • Zobrazit profil
    • E-mail
Re:Jak validovat DTO v dynamicky typovaném jazyce?
« Odpověď #78 kdy: 25. 01. 2022, 17:13:39 »
Tohle je ale obecný problém. Mám tři parametry typu int, prohodím je a sčítám hrušky s jablky.
Proto se mi líbí jazyky s pojmenovanými argumenty funkcí (kde je jméno součástí signatury).

Re:Jak validovat DTO v dynamicky typovaném jazyce?
« Odpověď #79 kdy: 25. 01. 2022, 17:25:52 »
Tak spousta věcí už dnes jde dobře i v tom Pythonu ošetřit. Třeba zmiňovaný problém s parametry funkce (např. 2-krát int) ve skutečnosti málo kdy nastává. Většinou to jsou dva jiné typy např. váha, výška. Pro to se dá v Pythonu udělat buď alespoň typový alias nebo zcela nový typ (namedtuple, dataclasses atd). Jednoduché, ale přesto se to musí pořád někde připomínat, protože maintreamové jazyky jako Java a dnes už i Python k tomu přirozeně nevedou. Ostatně celý Domain Driven Design se mnohem lépe implementuje např. v F# než v C# nebo dokonce Idris https://github.com/andorp/order-taking :D (zdravím Idrise)

Jinak souhlasím, že silné/slabé typování je sice dosti vágní rozdělení, ale mnohem důležitější než dynamické/statické.
Spousta dynamických jazyků se dá nějak staticky zkontrolovat, pokud k tomu mají aspoň nějak zpracvaný typový aparát.

“Dynamic typing is but a special case of static typing, one
that limits, rather than liberates, one that shuts down
opportunities, rather than opening up new vistas. Need I
say it?” — Bob Harper
« Poslední změna: 25. 01. 2022, 17:33:13 od uetoyo »


BoneFlute

  • *****
  • 1 987
    • Zobrazit profil
Re:Jak validovat DTO v dynamicky typovaném jazyce?
« Odpověď #80 kdy: 25. 01. 2022, 17:27:03 »
Evidentně jsem měl na mysli jinou definici silné vs. slabé (je jich několik a žádná “závazná”). Já mám zažitou tu o typovém runtimu.
Můžeš to ještě jednou, pro pořádek, shrnout?
Vyšel jsem z té přísnější definice, že slabě typovaný je jazyk, který za běhu vůbec na typy nehledí a špatné explicitní přetypování vede do pekel (segfault nebo tak něco).
Jak jsem ukazoval, to i taková Java ignoruje deklarované typy. A jak jsem se pokoušel vyjádřit, při běhu už je všechno jedno. To už se jenom modlíš.


Pokud upřednostňuješ tu definici s implicitním přetypováním — proti gustu žádný dišputát —
A já měl pocit, že jsem se vyjádřil tak jasně: pro mě dělení na slabě a silně typované je pod mojí rozlišovací schopnost. Pokud není jazyk staticky typovaný, žádné další buzzwordy ho už nezachrání.

Re:Jak validovat DTO v dynamicky typovaném jazyce?
« Odpověď #81 kdy: 25. 01. 2022, 17:40:40 »
Tohle je ale obecný problém. Mám tři parametry typu int, prohodím je a sčítám hrušky s jablky.
Proto se mi líbí jazyky s pojmenovanými argumenty funkcí (kde je jméno součástí signatury).

Třeba v Pythonu se vždy snažím je uvádět i při volání. Je to jeden ze způsobů jak se vyhnout problémům.
 

Idris

  • *****
  • 2 286
    • Zobrazit profil
    • E-mail
Re:Jak validovat DTO v dynamicky typovaném jazyce?
« Odpověď #82 kdy: 25. 01. 2022, 17:46:41 »
Jak jsem ukazoval, to i taková Java ignoruje deklarované typy. [...] při běhu už je všechno jedno. To už se jenom modlíš.
[...] Pokud není jazyk staticky typovaný, žádné další buzzwordy ho už nezachrání.
To není pravda (a nechápu, co je na tom tak těžké k pochopení), Java, Go apod. za běhu typ kontrulují a chybně typované volání nebo přístup se dá odchytit (výjimka nebo zotavitelný panic). Statické typování (nebo jeho absence) tohle nijak neovlivňuje.

Idris

  • *****
  • 2 286
    • Zobrazit profil
    • E-mail
Re:Jak validovat DTO v dynamicky typovaném jazyce?
« Odpověď #83 kdy: 25. 01. 2022, 17:48:23 »
Tohle je ale obecný problém. Mám tři parametry typu int, prohodím je a sčítám hrušky s jablky.
Proto se mi líbí jazyky s pojmenovanými argumenty funkcí (kde je jméno součástí signatury).
Třeba v Pythonu se vždy snažím je uvádět i při volání. Je to jeden ze způsobů jak se vyhnout problémům.
Kéž by tohle bylo samozřejmostí (emphasis mine).

Re:Jak validovat DTO v dynamicky typovaném jazyce?
« Odpověď #84 kdy: 25. 01. 2022, 17:55:30 »
Pokud není jazyk staticky typovaný, žádné další buzzwordy ho už nezachrání.

Tak to jestli je ve "výchozím stavu" staticky/dynamicky typovaný je dle mého ne až tak podstatná věc.
Takový Erlang je velmi důležitý dynamicky typovaný jazyk, který nezvládli staticky otypovat ani Wadler a Marlow. Přímo si na tom vylámaly zuby. Přitom ten jazyk má hmatatelný výsledky co neokecáš žádnou teorií.  Ale pokud máš takovou preferenci nic proti. Jen je dobré si připomínat, že to o kvalitě jazyka to nic neříká.

Idris

  • *****
  • 2 286
    • Zobrazit profil
    • E-mail
Re:Jak validovat DTO v dynamicky typovaném jazyce?
« Odpověď #85 kdy: 25. 01. 2022, 18:01:49 »
Ostatně celý Domain Driven Design se mnohem lépe implementuje např. v F# než v C#
Zajímavé. Dík za tip na knihu.

Idris

  • *****
  • 2 286
    • Zobrazit profil
    • E-mail
Re:Jak validovat DTO v dynamicky typovaném jazyce?
« Odpověď #86 kdy: 25. 01. 2022, 18:02:52 »
Pokud není jazyk staticky typovaný, žádné další buzzwordy ho už nezachrání.
Tak to jestli je ve "výchozím stavu" staticky/dynamicky typovaný je dle mého ne až tak podstatná věc.
Pravda

Idris

  • *****
  • 2 286
    • Zobrazit profil
    • E-mail
Re:Jak validovat DTO v dynamicky typovaném jazyce?
« Odpověď #87 kdy: 25. 01. 2022, 18:15:02 »

BoneFlute

  • *****
  • 1 987
    • Zobrazit profil
Re:Jak validovat DTO v dynamicky typovaném jazyce?
« Odpověď #88 kdy: 25. 01. 2022, 23:08:29 »
Jak jsem ukazoval, to i taková Java ignoruje deklarované typy. [...] při běhu už je všechno jedno. To už se jenom modlíš.
[...] Pokud není jazyk staticky typovaný, žádné další buzzwordy ho už nezachrání.
To není pravda (a nechápu, co je na tom tak těžké k pochopení), Java, Go apod. za běhu typ kontrulují a chybně typované volání nebo přístup se dá odchytit (výjimka nebo zotavitelný panic). Statické typování (nebo jeho absence) tohle nijak neovlivňuje.
Když mi spadne aplikace na nějaké výjimce,  za běhu, u klienta, tak je mi to k prdu. (A nechápu, co je na tom tak těžkého k pochopení. :-P)

Je fajn, že to ten runtime hlídá, je super, když to mohu odchytit, a vůbec, o tom žádná. Ale je to porovnávání: typy verzus žádné typy. Nikoliv silné typování verzus slabé (protože všechny "normální" jazyky co znám jsou dle tvé definice silně typované.) A už vůbec ne dynamické verzus statické, protože dynamické v oblasti typů nic zajímavého proti statickým nepřináší. Proto na pojmu silného/slabého typování není co řešit, protože defakto ten problém neexistuje (jo, ta automatická konverze, já vím).

Pokud není jazyk staticky typovaný, žádné další buzzwordy ho už nezachrání.

Tak to jestli je ve "výchozím stavu" staticky/dynamicky typovaný je dle mého ne až tak podstatná věc.
Takový Erlang je velmi důležitý dynamicky typovaný jazyk, který nezvládli staticky otypovat ani Wadler a Marlow. Přímo si na tom vylámaly zuby. Přitom ten jazyk má hmatatelný výsledky co neokecáš žádnou teorií.  Ale pokud máš takovou preferenci nic proti. Jen je dobré si připomínat, že to o kvalitě jazyka to nic neříká.
Erlang je skvělý jazyk, a má hmatatelné výsledky. Protože je lepší mít jazyk s dynamickým typováním, než ho nemít vůbec.


Pokud není jazyk staticky typovaný, žádné další buzzwordy ho už nezachrání.
Tak to jestli je ve "výchozím stavu" staticky/dynamicky typovaný je dle mého ne až tak podstatná věc.
Pravda
Nesmysl :-D

BoneFlute

  • *****
  • 1 987
    • Zobrazit profil
Re:Jak validovat DTO v dynamicky typovaném jazyce?
« Odpověď #89 kdy: 25. 01. 2022, 23:14:01 »
Tady je skvělá definice silného/slabého typování: http://blogs.perl.org/users/ovid/2010/08/what-to-know-before-debating-type-systems.html :)
Ano. Defakto píše: nebavte se o tom, taková klasifikace je blbost. :-D Co mi to jen...