Přehlednost syntaxe C++

Kiwi

Re:Přehlednost syntaxe C++
« Odpověď #30 kdy: 10. 03. 2018, 17:44:28 »
Říká se, že genialita je v jednoduchosti. To v těchto případech zrovna moc splněno není. ;)
Ona je to obecně asi nějaká forma kolektivního masochismu, že zrovna C++ a Java jsou nejpoužívanějšími jazyky.

Jenom pro zajimavost, ktere jazyky by podle Tebe mely byt na vrcholu misto C++ a Javy a kdy se to melo prihodit?
To se dá těžko říct. Ale čekal bych, že když chtějí lidé programovat objektově, tak k tomu budou používat objektové jazyky. Takže bych na vrcholu čekal třeba něco jako Objective C.

Akorát je otázka, zda lidé chtějí opravdu objektově programovat, nebo jen tak napůl. Třeba Java, která byla vymýšlena jako nový jazyk, ale přesto její tvůrci zvolili hybridní cestu C++. Takže pokud lidé chtějí ten styl OOP jako má C++, tak pak musejí akceptovat i ty složitosti, které to s sebou nese a které podle mě víc než bohatě eliminují výhody, jež OOP přináší, protože program se stává nepřehledným, to paradigma pak práci přidělává než aby ji šetřilo, je třeba mít na paměti spoustu pravidel a idiomů, které člověka odvádějí od jádra problému a nutí ho přemýšlet nad tím, jak to vlastně napsat.

Říká se, že genialita je v jednoduchosti. To v těchto případech zrovna moc splněno není. ;)
Ona je to obecně asi nějaká forma kolektivního masochismu, že zrovna C++ a Java jsou nejpoužívanějšími jazyky.

Souhlas. C++ má na můj vkus příliš mnoho syntaktických pravidel a používá mnoho nepřehledných jednoznakových symbolů. Java či PHP jsou mnohem čitelnější. Ještě lepší je Lisp, ale to je jiná kategorie.
Vrchol nepřehlednosti je kód v odkazu prvního postu, sice to je matematicky supermeganádhera, ale implementace v C++ je peklo. Přitom v takovém Pythonu to jde krátce a přehledně. Ovšem ten je dynamicky typovaný, Java ani C# tohle neumí.
To je právě přesně ono. V dynamicky typovaných jazycích se snad cokoli napíše jednodušeji a přehledněji - pokud jde o objektový návrh. Jenže je jim vytýkána absence možnosti odchycení velkého množství chyb kompilátorem. Ale mašinérie, která v tom staticky typovaném jazyku musí být, aby se v něm dalo nějak objektově programovat, je obludná a kód, který se kvůli tomu, aby ta kontrola fungovala, musí psát, je samotný mnohem náchylnější na zavlečení chyby - právě protože je tam vlastně jen kvůli věcem okolo a ne kvůli problému samému.

Je to asi věc názoru, ale jsem přesvědčen o tom, že jedině kód, který nenapíšu, nemůže být zabuggovaný. Takže jednoduchost zápisu algoritmu bych řadil výš než typovou kontrolu. Na druhou stranu, pokud někdo preferuje statickou typovou kontrolu, tak by měl zvážit neobjektový jazyk, protože výhody objektového paradigmatu se mohou plně projevit až v dynamicky typovaném prostředí. Ono je to vidět i na té Javě, kdy příklon k dynamičnosti je očividný, ale ta koule jejího hlavního inspiračního zdroje je bohužel příliš těžká - dodatečné zavedení generik dokládá, že je dokonce ještě těžší, než by se na první pohled mohla zdát.

Stručně - za problém C++ a Javy považuji, že se snaží skloubit neskloubitelné.


Kit

Re:Přehlednost syntaxe C++
« Odpověď #31 kdy: 10. 03. 2018, 18:09:07 »
Takže jednoduchost zápisu algoritmu bych řadil výš než typovou kontrolu. Na druhou stranu, pokud někdo preferuje statickou typovou kontrolu, tak by měl zvážit neobjektový jazyk, protože výhody objektového paradigmatu se mohou plně projevit až v dynamicky typovaném prostředí. Ono je to vidět i na té Javě, kdy příklon k dynamičnosti je očividný, ale ta koule jejího hlavního inspiračního zdroje je bohužel příliš těžká - dodatečné zavedení generik dokládá, že je dokonce ještě těžší, než by se na první pohled mohla zdát.

S tím souhlasím. Mnoho vývojářů stejně OOP už dávno opustilo právě kvůli vnitřní potřebě statického typování. V jejich aplikacích sice nalézám dědičnost (často použitou zcela nesmyslně), ale zapouzdření a polymorfismus abych lupou hledal.

Jester

Re:Přehlednost syntaxe C++
« Odpověď #32 kdy: 10. 03. 2018, 19:23:49 »
To je právě přesně ono. V dynamicky typovaných jazycích se snad cokoli napíše jednodušeji a přehledněji - pokud jde o objektový návrh. Jenže je jim vytýkána absence možnosti odchycení velkého množství chyb kompilátorem. Ale mašinérie, která v tom staticky typovaném jazyku musí být, aby se v něm dalo nějak objektově programovat, je obludná
Tohle pravda není, protože i v jazyce dynamickém (à la Smalltalk nebo to ObjC) jde udělat typová kontrola včetně generik apod. ObjC to tak má, dokonce i varianci u generických typů, a šly by snadno přidat i HKT. Typová kontrola má odchytit chyby, které lze odhalit v době překladu, a těch je požehnaně, dynamický dispatch to nijak nevylučuje. Go je například typované v podstatě staticky, ale jeho vnitřní implementace interfaců by snadno umožnila věci typu doesNotUnderstand (jiná věc je, že Pike je proti, ale technicky k tomu mají našlápnuto).

Trochu zklamáním je, že ani Swift nepřevzal to dobré z ObjC :(

Jester

Re:Přehlednost syntaxe C++
« Odpověď #33 kdy: 10. 03. 2018, 19:29:16 »
Takže jednoduchost zápisu algoritmu bych řadil výš než typovou kontrolu. Na druhou stranu, pokud někdo preferuje statickou typovou kontrolu, tak by měl zvážit neobjektový jazyk, protože výhody objektového paradigmatu se mohou plně projevit až v dynamicky typovaném prostředí. Ono je to vidět i na té Javě, kdy příklon k dynamičnosti je očividný, ale ta koule jejího hlavního inspiračního zdroje je bohužel příliš těžká - dodatečné zavedení generik dokládá, že je dokonce ještě těžší, než by se na první pohled mohla zdát.
Mnoho vývojářů stejně OOP už dávno opustilo právě kvůli vnitřní potřebě statického typování. V jejich aplikacích sice nalézám dědičnost (často použitou zcela nesmyslně), ale zapouzdření a polymorfismus abych lupou hledal.
1) OOP se s typovou kontrolou nevylučuje, jsou to ortogonální koncepty.
2) Dědičnost je v javovské formě naprosto zbytečná (proto se "používá nesmyslně"), jednoduchost kódu stojí a padá s polymorfismem. Go trefilo implementaci polymorfismu téměř dokonale (podobně jako GC), ale zase mu chybí jiné věci...

Jester

Re:Přehlednost syntaxe C++
« Odpověď #34 kdy: 10. 03. 2018, 19:46:00 »
Říká se, že genialita je v jednoduchosti. To v těchto případech zrovna moc splněno není. ;)
Ona je to obecně asi nějaká forma kolektivního masochismu, že zrovna C++ a Java jsou nejpoužívanějšími jazyky.
Jenom pro zajimavost, ktere jazyky by podle Tebe mely byt na vrcholu misto C++ a Javy a kdy se to melo prihodit?
To se dá těžko říct. Ale čekal bych, že když chtějí lidé programovat objektově, tak k tomu budou používat objektové jazyky. Takže bych na vrcholu čekal třeba něco jako Objective C.
Jinak to OOP není žádná samospásná supertechnologie. Ještě si živě pamatuju, jak se kdysi dávno pár Skotů v čele s Kowalskim spolčilo s Quebečany a začli prosazovat formální logiku jako univerzální programovací jazyk. Když to nevyšlo, tak pár jiných Skotů začlo prosazovat teorii kategorií jako ten nejlepší způsob psaní algoritmů. Výsledek známe. V době nedávné pár nadšenců "objevilo", že se nejlépe programuje v homotopické teorii typů (viz např. Idris). Nevím, nakolik se ujme, ale spíš to nevypadá. Jestli on ten problém nebude spíš v lidech...


Kit

Re:Přehlednost syntaxe C++
« Odpověď #35 kdy: 10. 03. 2018, 20:01:00 »
Jinak to OOP není žádná samospásná supertechnologie.

OOP je hlavně metodika, kterou se programovací jazyky snaží nebo nesnaží implementovat ve formě nějakých syntaktických pravidel. Objektově se dá programovat třeba v assembleru - stejně jako v Javě strukturovaně či špagetově. I v tom C++ se dá programovat objektově, když se vývojář snaží.

Jester

Re:Přehlednost syntaxe C++
« Odpověď #36 kdy: 10. 03. 2018, 20:03:53 »
Jinak to OOP není žádná samospásná supertechnologie.

OOP je hlavně metodika, kterou se programovací jazyky snaží nebo nesnaží implementovat ve formě nějakých syntaktických pravidel. Objektově se dá programovat třeba v assembleru - stejně jako v Javě strukturovaně či špagetově. I v tom C++ se dá programovat objektově, když se vývojář snaží.
Jako každá metodika se musí používat s rozumem.

D.A. Tiger

  • ****
  • 486
  • Tygr, který žere tučňáka ;-)
    • Zobrazit profil
    • E-mail
Re:Přehlednost syntaxe C++
« Odpověď #37 kdy: 10. 03. 2018, 20:04:40 »
V C++ se dá psát i přehledně. Zejména pokud člověk vyvíjí knihovny o kterých se předpokládá, že je budou používat jiní, se snažím navrhovat zejména interface tak, aby to bylo vše čitelné. Ale je to jako s UI, čili je to věc názoru, to co jednomu přijde jako přehledné, druhý se v tom nevyzná.

Já mám radši ukecanejší kód, hlavně když je hned vidět, co to dělá.

Knihovna od matematika bude napsaná tak, aby jí rozuměli matematici a nematematik zřejmě bude tápat. Nelze z toho vinit C++. Tenhle jazyk má dost širokou paletu vyjadřovacích nástrojů.

+1 Z cele diskuze snad jediny rozumny nazor.

balki

Re:Přehlednost syntaxe C++
« Odpověď #38 kdy: 10. 03. 2018, 20:08:35 »
Naucte sa rovno Haskell. Tam tie zastarale algolove konstrukcie nie su.

D.A. Tiger

  • ****
  • 486
  • Tygr, který žere tučňáka ;-)
    • Zobrazit profil
    • E-mail
Re:Přehlednost syntaxe C++
« Odpověď #39 kdy: 10. 03. 2018, 20:11:25 »
Naucte sa rovno Haskell. Tam tie zastarale algolove konstrukcie nie su.

A nebo Brainfuck. Ten jim treba prijde prehlednejsi nez C++ :-D

Kit

Re:Přehlednost syntaxe C++
« Odpověď #40 kdy: 10. 03. 2018, 20:14:06 »
Jinak to OOP není žádná samospásná supertechnologie.

OOP je hlavně metodika, kterou se programovací jazyky snaží nebo nesnaží implementovat ve formě nějakých syntaktických pravidel. Objektově se dá programovat třeba v assembleru - stejně jako v Javě strukturovaně či špagetově. I v tom C++ se dá programovat objektově, když se vývojář snaží.
Jako každá metodika se musí používat s rozumem.

To zní hodně demagogicky. Také se nedržím striktně OOP, protože to v obvyklých jazycích ani nejde. Snažím se však maximálně využívat jeho výhod, aby kód byl krátký, rychlý a srozumitelný.

Jester

Re:Přehlednost syntaxe C++
« Odpověď #41 kdy: 10. 03. 2018, 20:21:03 »
Naucte sa rovno Haskell. Tam tie zastarale algolove konstrukcie nie su.
Haskell je jen ošklivý zápis matematické hatmatilky.

Jester

Re:Přehlednost syntaxe C++
« Odpověď #42 kdy: 10. 03. 2018, 20:21:56 »
Jinak to OOP není žádná samospásná supertechnologie.

OOP je hlavně metodika, kterou se programovací jazyky snaží nebo nesnaží implementovat ve formě nějakých syntaktických pravidel. Objektově se dá programovat třeba v assembleru - stejně jako v Javě strukturovaně či špagetově. I v tom C++ se dá programovat objektově, když se vývojář snaží.
Jako každá metodika se musí používat s rozumem.

To zní hodně demagogicky. Také se nedržím striktně OOP, protože to v obvyklých jazycích ani nejde. Snažím se však maximálně využívat jeho výhod, aby kód byl krátký, rychlý a srozumitelný.
Ono to jde, ale musí se to umět.