🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

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

Re: Ciemna strona C++

#268136
From: Sebastian Kaliszewski
Date: Thu, 08 Nov 2007 14:53
60 lines
3138 bytes
Seweryn Habdank-Wojewódzki wrote:
>>struct bar {int member;};
>>struct foo : public bar {int member2;};
>>
>>void frobnicate(struct bar* x)
> 
> Co się tu dzieje? Funkcja pobiera wskaźnik do obiektu typu bar.
> 
> 
>>{
>>        printf("INSIDE: %d %d %d\n", x[0].member, x[1].member,
>>x[2].member);
>>x[0].member -= x[1].member;
> 
> 
> A tu skąd kompilator ma wiedzieć, że skok iteratora z pozycji [0] do [1]
> wynosi 8 a nie 4? 
> Podany był w deklaracji bar, a bar ma rozmiar 4. 


Skutek sp*pnego projektu języka. Jakby tablica nie była konwertowalna do 
wskażnika na jej pierwszy element to by nie było problemu.


> Należy pomyśleć tak.
> Co byłoby, gdyby klasa foo była zdefiniowana w całkiem innej bibliotece
> dynamicznej. Skąd kompilator ma niby wiedzieć, że w tej bibliotece jest
> jakiaś np. class baz : public bar { int a[100]; }, i że dla niego ten
> iterator ma skakać o 4 * 100 + 4, przecież dla foo skacze o 8? 

To jest błąd projektowy języka. Poważny.

Kompilator albo musi to wiedzieć a jak nie wie to albo trzeba wyliczenie 
kroku przenieść do runtime albo niedopuszczać takiej konstrukcji.

> Kompilator wykonuje dokładnie to co Pan Felix chciał. Może Pan Felix
> powinien użyć zamiast bar *, bar **?

Kompilator realizuje źle zaprojrktowany język. W źle zaprojektowanym języku 
kaszana jest na porządku dziennym.

> Kod Pana F. jak dla mnie jest fatalny. Jak można obiekt polimorficzny
> dokładnie rzutować na klasę bazową.

Co to znaczy dokładnie rzutować? Tu nic takiego nei ma.

> W C++ takie "cóś" bardziej elegancko
> robi się używając vector < smart_ptr <bar> >. Jak chce mieć stały rozmiar
> polecam boost::array. 
> 
> Używanie polimorfizmu albo trzeba robić, jak to przystoi na wysokim poziomie
> np. używając kontenery zamiast tablic i smart pointery a nie wskaźniki.
> 
> Albo należy spodziewać się klapsa to tu to tam, kiedy ktoś dziubie kod ala
> C.

Co to znaczy ala C? To jest właśnie skutek kulawego języka.

pzdr
\SK
Technical Details
Message-ID: <fgv710$kde$1@bozon2.softax.pl>
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!newsfeed.gazeta.pl!opal.futuro.pl!news.internetia.pl!newsfeed.tpinternet.pl!atlantis.news.tpi.pl!news.tpi.pl!bozon.softax.com.pl!not-for-mail
References: <fghgeo$spf$1@nemesis.news.tpi.pl> <20071106002442.aebf0037.sulsa@dontmail.me> <fgqpbs$9cu$1@news.vectranet.pl> <20071107012633.3efe623d@Vorago> <fgtc67$orn$1@news.vectranet.pl>

Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!newsfeed.gazeta.pl!opal.futuro.pl!news.internetia.pl!newsfeed.tpinternet.pl!atlantis.news.tpi.pl!news.tpi.pl!bozon.softax.com.pl!not-for-mail
From: Sebastian Kaliszewski <s@get.it.off.to.reply.informa.pl>
Newsgroups: pl.comp.lang.c
Subject: Re: Ciemna strona C++
Date: Thu, 08 Nov 2007 15:53:30 +0100
Organization: Softax news server
Lines: 60
Message-ID: <fgv710$kde$1@bozon2.softax.pl>
References: <fghgeo$spf$1@nemesis.news.tpi.pl> <20071106002442.aebf0037.sulsa@dontmail.me> <fgqpbs$9cu$1@news.vectranet.pl> <20071107012633.3efe623d@Vorago> <fgtc67$orn$1@news.vectranet.pl>
NNTP-Posting-Host: 83.18.189.42
Mime-Version: 1.0
X-Trace: atlantis.news.tpi.pl 1194533345 24582 83.18.189.42 (8 Nov 2007 14:49:05 GMT)
X-Complaints-To: usenet@tpi.pl
NNTP-Posting-Date: Thu, 8 Nov 2007 14:49:05 +0000 (UTC)
User-Agent: Mozilla Thunderbird 1.0.2 (X11/20050322)
X-Accept-Language: en-us, en
In-Reply-To: <fgtc67$orn$1@news.vectranet.pl>
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit