Ideálny programovací jazyk

Re:Ideálny programovací jazyk
« Odpověď #270 kdy: 15. 05. 2019, 23:53:55 »
U zlomků by jeden očekával algebraickou rovnost
Myslím, že kdybyste ve zdrojáku napsal 2/4 a TeX by vám to vysázel jako 1/2, velice rychle byste změnil názor.
Tohle je nesmírně hloupý příklad, v TeXu není žádný typ zlomek, \frac{a}{b} je AST jako každý jiný, TeX zlomky nijak nevyhodnocuje  ::)

Ono je tu teď od tohoto autora těžké najít ne nesmírně hloupý příklad.

Filip má velmi efektivní selektivní vnímání ;)
Nikoli, já pouze vím – na rozdíl od vás – jak to funguje.

Ne, to už víme všichni. Problém je, že je to random, což se tu tak nějak snažíme vysvětlit. ;)


Re:Ideálny programovací jazyk
« Odpověď #271 kdy: 16. 05. 2019, 01:43:11 »
Fungoval mu program správně v testu s malými čísly? Ano. Fungoval mu správně na produkci s velkými čísly? Ano.
Ne, nefungovalo mu to na produkci s velkými čísly. Protože se mylně domníval, že to v Javě funguje jako v Erlangu.

Blik?

Re:Ideálny programovací jazyk
« Odpověď #272 kdy: 16. 05. 2019, 01:58:13 »
Na druhém řádku se volá statická metoda, ta mi vrátí nějakou referenci. Nikde není řečeno, zda pro stejné hodnoty to bude vracet jeden objekt nebo dva různé objekty. V té metodě klidně může být orákulum, které vám v polovině případů bude vracet objekt z poolu a v druhé polovině případů nové instance. Takže o té rovnosti nelze bez znalosti konkrétní implementace rozhodnout, zda platí nebo neplatí.
Ano, já to naprosto chápu. A jednoduše si nepřeju, aby se jazyk, se kterým pracuju, choval nepředvídatelným způsobem, podle orákula, podle denní doby, podle nálady v RedMondu nebo aktuální výše zlatých padáků v Redwood Shores. Obzvláště ne pokud se to týká základních, stupidně jednoduchých typů jako "integer o něco větší než padesát".

Ink

  • *****
  • 655
    • Zobrazit profil
    • E-mail
Re:Ideálny programovací jazyk
« Odpověď #273 kdy: 16. 05. 2019, 06:10:11 »
Každé jedno špatné rozhodnutí, na kterém se trvá, vede k sérii marných snah o nápravu a pak je jako "řešení" nabídnuto vysvětlení, proč to je vlastně v pořádku.

Každý programátor, pokud mu někdo v rané fázi vývoje nevymyje hlavičku, očekává a chce, aby se čísla sčítala pomocí + a odčítala pomocí -. Jelikož se někdo, kdo rozhodoval o tom, co v Javě smí být a co nesmí, bál "přetěžování operátorů", má Java čísla, která se sčítají normálně přes + a pak čísla, která používají "add()", protože to "jinak nejde".

Úplně stejné to je s tím == a .equals(). Samozřejmě, že "každý" chce porovnávat dvě hodnoty a ne "identitu", když sáhne po ==. Jenže Řád zlatého šálku si na to vymyslí equals() a když děcko řekne, že císař je nahý, v poklidu děcko obviní z hlouposti nebo neznalosti a odkáže ho k četbě posvátných svitků, kde je jasně uvedeno, že císař je oděn vznešeností, což, jak jistě uznáte, není totéž co nahota.

Re:Ideálny programovací jazyk
« Odpověď #274 kdy: 16. 05. 2019, 09:31:05 »
Každé jedno špatné rozhodnutí, na kterém se trvá, vede k sérii marných snah o nápravu a pak je jako "řešení" nabídnuto vysvětlení, proč to je vlastně v pořádku.

Každý programátor, pokud mu někdo v rané fázi vývoje nevymyje hlavičku, očekává a chce, aby se čísla sčítala pomocí + a odčítala pomocí -. Jelikož se někdo, kdo rozhodoval o tom, co v Javě smí být a co nesmí, bál "přetěžování operátorů", má Java čísla, která se sčítají normálně přes + a pak čísla, která používají "add()", protože to "jinak nejde".

Úplně stejné to je s tím == a .equals(). Samozřejmě, že "každý" chce porovnávat dvě hodnoty a ne "identitu", když sáhne po ==. Jenže Řád zlatého šálku si na to vymyslí equals() a když děcko řekne, že císař je nahý, v poklidu děcko obviní z hlouposti nebo neznalosti a odkáže ho k četbě posvátných svitků, kde je jasně uvedeno, že císař je oděn vznešeností, což, jak jistě uznáte, není totéž co nahota.
Vidím, že vám došly argumenty, tak jste přešel na demagogii. Jaké problémy má vaše řešení s + a == jsem napsal. Mohl jste na ty argumenty věcně reagovat. Vy jste zvolil jinou variantu, tváříte se, že jste žádné argumenty neslyšel.

Pokud jste to nepochopil, argumenty vám ještě zopakuju. Problém vašeho teoretického řešení je v tom, že neexistuje jednoznačná hranice mezi tím, co je a není číslo, stejně jako často neexistuje jednoznačná definice toho, co znamená porovnání hodnot.

Přípustné a legitimní jsou samozřejmě oba dva způsoby. Jak ten, který používá třeba C++ – zavedeme do jazyka novou kategorii „číslo“, přesněji „cokoli, co se dá sčítat“ (aniž by ta kategorie nutně musela být ve specifikaci), a umožníme každému programátorovi, aby si do této kategorie zařadil své typy. Výhodou je, že se pak opravdu dá zajistit, že všechna „čísla“ se sčítají pomocí +. Nevýhoda je ta, že se lidé neshodnou na tom, co vše patří pod čísla, takže se pak programátor musí učit další věc, která navíc platí jenom v daném projektu – co jsou a co nejsou čísla. To, že si v C++ vlastně můžu vytvořit svůj vlastní jazyk, který velice stručně popisuje mou třídu problému, je velice silná vlastnost C++ – proto je také tak oblíbené. Zároveň ta vlastně nepřeberná šíře možností, která způsobuje, že už snad nikdo nemůže znát celý jazyk, je silným negativem, pro které se spousta lidí C++ vyhýbá.

Java zvolila opačný přístup. Jazyk zná jenom dva druhy datových typů – primitivní typy a objekty. Nic jiného, Java programátorovi se nemůže stát, že by v program najednou narazil na nový druh typů, třeba na „čísla“. Znamená to, že Java má velmi malé množství pravidel, toho, co programátor musí znát. Všechno dalšího je postavené na téhle základní sadě pravidel. Tahle jednoduchost jazyka je velice silná vlastnost Javy – proto je také tak oblíbená. Zároveň to způsobuje, že příslušnou třídu problému musíte popsat jen pomocí objektového paradigmatu, tříd a metod – nic jiného vám Java nenabízí. To způsobuje onu pověstnou ukecanost Javy a to, že na kde co musíte mít vybudovaný objektový framework, který teprve dá programátorovi do ruky ty nástroje, které bude používat. Což je silné negativum, pro které se spousta lidí Javě vyhýbá.

Mimochodem, je pozoruhodné, že se to chování, že + sčítá jen primitivní typy a == porovnává primitivní typy podle hodnot a objekty podle referencí, se tu vytýká zrovna Javě, která má tuhle základní sadu pravidel nejmenší z podobných často používaných jazyků. Přitom stejná pravidla platí v C, C++, JavaScriptu nebo Pythonu. V C++ nebo Pythonu ty operátory můžete (ale nemusíte) přetížit. Ale klidně si dál myslete, že C, C++, Javu, JavaScript i Python navrhovali hlupáci, kteří chování operátorů navrhli špatně, a měli se s vámi nejdřív poradit.


Idris

  • *****
  • 2 286
    • Zobrazit profil
    • E-mail
Re:Ideálny programovací jazyk
« Odpověď #275 kdy: 16. 05. 2019, 09:40:39 »
Každé jedno špatné rozhodnutí, na kterém se trvá, vede k sérii marných snah o nápravu a pak je jako "řešení" nabídnuto vysvětlení, proč to je vlastně v pořádku.

Každý programátor, pokud mu někdo v rané fázi vývoje nevymyje hlavičku, očekává a chce, aby se čísla sčítala pomocí + a odčítala pomocí -. Jelikož se někdo, kdo rozhodoval o tom, co v Javě smí být a co nesmí, bál "přetěžování operátorů", má Java čísla, která se sčítají normálně přes + a pak čísla, která používají "add()", protože to "jinak nejde".

Úplně stejné to je s tím == a .equals(). Samozřejmě, že "každý" chce porovnávat dvě hodnoty a ne "identitu", když sáhne po ==. Jenže Řád zlatého šálku si na to vymyslí equals() a když děcko řekne, že císař je nahý, v poklidu děcko obviní z hlouposti nebo neznalosti a odkáže ho k četbě posvátných svitků, kde je jasně uvedeno, že císař je oděn vznešeností, což, jak jistě uznáte, není totéž co nahota.
Jistě, ale vzhledem k tomu, kdy Java vznikla, je její návrh ještě poměrně snesitelný.

Re:Ideálny programovací jazyk
« Odpověď #276 kdy: 16. 05. 2019, 09:40:52 »
Tahle jednoduchost jazyka je velice silná vlastnost Javy – proto je také tak oblíbená.
Ve skutečnosti je i programování v shellu oblíbenější :)

https://insights.stackoverflow.com/survey/2019#technology-_-most-loved-dreaded-and-wanted-languages

Ink

  • *****
  • 655
    • Zobrazit profil
    • E-mail
Re:Ideálny programovací jazyk
« Odpověď #277 kdy: 16. 05. 2019, 10:01:06 »
Pokud jste to nepochopil, argumenty vám ještě zopakuju. Problém vašeho teoretického řešení je v tom, že neexistuje jednoznačná hranice mezi tím, co je a není číslo, stejně jako často neexistuje jednoznačná definice toho, co znamená porovnání hodnot.

Obecně sdílená představa o tom, co je číslo, je prokazatelně větší, než to, co Java milostivě umožňuje sčítat pomocí operátoru +. A nemusíme zacházet ani do nějakých specialit, stačí BigInteger, to je číslo z definice.

Přípustné a legitimní jsou samozřejmě oba dva způsoby. Jak ten, který používá třeba C++ – zavedeme do jazyka novou kategorii „číslo“, přesněji „cokoli, co se dá sčítat“ (aniž by ta kategorie nutně musela být ve specifikaci), a umožníme každému programátorovi, aby si do této kategorie zařadil své typy. Výhodou je, že se pak opravdu dá zajistit, že všechna „čísla“ se sčítají pomocí +. Nevýhoda je ta, že se lidé neshodnou na tom, co vše patří pod čísla, takže se pak programátor musí učit další věc, která navíc platí jenom v daném projektu – co jsou a co nejsou čísla. To, že si v C++ vlastně můžu vytvořit svůj vlastní jazyk, který velice stručně popisuje mou třídu problému, je velice silná vlastnost C++ – proto je také tak oblíbené. Zároveň ta vlastně nepřeberná šíře možností, která způsobuje, že už snad nikdo nemůže znát celý jazyk, je silným negativem, pro které se spousta lidí C++ vyhýbá.

Problém Tvého argumentu je, že ty způsoby nejsou dva, ale minimálně tři. Lisp, Haskell a další jazyky už desítky let ukazují, že "operátor" není nic jiného, než (typicky infixová) funkce (jejíž název není alfanumerický/slovní, nýbrž složený ze symbolů) se dvěma argumenty (no, ještě jsou unární a ternární, ale to už je detail). Že je vhodné nechat "operátoru" + význam sčítání, na tom se všichni asi shodnou. V tomto kontextu je zajímavé, že operuješ zrovna C++ a ne alespoň C#, což je jazyk bližší Javě a "přetěžování operátorů" má taky.

Mimochodem, je pozoruhodné, že se to chování, že + sčítá jen primitivní typy a == porovnává primitivní typy podle hodnot a objekty podle referencí, se tu vytýká zrovna Javě, která má tuhle základní sadu pravidel nejmenší z podobných často používaných jazyků. Přitom stejná pravidla platí v C, C++, JavaScriptu nebo Pythonu. V C++ nebo Pythonu ty operátory můžete (ale nemusíte) přetížit. Ale klidně si dál myslete, že C, C++, Javu, JavaScript i Python navrhovali hlupáci, kteří chování operátorů navrhli špatně, a měli se s vámi nejdřív poradit.

Tohle je straw man fallacy. Nikde jsem netvrdil, že nějaký jazyk navrhovali hlupáci. Ale třeba na C++ i Pythonu je vidět, že některá rozhodnutí tvůrci časem přehodnotili, Python se ve verzi 3 vydal dokonce cestou rozbití kompatibility (unicode vs string, zahození "klasických tříd", je toho hodně). Jak jsem psal v předchozím příspěvku - trvat na správnosti nějakého rozhodnutí poté, co se ukáže, že to byla chyba, je prostě kontraproduktivní. Mezitím na javovské platformě vznikly minimálně 4 další jazyky, které se snaží být lepší Javou a to přesto, že se (neochotně a pomalu) Java také vyvíjela.

Navíc by mě zajímalo, v čem podle Tebe dělá Python == jako Java. Dělá to stejně jenom u "hloupých" objektů, chytrý objekt si umí říct, jestli jeho vnitřek odpovídá druhému objektu.

Ink

  • *****
  • 655
    • Zobrazit profil
    • E-mail
Re:Ideálny programovací jazyk
« Odpověď #278 kdy: 16. 05. 2019, 10:06:37 »
Každé jedno špatné rozhodnutí, na kterém se trvá, vede k sérii marných snah o nápravu a pak je jako "řešení" nabídnuto vysvětlení, proč to je vlastně v pořádku.

Jistě, ale vzhledem k tomu, kdy Java vznikla, je její návrh ještě poměrně snesitelný.

Tohle je subjektivní, určitě to mohlo být horší a určitě i výrazně lepší (například dodnes kroutím hlavou nad hloupým původním návrhem kolekcí před zavedením generik). Spíš mi vadí ale ta zabedněnost, s jakou se u ní na některých zjevných chybách lpí.

Idris

  • *****
  • 2 286
    • Zobrazit profil
    • E-mail
Re:Ideálny programovací jazyk
« Odpověď #279 kdy: 16. 05. 2019, 10:20:42 »
Každé jedno špatné rozhodnutí, na kterém se trvá, vede k sérii marných snah o nápravu a pak je jako "řešení" nabídnuto vysvětlení, proč to je vlastně v pořádku.

Jistě, ale vzhledem k tomu, kdy Java vznikla, je její návrh ještě poměrně snesitelný.
Spíš mi vadí ale ta zabedněnost, s jakou se u ní na některých zjevných chybách lpí.
Někteří to tak mají, něco se horkotěžko naučí a pak na tom lpí.

Re:Ideálny programovací jazyk
« Odpověď #280 kdy: 16. 05. 2019, 11:38:34 »
Problém Tvého argumentu je, že ty způsoby nejsou dva, ale minimálně tři.
Asi jsem to měl napsat jasněji – těch způsobů je celá škála, C++ a Java jsou dva příklady, které jsou na opačných místech od středu, ale jsou těsně před extrémem. Jsou samozřejmě mnohé další jazyky, které používají něco mezi, a pak další méně používané jazyky, které používají nějakou extrémní variantu.

Lisp, Haskell a další jazyky už desítky let ukazují, že "operátor" není nic jiného, než (typicky infixová) funkce (jejíž název není alfanumerický/slovní, nýbrž složený ze symbolů) se dvěma argumenty (no, ještě jsou unární a ternární, ale to už je detail).
Ano, to je také možnost. Java se tomuhle záměrně vyhnula a udělala operátory jednoduché.

Že je vhodné nechat "operátoru" + význam sčítání, na tom se všichni asi shodnou.
Ano, na tom se všichni shodnou. Ale už asi počtvrté opakuju, že se všichni neshodnou na tom, co je sčítání.

V tomto kontextu je zajímavé, že operuješ zrovna C++ a ne alespoň C#, což je jazyk bližší Javě a "přetěžování operátorů" má taky.
Java přetěžování operátorů nemá, je to záměr, protože přetěžování operátorů komplikuje jazyk a činí kód méně předvídatelný. Vysvětloval jsem to v komentáři, na který reagujete, že programovací jazyk se pohybuje někde na škále od „pár jednoduchých nástrojů, ze kterých si sám poskládáte, co potřebujete“ po „spousta komplexních nástrojů“. Java je na té škále poměrně daleko u prvního bodu. Že vám vyhovuje to druhé je vaše věc, ale neznamená to, že je to jediné správné.

Tohle je straw man fallacy. Nikde jsem netvrdil, že nějaký jazyk navrhovali hlupáci. Ale třeba na C++ i Pythonu je vidět, že některá rozhodnutí tvůrci časem přehodnotili, Python se ve verzi 3 vydal dokonce cestou rozbití kompatibility (unicode vs string, zahození "klasických tříd", je toho hodně). Jak jsem psal v předchozím příspěvku - trvat na správnosti nějakého rozhodnutí poté, co se ukáže, že to byla chyba, je prostě kontraproduktivní. Mezitím na javovské platformě vznikly minimálně 4 další jazyky, které se snaží být lepší Javou a to přesto, že se (neochotně a pomalu) Java také vyvíjela.
Jenže to rozhodnutí se neukázalo jako špatné. To, že vám něco nevyhovuje, neznamená, že to bylo správně. Zvolené řešení (s operátorem ==) je při zachování ostatních vlastností jazyka jedno z nejlepších možných, neexistuje žádné lepší. Chybné rozhodnutí v Javě jsou primitivní typy, což je zřejmé dnes, ale v době vzniku Javy to bylo logické rozhodnutí, a kdyby to tak nebylo, dnes by nebyla žádná Java a nemohli bychom řešit, že dnes jsou primitivní typy špatně. Jedna z vlastností Javy je to, že se velmi úzkostlivě drží zpětná kompatibilita. Opět, je to záměr, je to jeden z podstatných důvodů, proč se Java používá tam kde se používá. Pokud nechcete držet zpětnou kompatibilitu a chcete rychlý vývoj jazyka, nepoužívejte Javu.

Python 3 je zrovna příklad toho, jak problematické je to rozbití zpětné kompatibility – teprve teď se reálně daří zbavovat Pythonu 2. Perl na tohle rozbití zpětné kompatibility dokonce prakticky umřel, resp. odešel do zapomnění – dříve byla dvojice Perl a Python, která spolu soupeřila, Python spíš Perl doháněl. Dneska o Perlu neslyšíte.

Navíc by mě zajímalo, v čem podle Tebe dělá Python == jako Java. Dělá to stejně jenom u "hloupých" objektů, chytrý objekt si umí říct, jestli jeho vnitřek odpovídá druhému objektu.
Tak si znovu přečtěte, co jsem napsal. Python ve výchozím stavu porovnává identitu objektů, ale je možné operátor přetížit.

Spíš mi vadí ale ta zabedněnost, s jakou se u ní na některých zjevných chybách lpí.
Problém je v tom, že to, co vy považujete za zjevné chyby, jsou ve skutečnosti přednosti. Na přednostech se opravdu lpí.

Někteří to tak mají, něco se horkotěžko naučí a pak na tom lpí.
V této diskusi ovšem máme jiný problém – někomu něco vyhovuje, a myslí si, že to tedy musí být jediné správně řešení a vše ostatní je špatně. Všimněte si na rozdíl v našich argumentech. Vy argumentujete „je to špatně, protože já mám radši něco jiného“. Já argumentuju „tenhle přístup má tyhle výhody a tyhle nevýhody, výhodné je to pro tyhle případy; opačný přístup má tyhle výhody a tyhle nevýhody, výhodné je to pro tyhle případy“. Podle mne ten, kdo zabedněně lpí jenom na svém přístupu a považuje ho za jediný správný, jste tu vy.

Re:Ideálny programovací jazyk
« Odpověď #281 kdy: 16. 05. 2019, 12:22:49 »
V této diskusi ovšem máme jiný problém – někomu něco vyhovuje, a myslí si, že to tedy musí být jediné správně řešení a vše ostatní je špatně. Všimněte si na rozdíl v našich argumentech. Vy argumentujete „je to špatně, protože já mám radši něco jiného“. Já argumentuju „tenhle přístup má tyhle výhody a tyhle nevýhody, výhodné je to pro tyhle případy; opačný přístup má tyhle výhody a tyhle nevýhody, výhodné je to pro tyhle případy“. Podle mne ten, kdo zabedněně lpí jenom na svém přístupu a považuje ho za jediný správný, jste tu vy.

Takdy ale vůbec nejde o to, co preferuje Filip Jirsák nebo někdo jiný. Důležité je, co očekává běžný Franta programátor od operátoru ==. Bežný Franta programátor očekává, že to bude porovnávat hodnoty a ne reference a už vůbec neočekává, že se to bude chovat pokaždé jinak podle kontextu. Proto je design operátoru == v Javě špatný, jednou to porovnává hodnoty, podruhé reference a běžný Franta programátor je z toho zmatený. Je úplně jedno, že Filipu Jirsákovi je křišťálově jasné, co to kdy dělá. Běžný Franta programátor v tom má hokej a dělá kvůli tomu zbytečné chyby.

V oborech, kde se pracuje s vážně s bezpečností, existuje pojem lidský činitel. Člověk je totiž ten nejslabší článek řetězu, který způsobuje nejvíce chyb. Když chceme chyby minimalizovat, musíme přizpůsobit design okolních systémů tak, aby s nimi člověk dokázal co nejlépe a nejintuitivněji pracovat. Chování operátoru == v Javě je podobné, jako kdyby někdo vyrobil letadlo, kde bude výškoměr v první polovině stupnice cejchovaný v metrech a v druhé polovině ve stopách. Samozřejmě by s tím šlo létat (a jsem si jistý, že Filip Jirsák bych to bravurně zvládal), ale u normálních pilotů by to způsobovalo zmatek a zbytečné chyby.

Tady docela hezké počtení k zamyšlení, proč by se měl design systému (programovacího jazyka) přizpůsobit člověku a ne opačně: http://projekt150.ha-vel.cz/node/117

Ink

  • *****
  • 655
    • Zobrazit profil
    • E-mail
Re:Ideálny programovací jazyk
« Odpověď #282 kdy: 16. 05. 2019, 12:28:21 »
Python 3 je zrovna příklad toho, jak problematické je to rozbití zpětné kompatibility – teprve teď se reálně daří zbavovat Pythonu 2. Perl na tohle rozbití zpětné kompatibility dokonce prakticky umřel, resp. odešel do zapomnění – dříve byla dvojice Perl a Python, která spolu soupeřila, Python spíš Perl doháněl. Dneska o Perlu neslyšíte.

Tohle je zajímavé téma, ale IMO spíš pro psychology a sociology. Zatímco v Pythonu core vývojáři jasně deklarovali, že Python 2 umře a ví se kdy, v Perlu došlo k tomu, že se z jednoho jazyka, už tak lehce obskurního, staly dva, které si vzájemně konkurují. Což přesně odpovídá filosofii Perlu - čím víc možností, tím líp. Python šel cestou největšího možného zjednodušení.

Navíc by mě zajímalo, v čem podle Tebe dělá Python == jako Java. Dělá to stejně jenom u "hloupých" objektů, chytrý objekt si umí říct, jestli jeho vnitřek odpovídá druhému objektu.

Tak si znovu přečtěte, co jsem napsal. Python ve výchozím stavu porovnává identitu objektů, ale je možné operátor přetížit.

No ale to je rozdíl. Na identitu má "is", což sémanticky přesně sedí a porovnávání operátorem == (pokud to jenom trošku jde) skutečně dělá co má. Zrovna tak tomu je i u < apod. Žádné compareTo() a podobná zvěrstva se nekonají.

gill

  • ****
  • 270
    • Zobrazit profil
    • E-mail
Re:Ideálny programovací jazyk
« Odpověď #283 kdy: 16. 05. 2019, 12:55:27 »
Navíc by mě zajímalo, v čem podle Tebe dělá Python == jako Java. Dělá to stejně jenom u "hloupých" objektů, chytrý objekt si umí říct, jestli jeho vnitřek odpovídá druhému objektu.

Tak si znovu přečtěte, co jsem napsal. Python ve výchozím stavu porovnává identitu objektů, ale je možné operátor přetížit.

No ale to je rozdíl. Na identitu má "is", což sémanticky přesně sedí a porovnávání operátorem == (pokud to jenom trošku jde) skutečně dělá co má. Zrovna tak tomu je i u < apod. Žádné compareTo() a podobná zvěrstva se nekonají.

defaultne == dela to stejne co is.

Re:Ideálny programovací jazyk
« Odpověď #284 kdy: 16. 05. 2019, 13:09:22 »
V této diskusi ovšem máme jiný problém – někomu něco vyhovuje, a myslí si, že to tedy musí být jediné správně řešení a vše ostatní je špatně. Všimněte si na rozdíl v našich argumentech. Vy argumentujete „je to špatně, protože já mám radši něco jiného“. Já argumentuju „tenhle přístup má tyhle výhody a tyhle nevýhody, výhodné je to pro tyhle případy; opačný přístup má tyhle výhody a tyhle nevýhody, výhodné je to pro tyhle případy“. Podle mne ten, kdo zabedněně lpí jenom na svém přístupu a považuje ho za jediný správný, jste tu vy.

Takdy ale vůbec nejde o to, co preferuje Filip Jirsák nebo někdo jiný. Důležité je, co očekává běžný Franta programátor od operátoru ==. Bežný Franta programátor očekává, že to bude porovnávat hodnoty a ne reference a už vůbec neočekává, že se to bude chovat pokaždé jinak podle kontextu. Proto je design operátoru == v Javě špatný, jednou to porovnává hodnoty, podruhé reference a běžný Franta programátor je z toho zmatený. Je úplně jedno, že Filipu Jirsákovi je křišťálově jasné, co to kdy dělá. Běžný Franta programátor v tom má hokej a dělá kvůli tomu zbytečné chyby.

To máš podloženo nějakým průzkumem? Klidně to může být tak, že běžný programátor od jednoduchého jazyka očekává, že == vezme to co má nejvíc po ruce a porovná to a nebude dělat žádnou magii. Když si uvědomíš, že reference je hodnota pointeru, tak to v obou případech dělá to samé - porovnává hodnoty. A možná je to přesně to, co od toho očekává běžný programátor.