Ideálny programovací jazyk

Re:Ideálny programovací jazyk
« Odpověď #225 kdy: 15. 05. 2019, 17:05:07 »
Třeba ty zmíněné atomy v Erlangu jsou taky vnitřně uložené jako integery (takže obdoba ukazatelů), ale je jasně zadefinované, že když vytvářím atom třeba ze stringu, tak buďto v "cachi"/"poolu" už je, potom se ten integer zaručeně použije, nebo tam není, tak se vytvoří a pro příští volání se stejnou hodnotou bude platit první varianta.
Nebo jednou větou: podle mě by to singleton buď měl nebo neměl být z definice.


Re:Ideálny programovací jazyk
« Odpověď #226 kdy: 15. 05. 2019, 18:42:32 »
...

Jasně, určitě existuje bambilion argumentů, proč to tak (alespoň v některých implementacích) javy není, nehodlám s nimi polemizovat. Čistě s BoneFlutem konstatuju, že mě by tohle v jazyce, ve kterém bych dělal, otravovalo.

Nejak si nevzpominam, ze by me zrovna kes integeru nejak otravovala. Mas priklad kde by to mel byt problem, ktery vyzaduje pozornost?

Re:Ideálny programovací jazyk
« Odpověď #227 kdy: 15. 05. 2019, 19:39:06 »
Nejak si nevzpominam, ze by me zrovna kes integeru nejak otravovala. Mas priklad kde by to mel byt problem, ktery vyzaduje pozornost?
Jakykoliv priklad, kde jako zacatecnik budu predpokladat, ze 1000 je 1000 :)

Re:Ideálny programovací jazyk
« Odpověď #228 kdy: 15. 05. 2019, 19:54:51 »
No ale tohle je přesně to, na co narážím. Funkce equals nebo operátor== můžou být úplně stejně neintuitivní a matoucí. Zákaz přetěžování operátorů nevyřeší vůbec nic. Když autor knihovny pojmenuje funkci blbě, tak je vlastně úplně jedno jaké přesné ascii znaky to jsou.
V Javě právě úplně stejně neintuitivní a matoucí být nemohou. Protože operátor == je definován specifikací Javy a žádný uživatel nemůže udělat matoucí variantu operátoru ==. Jediné, co je na operátoru == v Javě matoucí, je to, že ho lze použít i na porovnání objektových typů a pak porovnává reference. Na druhou stranu, když se podíváte na okolní jazyky, má to tak i C, C++, JavaScript – a pro někoho by zase bylo matoucí, kdyby Java operátor == pro objekty měla zakázaný.

Re:Ideálny programovací jazyk
« Odpověď #229 kdy: 15. 05. 2019, 20:25:59 »
V tom ale ten problém není, to tady všichni chápeme, i když se vám třeba zdá, že ne. Problém je v tom poolu konstant, u kterého nikdy nevím (?), jestli tam to číslo je nebo ne.
No evidentně to problém je. V tom poolu konstant žádný problém není – když chápete rozdíl mezi hodnotou a referencí, nemůžete hodnotu Integerů nikdy porovnávat pomocí ==. Tím pádem nikdy nezjistíte, jestli tam nějaký pool konstant je nebo není. A když rozdíl mezi hodnotou a referencí nechápete a budete používat == pro porovnání hodnot objektů, bude ten kód špatně bez ohledu na to, zda pool konstant existuje nebo neexistuje.

protože operátory jsou vždy v nějakém případě kontraintuitivní
Můžete uvést příklad z Elixiru nebo Rustu?
Tak třeba Rust má spoustu operátorů, které nejsou vůbec intuitivní, to je problém sám o sobě. Ale pokud vím, některé operátory se tam dají přetěžovat, včetně ==, což nás vrací zpět na začátek této diskuse – každý operátor rovnosti, který podporuje i něco jiného, než primitivní typy, je kontraintuitivní, protože u složitějších typů vždy narazíme na to, že prostě není jasné, co je to rovnost. No a když je někde == definováno jenom pro primitivní datové typy, pro někoho bude kontraintuitivní, že pro „jednoduché ne-primitivní“ typy nebude definován. Kdyby Java podporovala == jen pro primitivní typy, byl by tu úplně stejný komentář Johnyho, akorát by se podivoval, proč to kompilátor nepřeloží.

Kontraintuitivní jsou vlastně i všechny jazyky, které mají operátor / pro celočíselné operandy definován jako celočíselné dělení. V tomto případě je vítězem JavaScript :-)

Nebyl jste to vy, kdo mi vyčítal, že mluvím za vás a podsouvám vám něco, co jste netvrdil?
Horší řešení nás v této diskusi nezajímají. Stejně dobrá vlastně taky ne, protože z těch stejně dobrých řešení se jedno muselo vybrat – ale pokud máte další stejně dobrá řešení, sem s nimi.


BoneFlute

  • *****
  • 1 981
    • Zobrazit profil
Re:Ideálny programovací jazyk
« Odpověď #230 kdy: 15. 05. 2019, 20:26:54 »
No ale tohle je přesně to, na co narážím. Funkce equals nebo operátor== můžou být úplně stejně neintuitivní a matoucí. Zákaz přetěžování operátorů nevyřeší vůbec nic. Když autor knihovny pojmenuje funkci blbě, tak je vlastně úplně jedno jaké přesné ascii znaky to jsou.
V Javě právě úplně stejně neintuitivní a matoucí být nemohou. Protože operátor == je definován specifikací Javy a žádný uživatel nemůže udělat matoucí variantu operátoru ==. Jediné, co je na operátoru == v Javě matoucí, je to, že ho lze použít i na porovnání objektových typů a pak porovnává reference. Na druhou stranu, když se podíváte na okolní jazyky, má to tak i C, C++, JavaScript – a pro někoho by zase bylo matoucí, kdyby Java operátor == pro objekty měla zakázaný.

Připomínám předmět vlákna. Bavíme se o ideálním jazyce. Ne o nejhorších možných, na které si člověk může vzpomenout. C, C++, JavaScript jsou všechno možné, jen ne nematoucí.

BoneFlute

  • *****
  • 1 981
    • Zobrazit profil
Re:Ideálny programovací jazyk
« Odpověď #231 kdy: 15. 05. 2019, 20:31:39 »
každý operátor rovnosti, který podporuje i něco jiného, než primitivní typy, je kontraintuitivní, protože u složitějších typů vždy narazíme na to, že prostě není jasné, co je to rovnost.
Nemohu souhlasit. Stačí se na to dívat tak, že porovnáváte hodnotu versus identitu, a není problém.

Co naopak problém je, jsou technické/výkonnostní potíže. Ostatně proto, se soukromě domnívám, ty objekty jsou řešené jako reference.

Kit

  • *****
  • 704
    • Zobrazit profil
    • E-mail
Re:Ideálny programovací jazyk
« Odpověď #232 kdy: 15. 05. 2019, 20:44:24 »
Připomínám předmět vlákna. Bavíme se o ideálním jazyce. Ne o nejhorších možných, na které si člověk může vzpomenout. C, C++, JavaScript jsou všechno možné, jen ne nematoucí.

O tom, že tím ideálním programovacím jazykem je Lisp, snad nikdo nepochybuje.

Re:Ideálny programovací jazyk
« Odpověď #233 kdy: 15. 05. 2019, 20:48:38 »
Připomínám předmět vlákna. Bavíme se o ideálním jazyce. Ne o nejhorších možných, na které si člověk může vzpomenout. C, C++, JavaScript jsou všechno možné, jen ne nematoucí.
Už dlouho se tu řeší jedna odbočka. Bavíme se tu o Javě, C, C++, JavaScriptu, takže je snad každému jasné, že ideální programovací jazyk se tu opravdu neřeší.

Nemohu souhlasit. Stačí se na to dívat tak, že porovnáváte hodnotu versus identitu, a není problém.
Je to problém, protože u spousty struktur nedokážete určit ani co je to ta identita, o hodnotě ani nemluvě.

Re:Ideálny programovací jazyk
« Odpověď #234 kdy: 15. 05. 2019, 20:49:56 »
Připomínám předmět vlákna. Bavíme se o ideálním jazyce. Ne o nejhorších možných, na které si člověk může vzpomenout. C, C++, JavaScript jsou všechno možné, jen ne nematoucí.

On existuje jazyk, který je ve všem nematoucí?

BoneFlute

  • *****
  • 1 981
    • Zobrazit profil
Re:Ideálny programovací jazyk
« Odpověď #235 kdy: 15. 05. 2019, 20:53:15 »
Připomínám předmět vlákna. Bavíme se o ideálním jazyce. Ne o nejhorších možných, na které si člověk může vzpomenout. C, C++, JavaScript jsou všechno možné, jen ne nematoucí.

On existuje jazyk, který je ve všem nematoucí?

To samozřejmě netuším. Ale domnívám se, že některé jazyky jsou na tom výrazně hůře, než jiné. (Nebo narážíš na ten dvojitej zápor? :-P)

BoneFlute

  • *****
  • 1 981
    • Zobrazit profil
Re:Ideálny programovací jazyk
« Odpověď #236 kdy: 15. 05. 2019, 20:55:28 »
Připomínám předmět vlákna. Bavíme se o ideálním jazyce. Ne o nejhorších možných, na které si člověk může vzpomenout. C, C++, JavaScript jsou všechno možné, jen ne nematoucí.
Už dlouho se tu řeší jedna odbočka. Bavíme se tu o Javě, C, C++, JavaScriptu, takže je snad každému jasné, že ideální programovací jazyk se tu opravdu neřeší.
Proto ti to připomínám.

Nemohu souhlasit. Stačí se na to dívat tak, že porovnáváte hodnotu versus identitu, a není problém.
Je to problém, protože u spousty struktur nedokážete určit ani co je to ta identita, o hodnotě ani nemluvě.
Tak určitě  ::)

Re:Ideálny programovací jazyk
« Odpověď #237 kdy: 15. 05. 2019, 20:56:44 »
Nebo jednou větou: podle mě by to singleton buď měl nebo neměl být z definice.
O Integeru a Stringu v Javě nikdy nikdo netvrdil, že je to singleton. Naopak třeba enumy jsou singletony. A že mají třídy Integer a String optimalizaci a někdy použijí už existující instanci, když je to možné, to ničemu nevadí, protože –jak praví klasik – na funkci to nemá vliv. Ale v žádném případě to z těch instancí nedělá singletony.

Re:Ideálny programovací jazyk
« Odpověď #238 kdy: 15. 05. 2019, 21:25:20 »
Připomínám předmět vlákna. Bavíme se o ideálním jazyce. Ne o nejhorších možných, na které si člověk může vzpomenout. C, C++, JavaScript jsou všechno možné, jen ne nematoucí.

On existuje jazyk, který je ve všem nematoucí?

To samozřejmě netuším. Ale domnívám se, že některé jazyky jsou na tom výrazně hůře, než jiné. (Nebo narážíš na ten dvojitej zápor? :-P)

Ne, dvojité zápory mi nevadí. :) Mohl bys to s těmi některými jazyky trochu rozvést? Opravdu mě to zajímá, protože třeba když jsem nad tím přemýšlel, tak v jisté chvíli jsou matoucí jazyky všechny... byť je pravda, že některé třeba ze začátku, jiné později... vyjma Prologu, ale ten dělali Francouzi...  ;D

Nebo jednou větou: podle mě by to singleton buď měl nebo neměl být z definice.
O Integeru a Stringu v Javě nikdy nikdo netvrdil, že je to singleton. Naopak třeba enumy jsou singletony. A že mají třídy Integer a String optimalizaci a někdy použijí už existující instanci, když je to možné, to ničemu nevadí, protože –jak praví klasik – na funkci to nemá vliv. Ale v žádném případě to z těch instancí nedělá singletony.

No já Javu znám těžce okrajově, ale to "to ničemu nevadí" tak, z předcházející diskuze, nevypadá, když má vliv na návratové hodnoty operátoru.

BoneFlute

  • *****
  • 1 981
    • Zobrazit profil
Re:Ideálny programovací jazyk
« Odpověď #239 kdy: 15. 05. 2019, 21:38:22 »
Připomínám předmět vlákna. Bavíme se o ideálním jazyce. Ne o nejhorších možných, na které si člověk může vzpomenout. C, C++, JavaScript jsou všechno možné, jen ne nematoucí.

On existuje jazyk, který je ve všem nematoucí?

To samozřejmě netuším. Ale domnívám se, že některé jazyky jsou na tom výrazně hůře, než jiné. (Nebo narážíš na ten dvojitej zápor? :-P)

Ne, dvojité zápory mi nevadí. :) Mohl bys to s těmi některými jazyky trochu rozvést? Opravdu mě to zajímá, protože třeba když jsem nad tím přemýšlel, tak v jisté chvíli jsou matoucí jazyky všechny... byť je pravda, že některé třeba ze začátku, jiné později... vyjma Prologu, ale ten dělali Francouzi...  ;D

Zmínil bych Haskell. Ten mi přijde těžkej, ale matoucí ne. Většinou jsem se dostal do situace, kdy jsem si říkal, že jsem prostě jen málo inteligentní. Ale, že by dělal něco nelogického, nebo matoucího, to ne.

Z opačné barikády bych zmínil jazyk Lua. Občas jsem tam narážel na to, že mi něco scházelo, nebo tak. Ale že bych měl potřebu mu něco vytýkat, to ne.

Z novějších jazyků nemůžu sloužit. Nemám je ještě tak pod kůží.

Pak je samozřejmě třeba definovat, co že to považujeme za matoucí, a jak moc. Zvyknout se dá na všechno :-)