Čisté OP Smalltalk, Objective-C

Kit

Re:čisté OP smalltalk, objective C
« Odpověď #15 kdy: 05. 09. 2018, 19:01:51 »
Citace
PHP tohle umí také, ale když to někde použiji, tak mě budou mít za čuně.

Vy to ale použijete v každém případě, ať chcete nebo nechcete. Vy nemůžete v PHP nepoužít v objektech předávání zpráv. Jestli myslíte, že PHP či Python to vnitřně dělá jinak než Smalltalk, tak se mýlíte.

Měl jsem na mysli, že bych měl v objektu jen jednu metodu, kterou bych měl jako vstupní bod pro volání všech metod.


PHP má jediný vstupní bod do objektu
« Odpověď #16 kdy: 05. 09. 2018, 19:20:59 »
Citace
Měl jsem na mysli, že bych měl v objektu jen jednu metodu, kterou bych měl jako vstupní bod pro volání všech metod.

A také to tak v PHP máte. Protože objekt je v PHP pouze hašovací tabulka se seznamem identifikátorů, tedy i metod objektu. Jen proto vám PHP umožňuje věci jako magické metody __call() a __callStatic(), která se zavolají, pokud není příslušný název metody přístupný. Je to důsledek toho, že PHP má v zásadě jediný vstupní bod do objektu.

V tom se Smalltalk od PHP moc neliší. Rozdíl je v tom, že PHP se to snažilo, ne moc podařeně, zamaskovat "java-like" syntaxí.

Jestli si myslíte, že Smalltalk má jednu metodu na objekt, tak se mýlíte. Ve zdrojovém kódu Smalltalku také píšete haldu metod pro objekt, stejně jako v PHP. Ale vnitřně - jak v PHP, tak ve Smalltalku je jediný vstup do objektu. Smalltalk to má jen oproti PHP udělané čistěji, univerzálněji a lépe.
« Poslední změna: 05. 09. 2018, 19:23:07 od Miloslav Ponkrác »

JSH

Re:čisté OP smalltalk, objective C
« Odpověď #17 kdy: 05. 09. 2018, 19:22:36 »
Což ovšem není vlastnost Smalltalku, ale vlastnost naprosto všech existujících objektových programovacích jazyků na světě, co existovaly, existují a existovat budou. Tedy i té Javy, C# a další.

O tom je celé objektové programování, že pracujete s objekty. OOP je přirozené pro unární operátory. OOP nemá možnost řešit binární a n-nární operátory jinak, než tak jak jste popsal.

Jak myslíte, že bude fungovat metoda add() v Javě či C#? Jak myslíte, že bude fungovat operator+() v C++?

No a co? Myslíte, že běžný člověk bude mít problém s konstrukcí [:x | a + b]?
Tak jsem to právě myslel. Že je fundamentální omezení objektového paradigmatu.

Právě C++, které objektové paradigma nevynucuje to _částečně_ řeší. Ten zmiňovaný operátor+ se tam dá udělat jako funkce
Kód: [Vybrat]
T operator+(const T &x, const T &y);
Není to metoda a oba parametry jsou naprosto rovnocenné. A překladač tu funkci hledá podle obou parametrů stejně, ne jen jednoho.
Citace
Citace
A pak třeba takový for cyklus. Ten se řeší taky posláním zprávy číslu (počátečnímu indexu).

Pokud je to jediné, co můžete Smalltalku vytknout, tak je na tom Smalltalk velice dobře.
To nebylo myšleno jako jediné, co můžu vytknout. To byl příklad pro mně hodně překvapivé a neintuitivní vlastnosti smalltalku.
Citace
Navíc je to dost obvyklé řešení funkcionálního světa.
To mně dost překvapuje. Z funkcionálního světa znám dobře jen Haskell, ale obecně mě nenapadá důvod, proč cpát cyklus dovnitř intu, když to může být samostatná nezávislá funkce. Ve kterém jazyce to tak je?

Re:čisté OP smalltalk, objective C
« Odpověď #18 kdy: 05. 09. 2018, 19:33:17 »
Kód: [Vybrat]
Právě C++, které objektové paradigma nevynucuje to _částečně_ řeší. Ten zmiňovaný operátor+ se tam dá udělat jako funkce...
Řeší to tím, že rezignuje na objektové paradigma. Řeší to útěkem do strukturovaného neobjektového programování.

V C++ se to pak zamotává. Neobjektová funkce není součástí třídy. Implicitně proto neobjektová funkce operator+() v C++ nemá přístup do vnitřního stavu objektů, se kterými manipuluje. Musíte pak pomocí friend říci třídám, že nějaká vnější funkce bude šmátrat do jejího vnitřního stavu. A zapouzdření a ochrana stavu objektů před okolím dostává na zadek.

Zkrátka v objektovém paradigmatu není daný problém řešitelný. Dá se řešit jen zprasením.

Citace
To nebylo myšleno jako jediné, co můžu vytknout. To byl příklad pro mně hodně překvapivé a neintuitivní vlastnosti smalltalku.

Ale ono je to intuitivní. Je to prostě zaslání zprávy objektu. Je to konzistentní.

Jiné jazyky mají seznam věcí, které se dělají opravdu objektivně špatně, mnohem delší.

a) Mně se třeba také nelíbí, že C/C++ neumí ani tak naprosto základní věc, jako je práce s polem. Tedy něco, co uměl už první existující programovací jazyk na světě Fortran v 50. letech 20. století.

b) Ba dokonce C neumí ani rozumnou a efektivní práci s textovým řetězcem. To co v jiném jazyce je (jako operace s textovým řetězcem) na jeden srozumitelný řádek, to je v C kryptický kód na 1-2 obrazovky plné strlen(), strcmp(), strcpy(), ...

c) PHP dodnes nemá ani datový typ textový řetězec! Namísto toho se musíte tlouct se sekvencí bajtů, dávat tomu nějaký význam a charset. Myslel jsem si, že ve 21. století si takovou nesmyslnost nedovolí žádný programovací jazyk na světě.

Jinak řečeno, za obskurní, nedomyšlené a neintuitivní - a plné ošklivých kompromisů co dnes a denně vadí každému programátorovi - považuji dnešní mainstreamové jazyky. Smalltalk je velice čistý, a pokud dokážete říci, že vám vadí jen jedna konkrétní věc - pak je to plus pro Smalltalk. Zbytek je omezení plynoucí z objektového paradigmatu.
« Poslední změna: 05. 09. 2018, 19:42:36 od Miloslav Ponkrác »

Re:čisté OP smalltalk, objective C
« Odpověď #19 kdy: 05. 09. 2018, 19:42:26 »
Citace
Stačí součet dvou čísel. Prvnímu sčítanci pošlu zprávu. To totálně neodpovídá tomu, jak se učíme o číslech přemýšlet v matice.

Což ovšem není vlastnost Smalltalku, ale vlastnost naprosto všech existujících objektových programovacích jazyků na světě, co existovaly, existují a existovat budou. Tedy i té Javy, C# a další.

O tom je celé objektové programování, že pracujete s objekty. OOP je přirozené pro unární operátory. OOP nemá možnost řešit binární a n-nární operátory jinak, než tak jak jste popsal.
Pozor, neplatí to absolutně - viz CLOS. Rozhodně doporučuji pro rozšíření obzorů, protože ukazuje že to jde dělat i zcela jinak (Smalltalk jen ukazuje že to jde dělat elegantně).

https://en.wikipedia.org/wiki/Common_Lisp_Object_System




JSH

Re:čisté OP smalltalk, objective C
« Odpověď #20 kdy: 05. 09. 2018, 19:49:06 »
Citace
Právě C++, které objektové paradigma nevynucuje to _částečně_ řeší. Ten zmiňovaný operátor+ se tam dá udělat jako funkce...
Řeší to tím, že rezignuje na objektové paradigma. Řeší to přesunem do strukturovaného neobjektového programování.
No právě. Fundamentální nedostatek jakéhokoliv paradigmatu se dá řešit jedině tak, že se nepoužije. Jak jinak by to mělo jít řešit? Proto se taky Stroustrup tak urputně brání vynucování nějakého paradigmatu. Pro každé existují situace, kam se ani trochu nehodí.
Citace
Jiné jazyky mají seznam věcí, které se dělají opravdu objektivně špatně, mnohem delší.
S tím polemizovat nemíním. Na druhou stranu, samotná délka seznamu neznamená nic. Jednotlivé položky můžou být nedůležité nebo naopak kritické v závislosti na kontextu. Třeba ta rychlost byla v kontextu doby naprosto kritická.
Citace
Jinak řečeno, za obskurní, nedomyšlené a neintuitivní - a plné ošklivých kompromisů co dnes a denně vadí každému programátorovi - považuji dnešní mainstreamové jazyky. Smalltalk je velice čistý, a pokud dokážete říci, že vám vadí jen jedna konkrétní věc - pak je to plus pro Smalltalk. Zbytek je omezení plynoucí z objektového paradigmatu.
No ano. Moje kritika Smalltalku spočívá v tom, že tlačí objektové paradigma tak důsledně, že jeho problémy vyniknou víc než kdekoliv jinde.
Citace
Citace
To mně dost překvapuje. Z funkcionálního světa znám dobře jen Haskell, ale obecně mě nenapadá důvod, proč cpát cyklus dovnitř intu, když to může být samostatná nezávislá funkce.

Protože Smalltalk nemá funkce, ale jen objekty. Je to objektový jazyk.
Ale vy jste psal, že je to běžné ve funkcionálním světě. To mi vůbec nesedí. Ve funkcionálním světě často ani nemáme objekty, kterým by se dalo něco posílat.

Re:čisté OP smalltalk, objective C
« Odpověď #21 kdy: 05. 09. 2018, 19:53:03 »
Citace
Pozor, neplatí to absolutně - viz CLOS. Rozhodně doporučuji pro rozšíření obzorů, protože ukazuje že to jde dělat i zcela jinak (Smalltalk jen ukazuje že to jde dělat elegantně).

Jistě, ve funkcionálním jazyku jde obejít omezení objektového jazyka. Překvapuje to někoho?

Schválně, kolik lidí, pokud si bude moci vybrat, bude raději programovat ve Smalltalku než v LISPu? Já se obávám, že LISP by dopadl dost špatně.

Stejně tak zdrojový kód Smalltlaku bude srozumitelnější a udržovatelnější než v LISPu.

***

Celá ta sranda je v tom, že objektové jazyky to nějak šmudlají - ale programování v nich, stejně jako čitelnost a udržovatelnost je o moc tříd výše než ve funkcionálních jazycích.

Snaha vytvořit dobrý funkcionální jazyk a vylepšít ho - nad běžnou míru LISPu - vede přečasto jen k tomu, že k jeho zvládnutí potřebujete doktorát z matematiky a jaderné fyziky. Tedy nic, v čem by běžný smrtelník chtěl programovat.

Re:čisté OP smalltalk, objective C
« Odpověď #22 kdy: 05. 09. 2018, 19:57:02 »
Citace
Měl jsem na mysli, že bych měl v objektu jen jednu metodu, kterou bych měl jako vstupní bod pro volání všech metod.

Na mysli jste to mít mohl, nicméně je to irelevantní.

To, jestli programovací jazyk obsluhuje objekty ve svém implementaci zasíláním zpráv nebo voláním metod - je něco, co je rozhodnutí autora jazyka, nikoli programátora. Je to tedy vnitřní vlastnost jazyka. A o tom se tu bavíme.

Jazyk, který obsluhuje objekty zasíláním zpráv má jednu vstupní metodu do objektu - což platí někde uvnitř implementace. To, že navenek ve zdrojovém kódu PHP i Smalltalk nabízejí psaní metod je jen emulace navenek.

Re:čisté OP smalltalk, objective C
« Odpověď #23 kdy: 05. 09. 2018, 20:07:35 »
Citace
No právě. Fundamentální nedostatek jakéhokoliv paradigmatu se dá řešit jedině tak, že se nepoužije.

Vy to nezýváte nedostakem, ale ona je to vlastnost. Nebo máte pocit, že v objektovém programování nelze sčítat čísla? Což byl příklad, který jste uvedl. Není třeba nic prasit. Jen se vám objektový způsob nelíbí, což je ale jen váš subjektivní dojem - nic jiného.

Na světě není nic zadarmo. Vy se snažíte vyvolat klamný dojem, že zprasením/opuštěním paradigmatu získáte jen plusy. Vy můžete zprasit paradigma, ale získáte tím nekonzistenci jazyka, složitost jazyka, a řadu dalších problémů.

Citace
Jak jinak by to mělo jít řešit?

Vy jste slušný manipulátor a demagog. Vyvoláváte tu dojem, že Smalltalk neumí sčítat čísla. A že ke sčítání čísel nelze použít objektové paradigma. Co na to říci?

Řešíte problém, který neexistuje. Chováte se jako politik, který vymyslel umělý neexistující problém. A teď ho chce řešit.

Citace
Proto se taky Stroustrup tak urputně brání vynucování nějakého paradigmatu. Pro každé existují situace, kam se ani trochu nehodí.

Ach jo. C++ je jazyk, jehož paradigma je být rychlý a vyrábět rychlé binárky.

Nebojte se, Stroustrup kvůlu tomu paradigmatu, tedy "rychlá binárka" toho v C++ zprasil opravdu hodně.

Tedy i Stroustrup v C++ vynucuje.

Citace
No ano. Moje kritika Smalltalku spočívá v tom, že tlačí objektové paradigma tak důsledně, že jeho problémy vyniknou víc než kdekoliv jinde.

Já ale ten dojem nemám. Mám dojem, že toto vaše tvrzení je stejná demagogie, jako že pro sčítání čísel potřebujete nutně opustit objektové paradigma - jinak skončí vesmír a galaxie se hroutí do černé díry.

JSH

Re:čisté OP smalltalk, objective C
« Odpověď #24 kdy: 05. 09. 2018, 20:14:40 »
...
Vy jste slušný manipulátor a demagog. Vyvoláváte tu dojem, že Smalltalk neumí sčítat čísla. A že ke sčítání čísel nelze použít objektové paradigma. Co na to říci?
Cože??? :o Kde jste na tohleto přišel??? Takhle překroutit, co jsem napsal, chce fakt talent. Ale já jsem manipulátor a demagog.

Na tohleto se můžu vysrat...

Kit

Re:čisté OP smalltalk, objective C
« Odpověď #25 kdy: 05. 09. 2018, 20:28:28 »
Z funkcionálního světa znám dobře jen Haskell, ale obecně mě nenapadá důvod, proč cpát cyklus dovnitř intu, když to může být samostatná nezávislá funkce. Ve kterém jazyce to tak je?

Jenže do toho intu se cyklus necpe. Tomu intu se jen pošle zpráva.

Kit

Re:čisté OP smalltalk, objective C
« Odpověď #26 kdy: 05. 09. 2018, 20:47:16 »
Schválně, kolik lidí, pokud si bude moci vybrat, bude raději programovat ve Smalltalku než v LISPu? Já se obávám, že LISP by dopadl dost špatně.

Stejně tak zdrojový kód Smalltlaku bude srozumitelnější a udržovatelnější než v LISPu.

Zkouším oba jazyky, oba mě inspirují. Smalltalk mě přivedl k napsání generátoru XSLT - ta jednoduchost mě dost překvapila. Podobně ani Lisp není pozadu, ale jeho použitelnost je odlišná. Když se pak vrátím ke svému PHP, tak zjistím, že i v něm to do značné míry jde také :)

Smalltalk i Lisp by se měl naučit každý vývojář - bez ohledu na to, ve kterém jazyce programuje.

DogWithFleas

Re:čisté OP smalltalk, objective C
« Odpověď #27 kdy: 05. 09. 2018, 21:14:07 »
Vy to nezýváte nedostakem, ale ona je to vlastnost. Nebo máte pocit, že v objektovém programování nelze sčítat čísla? Což byl příklad, který jste uvedl. Není třeba nic prasit. Jen se vám objektový způsob nelíbí, což je ale jen váš subjektivní dojem - nic jiného.

Na světě není nic zadarmo. Vy se snažíte vyvolat klamný dojem, že zprasením/opuštěním paradigmatu získáte jen plusy. Vy můžete zprasit paradigma, ale získáte tím nekonzistenci jazyka, složitost jazyka, a řadu dalších problémů.
Ty se snazis vyvolat dojem, ze nejake absolutni adorovani nejakeho paradigmatu je ta jedina spravna cesta a vsechno ostatni je praseni a cesta do pekel a ziskas jen minusy; to je ale jen tvuj subjektivni dojem - nic jineho.
Citace
Ach jo. C++ je jazyk, jehož paradigma je být rychlý a vyrábět rychlé binárky.
To opravdu ne.

Kit

Re:čisté OP smalltalk, objective C
« Odpověď #28 kdy: 05. 09. 2018, 21:33:14 »
Vy to nezýváte nedostakem, ale ona je to vlastnost. Nebo máte pocit, že v objektovém programování nelze sčítat čísla? Což byl příklad, který jste uvedl. Není třeba nic prasit. Jen se vám objektový způsob nelíbí, což je ale jen váš subjektivní dojem - nic jiného.

Na světě není nic zadarmo. Vy se snažíte vyvolat klamný dojem, že zprasením/opuštěním paradigmatu získáte jen plusy. Vy můžete zprasit paradigma, ale získáte tím nekonzistenci jazyka, složitost jazyka, a řadu dalších problémů.
Ty se snazis vyvolat dojem, ze nejake absolutni adorovani nejakeho paradigmatu je ta jedina spravna cesta a vsechno ostatni je praseni a cesta do pekel a ziskas jen minusy; to je ale jen tvuj subjektivni dojem - nic jineho.

Přečti si ještě jednou dotaz. Miloslav Ponkrác na něj odpovídá. Za to si nezaslouží mínusy, ale plusy.

BoneFlute

  • *****
  • 2 046
    • Zobrazit profil
Re:čisté OP smalltalk, objective C
« Odpověď #29 kdy: 05. 09. 2018, 21:42:16 »
c) PHP dodnes nemá ani datový typ textový řetězec! Namísto toho se musíte tlouct se sekvencí bajtů, dávat tomu nějaký význam a charset. Myslel jsem si, že ve 21. století si takovou nesmyslnost nedovolí žádný programovací jazyk na světě.

Tyhlencty polopravdy dávají věrohodnosti tvejm dalším příspěvkům děsně na zadek.