Fórum Root.cz

Hlavní témata => Vývoj => Téma založeno: registrovany123 23. 01. 2022, 09:47:22

Název: Jak validovat DTO v dynamicky typovaném jazyce?
Přispěvatel: registrovany123 23. 01. 2022, 09:47:22
Rekneme, ze treba v Javascriptu budu vyrabet endpoint:

POST localhost:8080/order
accept: Application/Json

A rekneme, ze kdyz uz pouzivam na danou vec Javascript a ne nejaky staticky typovany jazyk, abych si ulehcil praci, tak nepouziju Relacni Databazi ale treba MongoDB, abych si jeste vic ulehcil praci.

Takze mi webova stranka vyrobi JSON Order a posle mi ho do endpointu localhost:8080/order, kde ja ho nejak zvaliduju a potom tak jak je ulozim do MongoDB.

Jenze. Opravte me jestli se mylim, ale ja budu muset zvalidovat pritomnost a delku kazdeho jednoho fieldu tak, jako by to pro me udelalo napr. preddefinovane DTO v Jave a preddefinovana tabulka v Relacni databazi. Protoze jinak by mohl nejaky hacker do endpointu order poslat 100gb nesmyslu a zahltit mi databazi.

Takze kdyz jsem si chtel na zacatku ulehcit praci a pouzit dynamicky typovany jazyk a MongoDB, tak nakonec budu muset stejne delat to, co by pro me delal staticky typovany jazyk a Relacni databaze k tomu.

Nebo mi neco nedochazi?
Název: Re:Jak validovat DTO v dynamicky typovanem jazyce?
Přispěvatel: alex6bbc 23. 01. 2022, 10:02:17
tak napriklad mongodb ma maximalni velikost jednoho zaznamu 16 mb a klic je maximalne 1024 bajtu.
treba by sly nastavit i vlastni limity a pak by db vracela chybu pri prekroceni velikosti?

co pouzit nejakou knihovnu na validaci jsonu, napr. rychle jsem nasel https://github.com/ajv-validator/ajv ?!
Název: Re:Jak validovat DTO v dynamicky typovanem jazyce?
Přispěvatel: registrovany123 23. 01. 2022, 10:06:38
tak napriklad mongodb ma maximalni velikost jednoho zaznamu 16 mb a klic je maximalne 1024 bajtu.
treba by sly nastavit i vlastni limity a pak by db vracela chybu pri prekroceni velikosti?

co pouzit nejakou knihovnu na validaci jsonu, napr. rychle jsem nasel https://github.com/ajv-validator/ajv ?!

Ty jsi nepochopil muj dotaz. Proc bych mel pouzivat validaci jsonu pomoci napr onoho ajv-validator, ktery me nuti definovat json schema, kdyz si muzu preddefinovat DTO v staticky typovanem jazyce a k nemu tabulky v relacni databazi.
Název: Re:Jak validovat DTO v dynamicky typovanem jazyce?
Přispěvatel: L.. 23. 01. 2022, 10:10:15
1) Použitím dynamicky typovaného jazyka si (u netriviálních projektů) práci neušetříte, ale naopak přiděláte. Úplně ze začátku budete o něco rychlejší, ale to se rychle změní, protože budete pálit čas hledáním chyb, které za vás mohla odchytit typová kontrola. V pozdějších fázích pak budete zoufale zdlouhavě dohledávat, jaká je vlastně struktura toho či kterého objektu, protože ušetříte i na psaní dokumentace, jak je dnes "moderní" (*). Znám několik projektů, kde autoři "ušetřili" tím, že je napsali v Javascriptu a pak je horečně a za velkých nákladů přepisovali do Typescriptu.

2) Volba SQL / NoSQL taky není o ušetření, ale spíš o tom, zda vám na data pasuje relační model či nikoli.

3) Zrovna 10GB nesmyslů ošetříte omezením na web serveru, že tak dlouhý request prostě odmítne. Ale ano, server musí validovat vstupy. SQL vám nějaké validace základní udělá, ale ty jsou opravdu základní, takže tam nějaká custom validace musí být tak jako tak skoro vždy, zvlášť, pokud ještě mají být chybové hlášky nějak rozumně komunikovatelné uživateli. Můžete na komunikaci použít GraphQL, které vám udělá kontrolu zhruba na úrovní jako SQL, akorát umí dobře pracovat i s vnořenými objekty. Pro lepší validaci v Javascriptu doporučuji třeba yup.

*) Já jsem ze staré školy, mě ještě učili, že nejpoužívanějším příkazem dobrého programátora je REM.
Název: Re:Jak validovat DTO v dynamicky typovanem jazyce?
Přispěvatel: alex6bbc 23. 01. 2022, 10:12:58
tak napriklad mongodb ma maximalni velikost jednoho zaznamu 16 mb a klic je maximalne 1024 bajtu.
treba by sly nastavit i vlastni limity a pak by db vracela chybu pri prekroceni velikosti?

co pouzit nejakou knihovnu na validaci jsonu, napr. rychle jsem nasel https://github.com/ajv-validator/ajv ?!

Ty jsi nepochopil muj dotaz. Proc bych mel pouzivat validaci jsonu pomoci napr onoho ajv-validator, ktery me nuti definovat json schema, kdyz si muzu preddefinovat DTO v staticky typovanem jazyce a k nemu tabulky v relacni databazi.

z moji odpovedi plyne, ze to stejne musite zvalidovat sam :-)
Název: Re:Jak validovat DTO v dynamicky typovanem jazyce?
Přispěvatel: A.P.Hacker 23. 01. 2022, 10:21:20
Podle me nemate predstavu o cem pisete, validace v case behu se statickym/dynamicky typovanim nijak nesouvisi.

to co chcete resi treba mongoose, nepotrebujete DTO vrsvu navic, staci "fat model"
Název: Re:Jak validovat DTO v dynamicky typovanem jazyce?
Přispěvatel: Idris 23. 01. 2022, 11:23:42
Takze kdyz jsem si chtel na zacatku ulehcit praci a pouzit dynamicky typovany jazyk a MongoDB, tak nakonec budu muset stejne delat to, co by pro me delal staticky typovany jazyk a Relacni databaze k tomu.
Ano, přesně takto to je. Dynamicky typovaný jazyk je vhodný tak akorát pro nějaké menší prototypy, jinak je osinou víme kde. A k té databázi, IMHO není důvod nepoužít relační, pokud se nenarazí na nějaké limity (zpracování gigabajtů příchozích dat v reálném čase apod.).
Název: Re:Jak validovat DTO v dynamicky typovanem jazyce?
Přispěvatel: A.P.Hacker 23. 01. 2022, 11:44:04
Takze kdyz jsem si chtel na zacatku ulehcit praci a pouzit dynamicky typovany jazyk a MongoDB, tak nakonec budu muset stejne delat to, co by pro me delal staticky typovany jazyk a Relacni databaze k tomu.
Ano, přesně takto to je. Dynamicky typovaný jazyk je vhodný tak akorát pro nějaké menší prototypy, jinak je osinou víme kde. A k té databázi, IMHO není důvod nepoužít relační, pokud se nenarazí na nějaké limity (zpracování gigabajtů příchozích dat v reálném čase apod.).

dokumentova databaze ma smysl, pokud chcete ukladat data tak jak prichazi, napriklad z nejakeho API, nasledne je analyzovat. Casto API odpovedi stejne nekam logujete.

kazda technologie ma nejaky idealny usecase. Jednoznacne odsudky nemam rad.
Název: Re:Jak validovat DTO v dynamicky typovanem jazyce?
Přispěvatel: Idris 23. 01. 2022, 12:01:05
dokumentova databaze ma smysl, pokud chcete ukladat data tak jak prichazi, napriklad z nejakeho API, nasledne je analyzovat.
V otázce je explicitně “order”, takže je celkem jasné, o jaký typ dat se jedná.
Název: Re:Jak validovat DTO v dynamicky typovanem jazyce?
Přispěvatel: listoper 23. 01. 2022, 12:08:06
tak napriklad mongodb ma maximalni velikost jednoho zaznamu 16 mb a klic je maximalne 1024 bajtu.
treba by sly nastavit i vlastni limity a pak by db vracela chybu pri prekroceni velikosti?

co pouzit nejakou knihovnu na validaci jsonu, napr. rychle jsem nasel https://github.com/ajv-validator/ajv ?!

Ty jsi nepochopil muj dotaz. Proc bych mel pouzivat validaci jsonu pomoci napr onoho ajv-validator, ktery me nuti definovat json schema, kdyz si muzu preddefinovat DTO v staticky typovanem jazyce a k nemu tabulky v relacni databazi.

Tak jako tak definujes ty validace... neni to jedno?
Ted sem treba videl java projekt kde se pouziva json schema a z neho se genruji ty dto...
Vyhoda je v tom, ze schema muzu sdilet mezi vice projekty v ruznych jazycich kdezto java DTOcka me uzamknou v jave...
Název: Re:Jak validovat DTO v dynamicky typovanem jazyce?
Přispěvatel: Idris 23. 01. 2022, 12:30:48
Ted sem treba videl java projekt kde se pouziva json schema a z neho se genruji ty dto...
Vyhoda je v tom, ze schema muzu sdilet mezi vice projekty v ruznych jazycich
To zní jako Protobuf.
Název: Re:Jak validovat DTO v dynamicky typovanem jazyce?
Přispěvatel: Idris 23. 01. 2022, 12:40:37
Opravte me jestli se mylim, ale ja budu muset zvalidovat pritomnost a delku kazdeho jednoho fieldu
BTW tu přítomnost a nekonzistence může řešit deserializace (bez ohledu na charakter typového systému). Typicky se dělá validace před odesláním, po přijetí požadavku a případně ještě v databázi (tam by ale už vše mělo být košer), otázka spíš je, jak si tu validaci to nejvíc ulehčit (právě pomocí nějakého schématu nebo anotací v kódu).
Název: Re:Jak validovat DTO v dynamicky typovanem jazyce?
Přispěvatel: registrovany123 23. 01. 2022, 13:58:14
Hele a neexistuje nejaky zpusob jak zabezpecit, ze requesty do API budu dostavat vzdycky jen z moji webove stranky? Jako vyrobit nejakou md5 sumu zdrojoveho kodu webovky, nebo co ja vim.
Název: Re:Jak validovat DTO v dynamicky typovanem jazyce?
Přispěvatel: Idris 23. 01. 2022, 14:06:41
Hele a neexistuje nejaky zpusob jak zabezpecit, ze requesty do API budu dostavat vzdycky jen z moji webove stranky? Jako vyrobit nejakou md5 sumu zdrojoveho kodu webovky, nebo co ja vim.
To asi nejde z principu, proto se vždy vše validuje (někdy duplicitně) na serveru.
Název: Re:Jak validovat DTO v dynamicky typovanem jazyce?
Přispěvatel: A.P.Hacker 23. 01. 2022, 14:07:55
Hele a neexistuje nejaky zpusob jak zabezpecit, ze requesty do API budu dostavat vzdycky jen z moji webove stranky? Jako vyrobit nejakou md5 sumu zdrojoveho kodu webovky, nebo co ja vim.

csrf token a accept hlavicky
Název: Re:Jak validovat DTO v dynamicky typovanem jazyce?
Přispěvatel: registrovany123 23. 01. 2022, 14:10:24
Hele a neexistuje nejaky zpusob jak zabezpecit, ze requesty do API budu dostavat vzdycky jen z moji webove stranky? Jako vyrobit nejakou md5 sumu zdrojoveho kodu webovky, nebo co ja vim.
To asi nejde z principu, proto se vždy vše validuje (někdy duplicitně) na serveru.

Nejake veci udelat jdou:

https://stackoverflow.com/questions/13895679/how-do-i-secure-rest-api-calls

Napr. mit mapu ip + headers z weboveho prohlizece, kterym jsem poslal webovku, a jen jim dovolit delat requesty. Obejit to lze, ale na domaci pouziti by to mohl byt dostatecny stupen ochrany.
Název: Re:Jak validovat DTO v dynamicky typovanem jazyce?
Přispěvatel: Idris 23. 01. 2022, 14:32:19
Hele a neexistuje nejaky zpusob jak zabezpecit, ze requesty do API budu dostavat vzdycky jen z moji webove stranky? Jako vyrobit nejakou md5 sumu zdrojoveho kodu webovky, nebo co ja vim.
To asi nejde z principu, proto se vždy vše validuje (někdy duplicitně) na serveru.
Nejake veci udelat jdou:

https://stackoverflow.com/questions/13895679/how-do-i-secure-rest-api-calls

Napr. mit mapu ip + headers z weboveho prohlizece, kterym jsem poslal webovku, a jen jim dovolit delat requesty. Obejit to lze, ale na domaci pouziti by to mohl byt dostatecny stupen ochrany.
Jasně, jde to ztížit, ale je třeba vycházet z toho, co tam nakonec píšou: “I consider it impossible to make it completely impossible for an abuser to consume your service.”

IMHO pro většinu webových aplikací stačí běžná míra zabezpečení (timeouty, omezení velikost přenášených dat, API klíče/OAuth2 podle charakteru služby), nejlépe přes nějakou osvědčenou reverse proxy.
Název: Re:Jak validovat DTO v dynamicky typovanem jazyce?
Přispěvatel: sarimak 23. 01. 2022, 16:17:35
K puvodnimu dotazu: I v dynamicky typovanych jazycich existuji nastroje a knihovny pro validaci potecnialne neduveryhodnych/libovolne rozbitych dat ziskanych zvenci a pouzitim jakehokoliv jazyka nebo databaze se te validaci clovek nevyhne. At uz to znamena neco jako JSONSchema, nebo knihovna kde se definice typu uvnitr requestu popise v kodu. S JavaScriptem bohuzel neumim poradit, ale treba v Pythonu se daji s vyhodou vyuzit typove anotace a validaci odvodit od nich. Rozhodne nemuzu ale souhlasit s nazory kolegu co nevideli nic jineho nez Javu, ze by dynamicky typovane jazyky byly v necem menecenne -- tak jako u te Javy to je cele o zkusenostech, peclivosti a schopnosti si najit spravne nastroje ktere cloveku usetri praci. Prasarny se daji delat bez ohledu na jazyk...
Název: Re:Jak validovat DTO v dynamicky typovanem jazyce?
Přispěvatel: L.. 23. 01. 2022, 16:50:16
Hele a neexistuje nejaky zpusob jak zabezpecit, ze requesty do API budu dostavat vzdycky jen z moji webove stranky?

Ne. Protože klient (prohlížeč) běží na počítači druhé strany a ta ho v principu ho dokáže přinutit poslat cokoli.

A jinak teda i staticky typované jazyky mohou být zrádné, třeba Java trpí na type erasure u generických kolekcí. Sice v kódu je List<String>, ale runtime se tam dá podstrčit třeba Number a projde to.
Název: Re:Jak validovat DTO v dynamicky typovanem jazyce?
Přispěvatel: Idris 23. 01. 2022, 17:28:12
A jinak teda i staticky typované jazyky mohou být zrádné, třeba Java trpí na type erasure u generických kolekcí. Sice v kódu je List<String>, ale runtime se tam dá podstrčit třeba Number a projde to.
To je ovšem chyba Javy, ne statického typování.
Název: Re:Jak validovat DTO v dynamicky typovanem jazyce?
Přispěvatel: anonacct 23. 01. 2022, 17:40:40
Data musíš validovat vždycky, je úplně jedno jaký jazyk nebo DB používáš. Není tady moc o čem mluvit, nějaké schéma tam budeš muset mít a na základě něho validovat vstupy. Nikdy neukládej do DB jen tak co ti někdo pošle na endpoint bez validace. To je red flag.
Název: Re:Jak validovat DTO v dynamicky typovanem jazyce?
Přispěvatel: L.. 23. 01. 2022, 19:43:51
To je ovšem chyba Javy, ne statického typování.

Pokud v mém příspěvku vidíte něco o chybě statického typování, pravděpodobně máte v počítači virus, který vám mění HTML stránky. Já tam nic takového nepsal.

Jen jsem upozorňoval, že ani ve staticky typovaných jazycích se nelze typovou kontrolu vždy použít místo validace a je tedy lepší použít k tomu určenou knihovnu.
Název: Re:Jak validovat DTO v dynamicky typovaném jazyce?
Přispěvatel: BoneFlute 23. 01. 2022, 23:38:10
Jenze. Opravte me jestli se mylim, ale ja budu muset zvalidovat pritomnost a delku kazdeho jednoho fieldu tak, jako by to pro me udelalo napr. preddefinovane DTO v Jave a preddefinovana tabulka v Relacni databazi. Protoze jinak by mohl nejaky hacker do endpointu order poslat 100gb nesmyslu a zahltit mi databazi.

Takze kdyz jsem si chtel na zacatku ulehcit praci a pouzit dynamicky typovany jazyk a MongoDB, tak nakonec budu muset stejne delat to, co by pro me delal staticky typovany jazyk a Relacni databaze k tomu.

Nebo mi neco nedochazi?

Je to otázka rétoriky.

Čistě fakticky: chceš validovat? (blbá otázka) Takže budeš muset validovat. Je vcelku buřt jakým způsobem.

Když si pozorně přečteš, co jsi napsal, tak tam nikde nenajdeš, že by ti staticky typovaný jazyk nějak zázračně všechno automaticky validoval. Databáze detto. Ty tam píšeš, že ti to bude dělat staticky typovaný jazyk, protože v něm to musíš nadefinovat, jazyk ti to nutí (tiše předpokládám, že tam navíc máš nějakou reflexi nebo podobnou chytristiku, aby si nemusel psát tu samou validaci jen kvůli tomu, aby ti to sedlo na typy). A stejně si to musíš nadefinovat v tom javascriptu. Není v tom žádný zvláštní rozdíl.

Vypíchl bych tři detaily:

1/ Používáš-li relační databázi, nebo staticky typovaný jazyk, tak máš jakési povědomí o validaci, o tom, že do varcharů se čísla neukládají (zdravím MySQL), etc. Takže tě to napadne, že tam tu validaci budeš potřebovat, že by tam asi měla být.

2/ Statické jazyky, zvláště takové debilní jako je Java nebo C# v praxi dopadají často tak, že tam tu validaci máš dvakrát třikrát, protože jednou na vstupu, podruhé při mapování na DTO, třetí ve formulářích, čtvrté při mapováná do Hibernate, páté ve vlastní databázi...
V dynamickém jazyce jako je Javascript obvykle validaci nemáš vůbec. Protože bod 1. Ale když už to dělá nějaký senior, tak to udělá chytře, definuje si pravidla jednou, a pak je posílá všude kam potřebuje.

3/ Staticky typované jazyky mají úplně jinou motivaci než validaci dat, i když i na to se samozřejmě dají použít (nebo tam překáží).


Disclaimer: Jsem fanatický příznivce a zastánce staticky typovaných jazyků a nenávidím dynamicky typované. To mi však nebrání vidět jasně.
Název: Re:Jak validovat DTO v dynamicky typovaném jazyce?
Přispěvatel: Idris 23. 01. 2022, 23:52:04
Statické jazyky, zvláště takové debilní jako je Java nebo C# […] Jsem fanatický příznivce a zastánce staticky typovaných jazyků a nenávidím dynamicky typované.
To zní dost drsně. A ani to moc nechápu, není mnohem zásadnějším rozdílem silné vs. slabé typování?
Název: Re:Jak validovat DTO v dynamicky typovaném jazyce?
Přispěvatel: Kit 24. 01. 2022, 00:32:44
To je fakt velký problém, když uživatel místo názvu ulice uvede číslo domu nebo když číslo domu není integer? Typování dat od uživatele mi nedává smysl. Validace ano, ale typování ne.
Název: Re:Jak validovat DTO v dynamicky typovaném jazyce?
Přispěvatel: BoneFlute 24. 01. 2022, 01:10:21
Statické jazyky, zvláště takové debilní jako je Java nebo C# […] Jsem fanatický příznivce a zastánce staticky typovaných jazyků a nenávidím dynamicky typované.
To zní dost drsně. A ani to moc nechápu, není mnohem zásadnějším rozdílem silné vs. slabé typování?
To jsme tu už rozebírali.
Silné vs slabé typování je defakto banalita, nestojící za polemiku. Skutečnost, že se mi Javascript snaží automaticky konvertovat cokoliv podobného číslu na číslo má sice vliv na programátorský prožitek, ale že by z toho musela být extra kategorie si nemyslím. Takže má odpověď zní - ne, vůbec. V praxi silné typování nic zásadního nepřináší.
Název: Re:Jak validovat DTO v dynamicky typovaném jazyce?
Přispěvatel: Idris 24. 01. 2022, 01:16:22
Statické jazyky, zvláště takové debilní jako je Java nebo C# […] Jsem fanatický příznivce a zastánce staticky typovaných jazyků a nenávidím dynamicky typované.
To zní dost drsně. A ani to moc nechápu, není mnohem zásadnějším rozdílem silné vs. slabé typování?
To jsme tu už rozebírali.
Silné vs slabé typování je defakto banalita, nestojící za polemiku. Skutečnost, že se mi Javascript snaží automaticky konvertovat cokoliv podobného číslu na číslo má sice vliv na programátorský prožitek, ale že by z toho musela být extra kategorie si nemyslím. Takže má odpověď zní - ne, vůbec. V praxi silné typování nic zásadního nepřináší.
Silné typování nijak zvlášť nesouvisí s JS. Ostatně i dynamicky typovaný jazyk může mít například záv. typy.
Název: Re:Jak validovat DTO v dynamicky typovaném jazyce?
Přispěvatel: BoneFlute 24. 01. 2022, 02:27:43
Silné typování nijak zvlášť nesouvisí s JS.
Nic takového jsem netvrdil. JS byl uveden jen jako příklad.


Ostatně i dynamicky typovaný jazyk může mít například záv. typy.


Možná se každý bavíme o něčem jiném. Možná si pod silným typováním představuji něco špatně.

K čemu by byly dobré, u nějakého dynamicky typovaného jazyka, závislostní typy? Jaký by měli přínos?

Vycházím z, možná nesprávného předpokladu, že když budu mít následující dvě proměnné:
Kód: [Vybrat]
a = "string"
b = 42
test(x) {
  print("typ: {x.type}")
}
test(a) // typ: string
test(b) // typ: number

Tak se budou chovat stejně bez ohledu na to zda je jazyk silně nebo slabě typovaný. (Ignorujme prehistorii v podobě jazyka C.)
Název: Re:Jak validovat DTO v dynamicky typovaném jazyce?
Přispěvatel: Idris 24. 01. 2022, 02:54:02
K čemu by byly dobré, u nějakého dynamicky typovaného jazyka, závislostní typy? Jaký by měli přínos?
Přínosem je, že když překladač (AOT nebo JIT) zná typy, generuje mnohem efektivnější kód. Když mám třeba funkci readVect vracející instanci n ** Vect n Integer (tj. tzv. zobecněný součtový typ), můžu v dynamickém jazyce pomocí typové anotace zajistit, že příslušná funkce vrací jen objekty tohoto typu (třeba v Julii je ten zápis Vect{N,Int64} where N).
Název: Re:Jak validovat DTO v dynamicky typovaném jazyce?
Přispěvatel: Idris 24. 01. 2022, 02:59:55
Vycházím z, možná nesprávného předpokladu, že když budu mít následující dvě proměnné:
Kód: [Vybrat]
a = "string"
b = 42
test(x) {
  print("typ: {x.type}")
}
test(a) // typ: string
test(b) // typ: number

Tak se budou chovat stejně bez ohledu na to zda je jazyk silně nebo slabě typovaný.
Jenže typeof je jen v silných typových systémech. To je právě ten problém. Ale to jsme dost odbočili, jen jsem chtěl říct, že dynamičnost a síla typového systému jsou dvě různé dimenze, které slouží dvěma nezávislým cílům, zajistit typovou bezpečnost a efektivní překlad či interpretaci. Pokud je jazyk staticky nebo silně typovaný, je obojího dosaženo, i když splňuje jen jednu z těch podmínek. 
Název: Re:Jak validovat DTO v dynamicky typovaném jazyce?
Přispěvatel: BoneFlute 24. 01. 2022, 04:09:39
Vycházím z, možná nesprávného předpokladu, že když budu mít následující dvě proměnné:
Kód: [Vybrat]
a = "string"
b = 42
test(x) {
  print("typ: {x.type}")
}
test(a) // typ: string
test(b) // typ: number

Tak se budou chovat stejně bez ohledu na to zda je jazyk silně nebo slabě typovaný.
Jenže typeof je jen v silných typových systémech. To je právě ten problém.
Měl jsem za to, že Javascript je slabě typovaný. Stejně tak PHP, VisualBasic.
Uveď příklad jazyka, který tedy nemá typeof (slabě typovaného dle tvé definice)?

Ale to jsme dost odbočili, jen jsem chtěl říct, že dynamičnost a síla typového systému jsou dvě různé dimenze, které slouží dvěma nezávislým cílům, zajistit typovou bezpečnost a efektivní překlad či interpretaci. Pokud je jazyk staticky nebo silně typovaný, je obojího dosaženo, i když splňuje jen jednu z těch podmínek.
V Javě se to dělá tak, že VM oficiální typy zahodí, a odvozuje si svoje.

Každopádně uznávám, že problematice jak typy zlepší efektivitu překladu jsem se nikdy moc nevěnoval. Pro mě jsou jazyky bez statické kontroly nedostatečné obecně (rozuměj, fakt nemám náladu honit chyby v run time).

Typová bezpečnost u dynamického jazyka znamená co konkrétně?

Pokud je jazyk staticky nebo silně typovaný, je obojího dosaženo, i když splňuje jen jednu z těch podmínek.
V tomto se žel neshodnem. Je-li jazyk staticky typovaný, přináší to jasné a měřitelné bezpečnostní výhody. Je-li jazyk dynamicky silně typovaný, nejsem si vědom žádných výhod (co se té silně typovanosti týče) které by stály za řeč.
Ale rád se nechám přesvědčit.

Poznámka na závěr: Jak jsem si ověřoval zdroje, zda snad nekecám blbosti, tak jsem nabyl dojem, že zásadní problém je v tom, že slabě typovaný jazyk (= ve smyslu jazyka, kde by prostředí v daném okamžiku nevědělo jakého je ten který prvek typu, a nemohlo by vesele optimalizovat jak jsi mě poučil) možná ani neexistuje. Tudíž klauzule, že jazyk XY je silně typovaný je jen tak pro parádu.
Název: Re:Jak validovat DTO v dynamicky typovaném jazyce?
Přispěvatel: Idris 24. 01. 2022, 05:02:30
Každopádně uznávám, že problematice jak typy zlepší efektivitu překladu jsem se nikdy moc nevěnoval.
To je škoda, je to zajímavé a aktuální téma. Proč je asi v průměru Julia rychlejší než Rust (nápověda: multidispatch)?
Typová bezpečnost u dynamického jazyka znamená co konkrétně?
To samé jako u staticky typovaného, že kód jde otypovat tak (ručně nebo inferencí), že v době běhu není nutné zkoumat typy objektů pro hladký běh. V teorii překladačů se pracuje v souvislosti s typy s několika pojmy, kód může být typově stabilní (to pomáhá optimalizaci, ale nezajišťuje bezpečnost) nebo typově ukotvený (to zajištuje bezpečnost). Ovšem čím silnější typový systém, tím horší vyčíslitelnost (u hodně silných typových systémů z principu nefunguje inference typů, ale i v Haskellu stačí napsat jednoduchou polymorfní rekurzi a překladači jebne). Je to něco za něco, já třeba osobně taky upřednostňuju silný typový systém se zevrubnou kontrolou v době překladu, ale dobře se mi psalo i v ObjC (tom starém, předswiftím). Navíc od určité síly typového systému se už nedá v kódu přesně rozlišovat mezi dobou překladu a běhu, protože na typové úrovni můžu pracovat s hodnotami při překladu a na úrovni exekuce kódu s typy. Přidej GADT a je z toho dokonalý guláš, kde typová kontrola není o přiřazování/ověřování typů, ale převedení celého programu do formální logiky a prozkoumání, zda je v teorii spor (proto taky jdou vracet z funkcí instance typu Vect n T vytvořené za běhu na základě nekonstantní hodnoty n).
Je-li jazyk staticky typovaný, přináší to jasné a měřitelné bezpečnostní výhody.
Jasně, výhoda je, že se více chyb odhalí již při překladu. Proto ostatně vznikly Typescript nebo Dart, ty jsou sice v jádru dynamické, ale typy při překladu umí kontrolovat.
Název: Re:Jak validovat DTO v dynamicky typovaném jazyce?
Přispěvatel: BoneFlute 24. 01. 2022, 05:29:53
Typová bezpečnost u dynamického jazyka znamená co konkrétně?
To samé jako u staticky typovaného, že kód jde otypovat tak (ručně nebo inferencí), že v době běhu není nutné zkoumat typy objektů pro hladký běh.
To máš se mnou těžké, když já si představuju, že poté, co kompilátor vyplivne program, tak v něm jsou všechny typy odstraněný jako zbytečný, a jsou ponechaný jen ty nutný pro dynamic dispatch, a to ještě jenom v případě věcí jako je kolekce podtypů...
Zatímco u dynamického jazyka všechny typy musí zůstat, protože je třeba umožnit, aby to ve čtvrtek na produkci zbuchlo až tam Franta zapíše int věk="starej". (Ano, slyšel jsem o JIT.)
Název: Re:Jak validovat DTO v dynamicky typovaném jazyce?
Přispěvatel: Ink 24. 01. 2022, 07:22:44
To je škoda, je to zajímavé a aktuální téma. Proč je asi v průměru Julia rychlejší než Rust (nápověda: multidispatch)?

Jakým způsobem multidispatch urychluje běh programu? Už jsi to psal dřív, ale mně to úplně smysl nedává...
Název: Re:Jak validovat DTO v dynamicky typovaném jazyce?
Přispěvatel: Idris 24. 01. 2022, 09:11:14
Typová bezpečnost u dynamického jazyka znamená co konkrétně?
To samé jako u staticky typovaného, že kód jde otypovat tak (ručně nebo inferencí), že v době běhu není nutné zkoumat typy objektů pro hladký běh.
To máš se mnou těžké, když já si představuju, že poté, co kompilátor vyplivne program, tak v něm jsou všechny typy odstraněný jako zbytečný, a jsou ponechaný jen ty nutný pro dynamic dispatch, a to ještě jenom v případě věcí jako je kolekce podtypů...
Zatímco u dynamického jazyka všechny typy musí zůstat, protože je třeba umožnit, aby to ve čtvrtek na produkci zbuchlo až tam Franta zapíše int věk="starej". (Ano, slyšel jsem o JIT.)
Tak ono to tak zhruba bývá, ten rozdíl je, že ten rozbíjející let donutí JIT znovu přeložit kód a jelikož program není typově správně, vyplivne nějaký pomalý hnus. Na webu jsou příklady, jak změny v typových anotacích enormně ovlivňují generovaný stroják (sám jsem se setkal s více než desetinásobným zpomalením kvůli jednomu špatně uvedenému typovému parametru). Všichni mají zažité, že dynamické jazyky musí být pomalé, protože Python, Ruby nebo JS jsou šneci, ale když všechny typové anotace sedí, překladač může generovat rychlý kód (teď už máme empirický důkaz), ale stejně je IMHO v obecném případě lepší použít třeba Rust nebo Go se statickým typováním, Julia je navržená jako v podstatě DSL nahrazující Matlab, R a Python pro ML apod., na nasazení v jiné oblasti to moc není. Jen je prostě zajímavé pochopit, jak v tomto podivném jazyce funguje typový systém a díky němu překladač.
Název: Re:Jak validovat DTO v dynamicky typovaném jazyce?
Přispěvatel: Idris 24. 01. 2022, 09:14:33
Jakým způsobem multidispatch urychluje běh programu? Už jsi to psal dřív, ale mně to úplně smysl nedává...
To jsem nikdy nepsal, ani teď, jen to, že umožňuje velice efektivní optimalizaci výsledného kódu, pokud je program správně otypovaný (o tom je řada článků na konferencích jako POPL, co to je typově ukotvený program a jak ovlivňuje výsledný stroják).
Název: Re:Jak validovat DTO v dynamicky typovaném jazyce?
Přispěvatel: Ink 24. 01. 2022, 10:39:50
Jakým způsobem multidispatch urychluje běh programu? Už jsi to psal dřív, ale mně to úplně smysl nedává...
To jsem nikdy nepsal, ani teď, jen to, že umožňuje velice efektivní optimalizaci výsledného kódu, pokud je program správně otypovaný (o tom je řada článků na konferencích jako POPL, co to je typově ukotvený program a jak ovlivňuje výsledný stroják).

Vždyť jsem ale citoval tuhle Tvoji větu:

Proč je asi v průměru Julia rychlejší než Rust (nápověda: multidispatch)?

Ta nápověda teda měla říct něco jiného, než že MD pomáhá výkonu?

Každopádně mě teda to Tvoje tvrzení o rychlejší Julii nadále dráždí, asi si to někdy prozkoumám.
Název: Re:Jak validovat DTO v dynamicky typovaném jazyce?
Přispěvatel: Idris 24. 01. 2022, 10:55:13
Jakým způsobem multidispatch urychluje běh programu? Už jsi to psal dřív, ale mně to úplně smysl nedává...
To jsem nikdy nepsal, ani teď, jen to, že umožňuje velice efektivní optimalizaci výsledného kódu, pokud je program správně otypovaný (o tom je řada článků na konferencích jako POPL, co to je typově ukotvený program a jak ovlivňuje výsledný stroják).
Každopádně mě teda to Tvoje tvrzení o rychlejší Julii nadále dráždí, asi si to někdy prozkoumám.
To je vidět :) Ale taky tě dráždí, že je Porsche rychlejší než kombajn? Je to prostě empiricky podložený fakt, mě to taky překvapuje a sám to “prozkoumávám”, což jde celkem lehce, protože oba překladače používají LLVM. Určitě znáš rustí Egg, který, pamatuji-li se dobře, vyhrál (resp. jeho design) i nějaké ceny na akademických konferencích. Tak stejný algoritmus pro e-grafy je v Julii rychlejší ;)
Název: Re:Jak validovat DTO v dynamicky typovaném jazyce?
Přispěvatel: Ink 24. 01. 2022, 11:23:17
Každopádně mě teda to Tvoje tvrzení o rychlejší Julii nadále dráždí, asi si to někdy prozkoumám.
To je vidět :) Ale taky tě dráždí, že je Porsche rychlejší než kombajn? Je to prostě empiricky podložený fakt, mě to taky překvapuje a sám to “prozkoumávám”, což jde celkem lehce, protože oba překladače používají LLVM. Určitě znáš rustí Egg, který, pamatuji-li se dobře, vyhrál (resp. jeho design) i nějaké ceny na akademických konferencích. Tak stejný algoritmus pro e-grafy je v Julii rychlejší ;)

1. Rust není kombajn, Rust je jazyk, který by z principu měl být jeden z nejrychlejších, co se běhu týče. Pokud někdy není, je někde prostor pro zlepšení. Je samozřejmě otázka, o kolik ten konkrétní use case je rychlejší.

2. Tu Tvoji empirii nevyvracím, ale když to zkouším googlit, moc vodítek nebo důkazů nenacházím.

3. Egg neznám, natož abych mohl konkrétní implementaci toho algoritmu rychle srovnat s implementací v Julii a něco z toho vyvodit. Ale dík aspoň za tenhle hint. Pokud máš něco dalšího, čeho se chytit, byl bych docela rád.
Název: Re:Jak validovat DTO v dynamicky typovaném jazyce?
Přispěvatel: Idris 24. 01. 2022, 11:23:32
Ta nápověda teda měla říct něco jiného, než že MD pomáhá výkonu?
Ne, ale neříká celou pravdu, “tajemství úspěchu” tkví v typovém systému, který má (omezenou) dědičnost, varianci typů a HKT, takže ve spojení s dynamickým dispatchem umožňuje překladači extrémní optimalizace. Jaký je přínos sofistikovaného typového systému v porovnání s MD nedokážu říct (a ani nevím, jestli to vůbec jde kvantifikovat, jsou dost propletené). Druhým faktorem jsou ad hoc optimalizace, které překladač dělá hlavně nad typy v době překladu, například u Union apod. Překladač Rustu neznám tak podrobně, ale mám za to, že většinu optimalizací nechává na LLVM (bylo by fajn, kdyby to někdo potvrdil nebo vyvrátil), kde nejsou tak ad hoc, což je v tomto případě nevýhodou.
Název: Re:Jak validovat DTO v dynamicky typovaném jazyce?
Přispěvatel: Idris 24. 01. 2022, 11:33:23
Rust je jazyk, který by z principu měl být jeden z nejrychlejších, co se běhu týče.

Tu Tvoji empirii nevyvracím, ale když to zkouším googlit, moc vodítek nebo důkazů nenacházím.

Egg neznám, natož abych mohl konkrétní implementaci toho algoritmu rychle srovnat s implementací v Julii a něco z toho vyvodit. Ale dík aspoň za tenhle hint.
Tak Rust je jeden z nejrychlejších, ale má svoje limity dané designem jazyka.

Ta “empirie” je zákonitě omezená na vyzkoušené algoritmy, já třeba hodně používám různé symbolické a logické (proto ten Egg, ten se skutečně povedl). K tomu googlení — jsou nějakého starší články o designu MD a pak novější z oblasti HPC například. Na stránkách Julia computing jsou odkazy na všechny relevantní.

Jinak na to avizované “prozkoumání” je IMHO nejlepší napsat si prostě nějaký netriviální algoritmus v obou jazycích (+třeba i C++, Swiftu a Go), změřit jej na větších výstupech a u WTF rozdílů kouknout na generovaný kód. Tohle jsem dělal u toho Eggu (kromě C++, ale to doženu) a je to celkem přínosné.
Název: Re:Jak validovat DTO v dynamicky typovaném jazyce?
Přispěvatel: Idris 24. 01. 2022, 11:47:18

BTW možná to zapadlo, ale Rustu ten jazyk nijak nekonkuruje, je náhradou za R, Matlab a Python, těžko v něm někdo bude psát třeba mikroslužby nebo dokonce něco systémového (ani neumí vytvářet pořádné samostatné binárky). Mě osobně zajímají jen čistě technické aspekty překladu a optimalizace kódu. S Rustem se oblasti nasazení prolínají třeba u věci jako je Egg a dost často bude lepší napsat prostě všechno v Rustu kvůli například kontejnerizaci apod. Ale v oblasti tzv. vědeckých výpočtů jsou priority, proč si to nepřiznat, úplně jinde (kdysi kdosi se tam snažil prosadit Swift, ale asi se moc neuchytil).
Název: Re:Jak validovat DTO v dynamicky typovaném jazyce?
Přispěvatel: registrovany123 24. 01. 2022, 11:59:08
Proboha... uz je tu zas BoneFlute, a zaslechl staticke typovani. Tato diskuze je timto mrtva.
Název: Re:Jak validovat DTO v dynamicky typovaném jazyce?
Přispěvatel: Ink 24. 01. 2022, 12:06:25

BTW možná to zapadlo, ale Rustu ten jazyk nijak nekonkuruje, je náhradou za R, Matlab a Python, těžko v něm někdo bude psát třeba mikroslužby nebo dokonce něco systémového (ani neumí vytvářet pořádné samostatné binárky). Mě osobně zajímají jen čistě technické aspekty překladu a optimalizace kódu. S Rustem se oblasti nasazení prolínají třeba u věci jako je Egg a dost často bude lepší napsat prostě všechno v Rustu kvůli například kontejnerizaci apod. Ale v oblasti tzv. vědeckých výpočtů jsou priority, proč si to nepřiznat, úplně jinde (kdysi kdosi se tam snažil prosadit Swift, ale asi se moc neuchytil).

Jasně, message received. A dík i za předchozí příspěvek.
Název: Re:Jak validovat DTO v dynamicky typovaném jazyce?
Přispěvatel: Idris 24. 01. 2022, 12:10:09
Proboha... uz je tu zas BoneFlute, a zaslechl staticke typovani. Tato diskuze je timto mrtva.
:D
Název: Re:Jak validovat DTO v dynamicky typovaném jazyce?
Přispěvatel: Idris 24. 01. 2022, 12:11:34

BTW možná to zapadlo, ale Rustu ten jazyk nijak nekonkuruje, je náhradou za R, Matlab a Python, těžko v něm někdo bude psát třeba mikroslužby nebo dokonce něco systémového (ani neumí vytvářet pořádné samostatné binárky). Mě osobně zajímají jen čistě technické aspekty překladu a optimalizace kódu. S Rustem se oblasti nasazení prolínají třeba u věci jako je Egg a dost často bude lepší napsat prostě všechno v Rustu kvůli například kontejnerizaci apod. Ale v oblasti tzv. vědeckých výpočtů jsou priority, proč si to nepřiznat, úplně jinde (kdysi kdosi se tam snažil prosadit Swift, ale asi se moc neuchytil).
Jasně, message received. A dík i za předchozí příspěvek.
YAW. Když narazím na nějaký zajímavý článek k tématu, dám vědět ;)
Název: Re:Jak validovat DTO v dynamicky typovaném jazyce?
Přispěvatel: Ondrej Nemecek 24. 01. 2022, 13:29:25
Nejelegantnější jsou stejně silně typované jazyky (s nepovinným typováním => s kvalitním odvozováním typů) a s pozdní vazbou. Ale to už se tu ale probíralo mnohokrát :)

Jinak souhlas, že validace s typovými schopnostmi jazyka v mainstreamových jazycích moc nesouvisí, pokaždé se validuje ručně psaným kódem (ať už ho napsal kdokoli).
Název: Re:Jak validovat DTO v dynamicky typovaném jazyce?
Přispěvatel: A.P.Hacker 24. 01. 2022, 14:10:19
Nejelegantnější jsou stejně silně typované jazyky (s nepovinným typováním => s kvalitním odvozováním typů) a s pozdní vazbou. Ale to už se tu ale probíralo mnohokrát :)

neni pozdni vazba synonymum pro dynamicke typovani?
Název: Re:Jak validovat DTO v dynamicky typovaném jazyce?
Přispěvatel: Idris 24. 01. 2022, 14:11:31
Nejelegantnější jsou stejně silně typované jazyky (s nepovinným typováním => s kvalitním odvozováním typů) a s pozdní vazbou. Ale to už se tu ale probíralo mnohokrát :)
Jako například ObjC?
Název: Re:Jak validovat DTO v dynamicky typovaném jazyce?
Přispěvatel: Idris 24. 01. 2022, 14:13:09
Nejelegantnější jsou stejně silně typované jazyky (s nepovinným typováním => s kvalitním odvozováním typů) a s pozdní vazbou. Ale to už se tu ale probíralo mnohokrát :)
neni pozdni vazba synonymum pro dynamicke typovani?
Ne.
Název: Re:Jak validovat DTO v dynamicky typovaném jazyce?
Přispěvatel: registrovany123 24. 01. 2022, 14:13:57
Jinak souhlas, že validace s typovými schopnostmi jazyka v mainstreamových jazycích moc nesouvisí, pokaždé se validuje ručně psaným kódem (ať už ho napsal kdokoli).

Jakto doprcic zase ze s tim nesouvisi. V Jave DTO + tabulka v Relacni db se zakladnimi constrains mi zakladni validaci udela. To snad neni validace, ze ti v JSONu muzou prijit jen predem dane fieldy, a ze kdyz ve First Name bude 1GB string tak ze to Relacni db odmitne kdyz tam dam VARCHAR(20)?

To je zase diskuze...

Raci odtud zmizim, nez se octnu ve zbytecne a nekonecne diskuzi.
Název: Re:Jak validovat DTO v dynamicky typovaném jazyce?
Přispěvatel: Idris 24. 01. 2022, 15:03:10
Jinak souhlas, že validace s typovými schopnostmi jazyka v mainstreamových jazycích moc nesouvisí, pokaždé se validuje ručně psaným kódem (ať už ho napsal kdokoli).
Jakto doprcic zase ze s tim nesouvisi.
Má pravdu, vyjde to nastejno v Javě nebo třeba Ruby.
Název: Re:Jak validovat DTO v dynamicky typovaném jazyce?
Přispěvatel: BoneFlute 24. 01. 2022, 16:57:05
Jinak souhlas, že validace s typovými schopnostmi jazyka v mainstreamových jazycích moc nesouvisí, pokaždé se validuje ručně psaným kódem (ať už ho napsal kdokoli).

Jakto doprcic zase ze s tim nesouvisi. V Jave DTO + tabulka v Relacni db se zakladnimi constrains mi zakladni validaci udela. To snad neni validace, ze ti v JSONu muzou prijit jen predem dane fieldy, a ze kdyz ve First Name bude 1GB string tak ze to Relacni db odmitne kdyz tam dam VARCHAR(20)?

Dyť jo. Jenže ty DTO a tabulky se sami nenapíšou, že jo. Dále viz: https://forum.root.cz/index.php?topic=25768.msg365337#msg365337
Název: Re:Jak validovat DTO v dynamicky typovaném jazyce?
Přispěvatel: Idris 24. 01. 2022, 17:45:39
tak jsem nabyl dojem, že zásadní problém je v tom, že slabě typovaný jazyk (= ve smyslu jazyka, kde by prostředí v daném okamžiku nevědělo jakého je ten který prvek typu […]) možná ani neexistuje. Tudíž klauzule, že jazyk XY je silně typovaný je jen tak pro parádu.
Tohle mi nedá spát :) Myšlenkový experiment: Rozhodnu se v různých jazycích explicitně neuvádět typy proměnných, takže v C++ budou všechny pointery void*, v Javě bude všechno Object, v Go vše, jak jinak, interface{}, v Rustu Any apod. Při použití (volání metody, přístup k datům) musím vždy explicitně přetypovat. Kterépak jazyky ustojí chybu v typu a kde nastane segfault nebo něco podobně nedefinovaného a destruktivního? To jen tak k zamyšlení..
Název: Re:Jak validovat DTO v dynamicky typovaném jazyce?
Přispěvatel: BoneFlute 24. 01. 2022, 19:23:26
tak jsem nabyl dojem, že zásadní problém je v tom, že slabě typovaný jazyk (= ve smyslu jazyka, kde by prostředí v daném okamžiku nevědělo jakého je ten který prvek typu […]) možná ani neexistuje. Tudíž klauzule, že jazyk XY je silně typovaný je jen tak pro parádu.
Tohle mi nedá spát :) Myšlenkový experiment: Rozhodnu se v různých jazycích explicitně neuvádět typy proměnných, takže v C++ budou všechny pointery void*, v Javě bude všechno Object, v Go vše, jak jinak, interface{}, v Rustu Any apod. Při použití (volání metody, přístup k datům) musím vždy explicitně přetypovat. Kterépak jazyky ustojí chybu v typu a kde nastane segfault nebo něco podobně nedefinovaného a destruktivního? To jen tak k zamyšlení..

Obávám se, že mi nedochází co tím chceš demonstrovat.
Název: Re:Jak validovat DTO v dynamicky typovaném jazyce?
Přispěvatel: Idris 24. 01. 2022, 19:49:21
tak jsem nabyl dojem, že zásadní problém je v tom, že slabě typovaný jazyk (= ve smyslu jazyka, kde by prostředí v daném okamžiku nevědělo jakého je ten který prvek typu […]) možná ani neexistuje. Tudíž klauzule, že jazyk XY je silně typovaný je jen tak pro parádu.
Tohle mi nedá spát :) Myšlenkový experiment: Rozhodnu se v různých jazycích explicitně neuvádět typy proměnných, takže v C++ budou všechny pointery void*, v Javě bude všechno Object, v Go vše, jak jinak, interface{}, v Rustu Any apod. Při použití (volání metody, přístup k datům) musím vždy explicitně přetypovat. Kterépak jazyky ustojí chybu v typu a kde nastane segfault nebo něco podobně nedefinovaného a destruktivního? To jen tak k zamyšlení..
Obávám se, že mi nedochází co tím chceš demonstrovat.
Že C++ je slabě typované, přinejmenším typy bez RTTI. V Javě nebo Go se dá z takové chyby zotavit.
Název: Re:Jak validovat DTO v dynamicky typovaném jazyce?
Přispěvatel: BoneFlute 24. 01. 2022, 20:19:52
tak jsem nabyl dojem, že zásadní problém je v tom, že slabě typovaný jazyk (= ve smyslu jazyka, kde by prostředí v daném okamžiku nevědělo jakého je ten který prvek typu […]) možná ani neexistuje. Tudíž klauzule, že jazyk XY je silně typovaný je jen tak pro parádu.
Tohle mi nedá spát :) Myšlenkový experiment: Rozhodnu se v různých jazycích explicitně neuvádět typy proměnných, takže v C++ budou všechny pointery void*, v Javě bude všechno Object, v Go vše, jak jinak, interface{}, v Rustu Any apod. Při použití (volání metody, přístup k datům) musím vždy explicitně přetypovat. Kterépak jazyky ustojí chybu v typu a kde nastane segfault nebo něco podobně nedefinovaného a destruktivního? To jen tak k zamyšlení..
Obávám se, že mi nedochází co tím chceš demonstrovat.
Že C++ je slabě typované, přinejmenším typy bez RTTI. V Javě nebo Go se dá z takové chyby zotavit.

Toho jsem se obával. OK, můžeme se za účelem kvality diskuse vyhnout prehistorii v podobě jazyků C/C++?

Co se týče Javy a Go, tak mi to stále nedochází. Obecně v každém okamžiku prvky znají svůj typ. Že ten typ je Object nebo Any, no to je tvoje volba, ne omezení/vlastnost jazyka.

OK, jinak:
Jsou jazyky Java, Go, Rust, C#, Javascript, Python, Lua, VisualBasic, podle tebe, slabě typované? Pokud ano, tak proč?
Název: Re:Jak validovat DTO v dynamicky typovaném jazyce?
Přispěvatel: Idris 24. 01. 2022, 21:57:35
Co se týče Javy a Go, tak mi to stále nedochází. Obecně v každém okamžiku prvky znají svůj typ. Že ten typ je Object nebo Any, no to je tvoje volba, ne omezení/vlastnost jazyka.
Typ objektu je to, co je za new, ne deklarovaný typ proměnné.
Název: Re:Jak validovat DTO v dynamicky typovaném jazyce?
Přispěvatel: Idris 24. 01. 2022, 22:00:37
Citace: BoneFlute link=topic=25768.msg365402#msg365402
Trochu odbočím — koukals pak ještě někdy na záv. typy? Mám teď čerstvou zkušenost s jejich výukou, tak kdyby byl zájem ;)
Název: Re:Jak validovat DTO v dynamicky typovaném jazyce?
Přispěvatel: BoneFlute 25. 01. 2022, 05:42:56
Co se týče Javy a Go, tak mi to stále nedochází. Obecně v každém okamžiku prvky znají svůj typ. Že ten typ je Object nebo Any, no to je tvoje volba, ne omezení/vlastnost jazyka.
Typ objektu je to, co je za new, ne deklarovaný typ proměnné.
Kód: [Vybrat]
test(x) {
    print("type: {x.type}")
}
Deklarace je nezajímavá. New je relikt. Prvek může vzniknout parsováním, přetypováním, deserializací, etc.

Tedy zpět k otázce. Které jazyky jsou vlastně ty slabě typované, vůči kterým se ty silně typované vyhrazují? (Nebudeme-li se bavit o C/C++.)
Název: Re:Jak validovat DTO v dynamicky typovaném jazyce?
Přispěvatel: BoneFlute 25. 01. 2022, 05:54:25
Citace: BoneFlute link=topic=25768.msg365402#msg365402
Trochu odbočím — koukals pak ještě někdy na záv. typy? Mám teď čerstvou zkušenost s jejich výukou, tak kdyby byl zájem ;)

Nijak zvlášť. Aktuálně většinu svého volného času věnuju Rustu a realizaci konkrétního projektu. Takže k teorii se vrátím někdy později. Snad.

Ale od posledka a zvláště od vysvětlování forall se mi honí hlavou takové dojmy, že:
- zbytečně se zahodili výjimky, protože se autoři jazyků vykašlali na rozlišování checked/unchecked a nahradili se Option/Maybe.
- místo řešení rozhraní a tříd jako typových omezení, se používá forall, který je sice matematicky čistější, ale programátorsky neintuitivní
- navzdory mé antipatii k Pythonu (ano, typy), tak je mi na něm extrémně sympatická idea, že jazyk by měl programátorovi umožňovat jasně a srozumitelně vyjádřit co chce, a nekomplikovat mu to nějakou ideologií (OOP, FP, typy, etc)

Uvidím co si budu myslet, až se seznámím se Scalou a Idrisem.

PS: Zájem určitě bude, píšu si :) a předem díky za ochotu.
Název: Re:Jak validovat DTO v dynamicky typovaném jazyce?
Přispěvatel: Idris 25. 01. 2022, 09:03:07
Deklarace je nezajímavá. New je relikt. Prvek může vzniknout parsováním, přetypováním, deserializací, etc.
Deklarace je na tom to nejzajímavější, protože se na ní pozná chování (typového systému) jazyka. New je prostě vytvoření objektu, to má každý aspoň mírně OO jazyk. Parsování, přetypování apod. v sobě vždy zahrnuje toto “new” (může se samozřejmě jmenovat jinak, případně být implicitní jako např. v Dartu, ale pořád to je alokace někde na haldě nebo zásobníku).
Název: Re:Jak validovat DTO v dynamicky typovaném jazyce?
Přispěvatel: Idris 25. 01. 2022, 10:25:09
Aktuálně většinu svého volného času věnuju Rustu a realizaci konkrétního projektu.
To zní dobře. Taky v Rustu poslední dobou dost píšu.
Ale od posledka a zvláště od vysvětlování forall se mi honí hlavou takové dojmy, že:
- navzdory mé antipatii k Pythonu (ano, typy), tak je mi na něm extrémně sympatická idea, že jazyk by měl programátorovi umožňovat jasně a srozumitelně vyjádřit co chce, a nekomplikovat mu to nějakou ideologií (OOP, FP, typy, etc)
Jo, takové jazyky jsou nejlepší. Podle tvůrců takový pragmatismus stojí za návrhem Go a Rustu. Ovšem třeba u Haskellu se asi nějaké teorii vyhnout nejde. Ale jakmile v nějaké diskusi dojde na ideologii, je to vošajslich :)
Uvidím co si budu myslet, až se seznámím se Scalou a Idrisem.
To jsem zvědav :) Poslední verze Scaly taky dostala silnější typový systém (path dependence).
Název: Re:Jak validovat DTO v dynamicky typovaném jazyce?
Přispěvatel: uetoyo 25. 01. 2022, 12:04:43
Tedy zpět k otázce. Které jazyky jsou vlastně ty slabě typované, vůči kterým se ty silně typované vyhrazují?

Tak často se uvádí třeba, že neprovádí za zády žádná taková "zvěrstva".
 >>> True + 1
2
Otázka je, jestli to lze Pythonu vyčítat, když má ten typ implementovanou metodu, která toto přesně umožní. Pokud chci takové chování můžu ve spoustě jazycích použít extension methods. Skoro by se dalo říct, že to je moje "algebraická" neznalost, protože ten typ na to má prostě operaci. Být tebou mrknu se pro zajímavost na Scala 3 a Julia. Ty mají dle mého názoru zajímavý typový systém a mému srdci jsou bližší než např. Rust.
Název: Re:Jak validovat DTO v dynamicky typovaném jazyce?
Přispěvatel: Jiří Havel 25. 01. 2022, 12:59:22
Tedy zpět k otázce. Které jazyky jsou vlastně ty slabě typované, vůči kterým se ty silně typované vyhrazují?

Tak často se uvádí třeba, že neprovádí za zády žádná taková "zvěrstva".
 >>> True + 1
2
Otázka je, jestli to lze Pythonu vyčítat, když má ten typ implementovanou metodu, která toto přesně umožní. Pokud chci takové chování můžu ve spoustě jazycích použít extension methods. Skoro by se dalo říct, že to je moje "algebraická" neznalost, protože ten typ na to má prostě operaci. Být tebou mrknu se pro zajímavost na Scala 3 a Julia. Ty mají dle mého názoru zajímavý typový systém a mému srdci jsou bližší než např. Rust.
Já třeba vidím zásadní rozdíl v tom, jestli nějakému stringu můžu dát metodu append co bere int (nebo i nějakou generickou verzi) a v tom, že ten int na string zkouší konvertovat překladač.
V prvním případě dá programátor takové všežravé operace jen tam, kde dávají smysl. Ve druhém případě to překladač zkouší všude. Je zásadní rozdíl, pokud se taková konverze děje při konkatenaci stringů, nebo třeba při otevírání souboru.

Implicitní konverze mají nepříjemnou tendenci dít se tam, kde je nikdo nečeká. Respektive čeká je jen guru daného jazyka, kterého už X-krát nepříjemně překvapily.
Název: Re:Jak validovat DTO v dynamicky typovaném jazyce?
Přispěvatel: Ink 25. 01. 2022, 13:18:57
Tedy zpět k otázce. Které jazyky jsou vlastně ty slabě typované, vůči kterým se ty silně typované vyhrazují?

Tak často se uvádí třeba, že neprovádí za zády žádná taková "zvěrstva".
 >>> True + 1
2
Otázka je, jestli to lze Pythonu vyčítat, když má ten typ implementovanou metodu, která toto přesně umožní. Pokud chci takové chování můžu ve spoustě jazycích použít extension methods. Skoro by se dalo říct, že to je moje "algebraická" neznalost, protože ten typ na to má prostě operaci. Být tebou mrknu se pro zajímavost na Scala 3 a Julia. Ty mají dle mého názoru zajímavý typový systém a mému srdci jsou bližší než např. Rust.
Já třeba vidím zásadní rozdíl v tom, jestli nějakému stringu můžu dát metodu append co bere int (nebo i nějakou generickou verzi) a v tom, že ten int na string zkouší konvertovat překladač.
V prvním případě dá programátor takové všežravé operace jen tam, kde dávají smysl. Ve druhém případě to překladač zkouší všude. Je zásadní rozdíl, pokud se taková konverze děje při konkatenaci stringů, nebo třeba při otevírání souboru.

Implicitní konverze mají nepříjemnou tendenci dít se tam, kde je nikdo nečeká. Respektive čeká je jen guru daného jazyka, kterého už X-krát nepříjemně překvapily.

Zcela zásadní nectnost Pythonu (z mého hlediska) je, že neudělali boolovský typ v podmínkách exkluzivní. Že umožnili podmínky typu if (x), kde x může být číslo, řetězec, kontejner nebo jakýkoli jiný objekt (když nemá __bool__ nebo __len__(), bere se jako True), je podle mě chyba návrhu.

Na druhou stranu je bool legitimním a přiznaným celočíselným typem, takže to sčítání není problém, který bych řešil:

https://docs.python.org/3/reference/datamodel.html#index-10
Název: Re:Jak validovat DTO v dynamicky typovaném jazyce?
Přispěvatel: Jiří Havel 25. 01. 2022, 13:45:39
Zcela zásadní nectnost Pythonu (z mého hlediska) je, že neudělali boolovský typ v podmínkách exkluzivní. Že umožnili podmínky typu if (x), kde x může být číslo, řetězec, kontejner nebo jakýkoli jiný objekt (když nemá __bool__ nebo __len__(), bere se jako True), je podle mě chyba návrhu.
Souhlas, hlavně to chybějící _bool_ je solidní past.
Citace
Na druhou stranu je bool legitimním a přiznaným celočíselným typem, takže to sčítání není problém, který bych řešil:

https://docs.python.org/3/reference/datamodel.html#index-10
Bool je teda dost pochybný celočíselný typ. Problém není v tom, že by to chování nebylo přiznané v dokumentaci, ale v tom že většina programátorů dokumentaci nemá našprtanou. Každá věc, kterou je třeba přiznat v dokumentaci, je potenciální past.
Ukažte mi programátora, který kompletně pročetl veškerou dokumentaci, než začal nějaký jazyk používat. Do dokumentace se leze až ve chvílí, kdy si člověk uvědomí, že něco neví.
Název: Re:Jak validovat DTO v dynamicky typovaném jazyce?
Přispěvatel: BoneFlute 25. 01. 2022, 15:07:20
Tedy zpět k otázce. Které jazyky jsou vlastně ty slabě typované, vůči kterým se ty silně typované vyhrazují?

Tak často se uvádí třeba, že neprovádí za zády žádná taková "zvěrstva".
 >>> True + 1
2
Otázka je, jestli to lze Pythonu vyčítat, když má ten typ implementovanou metodu, která toto přesně umožní. Pokud chci takové chování můžu ve spoustě jazycích použít extension methods. Skoro by se dalo říct, že to je moje "algebraická" neznalost, protože ten typ na to má prostě operaci. Být tebou mrknu se pro zajímavost na Scala 3 a Julia. Ty mají dle mého názoru zajímavý typový systém a mému srdci jsou bližší než např. Rust.
Já třeba vidím zásadní rozdíl v tom, jestli nějakému stringu můžu dát metodu append co bere int (nebo i nějakou generickou verzi) a v tom, že ten int na string zkouší konvertovat překladač.
V prvním případě dá programátor takové všežravé operace jen tam, kde dávají smysl. Ve druhém případě to překladač zkouší všude. Je zásadní rozdíl, pokud se taková konverze děje při konkatenaci stringů, nebo třeba při otevírání souboru.

Implicitní konverze mají nepříjemnou tendenci dít se tam, kde je nikdo nečeká. Respektive čeká je jen guru daného jazyka, kterého už X-krát nepříjemně překvapily.

OK, jenže v tom vidím určitý problém. Jak jsem psal zde (https://forum.root.cz/index.php?topic=25768.msg365341#msg365341): "Skutečnost, že se mi Javascript snaží automaticky konvertovat cokoliv podobného číslu na číslo má sice vliv na programátorský prožitek, ale že by z toho musela být extra kategorie si nemyslím."

Můžete oprávněně namítnout, že mám nízké požadavky a dám vám za pravdu. Ale Idris tady tvrdil (https://forum.root.cz/index.php?topic=25768.msg365339#msg365339), že než statické verzus dynamické, to je mnohem zásadnějším rozdílem silné verzus slabé. A to mi přijde moc divokej matroš.

Tak jak teda?

Je teda silné verzus slabé "jen" o vhodném/nevhodném samo konvertování, nebo je v tom víc?
Název: Re:Jak validovat DTO v dynamicky typovaném jazyce?
Přispěvatel: Idris 25. 01. 2022, 15:24:00
Ale Idris tady tvrdil (https://forum.root.cz/index.php?topic=25768.msg365339#msg365339), ž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. Ale je fakt, že ta definice založená na konvertibilitě je mnohem zajímavější, zvlášť když se někdo odmítá bavit o C/C++ :)
Název: Re:Jak validovat DTO v dynamicky typovaném jazyce?
Přispěvatel: Jiří Havel 25. 01. 2022, 15:29:18
Tedy zpět k otázce. Které jazyky jsou vlastně ty slabě typované, vůči kterým se ty silně typované vyhrazují?

Tak často se uvádí třeba, že neprovádí za zády žádná taková "zvěrstva".
 >>> True + 1
2
Otázka je, jestli to lze Pythonu vyčítat, když má ten typ implementovanou metodu, která toto přesně umožní. Pokud chci takové chování můžu ve spoustě jazycích použít extension methods. Skoro by se dalo říct, že to je moje "algebraická" neznalost, protože ten typ na to má prostě operaci. Být tebou mrknu se pro zajímavost na Scala 3 a Julia. Ty mají dle mého názoru zajímavý typový systém a mému srdci jsou bližší než např. Rust.
Já třeba vidím zásadní rozdíl v tom, jestli nějakému stringu můžu dát metodu append co bere int (nebo i nějakou generickou verzi) a v tom, že ten int na string zkouší konvertovat překladač.
V prvním případě dá programátor takové všežravé operace jen tam, kde dávají smysl. Ve druhém případě to překladač zkouší všude. Je zásadní rozdíl, pokud se taková konverze děje při konkatenaci stringů, nebo třeba při otevírání souboru.

Implicitní konverze mají nepříjemnou tendenci dít se tam, kde je nikdo nečeká. Respektive čeká je jen guru daného jazyka, kterého už X-krát nepříjemně překvapily.

OK, jenže v tom vidím určitý problém. Jak jsem psal zde (https://forum.root.cz/index.php?topic=25768.msg365341#msg365341): "Skutečnost, že se mi Javascript snaží automaticky konvertovat cokoliv podobného číslu na číslo má sice vliv na programátorský prožitek, ale že by z toho musela být extra kategorie si nemyslím."

Můžete oprávněně namítnout, že mám nízké požadavky a dám vám za pravdu. Ale Idris tady tvrdil (https://forum.root.cz/index.php?topic=25768.msg365339#msg365339), že než statické verzus dynamické, to je mnohem zásadnějším rozdílem silné verzus slabé. A to mi přijde moc divokej matroš.

Tak jak teda?

Je teda silné verzus slabé "jen" o vhodném/nevhodném samo konvertování, nebo je v tom víc?
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.
Název: Re:Jak validovat DTO v dynamicky typovaném jazyce?
Přispěvatel: Ink 25. 01. 2022, 15:35:20
Na druhou stranu je bool legitimním a přiznaným celočíselným typem, takže to sčítání není problém, který bych řešil:

https://docs.python.org/3/reference/datamodel.html#index-10
Bool je teda dost pochybný celočíselný typ. Problém není v tom, že by to chování nebylo přiznané v dokumentaci, ale v tom že většina programátorů dokumentaci nemá našprtanou. Každá věc, kterou je třeba přiznat v dokumentaci, je potenciální past.
Ukažte mi programátora, který kompletně pročetl veškerou dokumentaci, než začal nějaký jazyk používat. Do dokumentace se leze až ve chvílí, kdy si člověk uvědomí, že něco neví.

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. Jasně, vzhledem k výše napsanému bych osobně bool fakt úplně vyloučil z kolektivu a nedovolil ani srovnávání ani sčítání s ostatními objekty. Ale to už se zas z opačné strany dostáváme k tomu, že Guido a spol. nikdy neměli nechat ostatní typy objektů, aby boolu lezly do zelí. Tam je ten zásadní problém a vždycky bude, pokud tohle nějak nepořeší třeba Python 4.
Název: Re:Jak validovat DTO v dynamicky typovaném jazyce?
Přispěvatel: Jiří Havel 25. 01. 2022, 16:05:17
Na druhou stranu je bool legitimním a přiznaným celočíselným typem, takže to sčítání není problém, který bych řešil:

https://docs.python.org/3/reference/datamodel.html#index-10
Bool je teda dost pochybný celočíselný typ. Problém není v tom, že by to chování nebylo přiznané v dokumentaci, ale v tom že většina programátorů dokumentaci nemá našprtanou. Každá věc, kterou je třeba přiznat v dokumentaci, je potenciální past.
Ukažte mi programátora, který kompletně pročetl veškerou dokumentaci, než začal nějaký jazyk používat. Do dokumentace se leze až ve chvílí, kdy si člověk uvědomí, že něco neví.

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.

Název: Re:Jak validovat DTO v dynamicky typovaném jazyce?
Přispěvatel: A.P.Hacker 25. 01. 2022, 16:11:14
mypy ma prepinac --strict-boolean
Název: Re:Jak validovat DTO v dynamicky typovaném jazyce?
Přispěvatel: Idris 25. 01. 2022, 16:11:48
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.
Z tohoto důvodu mám rád jazyky, které vyžadují explicitní přetypování i třeba u typových aliasů (Ada).
Název: Re:Jak validovat DTO v dynamicky typovaném jazyce?
Přispěvatel: A.P.Hacker 25. 01. 2022, 16:14:48
ale tichou a nenápadnou konverzí na totální nesmysl.

neni konverze
Název: Re:Jak validovat DTO v dynamicky typovaném jazyce?
Přispěvatel: BoneFlute 25. 01. 2022, 16:56:24
Ale Idris tady tvrdil (https://forum.root.cz/index.php?topic=25768.msg365339#msg365339), ž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 ;-)
Název: Re:Jak validovat DTO v dynamicky typovaném jazyce?
Přispěvatel: Ink 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.
Název: Re:Jak validovat DTO v dynamicky typovaném jazyce?
Přispěvatel: Idris 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.
Název: Re:Jak validovat DTO v dynamicky typovaném jazyce?
Přispěvatel: Idris 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).
Název: Re:Jak validovat DTO v dynamicky typovaném jazyce?
Přispěvatel: uetoyo 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
Název: Re:Jak validovat DTO v dynamicky typovaném jazyce?
Přispěvatel: BoneFlute 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í.
Název: Re:Jak validovat DTO v dynamicky typovaném jazyce?
Přispěvatel: uetoyo 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.
 
Název: Re:Jak validovat DTO v dynamicky typovaném jazyce?
Přispěvatel: Idris 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.
Název: Re:Jak validovat DTO v dynamicky typovaném jazyce?
Přispěvatel: Idris 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).
Název: Re:Jak validovat DTO v dynamicky typovaném jazyce?
Přispěvatel: uetoyo 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á.
Název: Re:Jak validovat DTO v dynamicky typovaném jazyce?
Přispěvatel: Idris 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.
Název: Re:Jak validovat DTO v dynamicky typovaném jazyce?
Přispěvatel: Idris 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
Název: Re:Jak validovat DTO v dynamicky typovaném jazyce?
Přispěvatel: Idris 25. 01. 2022, 18:15:02
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 :)
Název: Re:Jak validovat DTO v dynamicky typovaném jazyce?
Přispěvatel: BoneFlute 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
Název: Re:Jak validovat DTO v dynamicky typovaném jazyce?
Přispěvatel: BoneFlute 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...
Název: Re:Jak validovat DTO v dynamicky typovaném jazyce?
Přispěvatel: Idris 25. 01. 2022, 23:23:06
Když mi spadne aplikace na nějaké výjimce,  za běhu, u klienta, tak je mi to k prdu
Jenže o to vůbec nejde, důležité je, že to vůbec jde nějak ošetřit. U toho druhého typu jazyků to prostě nejde z principu, protože ta typová informace chybí a runtime nemá jak tu chybu vůbec rozpoznat. To je snad jasné jak facka, ne?
Název: Re:Jak validovat DTO v dynamicky typovaném jazyce?
Přispěvatel: Idris 25. 01. 2022, 23:26:22
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
  ::)
Název: Re:Jak validovat DTO v dynamicky typovaném jazyce?
Přispěvatel: BoneFlute 25. 01. 2022, 23:45:45
Když mi spadne aplikace na nějaké výjimce,  za běhu, u klienta, tak je mi to k prdu
Jenže o to vůbec nejde, důležité je, že to vůbec jde nějak ošetřit. U toho druhého typu jazyků to prostě nejde z principu, protože ta typová informace chybí a runtime nemá jak tu chybu vůbec rozpoznat. To je snad jasné jak facka, ne?
Tou druhou skupinou myslíš ty slabě typované? Ty, o nichž se celou dobu bavím a tvrdím, že defakto neexistují? Takže ta argumentace je taková, že silně/slabě typované je důležitější než staticky/dynamicky, protože když by nějaký slabě typovaný jazyk existoval, tak by to bylo špatně? To si ze mě děláš legraci, že jo.
Název: Re:Jak validovat DTO v dynamicky typovaném jazyce?
Přispěvatel: Idris 25. 01. 2022, 23:55:23
Když mi spadne aplikace na nějaké výjimce,  za běhu, u klienta, tak je mi to k prdu
Jenže o to vůbec nejde, důležité je, že to vůbec jde nějak ošetřit. U toho druhého typu jazyků to prostě nejde z principu, protože ta typová informace chybí a runtime nemá jak tu chybu vůbec rozpoznat. To je snad jasné jak facka, ne?
Tou druhou skupinou myslíš ty slabě typované? Ty, o nichž se celou dobu bavím a tvrdím, že defakto neexistují? Takže ta argumentace je taková, že silně/slabě typované je důležitější než staticky/dynamicky, protože když by nějaký slabě typovaný jazyk existoval, tak by to bylo špatně? To si ze mě děláš legraci, že jo.
C++
Název: Re:Jak validovat DTO v dynamicky typovaném jazyce?
Přispěvatel: BoneFlute 26. 01. 2022, 00:12:36
Když mi spadne aplikace na nějaké výjimce,  za běhu, u klienta, tak je mi to k prdu
Jenže o to vůbec nejde, důležité je, že to vůbec jde nějak ošetřit. U toho druhého typu jazyků to prostě nejde z principu, protože ta typová informace chybí a runtime nemá jak tu chybu vůbec rozpoznat. To je snad jasné jak facka, ne?
Tou druhou skupinou myslíš ty slabě typované? Ty, o nichž se celou dobu bavím a tvrdím, že defakto neexistují? Takže ta argumentace je taková, že silně/slabě typované je důležitější než staticky/dynamicky, protože když by nějaký slabě typovaný jazyk existoval, tak by to bylo špatně? To si ze mě děláš legraci, že jo.
C++

Hele, můj dědeček, budiž mu země lehká, programoval ve Zlíně pro velkou modrou, ještě před děrnými štítky. Zkusíme to porovnat s nějakým šikovným programovací jazykem? Já nevím, co třeba Idris?

Protože on mi vyprávěl, jak je strašně podstatné, aby ty kolíky byly kulatý, a ne čtvercoví. Protože pak se to tolik netrhá. A to musíš uznat, že je podstatný rozdíl. Určitě podstatnější, než nějaké silné/slabé typování (natož statika/dynamika).
Název: Re:Jak validovat DTO v dynamicky typovaném jazyce?
Přispěvatel: Idris 26. 01. 2022, 00:16:52
Když mi spadne aplikace na nějaké výjimce,  za běhu, u klienta, tak je mi to k prdu
Jenže o to vůbec nejde, důležité je, že to vůbec jde nějak ošetřit. U toho druhého typu jazyků to prostě nejde z principu, protože ta typová informace chybí a runtime nemá jak tu chybu vůbec rozpoznat. To je snad jasné jak facka, ne?
Tou druhou skupinou myslíš ty slabě typované? Ty, o nichž se celou dobu bavím a tvrdím, že defakto neexistují? Takže ta argumentace je taková, že silně/slabě typované je důležitější než staticky/dynamicky, protože když by nějaký slabě typovaný jazyk existoval, tak by to bylo špatně? To si ze mě děláš legraci, že jo.
C++
Hele, můj dědeček, budiž mu země lehká, programoval ve Zlíně pro velkou modrou, ještě před děrnými štítky.
Hezký. Ale C++ se ještě používá a tudíž evidentně existuje. Možná se ti víc pozdává Pascal jako alternativní příklad.
Název: Re:Jak validovat DTO v dynamicky typovaném jazyce?
Přispěvatel: BoneFlute 26. 01. 2022, 00:21:56
Když mi spadne aplikace na nějaké výjimce,  za běhu, u klienta, tak je mi to k prdu
Jenže o to vůbec nejde, důležité je, že to vůbec jde nějak ošetřit. U toho druhého typu jazyků to prostě nejde z principu, protože ta typová informace chybí a runtime nemá jak tu chybu vůbec rozpoznat. To je snad jasné jak facka, ne?
Tou druhou skupinou myslíš ty slabě typované? Ty, o nichž se celou dobu bavím a tvrdím, že defakto neexistují? Takže ta argumentace je taková, že silně/slabě typované je důležitější než staticky/dynamicky, protože když by nějaký slabě typovaný jazyk existoval, tak by to bylo špatně? To si ze mě děláš legraci, že jo.
C++
Hele, můj dědeček, budiž mu země lehká, programoval ve Zlíně pro velkou modrou, ještě před děrnými štítky.
Hezký. Ale C++ se ještě používá a tudíž evidentně existuje. Možná se ti víc pozdává Pascal jako alternativní příklad.

Ne, nepozdává. Pokud archeologie, tak Indiana Jones.

Hele, dokavad nepřišel Rust, tak bych možná váhal. Ale nyní jsem přesvědčen, že se úspěšně vyhnu práci dělat v C++. Zrovna třeba ten projekt, který jsem zmiňoval, tak jsem původně zkoušel psát v C++. Chvilku jsem se s tím pral a strašně fňukal. Pak jsem se na to vykašlal. Prostě historie, dinosauři, pravěk, finito, ok?!

Někde se ta čára udělat musí. Já jí mám nad C++. Přijmi to. Bavit se se mnou nemusíš.
Název: Re:Jak validovat DTO v dynamicky typovaném jazyce?
Přispěvatel: Idris 26. 01. 2022, 00:39:09
Hele, dokavad nepřišel Rust, tak bych možná váhal. Ale nyní jsem přesvědčen, že se úspěšně vyhnu práci dělat v C++. Zrovna třeba ten projekt, který jsem zmiňoval, tak jsem původně zkoušel psát v C++. Chvilku jsem se s tím pral a strašně fňukal. Pak jsem se na to vykašlal.
To chápu, tady není moc do řešit.
Název: Re:Jak validovat DTO v dynamicky typovaném jazyce?
Přispěvatel: Idris 26. 01. 2022, 00:39:57
Někde se ta čára udělat musí. Já jí mám nad C++. Přijmi to. Bavit se se mnou nemusíš.
Nikdo nechce, abys C++ používal, ale uznat jeho existenci a rozšíření musíš ;)
Název: Re:Jak validovat DTO v dynamicky typovaném jazyce?
Přispěvatel: BoneFlute 26. 01. 2022, 00:49:54
Někde se ta čára udělat musí. Já jí mám nad C++. Přijmi to. Bavit se se mnou nemusíš.
Nikdo nechce, abys C++ používal, ale uznat jeho existenci a rozšíření musíš ;)

Ano uznávám jeho existenci.

Ne, neuznávám smysluplnost kategorie slabé/silné typování. :P :) :)
Název: Re:Jak validovat DTO v dynamicky typovaném jazyce?
Přispěvatel: Idris 26. 01. 2022, 00:53:25
Někde se ta čára udělat musí. Já jí mám nad C++.
Nikdo nechce, abys C++ používal, ale uznat jeho existenci a rozšíření musíš ;)
Ano uznávám jeho existenci.
To už je posun správným směrem :D

Teď Ti ještě zbývá prozřít v případě dynamických jazyků, tedy že statické typování není zas taková spása :P
Název: Re:Jak validovat DTO v dynamicky typovaném jazyce?
Přispěvatel: BoneFlute 26. 01. 2022, 01:08:47
Teď Ti ještě zbývá prozřít v případě dynamických jazyků, tedy že statické typování není zas taková spása :P
A což o to. S tím nemám problém. Určitě je lepší dynamický jazyk, než žádný.
Název: Re:Jak validovat DTO v dynamicky typovaném jazyce?
Přispěvatel: uetoyo 26. 01. 2022, 01:14:53
Zvláštní je, že k těm rigidním statickým silně typovaným jazykům vůbec netíhnou matematici.
Název: Re:Jak validovat DTO v dynamicky typovaném jazyce?
Přispěvatel: uetoyo 26. 01. 2022, 01:16:33
A což o to. S tím nemám problém. Určitě je lepší dynamický jazyk, než žádný.

http://bracha.org/pluggable-types.pdf

- Type Systems are subtle and hard
- Relying on them is dangerous

 8)
Název: Re:Jak validovat DTO v dynamicky typovaném jazyce?
Přispěvatel: BoneFlute 26. 01. 2022, 01:31:45
A což o to. S tím nemám problém. Určitě je lepší dynamický jazyk, než žádný.

http://bracha.org/pluggable-types.pdf

- Type Systems are subtle and hard
- Relying on them is dangerous

 8)

Hele, jak dlouho jsme se tu přetahovali o tom, že kategorie silný/slabý typy je zbytná. Teď se tu budeme přetahovat o tom, že static/dynamic typy znamená hlavně compiletime/runtime? Asi jsem unaven. Tím spíše, že je to co půl roku znova, a nic z toho.
Název: Re:Jak validovat DTO v dynamicky typovaném jazyce?
Přispěvatel: uetoyo 26. 01. 2022, 08:40:41
A což o to. S tím nemám problém. Určitě je lepší dynamický jazyk, než žádný.

http://bracha.org/pluggable-types.pdf

- Type Systems are subtle and hard
- Relying on them is dangerous

 8)

Hele, jak dlouho jsme se tu přetahovali o tom, že kategorie silný/slabý typy je zbytná. Teď se tu budeme přetahovat o tom, že static/dynamic typy znamená hlavně compiletime/runtime? Asi jsem unaven. Tím spíše, že je to co půl roku znova, a nic z toho.

Jediný, kdo se o něčem neustále hádá jsi ty. Nevšiml jsem si, že by tu někdo kromě tebe psal hodnotící soudy o  dynamickém/statickém/silném/slabém typování. Jen se vypíchly nějaké výhody a nevýhody a případně přidal odkaz.
Je spousta lidí co jsou schopni psát v Clojure i Scala nebo Python, Haskell, Rust a nedělají z toho takové drama jako ty.
Teď to pár let bude holt Rust. Já se o Rust zajímal od doby vzniku, koment z roku 2016, ale už dřív jsem se tu po něm pídil v diskuzích: https://www.root.cz/clanky/programovaci-jazyk-rust-nahrada-c-nebo-slepa-cesta/nazory/vlakno/7/. Ale zdá se mi, že kolem něj roste skupina lidí, co budou zase slepě tlačit Rust všude, jeho typový systém je to nejlepší na světě... ehhh to už tu bylo s C++ , Java a atd. Ano, škoda ztrácet čas diskuzí.
Název: Re:Jak validovat DTO v dynamicky typovaném jazyce?
Přispěvatel: Idris 26. 01. 2022, 08:52:42
Teď to pár let bude holt Rust. […] Ale zdá se mi, že kolem něj roste skupina lidí, co budou zase slepě tlačit Rust všude, jeho typový systém je to nejlepší na světě... ehhh to už tu bylo s C++ , Java a atd.
Tady na fóru možná, jinak je rustí komunita celkem přátelská, když člověk nezmiňuje některé červené hadry :)
Název: Re:Jak validovat DTO v dynamicky typovaném jazyce?
Přispěvatel: BoneFlute 26. 01. 2022, 19:42:32
A což o to. S tím nemám problém. Určitě je lepší dynamický jazyk, než žádný.

http://bracha.org/pluggable-types.pdf

- Type Systems are subtle and hard
- Relying on them is dangerous

 8)

Hele, jak dlouho jsme se tu přetahovali o tom, že kategorie silný/slabý typy je zbytná. Teď se tu budeme přetahovat o tom, že static/dynamic typy znamená hlavně compiletime/runtime? Asi jsem unaven. Tím spíše, že je to co půl roku znova, a nic z toho.

Jediný, kdo se o něčem neustále hádá jsi ty. Nevšiml jsem si, že by tu někdo kromě tebe psal hodnotící soudy o  dynamickém/statickém/silném/slabém typování. Jen se vypíchly nějaké výhody a nevýhody a případně přidal odkaz.
Je spousta lidí co jsou schopni psát v Clojure i Scala nebo Python, Haskell, Rust a nedělají z toho takové drama jako ty.
Teď to pár let bude holt Rust. Já se o Rust zajímal od doby vzniku, koment z roku 2016, ale už dřív jsem se tu po něm pídil v diskuzích: https://www.root.cz/clanky/programovaci-jazyk-rust-nahrada-c-nebo-slepa-cesta/nazory/vlakno/7/. Ale zdá se mi, že kolem něj roste skupina lidí, co budou zase slepě tlačit Rust všude, jeho typový systém je to nejlepší na světě... ehhh to už tu bylo s C++ , Java a atd. Ano, škoda ztrácet čas diskuzí.
Musíš mi odpustit mou zvědavost. Prostě tu zazněla absurdní tvrzení, že silné/slabé typování je podstatnější jak statické/dynamické. A neodolal jsem, abych nezačal zjišťovat, zda mi něco neuniklo. Mohu tě upokojit, že jsem svá data dostal, takže dám zase chvilku pokoj.
Název: Re:Jak validovat DTO v dynamicky typovaném jazyce?
Přispěvatel: uetoyo 26. 01. 2022, 20:57:52
@BoneFlute
Tak většinou s čím přicházíš, s tím také odcházíš. Přijdeš všem vysvětlit důležitost typů i těm co o nich vědí víc než ty (Idris). Pak se ptáš na triviality a odcházíš se stejným světonázorem.  V pořádku, svět je dost velký pro nás všechny. 8) ;D
Název: Re:Jak validovat DTO v dynamicky typovaném jazyce?
Přispěvatel: BoneFlute 26. 01. 2022, 21:29:16
@BoneFlute
Tak většinou s čím přicházíš, s tím také odcházíš.
Je to tak. Je to škoda, ale co nadělám. Někdy má člověk smůlu.
Název: Re:Jak validovat DTO v dynamicky typovaném jazyce?
Přispěvatel: Idris 26. 01. 2022, 22:02:48
@BoneFlute
Tak většinou s čím přicházíš, s tím také odcházíš.
Je to tak. Je to škoda, ale co nadělám. Někdy má člověk smůlu.
Ta diskuse o záv. typech zhruba před rokem byla náhodou celkem dobrá, a teď by byla ještě lepší, když mají účastníci o rok více zkušeností se sofistikovanými typovými systémy. Za sebe můžu říct, že před rokem jsem téměř neznal OCaml nebo (moderní) Adu (ta zajímavě kombinuje statické a dynamické typování), kde jsou taky lahůdky.
Název: Re:Jak validovat DTO v dynamicky typovaném jazyce?
Přispěvatel: BoneFlute 26. 01. 2022, 23:01:42
... (moderní) Adu (ta zajímavě kombinuje statické a dynamické typování), kde jsou taky lahůdky.

Chceš to rozvést?
Název: Re:Jak validovat DTO v dynamicky typovaném jazyce?
Přispěvatel: Idris 26. 01. 2022, 23:07:17
před rokem jsem téměř neznal ... (moderní) Adu (ta zajímavě kombinuje statické a dynamické typování), kde jsou taky lahůdky.
Chceš to rozvést?
Ani ne, furt ji moc neznám (tu nejnovější verzi), takže bych nerad psal blbosti. Nicméně jde o to, že Ada je poměrně přísně staticky typovaná, ale má (verze 2012, podle definice) závislostní typy, které jsou ale implementované pomocí tzv. predikátů, z nichž některé můžou být dynamické. Takže jestli jsem to dobře pochopil, částečně se chová jako třeba Julia s jejím existenciálním typovým kvantifikátorem. Právě čtu Ada 2012 rationale, ale je to bichle a mám i jiné věci, takže mi to jde jak psovi pastva.
Název: Re:Jak validovat DTO v dynamicky typovaném jazyce?
Přispěvatel: uetoyo 26. 01. 2022, 23:16:38
před rokem jsem téměř neznal ... (moderní) Adu (ta zajímavě kombinuje statické a dynamické typování), kde jsou taky lahůdky.
Chceš to rozvést?
Ani ne, furt ji moc neznám (tu nejnovější verzi), takže bych nerad psal blbosti. Nicméně jde o to, že Ada je poměrně přísně staticky typovaná, ale má (verze 2012, podle definice) závislostní typy, které jsou ale implementované pomocí tzv. predikátů, z nichž některé můžou být dynamické. Takže jestli jsem to dobře pochopil, částečně se chová jako třeba Julia s jejím existenciálním typovým kvantifikátorem. Právě čtu Ada 2012 rationale, ale je to bichle a mám i jiné věci, takže mi to jde jak psovi pastva.

Nejsem tedy znalec typových systémů, ale Ada jsem drtil 10let zpátky tzn. že 2012 jsem ještě chytil. Co jsem tenkrát pochopil, tak velká energie se dávala do té podmnožiny která se jmenuje SPARK. Problém Ady je stejný jako byl u Fortranu, tzn. málo dostupných knihoven. Ale jazyk je to pěkný. Zde na rootu někdo občas přispěl komentářem, protože v něm měli produkční software. A to jsem jim záviděl :D
Název: Re:Jak validovat DTO v dynamicky typovaném jazyce?
Přispěvatel: Idris 26. 01. 2022, 23:33:42
Nejsem tedy znalec typových systémů, ale Ada jsem drtil 10let zpátky tzn. že 2012 jsem ještě chytil. Co jsem tenkrát pochopil, tak velká energie se dávala do té podmnožiny která se jmenuje SPARK.
SPARK znám ještě méně, ale vypadá rozhodně sympaticky, má formální verifikaci a od verze 2014 kontrakty. Musím se na něj podívat podrobněji, zatím mě míjel.
Název: Re:Jak validovat DTO v dynamicky typovaném jazyce?
Přispěvatel: BoneFlute 27. 01. 2022, 03:20:53
před rokem jsem téměř neznal ... (moderní) Adu (ta zajímavě kombinuje statické a dynamické typování), kde jsou taky lahůdky.
Chceš to rozvést?
Ani ne, furt ji moc neznám (tu nejnovější verzi), takže bych nerad psal blbosti. Nicméně jde o to, že Ada je poměrně přísně staticky typovaná, ale má (verze 2012, podle definice) závislostní typy, které jsou ale implementované pomocí tzv. predikátů, z nichž některé můžou být dynamické. Takže jestli jsem to dobře pochopil, částečně se chová jako třeba Julia s jejím existenciálním typovým kvantifikátorem. Právě čtu Ada 2012 rationale, ale je to bichle a mám i jiné věci, takže mi to jde jak psovi pastva.
Moc rád bych pochopil co si mám představit pod pojmem “kombinovat dynamické se statickým”. V mé hlavě ty dva pojmy defakto dokonvergovali do významu statické = compile time + přinutit vývojáře ohlídat, dynamické = runtime + nemusíš nic. (Tedy dva protichůdné póly.)

Je docela dost možné, ze si pod tím opět představuju něco jiného než většinová společnost.

Příklad:
Kód: [Vybrat]
fn inc(a: Number): Number {…} může být statický i dynamický.
Toto
Kód: [Vybrat]
fn concat(a, b) {…} taky. Nebo toto :
Kód: [Vybrat]
{
xs[] = module.loadFrom(name)
}

Nic z toho mi nepřijde jenom dynamické nebo jenom statické. Možná špatný příklady, možná omezený rozhled. Pravděpodobně špatné pojmenování věci?
Byl by si schopen uvést nějaký demonstrativní příklad? Co si mám představit co vidíš, když mluvíš o dynamickém typovaní? A jak jde statické a dynamické kombinovat?
Název: Re:Jak validovat DTO v dynamicky typovaném jazyce?
Přispěvatel: Ink 27. 01. 2022, 09:10:59
Nic z toho mi nepřijde jenom dynamické nebo jenom statické. Možná špatný příklady, možná omezený rozhled. Pravděpodobně špatné pojmenování věci?
Byl by si schopen uvést nějaký demonstrativní příklad? Co si mám představit co vidíš, když mluvíš o dynamickém typovaní? A jak jde statické a dynamické kombinovat?

Dynamic_Predicate prisne vzato neresi typ v tom smyslu, jak ho zname v beznych jazycich, ale pouze constraints (neco jako kontrakt?) Aspon tak tomu rozumim ja:

http://www.ada-auth.org/standards/12rat/html/Rat12-2-5.html

Nic, co by neresil treba assert v konstruktoru, nebo?
Název: Re:Jak validovat DTO v dynamicky typovaném jazyce?
Přispěvatel: Idris 27. 01. 2022, 09:11:24
Moc rád bych pochopil co si mám představit pod pojmem “kombinovat dynamické se statickým”.
Ada:
Kód: [Vybrat]
subtype Even is Integer with Dynamic_Predicate => Even mod 2 = 0;
Staticky se kontroluje přiřazení celého čísla, ale predikát je dynamický. To je rozdíl oproti jazykům jako Agda, kde můžu mít typ EvenNat, který je kompletně kontrolovaný v době překladu.

Staticky typované jazyky se dělí na dva základní typy: s běhovými chybami a bez (taky se říká bez výjimek, prostě nedojde k přerušení bloku kódu kvůli chybě). Ty druhé (Agda, SPARK…) vyžadují aspoň GADT nebo nějaký podobný mechanismus a predikáty jako sudost nebo nenulovost se vyjadřují staticky.
Název: Re:Jak validovat DTO v dynamicky typovaném jazyce?
Přispěvatel: Idris 27. 01. 2022, 09:16:38
Dynamic_Predicate prisne vzato neresi typ v tom smyslu, jak ho zname v beznych jazycich, ale pouze constraints (neco jako kontrakt?)
Přesně, kontrakt. Ale v podstatě to je jen implementační detail, protože to staticky (přes typy) udělat jde a zápis typu je v podstatě stejný. Klidně by někdo mohl transpilovat takovéto predikáty z Ady do řekneme Agdy, kde už bude příslušná kontrola v době překladu.

Ostatně i SPARK má staticky ověřované kontrakty, a to je “skoro Ada”.
Název: Re:Jak validovat DTO v dynamicky typovaném jazyce?
Přispěvatel: BoneFlute 27. 01. 2022, 12:55:30
Moc rád bych pochopil co si mám představit pod pojmem “kombinovat dynamické se statickým”.
Ada:
Kód: [Vybrat]
subtype Even is Integer with Dynamic_Predicate => Even mod 2 = 0;
Staticky se kontroluje přiřazení celého čísla, ale predikát je dynamický. To je rozdíl oproti jazykům jako Agda, kde můžu mít typ EvenNat, který je kompletně kontrolovaný v době překladu.

Staticky typované jazyky se dělí na dva základní typy: s běhovými chybami a bez (taky se říká bez výjimek, prostě nedojde k přerušení bloku kódu kvůli chybě). Ty druhé (Agda, SPARK…) vyžadují aspoň GADT nebo nějaký podobný mechanismus a predikáty jako sudost nebo nenulovost se vyjadřují staticky.

A to dynamické znamená, že mi:
Kód: [Vybrat]
function test (x: Even) return Even
begin
   return x + x;
end

test(13)
sice přeloží, ale při běhu to vyhodí výjimku při pokusu zavolat test(13), tak?
Název: Re:Jak validovat DTO v dynamicky typovaném jazyce?
Přispěvatel: Idris 27. 01. 2022, 13:43:15
Moc rád bych pochopil co si mám představit pod pojmem “kombinovat dynamické se statickým”.
Ada:
Kód: [Vybrat]
subtype Even is Integer with Dynamic_Predicate => Even mod 2 = 0;
Staticky se kontroluje přiřazení celého čísla, ale predikát je dynamický. To je rozdíl oproti jazykům jako Agda, kde můžu mít typ EvenNat, který je kompletně kontrolovaný v době překladu.

Staticky typované jazyky se dělí na dva základní typy: s běhovými chybami a bez (taky se říká bez výjimek, prostě nedojde k přerušení bloku kódu kvůli chybě). Ty druhé (Agda, SPARK…) vyžadují aspoň GADT nebo nějaký podobný mechanismus a predikáty jako sudost nebo nenulovost se vyjadřují staticky.

A to dynamické znamená, že mi:
Kód: [Vybrat]
function test (x: Even) return Even
begin
   return x + x;
end

test(13)
sice přeloží, ale při běhu to vyhodí výjimku při pokusu zavolat test(13), tak?
Jo. Aby se to nepřeložilo, chce to mocnější typový systém.
Název: Re:Jak validovat DTO v dynamicky typovaném jazyce?
Přispěvatel: Idris 28. 01. 2022, 12:06:49
A to dynamické znamená, že mi:
Kód: [Vybrat]
function test (x: Even) return Even
begin
   return x + x;
end

test(13)
sice přeloží, ale při běhu to vyhodí výjimku při pokusu zavolat test(13), tak?
Doporučuji mrknout, jak se kontrakty kontrolují v době překladu ve SPARKu (GNATprove), zejména na hinty přímo v kódu (Pragma Assert — nesouvisí s asercí v době běhu). IMHO je tento způsob statické verifikace intuitivnější než holá int. logika à la Agda.
Název: Re:Jak validovat DTO v dynamicky typovaném jazyce?
Přispěvatel: Idris 20. 02. 2022, 14:18:16
- místo řešení rozhraní a tříd jako typových omezení, se používá forall, který je sice matematicky čistější, ale programátorsky neintuitivní
Teď jsem zrovna na tento “problém” narazil při psaní kódu. Tak jen dodám, že v jazyce s GADT se ten neintuitivní forall v existenčním významu používat nemusí, v GADT to jde stejně bez nepříjemných syntaktických konstrukcí.