Co si myslíte o OOP?

v

Re:Co si myslíte o OOP?
« Odpověď #555 kdy: 06. 01. 2019, 15:42:15 »
součtové typy => dynamické typování?
rozhodování o typu za běhu => dynamické typování
co je "rozhodování o typu"?


Re:Co si myslíte o OOP?
« Odpověď #556 kdy: 06. 01. 2019, 15:59:26 »
co je "rozhodování o typu"?
Nemam potrebu se tady tahat za nohu ani hadat o pitomosti :)

v

Re:Co si myslíte o OOP?
« Odpověď #557 kdy: 06. 01. 2019, 16:05:37 »
co je "rozhodování o typu"?
Nemam potrebu se tady tahat za nohu ani hadat o pitomosti :)
tak tak, tyhle mlhavé vágní úvahy...

Kit

Re:Co si myslíte o OOP?
« Odpověď #558 kdy: 06. 01. 2019, 16:05:57 »
součtové typy => dynamické typování?
rozhodování o typu za běhu => dynamické typování
co je "rozhodování o typu"?

To znamená, není předem jasně dáno, že na vstupu je osmibajtový int a nic jiného. Jakmile připustím nějaký "noise", už dynamicky rozhoduji, jaký typ dat na tom vstupu je. Když chci přečíst 512 bajtů (sektor) z disku jako zařízení (ne přes FS), tak staticky říkám, že chci načíst přesně 512 bajtů a v bufferu očekávám 512 platných bajtů. Z FS může přijít i kratší záznam s uvedenou délkou, ale to už je dynamický typ.

Re:Co si myslíte o OOP?
« Odpověď #559 kdy: 06. 01. 2019, 16:07:38 »
tak tak, tyhle mlhavé vágní úvahy...
Nevím, co je na tom vágního. Jestliže máš nějaký vstup a podle toho, co tam přijde, se rozhoduje, jestli je to typ X nebo typ Y, tak tomu já říkám "dynamické typování". Pokud někdo ten pojem používá jinak, rád si to poslechnu. Ale nehodlám si tady hrát na kočku s myší.


Inkvizitor

Re:Co si myslíte o OOP?
« Odpověď #560 kdy: 06. 01. 2019, 16:08:40 »
co je "rozhodování o typu"?
Nemam potrebu se tady tahat za nohu ani hadat o pitomosti :)

Tak dobře, třeba jsem konkrétně já nepochopil, co jsi chtěl říci původním příspěvkem. Pokud jsi chtěl ukázat, že i statický jazyk dokáže zpracovat dynamický vstup, nemám problém.

Inkvizitor

Re:Co si myslíte o OOP?
« Odpověď #561 kdy: 06. 01. 2019, 16:12:51 »
tak tak, tyhle mlhavé vágní úvahy...
Nevím, co je na tom vágního. Jestliže máš nějaký vstup a podle toho, co tam přijde, se rozhoduje, jestli je to typ X nebo typ Y, tak tomu já říkám "dynamické typování". Pokud někdo ten pojem používá jinak, rád si to poslechnu. Ale nehodlám si tady hrát na kočku s myší.

Součtový typ dokáže z různých typů udělat různé hodnoty téhož typu. Pokud si množinu možných vstupních hodnot namodeluješ součtovým typem, je Tvoje tvrzení poměrně sporné. Úplně jiná situace by byla, kdybys použil pro vstup třeba pythonní pickle, tam už se o typech opravdu rozhoduje ad hoc.

v

Re:Co si myslíte o OOP?
« Odpověď #562 kdy: 06. 01. 2019, 16:14:04 »
tak tak, tyhle mlhavé vágní úvahy...
Nevím, co je na tom vágního. Jestliže máš nějaký vstup a podle toho, co tam přijde, se rozhoduje, jestli je to typ X nebo typ Y, tak tomu já říkám "dynamické typování". Pokud někdo ten pojem používá jinak, rád si to poslechnu. Ale nehodlám si tady hrát na kočku s myší.
v Inkvizitorově příkladu se transformuje hodnota staticky daného typu na jinou (opět staticky známého typu), žádné "rozhodování o typu" se tam neděje, stejně jako když třeba porovnáváte celá, v době překladu neznámá, čísla

Re:Co si myslíte o OOP?
« Odpověď #563 kdy: 06. 01. 2019, 16:20:23 »
Tak dobře, třeba jsem konkrétně já nepochopil, co jsi chtěl říci původním příspěvkem. Pokud jsi chtěl ukázat, že i statický jazyk dokáže zpracovat dynamický vstup, nemám problém.
Myslel jsem, že jsem to napsal celkem jasně. Možná ne. Chtěl jsem říct, že otypovat program v době překladu jde jenom tam, kde mám pod kontrolou vstupní typy (lapidárně: "vím, co mi leze dovnitř"). Pokud nevím, co mi leze dovnitř, a ukáže se to až v době běhu, pak jsem v situaci dynamického typování (aka "rozhování o typech až za běhu").

Součtový typ dokáže z různých typů udělat různé hodnoty téhož typu. Pokud si množinu možných vstupních hodnot namodeluješ součtovým typem, je Tvoje tvrzení poměrně sporné.
Mno... Součtový typ je způsob, jak dva (nebo více) typů "schovat pod jeden" - je to čistě proto, že potřebuješ, aby ti z funkce lezl jenom jeden typ. Je to technikálie, nic jiného. Nic to nemění na sémantice toho programu: dovnitř ti leze něco, o čem v době překladu nic nevíš a dozvíš se to až v době běhu - a podle toho, jestli tam bude X nebo Y, půjde program větví A nebo B.

Dalo by se argumentovat i jinak: mohl by sis vytvořit součtový typ, který by obsáhl všechny typy. Nazvěme takový typ Super. Všechny funkce nechť potom mají typ Super -> Super. Byl by takový jazyk/program podle tebe "statický" nebo "dynamický"?

Re:Co si myslíte o OOP?
« Odpověď #564 kdy: 06. 01. 2019, 16:41:15 »
v Inkvizitorově příkladu se transformuje hodnota staticky daného typu na jinou (opět staticky známého typu), žádné "rozhodování o typu" se tam neděje, stejně jako když třeba porovnáváte celá, v době překladu neznámá, čísla
Jak jsem psal někde výš: "Znát typ" není nc jiného než "mít nějakou znalost o datech v tomhle místě programu". "Statické jazyky" se snaží v době překladu ze struktury programu vydedukovat co nejvíc znalostí. "Dynamické jazyky" na to rezignují a znalosti získávají až v době běhu. V tom je ten zásaní rozdíl.

Když použiju součtový typ "StringVal String | IntVal Int", tak tím jenom dávám překladači najevo, že vím, že v tomhle místě programu se za běhu objeví buď integer nebo string. Dynamický jazyk vlastně říká totéž: v tomhle (každém) místě programu nevím, co za běhu bude: int, string, list, ...

Re:Co si myslíte o OOP?
« Odpověď #565 kdy: 06. 01. 2019, 16:48:34 »
součtové typy => dynamické typování?
rozhodování o typu za běhu => dynamické typování
co je "rozhodování o typu"?

To znamená, není předem jasně dáno, že na vstupu je osmibajtový int a nic jiného. Jakmile připustím nějaký "noise", už dynamicky rozhoduji, jaký typ dat na tom vstupu je. Když chci přečíst 512 bajtů (sektor) z disku jako zařízení (ne přes FS), tak staticky říkám, že chci načíst přesně 512 bajtů a v bufferu očekávám 512 platných bajtů. Z FS může přijít i kratší záznam s uvedenou délkou, ale to už je dynamický typ.

Hele, co se naučit nejdřív programovat v nějakém staticky typovaném jazyce? Haskell i Scala mají literatury pro začátečníky dost.

BoneFlute

  • *****
  • 1 981
    • Zobrazit profil
Re:Co si myslíte o OOP?
« Odpověď #566 kdy: 06. 01. 2019, 16:52:22 »
v Inkvizitorově příkladu se transformuje hodnota staticky daného typu na jinou (opět staticky známého typu), žádné "rozhodování o typu" se tam neděje, stejně jako když třeba porovnáváte celá, v době překladu neznámá, čísla
Jak jsem psal někde výš: "Znát typ" není nc jiného než "mít nějakou znalost o datech v tomhle místě programu". "Statické jazyky" se snaží v době překladu ze struktury programu vydedukovat co nejvíc znalostí. "Dynamické jazyky" na to rezignují a znalosti získávají až v době běhu. V tom je ten zásaní rozdíl.

Když použiju součtový typ "StringVal String | IntVal Int", tak tím jenom dávám překladači najevo, že vím, že v tomhle místě programu se za běhu objeví buď integer nebo string. Dynamický jazyk vlastně říká totéž: v tomhle (každém) místě programu nevím, co za běhu bude: int, string, list, ...

Statické typování: předem vím, co se může stát, a tomu přizpůsobím program.
Dynamické typování: teprve za běhu řeším, co se stalo, a podle toho mám napsaný program.

Zásadní rozdíl je (dle mého chápání) compile-time, versus run-time.

Ve statickém jazyce nepřeložím.
V dynamickém jazyce mi vypadne výjimka za běhu.

v

Re:Co si myslíte o OOP?
« Odpověď #567 kdy: 06. 01. 2019, 16:54:15 »
v Inkvizitorově příkladu se transformuje hodnota staticky daného typu na jinou (opět staticky známého typu), žádné "rozhodování o typu" se tam neděje, stejně jako když třeba porovnáváte celá, v době překladu neznámá, čísla
Jak jsem psal někde výš: "Znát typ" není nc jiného než "mít nějakou znalost o datech v tomhle místě programu".
to je dost zúžený výklad, typ můžou mít i "věci", které nemají žádnou hodnotu/nepředstavují data

v

Re:Co si myslíte o OOP?
« Odpověď #568 kdy: 06. 01. 2019, 16:55:45 »
Když použiju součtový typ "StringVal String | IntVal Int", tak tím jenom dávám překladači najevo, že vím, že v tomhle místě programu se za běhu objeví buď integer nebo string. Dynamický jazyk vlastně říká totéž: v tomhle (každém) místě programu nevím, co za běhu bude: int, string, list, ...
no ano, stacký jazyk - jeden algebraický typ, dynamický - cokoliv

Re:Co si myslíte o OOP?
« Odpověď #569 kdy: 06. 01. 2019, 16:58:11 »
no ano, stacký jazyk - jeden algebraický typ, dynamický - cokoliv
mohl by sis vytvořit součtový typ, který by obsáhl všechny typy. Nazvěme takový typ Super. Všechny funkce nechť potom mají typ Super -> Super. Byl by takový jazyk/program podle tebe "statický" nebo "dynamický"?
čili, pokud bysme chtěli slovíčkařit: statický jazyk: jeden algebraický typ. Dynamický jazyk: jeden algebraický typ (pod kterým jsou "schované" všechny možné).