Co si myslíte o OOP?

Re:Co si myslíte o OOP?
« Odpověď #570 kdy: 06. 01. 2019, 16:59:03 »
to je dost zúžený výklad, typ můžou mít i "věci", které nemají žádnou hodnotu/nepředstavují data
Neplodné slovíčkaření.


v

Re:Co si myslíte o OOP?
« Odpověď #571 kdy: 06. 01. 2019, 17:04:08 »
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é).
překrucujete to
dá se říct, že dynamický jazyk má jeden součtový typ pro všechny hodnoty (Robert Harper, "unityped"), statický umí rozlišit více typů u různých částí programu (třeba funkcí)

v

Re:Co si myslíte o OOP?
« Odpověď #572 kdy: 06. 01. 2019, 17:05:25 »
to je dost zúžený výklad, typ můžou mít i "věci", které nemají žádnou hodnotu/nepředstavují data
Neplodné slovíčkaření.
viz např. "phantom types"
jenom se snažím vyhnout mlhavým vágním pojmům

Re:Co si myslíte o OOP?
« Odpověď #573 kdy: 06. 01. 2019, 17:13:35 »
překrucujete to
dá se říct, že dynamický jazyk má jeden součtový typ pro všechny hodnoty (Robert Harper, "unityped"), statický umí rozlišit více typů u různých částí programu (třeba funkcí)
Nic nepřekrucuju. Celou dobu říkám jenom to, že nějaké "světodějné" rozlišování mezi statickými a dynamickými jazyky je iluze (falešné dilema). Jedná se totiž jenom o množství informací, které o datech mám - a to je na kontinuu, není to binární "statický ví vždycky všechno v compile time" vs. "dynamický neví v compile time nikdy nic". Statické jazyky občas něco neví (a tím se v té části programu přiblíží k dynamickému) a dynamické občas mají možnost použít třeba anotaci (a tím se v té části programu přiblíží ke statickému).

A jelikož už jsem řekl všechno, co jsem chtěl říct, a asi třikrát zopakoval, líp už svoji myšlenku asi vyjádřit neumím, takže už se asi nemá smysl, abych se dál téhle diskuse účastnil, pokud se nějak zásadně neposune.

Re:Co si myslíte o OOP?
« Odpověď #574 kdy: 06. 01. 2019, 17:14:55 »
viz např. "phantom types"
jenom se snažím vyhnout mlhavým vágním pojmům
Neplodné slovíčkaření.


BoneFlute

  • *****
  • 2 043
    • Zobrazit profil
Re:Co si myslíte o OOP?
« Odpověď #575 kdy: 06. 01. 2019, 17:19:37 »
Statické jazyky občas něco neví
No jo, ale uvádíš blbej příklad.

Dobrej příklad je dělení nulou. Což ve většině statických jazyků nejde, a dokonce to zbuchne.
Zatímco příklad parsováním vstupu je naopak situace, kdy ten jazyk ví všechno. Takže blbej příklad.

Re:Co si myslíte o OOP?
« Odpověď #576 kdy: 06. 01. 2019, 17:21:02 »
Zatímco příklad parsováním vstupu je naopak situace, kdy ten jazyk ví všechno.
Neví, jestli výpočet půjde cestou A nebo B, to se rozhodne až za běhu.

Inkvizitor

Re:Co si myslíte o OOP?
« Odpověď #577 kdy: 06. 01. 2019, 17:24:08 »
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ý"?

No tak to zkusím rozebrat. Každý jazyk, který podporuje větvení a umí reagovat na podněty zvenčí (vstup z klávesnice, čtení ze socketu, generátor (pseudo)náhodných čísel), může prakticky ve kterémkoli místě výpočtu vytvářet hodnoty různých typů (náš příklad s explicitním čtením dat odněkud je jenom jedna z možností a to, že se ty hodnoty vytvářejí v rámci sum type v jedné funkci, to je zase jenom speciální případ).

Pokud by byl jazyk založený na pozdní vazbě, samozřejmě by šlo o dynamický jazyk/program. Jenže třeba Rust tohle nemá, nemá ani dědičnost (tedy žádné Super), implementuje pouze jednotlivé traity a překladač v každém místě ví, co se kde nachází a co se s tím smí dělat. Pokud i na něj chceš přidat nálepku "dynamický", určitě se to dá vyargumentovat, ale pak je taková nálepka neužitečná a tím i celý spor nedává smysl.

BoneFlute

  • *****
  • 2 043
    • Zobrazit profil
Re:Co si myslíte o OOP?
« Odpověď #578 kdy: 06. 01. 2019, 17:28:34 »
Zatímco příklad parsováním vstupu je naopak situace, kdy ten jazyk ví všechno.
Neví, jestli výpočet půjde cestou A nebo B, to se rozhodne až za běhu.
Ano. Což ale pro naše potřeby není vůbec důležitá informace. Ví všechno potřebné (, když tedy slovíčkaříš).

Pokud porovnáváš tuto nerozhodnost, s tupostí dynamických jazyků, tak ti udělám radost, a nebudu už v diskusi pokračovat :-P

v

Re:Co si myslíte o OOP?
« Odpověď #579 kdy: 06. 01. 2019, 17:29:43 »
pro zajímavost blog Granpa Boba: https://existentialtype.wordpress.com/2011/03/19/dynamic-languages-are-static-languages/
nevím jestli souhlasím, ale zajímavé to je

Re:Co si myslíte o OOP?
« Odpověď #580 kdy: 06. 01. 2019, 17:33:10 »
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, ...

Je docela rozdíl mezi "vím, že tady je string nebo int" a "vím, že tady je nějaká hodnota libovolného typu".

Re:Co si myslíte o OOP?
« Odpověď #581 kdy: 06. 01. 2019, 17:37:15 »
Pokud porovnáváš tuto nerozhodnost, s tupostí dynamických jazyků, tak ti udělám radost, a nebudu už v diskusi pokračovat :-P
Ne. Jenom říkám, že je to "kontinuum tuposti", přičemž není pravda, že "statické jazyky" jsou vždycky a ve všech situacích úplně vlevo a dynamické vždycky úplně v pravo. Různé jazyky se v různých situacích na tom kontinuu objevují na různých místech.

Re:Co si myslíte o OOP?
« Odpověď #582 kdy: 06. 01. 2019, 17:39:10 »
nemá ani dědičnost (tedy žádné Super)
Jestli tímhle reaguješ na to mnou zmíněné Super, tak jsi vůbec nepochopil, co jsem se snažil říct (netvrdím, že je to tvoje chyba).

Re:Co si myslíte o OOP?
« Odpověď #583 kdy: 06. 01. 2019, 17:40:32 »
Je docela rozdíl mezi "vím, že tady je string nebo int" a "vím, že tady je nějaká hodnota libovolného typu".
Ano. Ale rozdíl mezi tím, kdy nevím, jestli je to jeden ze dvou typů nebo jeden za čtyř nebo jeden z dvaceti sedmi (kolik jich je v Pythonu?), je kvantitaivní, ne kvalitativní.

v

Re:Co si myslíte o OOP?
« Odpověď #584 kdy: 06. 01. 2019, 17:48:02 »
mě snad jebne!!!