🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: pl.comp.lang.c
Article #268123

Re: Ciemna strona C++

#268123
From: Maciej Piechotka
Date: Sat, 03 Nov 2007 13:42
107 lines
4476 bytes
On Sat, 03 Nov 2007 10:47:38 +0100, Hoobert wrote:

> Natkąłem się na takie coś: www.fefe.de/c++/c++-talk.pdf W sumie nic
> nowego, ale kilka rzeczy dość fajnie pokazanych jest. Jak dla mnie
> przykład z foo->bar w części "C++ is hard to read" jest dość wymowny.

1. Warm-up. 'Błąd' kompilatora (tzn. brak zwijania templatów). Chyba jest 
planowane załatanie
2. Ever Changing Style. Pierwsze się chyba nadal stosuje do zwykłych petli 
a drugie do iteratorów.
3. C++ is hard to parse. Kompilatory (m. innymi używany przez autora g++) 
mają zabezpiecznie np, do 100 iteracji
4. C++ is hard to parse. Każdy język zapisany ciagłym kodem i 
niezalecanymi własciwościami jest nieczytelny. A czytelności nieczytalnego 
algorytmu język nie poprawi...
5. C++ is hard to parse. (foo) + a*b. cos(ab) powinno być równoważen 
a*b*c*o*s. A nie jest ;)
6. C++ is hard to write. Rozpacz, że cin kowertuje się do void *. Wynika z 
założeń kompatybilności z C. Kompatybilność z C jest potrzebna (chyba, że 
ktoś kocha pisać wrappery).
7. Iterators and their Containers. Don’t know anything about the container.
a) Co jeśli nie są związane z kontenerem tylko iterują między np. 1 a 6 
(dlaczego nie)?
b) Co jeśli mamy merge_iterator(begin1, end1, begin2, end2) który iteruje 
między begin1 aż do end1 (wyłącznie) a potem od begin2 do end2?
8. Bounds Checking. Szkoda, że programista może wybrać szybki nóż, którym 
może się pokaleczyć. Najlepiej mu go zabrać ;)
9. Virtual functions in con/destructor. Można prosić o rozwiązanie 
problemu bez odwoływania się do 'nieprzyzwoitej wiedzy' obiektu potomnego 
o rodzicu?

class A
{
protected:
  int x;
  int y;
public:
  virtual int
  a()
  {
    return 0;
  }
  virtual int
  b()
  {
    return 0;
  }
  A()
  {
    x = a();
    y = b();
  }
}

class B : public A
{
public:
  virtual int
  a()
  {
    return y; //Ops. A nie jest gotowe...
  }
}

Klasa B ma gwarancje w ten sposób, że obiekt A jest gotowy.

9. Virtual functions in con/destructor. Jak wyżej. Ponieważ klasa potomna 
używa klasy nadrzędnej jest niszczona jako pierwsza. A potem chcemy 
wywołać funkcję zniszczonego obiektu :)
Circullar Dependences to zawsze problem ale autor powinien zaprezentować 
jakieś sensowne wyjście jak krytykuje (bo istnieje).

10. C++ is hard to write. Tak. Najlepiej przy wywołaniu każdej funkcji 
podajmy typy parametrów. Jakimś dziwnym trafem języki ewoluują w 
przeciwnym kierunku.

11. C++ is hard to write. O using namespace whatever;. Zapomnieli dopisać 
but shouldn't.

12. C++ is hard to write. Tak zapomnijmy o polimorfizmie. Patrz ostatnie 
zdanie 10.

13. Zdania mówiące wszystko:
Obviously, there could be preprocessor tricks.
Those are in C, too, and I like C, so I’m not bashing them here.
I do agree that they need some bashing.

13. C++ makes auditing painful. Na temat audytu referencji:
int test(int &tmp);

int test2() {
  int i;
  return test((const int)i);
}

Jak jest int test(int tmp); to nie wyrzuci błędu

Nie przepadam za C++ - cześciowo z powodów wymienionych w tekście. Ale nie 
sądze, żeby dużo z wymienionych powodów dało się wyeliminować bez 
dodatkowych narzutów czasowych (także dla przypadków skrajnych które 
prawie nigdy nie występują).

Pozdrawiam
-- 
I've probably left my head... somewhere. Please wait untill I find it.
Homepage (pl_PL): http://uzytkownik.jogger.pl/
(GNU/)Linux User: #425935 (see http://counter.li.org/)
Technical Details
Message-ID: <geauv4-p5c.ln1@router.piechotka.com.pl>
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news2.icm.edu.pl!opal.futuro.pl!news.internetia.pl!nnrpd.internetia.pl
References: <fghgeo$spf$1@nemesis.news.tpi.pl>

Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news2.icm.edu.pl!opal.futuro.pl!news.internetia.pl!nnrpd.internetia.pl
From: Maciej Piechotka <uzytkownik2@gmail.com>
Newsgroups: pl.comp.lang.c
Subject: Re: Ciemna strona C++
Date: Sat, 3 Nov 2007 14:42:08 +0100
Organization: Netia S.A.
Lines: 108
Message-ID: <geauv4-p5c.ln1@router.piechotka.com.pl>
References: <fghgeo$spf$1@nemesis.news.tpi.pl>
NNTP-Posting-Host: 87-205-170-72.adsl.inetia.pl
Mime-Version: 1.0
X-Trace: mx1.internetia.pl 1194098668 14902 87.205.170.72 (3 Nov 2007 14:04:28 GMT)
X-Complaints-To: abuse@inetia.pl
NNTP-Posting-Date: Sat, 3 Nov 2007 14:04:28 +0000 (UTC)
X-Tech-Contact: usenet@internetia.pl
X-Orig-Path: router.piechotka.com.pl!news
User-Agent: Pan/0.132 (Waxed in Black)
X-Server-Info: http://www.internetia.pl/news/
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit