Fórum Root.cz

Hlavní témata => Vývoj => Téma založeno: laik 05. 09. 2018, 16:05:47

Název: Čisté OP Smalltalk, Objective-C
Přispěvatel: laik 05. 09. 2018, 16:05:47
1. V čom je OP v jazyku smalltalk čistejšie ako v C# a Jave? A prečo keď je lepšie tak sa nepresadilo?

2. Neni to jedno či zavolám metódu, alebo pošlem správu? Akú mi dáva message passing výhodu oproti volaniu metód?

3. Má zmysel učiť sa smalltalk? čo mi to prinesie oproti bežným objektovým jazykom. Je vývoj v Smalltalku rýchlejší alebo kde je jeho hlavná výhoda.
Název: Re:čisté OP smalltalk, objective C
Přispěvatel: mmm 05. 09. 2018, 16:23:23
1. V čom je OP v jazyku smalltalk čistejšie ako v C# a Jave? A prečo keď je lepšie tak sa nepresadilo?

Prosadilo se to. Prosadil se javascript, který vychází ze selfu, který vycházel ze smalltalku. Je to lepší, protože to přidává možnosti navíc.
Název: Re:čisté OP smalltalk, objective C
Přispěvatel: JSH 05. 09. 2018, 16:31:25
1. V čom je OP v jazyku smalltalk čistejšie ako v C# a Jave? A prečo keď je lepšie tak sa nepresadilo?
Čisté OOP znamená, že je úplně všechno objekt. Na rozdíl od C# a Javy jsou ve smalltalku třídy i takové věci jako inty a podobně.
A že je něco čisté OOP neznamená automaticky, že je to lepší. A taky jde o to, pro co to má být lepší. Neexistuje jazyk, který by byl všeobecně lepší než nějaký jiný. Jazyky jsou vždycky lepší jen v nějakém konkrétním kontextu.
Citace
2. Neni to jedno či zavolám metódu, alebo pošlem správu? Akú mi dáva message passing výhodu oproti volaniu metód?
Částečně je to otázka názvosloví, ale jen částečně. Posílání zpráv je kompletně dynamické. Takže libovolnému objektu je možné poslat libovolnou zprávu. A ten objekt ji může třeba předat dál i když jí vůbec nerozumí.
Je to zase dvojsečné, protože tahle flexibilita znamená že překladač při překladu nemá šanci chytnout ani překlepy.
Citace
3. Má zmysel učiť sa smalltalk? čo mi to prinesie oproti bežným objektovým jazykom. Je vývoj v Smalltalku rýchlejší alebo kde je jeho hlavná výhoda.
Minimálně pro rozšíření obzorů je to supr. Není moc jazyků, jejichž kompletní syntaxe se vleze na lístek A6. A já jsem si až na Smalltalku uvědomil jakási filosofická omezení OOP jako takového, protože tam je to dotažené až do extrému.
Název: Re:čisté OP smalltalk, objective C
Přispěvatel: Kit 05. 09. 2018, 16:37:17
Název: Re:čisté OP smalltalk, objective C
Přispěvatel: JSH 05. 09. 2018, 16:53:41
Je mu vyčítána ta jednoduchost - místo typů se používají testy, s čímž mívají typoví onanisté dost velké problémy.
No tak ty problémy, které jsou cenou za tu flexibilitu, nejsou vůbec malé a to člověk ani nemusí být typový onanista.

- Spoustu triviálních chybek, jako jsou třeba překlepy, odhalí typy tak snadno, že si toho člověk vlastně ani nevšimne.
- A typy samotné jsou i vcelku obstojná dokumentace. Rozumné typy dost redukují potřebné množství okolního textu. A na rozdíl od názvů nebo komentářů vždycky odpovídají aktuálnímu chování kódu.

Záleží na situaci. Někdy ta flexibilita nic nepřinese a zůstává jen ta bolest.
Název: Re:čisté OP smalltalk, objective C
Přispěvatel: Kit 05. 09. 2018, 17:03:45
Je mu vyčítána ta jednoduchost - místo typů se používají testy, s čímž mívají typoví onanisté dost velké problémy.
No tak ty problémy, které jsou cenou za tu flexibilitu, nejsou vůbec malé a to člověk ani nemusí být typový onanista.

- Spoustu triviálních chybek, jako jsou třeba překlepy, odhalí typy tak snadno, že si toho člověk vlastně ani nevšimne.
- A typy samotné jsou i vcelku obstojná dokumentace. Rozumné typy dost redukují potřebné množství okolního textu. A na rozdíl od názvů nebo komentářů vždycky odpovídají aktuálnímu chování kódu.

Záleží na situaci. Někdy ta flexibilita nic nepřinese a zůstává jen ta bolest.

Název: Re:čisté OP smalltalk, objective C
Přispěvatel: Miloslav Ponkrác 05. 09. 2018, 17:27:32
Citace
1. V čom je OP v jazyku smalltalk čistejšie ako v C# a Jave? A prečo keď je lepšie tak sa nepresadilo?

Smalltalk je čisté, jednoduché objektové programování. Vše je objekt - proměnná, blok kódu, podrpogram, zpráva objektu, cokoli. Neexistuje nic co by nebylo objektem. Díky tomu je to jazyk čistý a velice jednoduchý.

Java ani C# de facto objektové nejsou. Mnoho věcí nejsou v Javě ani C# objekty. Například proměnné typů char, int, a další, které nejsou objekty. Blok kódu není objektem. Metoda třídy není objektem. Podmínkový příkaz není objektem. Cyklus není objektem. Atd. atd. atd. Ve Smalltalku je objektem naprosto všechno - a proto je to logičtější.

De facto při porovnání těchto jazyků je Smalltalk mnohonásobně objektovější než Java/C#. Díky tomu je Smalltalk jednodušší, konzistentnější a mocnější v řadě operací.

Neprosadilo se to proto, že do prosazení Smalltalku nikdo nenalil miliardy dolarů jako v případě Javy Sun nebo C# Microsoft. Představa, že se prosadí lepší, nikoli to čeho se lijí astrnomické sumy - je naivní.

Citace
2. Neni to jedno či zavolám metódu, alebo pošlem správu? Akú mi dáva message passing výhodu oproti volaniu metód?

Obojí jsou různé věci, mají různé chování.

a) Poslání zprávy je poslání zprávy - tak jak to v OOP má být. Objektu pošlete zprávu nějakého názvu a parametry. Je na objektu, co s tím udělá.

Objekt u posílání zprávy má jediný vstup/podprogram - kam zaslat zprávu. Je to velice flexibilní a jdou s tím velké kusy. Snadno se tak dělá zasílání zpráv třeba přes počítačovou síť, nebo program může běžet distribuovaně na několika počítačích.

b) Volání metody je pouhé low level volání podprogramu pomocí pointeru. Je to úroveň strojového kódu procesoru. Voláte podprogram (a jen pouhou náhodou ten podprogram má první parameter pointer na data objektu).

Objekt je v tomto případě obrovská kupa vstupů/podprogramů (metod). Každá metoda nezávisle mění objekt a jeho stav. Hůře se nad tím získává kontrola.

Volání metod je úlitba a krok směrem k assembleru a strojovému kódu.

Citace
Má zmysel učiť sa smalltalk? čo mi to prinesie oproti bežným objektovým jazykom. Je vývoj v Smalltalku rýchlejší alebo kde je jeho hlavná výhoda.

Zkus to a uvidíš. :-)

Smalltalk je jeden z mála jazyků, který naučím i svou mámu, která o programování nemá moc ponětí. Je to tak jednoduchý a konzistentní jazyk, jak se to málokde jinde povedlo.

Ve Smalltalku se programuje velice rychle, až expresně. Určitě násobně rychleji než v Javě či C#.

Smalltalk je ovšem odlišný. Data a stav dat si ukládá mezi spuštěními. Smalltalk je v podstatě objektová databáze (úložiště), a nad tím luxusní grafické prostředí. Smalltalk mění objekty v této databázi pomocí programovacího jazyka. Jinak řečeno, nezapomíná změny a data. Je to jiný přístup.

Dnes už je Smalltalk dost v pozadí. Pokud očekáváš uplatnění ve firmách, tak to vzdej. Mimochodem:

1) programovací jazyk Ruby není nic jiného než zpackaná a trochu nedomyšlená kopie Smalltalku

2) Programovací jazyk Objective C je kříženec C a Smalltalku
Název: Re:čisté OP smalltalk, objective C
Přispěvatel: JSH 05. 09. 2018, 17:36:28
  • Spoustu triviálních chybek, jako jsou třeba překlepy, odhalí testy docela snadno. Je třeba je psát, ale jeden test může pokrýt více možných překlepů. Zaplevelení zdrojáků množstvím typů zhoršuje čitelnost aplikace a snižuje znovupoužitelnost.
  • Testy samotné slouží slouží jako vcelku obstojná dokumentace.
Nechci aby se to tu zvrhlo v další flame, takže jen stručně. :) V tomhle jsem pragmatik. IMO něco snáze odchytí testy, něco zase typy.
I v kompletně dynamických jazycích mají věci (více či méně obecné) typy i ve zdrojáku, nejen za běhu. Vždycky je nějak omezená množina toho, co má smysl předat. Jde jen o to, kdy a jak se tyhle omezení kontrolují. A jakým způsobem jsou tyhle "neformální typy" popsané.
Pokud mám například volit mezi tím, jestli dám parametru typ Path, nebo popíšu v dokumentaci, že funkce očekává cestu k souboru, tak volím jednoznačně první možnost. Škála věcí, které můžu takovéhle funkci předhodit, je hodně omezená.
A znovupoužitelnost je IMHO takový yetti, o kterém každý mluví, ale různí lidé si ho představují různě. ;) Aplikačně specifický kód není znovupoužitelný už z principu. A pomocné věci jsou s rozumným typovým systémem (minimálně nějaká generika) znovupoužitelné dost.
Název: Typový systém v OOP
Přispěvatel: Miloslav Ponkrác 05. 09. 2018, 17:50:55
Citace
No tak ty problémy, které jsou cenou za tu flexibilitu, nejsou vůbec malé a to člověk ani nemusí být typový onanista.

Obecně ovšem jen málokterý programovací jazyk má rozumný typový systém. To platí pro objektové jazyky i jazyky jiných paradigmat.

Ale především: Zavést typový systém na objektovém programování znamená zmrvit a pokřivit OOP. Vždyť se s tím programovací jazyky perou. Právě proto každý OOP jazyk zkouší trochu jinou koncepci.

Dodnes je to s typy na OOP takové vachrlaté. Každý OOP jazyk na to jde jinak. Někde typy spražují s dědičností. Jinde se stejným rozhraním ("duck typing"). Další zase jinak.
Název: Re:čisté OP smalltalk, objective C
Přispěvatel: Miloslav Ponkrác 05. 09. 2018, 18:05:53
Citace
Pokud mám například volit mezi tím, jestli dám parametru typ Path, nebo popíšu v dokumentaci, že funkce očekává cestu k souboru, tak volím jednoznačně první možnost. Škála věcí, které můžu takovéhle funkci předhodit, je hodně omezená.

A nebo budete ve funkci konstrolovat, jestli jste v parametru dostal cestu k souboru. A hle: Najednou i v dynamickém jazyce máte škálu věcí, které můžete funkci předhodit hodně omezenou.

Citace
A znovupoužitelnost je IMHO takový yetti, o kterém každý mluví, ale různí lidé si ho představují různě. ;) Aplikačně specifický kód není znovupoužitelný už z principu. A pomocné věci jsou s rozumným typovým systémem (minimálně nějaká generika) znovupoužitelné dost.

Zkuste ten Smalltalk. Tam uvidíte znovupoužitelnost v úplně jiných dimenzích.

Většina OOP jazyků zprasila objekty dědičností. Chudák dědičnost má vyřešit to, co autoři programovacích jazyků (včetně Javy) nedomysleli. Dědičnost má řešit: 1) znovupoužitelnost, 2) typovou informaci, 3) informaci o interface objektu. Je jasné, že jedna věc nemůže uspokojivě řešit tři odlišné věci - a proto to drhne kam se podíváte.

Smalltalk jako dědičnost má pouze znovupoužitelnost. Na rozdíl od Javy/C#, které se do dědičnosti plete miliarda věcí naráz.
Název: Re:čisté OP smalltalk, objective C
Přispěvatel: JSH 05. 09. 2018, 18:15:19
Neprosadilo se to proto, že do prosazení Smalltalku nikdo nenalil miliardy dolarů jako v případě Javy Sun nebo C# Microsoft. Představa, že se prosadí lepší, nikoli to čeho se lijí astrnomické sumy - je naivní.
Ono se to neprosadilo taky proto, že to konzistentní posílání zpráv objektům je ve spoustě případů nekonzistentní se zbytkem světa (nejen programátorského). A díky tomu je IMHO Smalltalk ze začátku dost neintuitivní.

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. Už jen to, že v součtu řady čísel není žádné ničím výjímečné. Že o to žádáme jedno z nich je jen omezení jazyka. OOP celkově moc nevyhovuje v situacích, kdy pracujeme s více rovnocennýma entitama, protože se zpráva zasílá vždycky jenom jedné.

A pak třeba takový for cyklus. Ten se řeší taky posláním zprávy číslu (počátečnímu indexu). Tohle byl můj OMGWTF moment. Podobný jsem zažil snad jenom u BDI (belief-desire-intention) popisu vypínače. Tady už fakt sedí to rčení o kladivu a hřebíku. Ano, zatloukat šroubek kladivem je obohacující zkušenost bořící předsudky a paradigmata, ale pravidelně to dělat nechci. :)
Název: Re:čisté OP smalltalk, objective C
Přispěvatel: Kit 05. 09. 2018, 18:17:46
Poslání zprávy je poslání zprávy - tak jak to v OOP má být. Objektu pošlete zprávu nějakého názvu a parametry. Je na objektu, co s tím udělá.

Objekt u posílání zprávy má jediný vstup/podprogram - kam zaslat zprávu. Je to velice flexibilní a jdou s tím velké kusy. Snadno se tak dělá zasílání zpráv třeba přes počítačovou síť, nebo program může běžet distribuovaně na několika počítačích.

PHP tohle umí také, ale když to někde použiji, tak mě budou mít za čuně.
Název: Re:čisté OP smalltalk, objective C
Přispěvatel: Miloslav Ponkrác 05. 09. 2018, 18:32:17
Citace
Ono se to neprosadilo taky proto, že to konzistentní posílání zpráv objektům je ve spoustě případů nekonzistentní se zbytkem světa (nejen programátorského).

Ono se to neprosadilo pouze proto, že v době kdy byl Smalltalk byly pomalé počítače. Vývoj proto šel směrem k jazykům, které vyždímají z počítače maximální výkon. Nic více a nic méně.

Smalltalk je jazyk pomalejší než C/C++, a to byl tehdy zásek. O ni cjiného nejde.

Citace
A díky tomu je IMHO Smalltalk ze začátku dost neintuitivní.

Smalltalk je rozhodně intuitivnější než většina dnešních jazyků. Znovu říkám, že Smalltalk naučím bez problémů neprogramátora. U Javy a C# tak úspěšný nebudu.

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.

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]?

Citace
Už jen to, že v součtu řady čísel není žádné ničím výjímečné. Že o to žádáme jedno z nich je jen omezení jazyka. OOP celkově moc nevyhovuje v situacích, kdy pracujeme s více rovnocennýma entitama, protože se zpráva zasílá vždycky jenom jedné.

Právě jste popsal obecné chování všech objektově orientovaných jazyků. Právě jste popsal základní vlastnosti objektového paradigmatu.

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. Navíc je to dost obvyklé řešení funkcionálního světa.
Název: Re:čisté OP smalltalk, objective C
Přispěvatel: Miloslav Ponkrác 05. 09. 2018, 18:37:40
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.

Vy si pane strašně pletete pojmy a dojmy. Smalltalk používá vnitřně posílání zpráv. Stejně jako PHP. Stejně jako Python. To je vnitřní implementace, ne to co píšete ve zdrojovém kódu.
Název: Re:čisté OP smalltalk, objective C
Přispěvatel: borekz 05. 09. 2018, 18:42:52
3. Má zmysel učiť sa smalltalk? čo mi to prinesie oproti bežným objektovým jazykom. Je vývoj v Smalltalku rýchlejší alebo kde je jeho hlavná výhoda.
Výhoda je, že se snáze naučíš Objective/C. To pak můžeš použít pro vývoj pro staré verze MacOS a iOS, které ještě nemají Swift. A možná je Objective/C rychlejší než Swift, protože je nízkoúrovňovější.
Název: Re:čisté OP smalltalk, objective C
Přispěvatel: Kit 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.
Název: PHP má jediný vstupní bod do objektu
Přispěvatel: Miloslav Ponkrác 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.
Název: Re:čisté OP smalltalk, objective C
Přispěvatel: JSH 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?
Název: Re:čisté OP smalltalk, objective C
Přispěvatel: Miloslav Ponkrác 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.
Název: Re:čisté OP smalltalk, objective C
Přispěvatel: Kamil Podlešák 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


Název: Re:čisté OP smalltalk, objective C
Přispěvatel: JSH 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.
Název: Re:čisté OP smalltalk, objective C
Přispěvatel: Miloslav Ponkrác 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.
Název: Re:čisté OP smalltalk, objective C
Přispěvatel: Miloslav Ponkrác 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.
Název: Re:čisté OP smalltalk, objective C
Přispěvatel: Miloslav Ponkrác 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.
Název: Re:čisté OP smalltalk, objective C
Přispěvatel: JSH 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...
Název: Re:čisté OP smalltalk, objective C
Přispěvatel: Kit 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.
Název: Re:čisté OP smalltalk, objective C
Přispěvatel: Kit 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.
Název: Re:čisté OP smalltalk, objective C
Přispěvatel: DogWithFleas 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.
Název: Re:čisté OP smalltalk, objective C
Přispěvatel: Kit 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.
Název: Re:čisté OP smalltalk, objective C
Přispěvatel: BoneFlute 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.
Název: Re:čisté OP smalltalk, objective C
Přispěvatel: Kit 05. 09. 2018, 21:57:10
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ě.

Stringy jsou v PHP poněkud nedotažené, ale na funkce mb_*() se dá zvyknout, zejména pokud je zabalíš do objektů. Spíš mi vadí, že samotný string se jako objekt nechová. Třeba zápis $string->length() by nemusel vypadat zrovna nejhůř.
Název: Re:čisté OP smalltalk, objective C
Přispěvatel: prezident 05. 09. 2018, 22:03:48
A možná je Objective/C rychlejší než Swift, protože je nízkoúrovňovější.

to jsou mi věci. na základě čeho si takový dvojitý nesmysl myslíš?
Název: Re:Čisté OP Smalltalk, Objective-C
Přispěvatel: Kiwi 06. 09. 2018, 10:39:22
Smalltalk bych učil povinně na školách (klidně základních). Podobně jako Pascal sloužil k osvojení strukturovaného přístupu, ač v praxi už není tak použitelný (pokud se chce někdo dnes věnovat C, i tak bych radil nejdřív pascalskou průpravu, snižuje to pak úroveň prasení v C), na žádném jiném jazyku člověk tak dobře nepronikne do objektového programování jako ve Smalltalku. To se zúročí i třeba v C++ nebo v Javě - akorát u toho pak člověk skřípe zubama a uvědomuje si, že ani C++ ani Java fakt objektové nejsou.

Objective C - má smysl prakticky jen pokud máš zájem o vývoj na jablečných platformách. Nebo k prostudování Cocoy, abys viděl, jak má vypadat dobře navržený objektový framework Ale do budoucna se tam spíš bude tlačit asi Swift. Nicméně Smalltalk je pro oba tyto jazyka ta nejlepší prerekvizita.

K tomu, co dále zaznělo:

LISP - slovy Alana Kaye (autora Smalltalku): pokud elektroinženýr by si na tričko nechal natisknout Maxwellovy rovnice, tak inženýr Computer Science by tam měl mít specifikaci LISPu.

Jinak objektový návrh není tak jednoduchý, jak se na první pohled zdá. Často svádí k hledání falešných analogií mezi reálným světem a tím modelovým, což je velmi zrádné. Objekty OOP nemají být přímou analogií reálného světa, ale mají sloužit jako prostředek k jeho modelování na počítači. Z toho pak plynou různá nedorozumění a zdánlivě neřešitelné problémy typu čtverec - obdélník, reálné číslo - komplexní číslo apod. Chybný objektový návrh představuje dalekosáhlejší problém než u strukturovaného.

Předchozí poznatek vede k frustraci z objektového přístupu a hledání nějaké spásy ve funkcionálním přístupu. Důvod - málokdo se v tom orientuje, dělají v tom hlavně akademičtěji orientovaní lidé, jejich programy v těchto jazycích vypadají elegantně, což vede k iluzi, že funkcionální programování je lepší a vyřeší problémy objektového přístupu. Není to tak. Ty programy jsou takové, jako jsou, protože je prostě píšou inteligentnější lidé. Masové rozšíření funkcionálního přístupu by vedlo k daleko větší pohromě než špatně pochopené objekty.  - můj dojem
Název: Re:Čisté OP Smalltalk, Objective-C
Přispěvatel: SB 06. 09. 2018, 11:05:45
1. V čom je OP v jazyku smalltalk čistejšie ako v C# a Jave? A prečo keď je lepšie tak sa nepresadilo?

Má opravdovou pozdní vazbu, jejímž důsledkem je jiná koncepce běhu procesu, a to přesunutí rozhodování (tj. zodpovědnosti) od volajícího na volaného. Díky tomu netrpí podtypovým polymorfismem, tj. využití polymorfismu pouze u vzájemně odvozených tříd/rozhraní.
Kvalita jazyku nemá na jeho prosazení výrazný vliv, důležitější jsou další věci okolo.

2. Neni to jedno či zavolám metódu, alebo pošlem správu? Akú mi dáva message passing výhodu oproti volaniu metód?

Vizte výše - přesunutím rozhodování z volajícího na volaného. Důsledkem je jednoduchost řešení některých problémů, např. polymorfismus bez závislostí, jednoduché proxy, jednoduché adaptéry, obecnější metody, ...

3. Má zmysel učiť sa smalltalk? čo mi to prinesie oproti bežným objektovým jazykom. Je vývoj v Smalltalku rýchlejší alebo kde je jeho hlavná výhoda.

Pro pochopení OOP jednoznačně. Má to ale jednu obrovskou nevýhodu: Začnete chápat a vnímat, jak je mnoho používaných jazyků omrdaných, protože je vytvořili prachobyčejní lempli a čuráci, kteří si mysleli, že jsou mistry světa, a tak vynalezli další hranaté kolo. Bude vás to neustále srát, a co horší, je to nevratný proces, takže si dobře rozmyslete, zda do toho půjdete.
Název: Re:čisté OP smalltalk, objective C
Přispěvatel: SB 06. 09. 2018, 11:35:03
Čisté OOP znamená, že je úplně všechno objekt. Na rozdíl od C# a Javy jsou ve smalltalku třídy i takové věci jako inty a podobně.

To je supr, ale PŘEDEVŠÍM i třídy jsou objekty (metatřídní implementace), to znamená jednotný koncept jako pro instance, jehož důsledkem je, že můžete mimo jiné používat polymorfismus i mezi třídami! Nic takového v Jávce a C# není, tam je třída extra konceptem, se kterým se 1. zachází jinak, 2. strašně komplikuje implementaci jazyku, 3. kurevsky komplikuje sebereflexi a další použití.

A že je něco čisté OOP neznamená automaticky, že je to lepší...

To JE lepší, protože je to jednodušší, neboť primiva k použití objekty (opačně to pochopitelně nejde) vyžadují nějaký způsob konverze, nebo (stejně jako v jiných neobjektových jazycích) mimo objekty stojící samostatné funkce (čisté OOL je nemají), což je další koncept, který opět komplikuje návrh, implementaci i použití jazyku.

Částečně je to otázka názvosloví, ale jen částečně...

To není otázkou názvosloví, to je zcela jiný koncept řízení běhu procesu!

...Je to zase dvojsečné, protože tahle flexibilita znamená že překladač při překladu nemá šanci chytnout ani překlepy.

To je logickým důsledkem. Mimoto ale částečně funguje "type" inference.

...A já jsem si až na Smalltalku uvědomil jakási filosofická omezení OOP jako takového, protože tam je to dotažené až do extrému.

Extrémem jsou jazyky jako Java a C#, protože jsou to slepeniny všelijakých časem pochycených (a často zbytných) konceptů, jejichž důsledkem je slabý poměr schopností ku složitosti. Naopak Smalltalk vynechává vše zbytné  a zůstává u jednoduchosti a přímočarosti.
Název: Re:Čisté OP Smalltalk, Objective-C
Přispěvatel: SB 06. 09. 2018, 11:47:22
3. Má zmysel učiť sa smalltalk? čo mi to prinesie oproti bežným objektovým jazykom. Je vývoj v Smalltalku rýchlejší alebo kde je jeho hlavná výhoda.

Jo, a ještě jedna věc: Implementrace Pharo má výborný debugger, ve kterém je možno rovnou doplňovat metody (což jde skvěle dohromady s TDD, kdy při testu vyletí chyba na neexistující metodu), nebo "jen" opravovat chybu, vyčíslovat výrazy, opakovaně znovuspouštět metodu, dokud to nejede. Někdo možná řekne: "To je zbytečné." Ale když podvacáté v nějakém jazyku opravujete chybu, pořád to není ono, a vy musíte 20krát znovu aplikaci (nebo alespoň její kus) přeložit a dolézt znovu na místo chyby, tak vás to začne PĚKNĚ SRÁT. Nevím o jiném jazyku/implementaci (to neznamená, že neexistuje), který by tohle uměl.
Název: Re:čisté OP smalltalk, objective C
Přispěvatel: SB 06. 09. 2018, 11:51:00
- A typy samotné jsou i vcelku obstojná dokumentace. Rozumné typy dost redukují potřebné množství okolního textu. A na rozdíl od názvů nebo komentářů vždycky odpovídají aktuálnímu chování kódu.

To řeší Smalltalk pojmenováními (názvy), na to nepotřebuje navíc "typy". Mimoto názvy mají být v pořádku vždy, typované jazyky nejsou žádnou výjimkou (jak si mnozí myslejí).

Záleží na situaci. Někdy ta flexibilita nic nepřinese a zůstává jen ta bolest.

To je ale chybou autora, ne jazyku.
Název: Re:čisté OP smalltalk, objective C
Přispěvatel: SB 06. 09. 2018, 11:58:50
Smalltalk je ovšem odlišný. Data a stav dat si ukládá mezi spuštěními. Smalltalk je v podstatě objektová databáze (úložiště), a nad tím luxusní grafické prostředí. Smalltalk mění objekty v této databázi pomocí programovacího jazyka. Jinak řečeno, nezapomíná změny a data. Je to jiný přístup.

Pozor, toto je věcí implementace, to bych sem netahal. Pokud vím, komunita kolem Phara pracuje na sestavování image ze samostatných souborů ukládaných v Gitu a bez vývojového prostředí, neboli tak, jak to dělají jiné jazyky. To samo by mohlo zvýšit přístupnost a pochopitelnost pro nováčky.
Název: Re:čisté OP smalltalk, objective C
Přispěvatel: Kiwi 06. 09. 2018, 12:03:39
Smalltalk je ovšem odlišný. Data a stav dat si ukládá mezi spuštěními. Smalltalk je v podstatě objektová databáze (úložiště), a nad tím luxusní grafické prostředí. Smalltalk mění objekty v této databázi pomocí programovacího jazyka. Jinak řečeno, nezapomíná změny a data. Je to jiný přístup.

Pozor, toto je věcí implementace, to bych sem netahal. Pokud vím, komunita kolem Phara pracuje na sestavování image ze samostatných souborů ukládaných v Gitu a bez vývojového prostředí, neboli tak, jak to dělají jiné jazyky. To samo by mohlo zvýšit přístupnost a pochopitelnost pro nováčky.
Pochopitelnost pro nováčky přišedší z jiných jazyků. Pro naprosté nováčky (pro něž byl ostatně vymyšlen) je pochopitelnější stávající smalltalkovský koncept, který odpovídá dnešnímu stavu výpočetní techniky lépe, než ten současný standardní koncept ostatních jazyků převzatý ze 60. let, kdy byly počítače ovládany přes dálnopisy a děrné štítky.
Název: Re:čisté OP smalltalk, objective C
Přispěvatel: SB 06. 09. 2018, 12:32:21
Ono se to neprosadilo taky proto, že to konzistentní posílání zpráv objektům je ve spoustě případů nekonzistentní se zbytkem světa (nejen programátorského). A díky tomu je IMHO Smalltalk ze začátku dost neintuitivní.

OOP je jiným paradigmatem, proto nemůže být stejné jako imperativní, strukturované programování. Anebo jakoby bude, ale potom skončíte s Javou. Je to jako říci: "Chceme něco nového, ale musí to fungovat stejně jako to staré."

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. Už jen to, že v součtu řady čísel není žádné ničím výjímečné. Že o to žádáme jedno z nich je jen omezení jazyka. OOP celkově moc nevyhovuje v situacích, kdy pracujeme s více rovnocennýma entitama, protože se zpráva zasílá vždycky jenom jedné.

A pak třeba takový for cyklus. Ten se řeší taky posláním zprávy číslu (počátečnímu indexu). Tohle byl můj OMGWTF moment. Podobný jsem zažil snad jenom u BDI (belief-desire-intention) popisu vypínače. Tady už fakt sedí to rčení o kladivu a hřebíku. Ano, zatloukat šroubek kladivem je obohacující zkušenost bořící předsudky a paradigmata, ale pravidelně to dělat nechci. :)

To je přesně ten minimalismus - než zavádět navíc primitiva a k nim (zcela zbytečné) operátory (mnoho z nás ví, jak je to v Javě či C# složitý, ortogonální koncept a co je kolem toho za ukrutné sraní) jenom proto, aby se to četlo jak ve škole (upozorňuju, že je to okrajová záležitost, přičemž Smalltalk není jazykem pro sčítání čísel), stačí si uvědomit, že stejný výsledek dostanu přičtením jednoho čísla k druhému. For a If to samé. Prostě to nestojí za to.
Název: Re:čisté OP smalltalk, objective C
Přispěvatel: SB 06. 09. 2018, 12:48:43
...A díky tomu je IMHO Smalltalk ze začátku dost neintuitivní.

Jo? Kolik let jste se učil programovat, než jste mohl pracovat v Javě?
Název: Re:čisté OP smalltalk, objective C
Přispěvatel: SB 06. 09. 2018, 13:06:45
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?

Opět minimalismus - zavést samostatnou funkci znamená zavést celý nový, ortogonální koncept a tím výrazně zkomplikovat jazyk, přestože to lze řešit prostředníkem a požadavkem na něj.
Název: Re:Čisté OP Smalltalk, Objective-C
Přispěvatel: listoper 06. 09. 2018, 13:38:09
3. Má zmysel učiť sa smalltalk? čo mi to prinesie oproti bežným objektovým jazykom. Je vývoj v Smalltalku rýchlejší alebo kde je jeho hlavná výhoda.

Jo, a ještě jedna věc: Implementrace Pharo má výborný debugger, ve kterém je možno rovnou doplňovat metody (což jde skvěle dohromady s TDD, kdy při testu vyletí chyba na neexistující metodu), nebo "jen" opravovat chybu, vyčíslovat výrazy, opakovaně znovuspouštět metodu, dokud to nejede. Někdo možná řekne: "To je zbytečné." Ale když podvacáté v nějakém jazyku opravujete chybu, pořád to není ono, a vy musíte 20krát znovu aplikaci (nebo alespoň její kus) přeložit a dolézt znovu na místo chyby, tak vás to začne PĚKNĚ SRÁT. Nevím o jiném jazyku/implementaci (to neznamená, že neexistuje), který by tohle uměl.

Smalltalk ani Pharo neznam takze si nejsem uplne jisty jestli je to totez, ale podle me tohle umi kazdy jazyk kde je REPL.
Takze nejspis vetsina dialektu lispu, s jistymi ustupky asi python, javascript, haskell a kdyz budu mit hodne fantazie tak i shell. Ostatne od Java 9 mame i jshell takze i tam by se o tom dalo mluvit.
Prakticky to pouzivam jen v clojure a emacs lispu takze u ostatnich si nejsem jisty jaky tooling je k dispozici a jak pohodlne se s tim pracuje, ale kdyz musim nekdy pracovat bez REPLu tak se mi chce brecet.
Název: Re:čisté OP smalltalk, objective C
Přispěvatel: SB 06. 09. 2018, 13:46:14
Pozor, toto je věcí implementace, to bych sem netahal. Pokud vím, komunita kolem Phara pracuje na sestavování image ze samostatných souborů ukládaných v Gitu a bez vývojového prostředí, neboli tak, jak to dělají jiné jazyky. To samo by mohlo zvýšit přístupnost a pochopitelnost pro nováčky.
Pochopitelnost pro nováčky přišedší z jiných jazyků. Pro naprosté nováčky (pro něž byl ostatně vymyšlen) je pochopitelnější stávající smalltalkovský koncept, který odpovídá dnešnímu stavu výpočetní techniky lépe, než ten současný standardní koncept ostatních jazyků převzatý ze 60. let, kdy byly počítače ovládany přes dálnopisy a děrné štítky.

To ano, ale spíš by to mohlo zjednodušit nasazování aplikací, neboli nedořešený problém nedostatečného vyčlenění vývojového prostředí z image a jeho odstraňování před nasazením.
Název: Re:Čisté OP Smalltalk, Objective-C
Přispěvatel: SB 06. 09. 2018, 14:02:48

Jo, a ještě jedna věc: Implementrace Pharo má výborný debugger, ve kterém je možno rovnou doplňovat metody (což jde skvěle dohromady s TDD, kdy při testu vyletí chyba na neexistující metodu), nebo "jen" opravovat chybu, vyčíslovat výrazy, opakovaně znovuspouštět metodu, dokud to nejede. Někdo možná řekne: "To je zbytečné." Ale když podvacáté v nějakém jazyku opravujete chybu, pořád to není ono, a vy musíte 20krát znovu aplikaci (nebo alespoň její kus) přeložit a dolézt znovu na místo chyby, tak vás to začne PĚKNĚ SRÁT. Nevím o jiném jazyku/implementaci (to neznamená, že neexistuje), který by tohle uměl.

Smalltalk ani Pharo neznam takze si nejsem uplne jisty jestli je to totez, ale podle me tohle umi kazdy jazyk kde je REPL.
Takze nejspis vetsina dialektu lispu, s jistymi ustupky asi python, javascript, haskell a kdyz budu mit hodne fantazie tak i shell. Ostatne od Java 9 mame i jshell takze i tam by se o tom dalo mluvit.
Prakticky to pouzivam jen v clojure a emacs lispu takze u ostatnich si nejsem jisty jaky tooling je k dispozici a jak pohodlne se s tim pracuje, ale kdyz musim nekdy pracovat bez REPLu tak se mi chce brecet.

Obávám se, že REPL na to stačit nebude - REPL je pouze přeložení nějakého výrazu a spuštění v kontextu zastaveného debuggeru, to má dnes kdejaká implementace. Pharo umí v debuggeru přeložit a nahradit stávající metodu (nebo třeba taky vytvořit novou třídu!) a případně ji znovu spustit. Ukončení aplikace není třeba vůbec používat!
U Pythonu jsem tohoto chování (v PyCharms) nedosáhnul, v Javascriptu (v Eclipse?) mi šlo za blíže neurčených podmínek překládat jednotlivé soubory, ale nějak se změny neprojevovaly, nebo se to všelijak skládalo. O Jávce či C# nemůže být ani řeč, tam jsem k ladění běžně používal spuštění laděného kódu dočasnou úpravou po spuštění aplikace. Jiné jazyky nepoužívám.
Název: Re:Čisté OP Smalltalk, Objective-C
Přispěvatel: gll 06. 09. 2018, 14:35:19

Jo, a ještě jedna věc: Implementrace Pharo má výborný debugger, ve kterém je možno rovnou doplňovat metody (což jde skvěle dohromady s TDD, kdy při testu vyletí chyba na neexistující metodu), nebo "jen" opravovat chybu, vyčíslovat výrazy, opakovaně znovuspouštět metodu, dokud to nejede. Někdo možná řekne: "To je zbytečné." Ale když podvacáté v nějakém jazyku opravujete chybu, pořád to není ono, a vy musíte 20krát znovu aplikaci (nebo alespoň její kus) přeložit a dolézt znovu na místo chyby, tak vás to začne PĚKNĚ SRÁT. Nevím o jiném jazyku/implementaci (to neznamená, že neexistuje), který by tohle uměl.

Smalltalk ani Pharo neznam takze si nejsem uplne jisty jestli je to totez, ale podle me tohle umi kazdy jazyk kde je REPL.
Takze nejspis vetsina dialektu lispu, s jistymi ustupky asi python, javascript, haskell a kdyz budu mit hodne fantazie tak i shell. Ostatne od Java 9 mame i jshell takze i tam by se o tom dalo mluvit.
Prakticky to pouzivam jen v clojure a emacs lispu takze u ostatnich si nejsem jisty jaky tooling je k dispozici a jak pohodlne se s tim pracuje, ale kdyz musim nekdy pracovat bez REPLu tak se mi chce brecet.

Obávám se, že REPL na to stačit nebude - REPL je pouze přeložení nějakého výrazu a spuštění v kontextu zastaveného debuggeru, to má dnes kdejaká implementace. Pharo umí v debuggeru přeložit a nahradit stávající metodu (nebo třeba taky vytvořit novou třídu!) a případně ji znovu spustit. Ukončení aplikace není třeba vůbec používat!
U Pythonu jsem tohoto chování (v PyCharms) nedosáhnul, v Javascriptu (v Eclipse?) mi šlo za blíže neurčených podmínek překládat jednotlivé soubory, ale nějak se změny neprojevovaly, nebo se to všelijak skládalo. O Jávce či C# nemůže být ani řeč, tam jsem k ladění běžně používal spuštění laděného kódu dočasnou úpravou po spuštění aplikace. Jiné jazyky nepoužívám.

jde to v pythonu i v javascriptu. v pythonu reloadnete změněný modul funkcí importlib.reload, v javascriptu require, obojí můžete volat z debugeru.
Název: Re:čisté OP smalltalk, objective C
Přispěvatel: BoneFlute 06. 09. 2018, 15:53:41
- A typy samotné jsou i vcelku obstojná dokumentace. Rozumné typy dost redukují potřebné množství okolního textu. A na rozdíl od názvů nebo komentářů vždycky odpovídají aktuálnímu chování kódu.

Mimoto názvy mají být v pořádku vždy, typované jazyky nejsou žádnou výjimkou (jak si mnozí myslejí).

Zde bych se odpíchnul já. Typy, a bavím se o statickém typování, vychází z předpokladu, že vše se zkontroluje předem (haskell). Zatímco netypové jazyky chtějí možnost opravovat to až za běhu (erlang). A pak jsou různé mezistupně, které pomáhají ke zmatení nepřítele.
Název: Re:Čisté OP Smalltalk, Objective-C
Přispěvatel: SB 07. 09. 2018, 09:08:57
jde to v pythonu i v javascriptu. v pythonu reloadnete změněný modul funkcí importlib.reload, v javascriptu require, obojí můžete volat z debugeru.

Jste si jistý, že mluvíme o tom samém?
Ve kterém vývojovém IDE to můžu vyzkoušet?
Název: Re:Čisté OP Smalltalk, Objective-C
Přispěvatel: gll 07. 09. 2018, 10:31:18
jde to v pythonu i v javascriptu. v pythonu reloadnete změněný modul funkcí importlib.reload, v javascriptu require, obojí můžete volat z debugeru.

Jste si jistý, že mluvíme o tom samém?
Ve kterém vývojovém IDE to můžu vyzkoušet?

ve všech. V konzoli debuggeru můžete spustit libovolný kód jako v replu.