Article View: de.comp.lang.c++
Article #1578Re: Q: gcc 2.7.1: Aufruf einer Konstruktormethode aus einer anderen
From: Dietmar Kuehl
Date: Tue, 20 Feb 1996 20:33
Date: Tue, 20 Feb 1996 20:33
139 lines
8329 bytes
8329 bytes
Hi,
Ullrich von Bassewitz (uz@wuschel.ibb.schwaben.com) wrote:
: Harald Fuchs (hf@colibri.de) wrote:
: > > Stilistische Kritik an einem Programm ohne dessen Kenntnis
: > > ist fast schon hellseherisch.
: >
: > Man braucht kein Hellseher zu sein, um zu wissen, daß 'char*' in einem
: > sauberen C++-Programm nichts zu suchen hat.
: Naja, ich muss zugeben, dass ich mit solchen Hinweisen auch oft etwas
: Probleme habe. Natuerlich haben diese ab und zu ihre Berechtigung, das will
: ich nicht abstreiten, aber die Regel sollte sein "lieber nicht" :-)
Ich halte die technischen Newsgroups, zu denen ich trotz der zahllosen
"Off-Topic" Artikel de.clc++ zaehle, fuer ein Diskussiosforum und nicht
fuer eine kostenlose Hotline. Daher werde ich auch in Zukunft
stilistische Verbesserungsvorschlaege machen, auch oder gerade wenn
diese von einigen als kontrovers angesehen werden. Wem das nicht
passt, dem empfehle ich, sich mit dem "Author Kill" des Newsreaders
vertraut zu machen bzw. sich tatsaechlich eine Hotline zu
organisieren...
: Und, um das gleich klarzustellen: In meinen C++ Programmen finden sich
: char*'s ziemlich gleichberechtigt neben allen anderen Datentypen. Meine
: Programme sollen eine bestimmte Aufgabe erfuellen, und wenn zur Umsetzung
: eines Algorithmus char*'s notwendig und/oder besser geeignet sind als
: strings, dann verwende ich eben diese, ohne darauf Ruecksicht zu nehmen,
: was die Paepste der Heiligen Kirche zur Reinen Lehre(TM) dazu meinen. Und
: ich lache jeden aus, der glaubt, mir anhand von irgendwelche Code-Fragmenten
: die WAHRHEIT der C++ Entwicklung beibringen zu muessen (was nicht heisst,
: dass ich nicht froh darum bin, wenn mich jemand auf einen Irrtum meinerseits
: hinweist. Dazu gehoert aber mehr als nur ein "das macht man nicht weil es
: der Reinen Lehre widerspricht").
Ich bin sicherlich niemand, der auf einer einzigen, mehr oder minder
richtigen Loesung beharrt! Auch bin ich der Meinung, dass 'char*' ihre
Daseinsberechtigung haben, wie auch andere 'built-in arrays'.
Allerdings nur sehr, sehr selten ausserhalb von irgendwelchen Klassen!
Als allererstes sei auf die potentiellen Speicherloecher hingewiesen.
Man kann zwar, mit ausreichend Disziplin, die meisten vermeiden solange
das Programm auf keinen ausordentlichen Fall ('exception') laeuft, aber
sobald man irgendwo eine Exception wirft, ist in den allermeisten
Faellen alles zu spaet: Der Code ist eben nicht mit sovielen
'try/catch' Paaren versehen, dass man jedes Stueckchen Speicher einzeln
freigeben kann. Hierbei helfen Klassen wie 'string' bzw. 'vector' oder
aehnliche: Sie sorgen dafuer, dass keine Speicherloecher entstehen,
auch wenn eine Exception geworfen wurde.
Ein weiteres Argument, das mehr in richtung der "reinen Lehre" geht,
ist, dass man die Abstraktionen, die man verwendet, beim Namen nennt:
'char*' ist eine Repraesentation, keine Abstraktion. Ein 'char*' kann
z.B. sein:
- eine Repraesentation eines String (sofern man zusaetzliche
Konventionen verwendet: '0x0' als Stringende Markierung).
- eine Repraesentation eines 'String-Iterator'
- ein Array von sehr kleine, aber sehr vielen, ganzzahligen Objekten
Ein 'string' ist eine Abstraktion: Eine Sequenz von Zeichen, die als
String interpretiert wird. Wer Behauptet, dass solche Abstraktionen
generell ueberfluessig sind, hat noch nie ein typisches Programm
weiterpflegen muessen: undokumentiert und gewachsen. Die Abstraktionen
moegen im Kopf des urspruenglichen Programmierers sein, aber sie
spiegeln sich oft eben nicht im Programm wider.
: Warum koennen wir uns nicht darauf einigen, dass C++ eine sehr grosse
: Bandbreite hat und deshalb viele verschiedene Programmierstile moeglich
: sind? Es kann sehr gute Gruende geben, eingebaute Datentypen zu verwenden,
: oder ein bestimmtes Problem prozedural zu loesen - zumindest dann, wenn die
: Problemstellung aus der Praxis stammt.
Es ist zeifelsfrei richtig, dass es dafuer gute Gruende gibt, aber
nenne mir bitte einen, der 'char *string' rechtfertigen koennte! Die
Abstraktion wird aus dem (schlechtgewaehlten) Namen der Variablen und
nicht aus dem Typ klar! Dafuer gibt, IMHO, absolut keinen Grund!
Unabhaengig davon, ist der Name 'string' nach wie vor ganz besonders
schlecht gewaehlt, da er zufaellig der Name einer Standardklasse ist.
Wenn diese Klasse dann doch mal verwendet werden soll, ist man erstmal
damit beschaeftigt, diesen Namen zu aendern (OK, mit Namespaces ist er
in einem anderen Namespace, aber ich vermute dass 'using std;' zwar
schlecht, aber gaengig sein wird).
C++ bietet eine grosse Bandbreite und es wird fuer die gesamte
Bandbreite auch Anwendungen geben. Allerdings sind einige Bereiche der
gebotenen Bandbreite eher in Ansnahmefaellen brauchbar. Dazu gehoeren
'char*' (und 'built-in arrays') ausserhalb von Objekten. Dennoch
werden sie dermassen haeufig verwendet, dass man der Meinung sein
koennte, alle Programme haben mit solchen Ausnahmefaellen zu tun. Das
stimmt aber eben nicht.
[Kommentar zu "reinen Lehre" entfernt, da er mir durchaus angebracht
erscheint. Allerdings fuehle ich mich NICHT als Vertreter irgendeiner
"reinen Lehre"!]
: Was hat denn Dietmars Engagement fuer C++ mit seinem Verhalten gegenueber
: bestimmten Personen zu tun?
Mein Artikel war in keiner Weise persoenlich gemeint (ich kenne den
Autor meines Wissens nach nicht; da ich in Berlin studiert habe koennte
es sein, dass ich ihn doch, aber nicht namentlich, kenne). Ich habe
lediglich den Stil seines Beispiels kritisiert. Wenn es als Kritik an
der Person aufgefasst wurde, so tut es mir leid, denn das war nicht
mein Ziel.
: Warum ist es nicht mehr erlaubt, jemanden zu
: kritisieren, weil dieser sich (wegen mir auch unentgeltlich) eine bestimmte
: Arbeit aufgehalst hat?
Man darf mich selbstverstaendlich kritisieren. Ich habe damit kein
Problem. Allerdings sehe ich die Kritik von "Watson" als ziemlich
daneben an: Es ist wunderschoen, dass er sich mit einer
'init()'-Methode zu helfen weiss, aber das hier ist nicht die Hotline,
wo die Frage spezifisch fuer ihn beantwortet wird, sondern eine
Newsgroup. Die Antwort interessiert womoeglich auch andere Leute, ggf.
um eine Loesung fuer ein Problem zu haben, dass in Zukunft vielleicht
auftritt.
Was die Kritik bezueglich des Strings anbelangt: Man muss schon
Hellseher sein, um zu wissen, dass die Klasse 'string' nicht
angebracht ist. Nicht umgekehrt! Der entscheidene Vorteil von C++
gegenueber Sprachen wie C ist, dass man mit Abstraktionen programmieren
kann. C++ wie C zu benutzen bringt keinen Vorteil.
Dieser Artikel ist ebenfalls nicht persoenlich. Ich wollte nur
darlegen, warum ich den Programmierstil von Watson kritisiert habe und
dass ich auch weiterhin den Programmierstil von Beispielen kritisieren
werde: Wer bereits in Beispielen Code schreibt, der mir merkwuerdig
erscheint, der tut das mit hoher Wahrscheinlichkeit auch in seinen
richtigen Programmen. Darueberhinus wird diese Newsgroup womoeglich von
Leuten gelesen, die C++ lernen moechten. Daher halte ich es gradezu
fuer nicht zulaessig, meiner Meinung nach schlecten Stil unkommentiert
zu lassen.
Im uebrigen interessiert mich eigentlich viel mehr, welche Gruende es
fuer eine Deklaration wie 'char *string' geben koennte. Vielleicht kann
mich irgendjemand darueber aufklaeren. Allerdings sollte damit
gerechnet werden, dass ich womoeglich eine Follow-Up poste, in dem ich
die angefuehrten Argumente versuche zu entkraeften...
--
dietmar.kuehl@uni-konstanz.de
http://www.informatik.uni-konstanz.de/~kuehl
I am a realistic optimist - that's why I appear to be slightly pessimistic
Technical Details
Message-ID:
<4gdb6p$i5j@news.BelWue.DE>Path:
arc1-ca.pugleaf.net!news.belwue.de!uzwil!kuehlReferences:
<3120B25C.2650@fokus.gmd.de> <31229576.0@news.uni-konstanz.de> <pu91i3yvzc.fsf@themroc.colibri.de> <BOP9B96C@wuschel.ibb.schwaben.com>Show Full Headers
Complete Article Headers
Path: arc1-ca.pugleaf.net!news.belwue.de!uzwil!kuehl From: kuehl@uzwil.informatik.uni-konstanz.de (Dietmar Kuehl) Newsgroups: de.comp.lang.c++ Subject: Re: Q: gcc 2.7.1: Aufruf einer Konstruktormethode aus einer anderen Date: 20 Feb 1996 20:33:29 GMT Organization: Fakultät für Mathematik und Informatik Message-ID: <4gdb6p$i5j@news.BelWue.DE> References: <3120B25C.2650@fokus.gmd.de> <31229576.0@news.uni-konstanz.de> <pu91i3yvzc.fsf@themroc.colibri.de> <BOP9B96C@wuschel.ibb.schwaben.com> Reply-To: dietmar.kuehl@uni-konstanz.de NNTP-Posting-Host: uzwil.informatik.uni-konstanz.de X-Newsreader: TIN [version 1.2 PL2]