Hlavní navigace

Názor k článku Rychle, rychleji až úplně nejrychleji s jazykem Go od ondra.novacisko.cz - „POSÍLAJÍ ZPRÁVY“ S tím nemám problém „aby VZDÁLENĚ PŘIPOMÍNALO posílání zpráv...

  • Článek je starý, nové názory již nelze přidávat.
  • 20. 12. 2009 12:06

    ondra.novacisko.cz (neregistrovaný)

    „POSÍLAJÍ ZPRÁVY“

    S tím nemám problém

    „aby VZDÁLENĚ PŘIPOMÍNALO posílání zpráv v OOP.“

    Ano. přesněji, aby C++ bylo co nejvíc OOP a zároveň využilo co nejvíc výkonu procesoru. Od toho bodu na jednu stranu jsou jazyky co nejsou tak OOP a jsou rozhodně rychlejší než C++. Na druhou stranu jsou jazyky bližší OOP avšak jakákoliv další abstrakce stojí mnohonásobně výkonu. Já se domnívám, že to je příliš drahá cena. V C++ zvládnu spoustu OOP technik bez toho, aniž bych platil výkonem. A je v dannou chvíli jedno, jestli si objekty posílají zprávy, nebo volají metody. Nejzajímavější je to, že když si do C++ dopíšu určitý framework, udělám tam i objekty, které si opravdu budou posílat zprávy a nebudu potřebovat tříd a interfaců. Zatímco v C++ naprogramuju i čistý OOP framework, obávám se že v čistém OOP frameworku těžko naprogramuju C++.

    „No a to je právě ono. Objekty v C++ nejsou objekty“

    Ne, tady jste úplně vedle. Pokud se v OOP řeší dědičnost a to, že objekt se skládá z předka a je rozšířen o potomka, pak konstrukce takového objektu je prováděna nejprve konstrukcí předka a následně potomka. Předek ale nemůže volat potomka, když ten neexistuje. Tady jste se bohužel spletl, protože technicky opravdu není problém, aby konstruktor zavolal virtuální metodu potomka. Ale záměrně to neudělá, protože to je špatně. Je to chyba, a právě proto jsem byl naštván, protože to ukazuje hlubokou neznalost OOP. Věřte mi, že tohle záměrné omezení stojí při konstrukci objektu nějaký výkon, protože každý konstruktor musí reinicializovat vtabulku a konečný potomek ji pak ještě znova nechá přepsat podle sebe. Přitom by mohl vtabulku nastavit jednou před zahájením konstrukcí předků a bylo by to rychlejší a vyhovalo by to vašim požadavkům. Jenže by to bylo nepřijatelné chování.

    Nadávám proto, že mnoho lidí si tu představuje programování jako znalci sportu, kteří veškerý sport znají ze sportovního kanálu. Všichni víme jak je C++ objektově zmršený jazyk a přitom nevíme nic o objektovém programování. Nakonec mě dorazí prohlášení, že OOP jazyk musí obsahovat garbage collector, což je přesně to, proč Javu ani C# nepovažuju o nic objektovější, než C++ a díky tomu, že člověk platí výkonem, tak jsou ještě horší. (GC se stará o paměť na úkor ostatním resourců, které je třeba spravovat ručně, tery neobjektově)

    A vy jste přesně ten typ člověka, který ví, jak je to špatné, aniž by věděl, jak je to vlastně správně.