Ich erstelle gerade ein Konzept für eine Software, die ich demnächst in
Angriff nehmen werde.
Das Ganze ist aber Hobby und rein zum Lernen, bzw. zum Spaß.
Ich arbeite unter verschiedenen Linux-Dsitris. Sprache soll C++ werden.
Die Software wird erstmal eine reine Konsolenanwendung, aber wie mans im
*nix-Umfeld kennt ist vorgesehen das später mal ein graphisches Frontend
dazukommt.
Die Software muss:
- (Text)Dateien einlesen und parsen
- Threads für Hintergrundarbeiten
- Netzwerkverbindung (TCP/UDP) oder serielle Schnittstelle
(Datenaustausch mit einem Controller)
- Pipes (oder andere Interprozesskommunikation) zum Datenaustausch mit
anderen Prozessen oder der späteren GUI
- und, im CMD-Modus natürlich Konsolenein/ausgabe
Kein HExenwerk, ich weiß. Das geht mit plain C++.
Die Frage ist: gewinne ich was wenn ich Libs wie Boost oder QT einsetze
oder bläht das die Software unnötig auf?
Bieten mir diese Frameworks Features, die mir die Arbeit an obigen
Punkten erleichtern oder komm ich ohne genauso schnell ans Ziel?
(Beispiele wieso ich evtl ein Framework benutzen will: die STL hat
keinen String-Tokenizer; serielle Kommunikation läuft über Devicefiles
mittels C-API)
PS: das ist kein "Welche Programmiersprache Thread".
Sobald Threads und Netzwerk ins Spiel Kommen: tu dir einen Gefallen, und
nimm ein Framework dafür.
Klar, die C-APIs (pthread_create_xxx, socket(), connect(), usw) gehen
alle auch unter C++.
Aber Spaß geht anders, und bis das alles durchdebuggt ist, fehlerfrei
läuft und frei von Memory/Socket-Leaks, Race conditions etc ist...
Εrnst B✶ schrieb:> Aber Spaß geht anders, und bis das alles durchdebuggt ist, fehlerfrei> läuft und frei von Memory/Socket-Leaks, Race conditions etc ist...
und bei welchen Framework gibt es diese Probleme nicht?
Selbst bei Java gibt es Race conditions.
QT wirklich nur wenn du ein GUI brauchst. Das ist so vermüllt mit
redundanten Typdefinitionen und zwingt zu einer Applikationsstruktur, in
der einfache Dinge plötzlich kompliziert werden, dass es keinen
richtigen Spaß macht. QT ist der Versuch eine eigene Welt, unabhängig
von der darunterliegenden Plattform, zu schaffen, weil man sich vor der
Plattform fürchtet.
Boost nur, wenn man das harte Zeug in Boost wirklich braucht, also nicht
nur weil man gerne damit angibt möglichst komplizierten Code schreiben
zu können. Boost sicher nicht, um nur ein bisschen Stringverarbeitung zu
bekommen (Pro-Tipp: Die guten alten C-Funktionen gibt es allesamt in
C++).
Hans schrieb:> Die Software wird erstmal eine reine Konsolenanwendung, aber wie mans im> *nix-Umfeld kennt ist vorgesehen das später mal ein graphisches Frontend> dazukommt.
dann würde ich vorschlagen die wirkliche Anwendung als Bibliothek (.so)
bereitzustellen und die Konsolenanwendung ist nur eines der Frontends,
die diese Bibliothek nutzen können. So ist die GUI viel einfacher zu
implementieren.
> Die Frage ist: gewinne ich was wenn ich Libs wie Boost oder QT einsetze> oder bläht das die Software unnötig auf?
Boost ist mittlerweile soetwas geworden, wie ein Inkubator für die
nächsten C++-Standardlib. Viel von dem, was jetzt in die Standardlib von
C++11 eingeflossen ist, stammt aus Boost.
Boost hat nicht die Idee Teile der C++ Standardlib zu ersetzen, sondern
zu ergänzen und damit zusammenzuarbeiten.
Bei QT sieht es dagegen ganz anders aus: die wollten eine GUI-Lib
entwickeln. Damals als die angefangen haben, war die C++ Standardlib
aber noch in vielen Compilern nicht nutzbar, nicht enthalten, zu buggy
etc. Daher mussten die was eigenes für die Standardfunktionen machen.
Diese Teile von QT, wie z.B. QString, stehen ein wenig in Konkurrenz zur
Standardlib.
Ich würde die C++ Standardlib und Boost als gute Basis ansehen die man
ohne Bedenken verwenden kann. Die Dinge die dort enthalten sind selber
rezuimplementieren wird fast immer schlechter als das Original und
kostet unnötig Zeit.
Für solche Dinge wie Deine Netzwerkkommunikation etc. kann es evtl.
andere Libs geben die mehr bieten, die dann gezielt anschauen und
evaluieren.
QT macht für eine GUI auf jeden Fall sind, für ne Lib oder
Konsolenanwendung würde ich mir das gut überlegen.
M, nicht Q schrieb:> Boost sicher nicht, um nur ein bisschen Stringverarbeitung zu> bekommen (Pro-Tipp: Die guten alten C-Funktionen gibt es allesamt in> C++).
Die guten Stringfunktionen sind bereits in der Standardbibliothek. Dafür
braucht man kein Boost.
Die schlechten alten C-Funktionen für string-ähnliche Bytewürste läßt
man natürlich links liegen.
Peter II schrieb:> und bei welchen Framework gibt es diese Probleme nicht?
Keine Ahnung. Javascript vielleicht, mangels Threads.
Wollte nur ausdrücken, dass z.B. Qt es sehr viel einfacher macht, diese
Probleme zu umschiffen. Die Klassen sint z.B. teilweise selber
Thread-Safe, oder es gibt nette Helfer wie den QMutexLocker, die gerade
im Zusammenspiel mit Exceptions viel Kopfschmerzen ersparen können...
Fred schrieb:> M, nicht Q schrieb:>> Boost sicher nicht, um nur ein bisschen Stringverarbeitung zu>> bekommen (Pro-Tipp: Die guten alten C-Funktionen gibt es allesamt in>> C++).>> Die guten Stringfunktionen sind bereits in der Standardbibliothek. Dafür> braucht man kein Boost.
Aber schon so kleine Dinge wie BOOST_FOREACH machen das Leben leichter
und den Code schöner. Schon dafür lohnt sich das.
Bei ner Kommandozeilen-Applikation kommt dann noch Program Options dazu,
wenn man sauber programmieren möchte noch unit testing. Alles bei Boost
dabei und nicht unnötig kompliziert.
> Die schlechten alten C-Funktionen für string-ähnliche Bytewürste läßt> man natürlich links liegen.
Auf jeden Fall, bei nem Netzwerkprogramm riecht das ganze sonst schon
nach Exploits durch falsche Pufferallokierung.
Gerd E. schrieb:> Aber schon so kleine Dinge wie BOOST_FOREACH machen das Leben leichter> und den Code schöner. Schon dafür lohnt sich das.
Braucht man nicht mehr seit C++11.
Hans schrieb:> - (Text)Dateien einlesen und parsen
Geht wunderbar mit den Standard-Streams. Für komplizierteres Parsen:
Boost Spirit.
> - Threads für Hintergrundarbeiten
Geht in C++11 "nativ" und elegant.
> - Netzwerkverbindung (TCP/UDP) oder serielle Schnittstelle
Geht mit Boost.Asio sehr gut.
> (Datenaustausch mit einem Controller)> - Pipes (oder andere Interprozesskommunikation) zum Datenaustausch mit> anderen Prozessen oder der späteren GUI
ebenfalls Boost.Asio
> - und, im CMD-Modus natürlich Konsolenein/ausgabe
C++ Standardlib.
Mit anderen Worten: C++ Standard Libray und Boost können alles was du
brauchst.
Wenn eine GUI später angedacht ist, solltest du dir jetzt schon Gedanken
machen was du dafür für eine Lib nehmen willst. Sollten es Qt oder
wxWidgets sein, bist du besser bedient gleich darauf zu setzen. Solange
nur der no-Gui-Teil verwendet wird, wird es nicht ganz so groß.
Aber mal ehrlich, Theads, Mutexe, Sockets u.s.w kriegt man auch ohne Lib
portabel für Linux, Windows und Mac in unter 1000 Zeilen Code unter. Es
muss nicht immer eine fette Lib sein. Zumal häufig noch genügend Libs
dazukommen für die verschiedesten Sachen. Die meisten sicherlich in
reinem C. Ich denke da nur an openssl, libharu, v8, libjansson... Nur
ein paar von denen die bei mir immer im Spiel sind. Das letzte was ich
mir antun würde wäre Boost. Ausser du stehst auf solche Konstruktionen:
Da kriege ich schon beim Draufgucken Augenkrebs. Ich verwende auch die
C++ Standardlib nicht. Das hat sich aber historisch so ergeben. Vor 20
Jahren konnte man sich noch nicht darauf verlassen dass jeder Compiler
das selbe darunter verstand. Also hat man sich das Grundgerüst (Listen,
Strings u.s.w.) selbst gebaut. Und wenn man es einmal gemacht hat kommt
man auch nicht wieder weg davon.
old man schrieb:> Wenn eine GUI später angedacht ist, solltest du dir jetzt schon> Aber mal ehrlich, Theads, Mutexe, Sockets u.s.w kriegt man auch ohne Lib> portabel für Linux, Windows und Mac in unter 1000 Zeilen Code unter.
Richtig, denn die C++ Standard Library enthält all das.
> Ausser du stehst auf solche Konstruktionen:> typedef boost::tokenizer<boost::char_separator<char> > tokenizer;> std::string s = "Boost C++ libraries";> tokenizer tok(s);> for (tokenizer::iterator it = tok.begin(); it != tok.end(); ++it)> std::cout << *it << std::endl;>> Da kriege ich schon beim Draufgucken Augenkrebs.
Du stehst mehr darauf den entsprechenden Algorithmus auf 1000 Zeilen
selber zu schreiben? Klar, ist natürlich viel besser lesbar! Außerdem
kann man seit C++11 obigen Code vereinfachen:
Und ja, C++ verstehen sollte man natürlich wenn man C++ verwenden will.
> Ich verwende auch die> C++ Standardlib nicht.
Das ist natürlich besonders bekloppt. Die Standardlib ist äußerst
mächtig und effizient; was besseres von Hand hinzubekommen ist utopisch,
und natürlich wahnsinnig unnötige Arbeit.
> Also hat man sich das Grundgerüst (Listen,> Strings u.s.w.) selbst gebaut. Und wenn man es einmal gemacht hat kommt> man auch nicht wieder weg davon.
Das fällt dann aber unter Beratungsresistenz bzw. Ablehnung von allen
Neuerungen...
Dr. Sommer schrieb:> Das fällt dann aber unter Beratungsresistenz bzw. Ablehnung von allen> Neuerungen...
Klar doch, zeig mir mal jemanden der regelmäßig bestehenden Code an den
jeweils aktuellen Hype anpasst. Wenn ich 20 unabhängige Projekte von 0
an jedes Jahr habe, kann man an so was denken. Nachträglich alten Code
durch neuen zu Ersetzen nur weil's schöner aussieht können sich nur die
leisten die nicht von ihrer Arbeit leben müssen.
> Und ja, C++ verstehen sollte man natürlich wenn man C++ verwenden will.
Es geht nicht darum diese Konstruktionen zu verstehen. Es geht ganz
einfach darum, daß mit diesen Sprachkonstrukten der ehemalige große
Vorteil von C++, nämlich lesbareren Code zu produzieren, wieder
hinfällig wird.
> Die Standardlib ist äußerst> mächtig und effizient;
ja, ja. Aber nur für Wald und Wiesen Anwendungen. Sobald es um
Geschwindigkeit geht und in engen Schleifen ein einfaches new zum
Killerkriterium wird sieht die Sache gewaltig anders aus. Da kann man
sich nicht auf eine Lib verlassen, sondern muss es selbst in der Hand
haben.
> Das ist natürlich besonders bekloppt.
Wenn man die Projekte auf sourceforge und co. so betrachtet, gewinnt man
schnell den Eindruck hier sind nur Bekloppte unterwegs wenn es nach
deiner Sicht der Dinge geht. Ich kann damit leben.
old man schrieb:> Klar doch, zeig mir mal jemanden der regelmäßig bestehenden Code an den> jeweils aktuellen Hype anpasst.
Ja, bei alten Projekten muss man wohl damit leben. Aber hier geht es um
eine neues Projekt. Es sei denn man wäre von Anfang an so schlau
gewesen, das Interface der eigenen Library kompatibel zur Standard
Library zu machen...
> Es geht nicht darum diese Konstruktionen zu verstehen. Es geht ganz> einfach darum, daß mit diesen Sprachkonstrukten der ehemalige große> Vorteil von C++, nämlich lesbareren Code zu produzieren, wieder> hinfällig wird.
An C++ ist leider gar nichts lesbar. Hier geht es aber um
Wiederverwendbarkeit; den einemillionsten Token-Parser zu bauen macht
das Programm auch nicht lesbarer.
> ja, ja. Aber nur für Wald und Wiesen Anwendungen. Sobald es um> Geschwindigkeit geht und in engen Schleifen ein einfaches new zum> Killerkriterium wird sieht die Sache gewaltig anders aus. Da kann man> sich nicht auf eine Lib verlassen, sondern muss es selbst in der Hand> haben.
Klar, dann implementierst du deinen eigenen vector der natürlich viel
schneller als std::vector ist, denn die Experten die den implementiert
haben sind natürlich längst nicht so erleuchtet wie du! Oder vielleicht
verwendest du die Standard Library einfach nur falsch wenn sie bei dir
zu ineffizient ist, denn die bietet ja durchaus Dinge wie
std::vector<T>::reserve zur Performance-Optimierung.
>>> Das ist natürlich besonders bekloppt.> Wenn man die Projekte auf sourceforge und co. so betrachtet, gewinnt man> schnell den Eindruck hier sind nur Bekloppte unterwegs wenn es nach> deiner Sicht der Dinge geht. Ich kann damit leben.
Ja, leider ist das so. Eine Unmenge an OpenSource-Projekten ist alles
andere als gut/sinnvoll implementiert.
Hans schrieb:> Die Software muss:> - (Text)Dateien einlesen und parsen
Geht portabel mit Native-C++, solange die Syntax der Eingabedateien mit
Reglar-Expressions erschlagen werden kann. Kommen mehr oder weniger
statndardisierte Dateiformate (wie bspw. CSV) ins Spiel, ist evtl. eine
entsprechende Zusatzbibliothek von Vorteil.
> - Threads für Hintergrundarbeiten
Geht portabel mit Native-C++.
> - Netzwerkverbindung (TCP/UDP) oder serielle Schnittstelle> (Datenaustausch mit einem Controller)
Wenn's nur unter Linux laufen soll und keine höheren Protokolle wie
HTTP, FTP u.ä. realisiert werden sollen, geht das auch mit den
Linux-Systemfunktionen recht einfach.
> - Pipes (oder andere Interprozesskommunikation) zum Datenaustausch mit> anderen Prozessen oder der späteren GUI
Dto.
Für den Datenaustausch mit einem späteren GUI-Prozess stellt der dafür
verwendete GUI-Toolkit evtl. bessere Kommunikationsmöglichkeiten zur
Verfügung.
> - und, im CMD-Modus natürlich Konsolenein/ausgabe
Geht portabel mit Native-C++.
old man schrieb:> Klar doch, zeig mir mal jemanden der regelmäßig bestehenden Code an den> jeweils aktuellen Hype anpasst.
Das macht man ja auch nicht. Aber wenn Du heute mit etwas neu anfängst
und dabei auf die Fortschritte der letzten 10 Jahre verzichtest, ist das
nicht unbedingt klug.
> Es geht nicht darum diese Konstruktionen zu verstehen. Es geht ganz> einfach darum, daß mit diesen Sprachkonstrukten der ehemalige große> Vorteil von C++, nämlich lesbareren Code zu produzieren, wieder> hinfällig wird.
hängt davon ab wie du lesbar definierst. C++ ist ziemlich mächtig und
mit so Dingen wie z.B. Operatorüberladungen kannst Du sehr
unleserlichen, aber auch sehr leserlichen Code schreiben. Hängt ganz
davon ab wie Du das Stilmittel einsetzt.
Ich finde das Beispiel mit dem Tokenizer oben eigentlich doch recht
leserlich.
> ja, ja. Aber nur für Wald und Wiesen Anwendungen. Sobald es um> Geschwindigkeit geht und in engen Schleifen ein einfaches new zum> Killerkriterium wird sieht die Sache gewaltig anders aus. Da kann man> sich nicht auf eine Lib verlassen, sondern muss es selbst in der Hand> haben.
Mit dem Argument "Geschwindigkeit" wird so viel Mist begründet. Ich hab
früher auch oft versucht irgenwas auf Geschwindigkeit zu optimieren,
dann hab ich nachgemessen und es hat nix gebracht. Und zwar nicht weil
der Code an der Stelle nicht schneller geworden wäre, sondern weil ich
an der vollkommen falschen Codestelle optimiert hatte.
Mittlerweile schreibe ich den Code so, daß er gut lesbar &
wiederverwendbar ist und die Klassen sinnvoll aufgeteilt sind. Wenn es
hinterher Performanceprobleme gibt, messe ich nach wo die Zeit draufgeht
und optimiere nur gezielt an ganz wenigen Stellen nach, wenn es sein muß
in Assembler.
Darunter darf aber auf keinen Fall die Leserlichkeit und Wartbarkeit des
restlichen Codes leiden.
Gerd E. schrieb:> Mittlerweile schreibe ich den Code so, daß er gut lesbar &> wiederverwendbar ist und die Klassen sinnvoll aufgeteilt sind. Wenn es> hinterher Performanceprobleme gibt, messe ich nach wo die Zeit draufgeht> und optimiere nur gezielt an ganz wenigen Stellen nach, wenn es sein muß> in Assembler.
Hand aufs Herz und Butter bei die Fische: Wie oft war Nachoptimierung
notwendig?
Interessiert mich wirklich. Ich behaupte nämlich, dass man in der
überwiegenden Mehrzahl der Fälle ein akzeptables Programm bekommt, indem
man einfach nur sauberen, vernünftigen Code schreibt. Also: dem Compiler
nicht Prügel zwischen die Füsse werfen und 'absichtlich' bescheuerten
Code verwenden. Normalerweise reicht das heutzutage völlig aus. Und wenn
nicht, dann stellt sich oftmals heraus, das es nicht an der
Implementierung liegt, sondern an den Algorithmen. Tausch das Verfahren
gegen ein besseres aus, dann bringt das mehr.
Profilen sowieso. Ist mir auch schon so gegangen, dass ich auf Biegen
und Brechen Dinge optimiert habe und hinterher wars dann sogar
langsamer. Seitdem lasse ich das, wenn sich nicht klar herausstellt,
dass tatsächlich ein Zeitproblem vorliegt. Auf der anderen Seite, habe
ich hoch-'optimierten' Code geerbt, der nach 15 Jahren völlig
unverständlich ist, nur so vor Bugs strotzt und wenn man das ganze
komplizierte Machwerk durch etwas solides, nach den Regeln der Kunst
gebaute ersetzt stellt isch plötzlich raus: das funktioniert nicht nur
besser, das ist sogar noch schneller als das Original.
Karl Heinz schrieb:> Hand aufs Herz und Butter bei die Fische: Wie oft war Nachoptimierung> notwendig?
recht überschaubar.
In den allermeisten Fällen hab ich dann den Algorithmus oder die
verwendeten Datenstrukturen angepasst um das Problem zu beheben.
Evtl. im Gegensatz zu Dir zähle ich das auch mit zum Nachoptimieren des
Codes, da ich vorher nicht unbedingt immer weiß wie häufig z.B. ein
bestimmter rechenintensiver Zugriff dann bei realen Daten gemacht werden
muss.
Bei Code für µCs kam es aber doch hin und wieder mal vor daß ich eine
bestimmte Schleife oder so in Assembler machen musste damit das Timing
funktionierte.
M, nicht Q schrieb:> QT ist der Versuch eine eigene Welt, unabhängig von der> darunterliegenden Plattform, zu schaffen, weil man sich vor der> Plattform fürchtet.
Nein, weil man auch die Plattform ausreichend abstrahieren muss, wenn
man auf deren mehreren unterwegs ist.
Da das für den TE allerdings kein Thema ist, braucht man das hier auch
nicht als Entscheidungskriterium zu nehmen.
Hans schrieb:> Die Software wird erstmal eine reine Konsolenanwendung, aber wie mans im> *nix-Umfeld kennt ist vorgesehen das später mal ein graphisches Frontend> dazukommt.
Es macht Sinn, die Kernlogik von der Oberfläche und der Datenhaltung zu
trennen (3-Schichten-Architektur). ιst vielleicht schon etwas Overkill
für eine kleine Anwendung, aber Skalierbarkeit ist auch eine gute
Qualität.
> Kein HExenwerk, ich weiß. Das geht mit plain C++.> Die Frage ist: gewinne ich was wenn ich Libs wie Boost oder QT einsetze> oder bläht das die Software unnötig auf?
Du solltest dich fragen, welche Software-Qualitäten dir wichtig sind:
Performance, Wartbarkeit, Portierbarkeit, usw. und davon ausgehend dich
fragen, ob dir die Frameworks helfen, diese Qualitäten einzuhalten.
Kannst du die Frage mit 'ja' beantworten - los geht's.
> Bieten mir diese Frameworks Features, die mir die Arbeit an obigen> Punkten erleichtern oder komm ich ohne genauso schnell ans Ziel?> (Beispiele wieso ich evtl ein Framework benutzen will: die STL hat> keinen String-Tokenizer; serielle Kommunikation läuft über Devicefiles> mittels C-API)
Verschaffe dir doch mal einen Überblick, auf welche Weise die von dir
zitierten Frameworks diese Probleme lösen - noch nicht mal im Detail.
Kommt dir irgendwas dran spanisch vor - lass es und mach es so, wie du
es am besten lösen kannst. Machst du vielleicht noch bisschen
Programmierung gegen selbstdefinierte Schnittstellen, die du einhalten
musst (interface-driven programming), kannst du einen großen Teil der
von dir skizzierten Sachen kohärent lösen und entkoppeln.
Dr. Sommer (Gast) schrieb:
(old man schrieb:)
>> Es geht nicht darum diese Konstruktionen zu verstehen. Es geht ganz>> einfach darum, daß mit diesen Sprachkonstrukten der ehemalige große>> Vorteil von C++, nämlich lesbareren Code zu produzieren, wieder>> hinfällig wird.> An C++ ist leider gar nichts lesbar. Hier geht es aber um> Wiederverwendbarkeit; den einemillionsten Token-Parser zu bauen macht> das Programm auch nicht lesbarer.
"An C++ ist leider gar nichts lesbar"
Endlich mal einer der (nach dem was so zu lesen ist) sich auskennt und
DAS zugibt. Ein Satz den man sich einrahmen sollte.
Vielen lieben Dank! ;-)
Ich vermute mal das ist auch der Hauptgrund, warum viele sich lieber
anderen Programmiersprachen zuwenden. Denn Wiederverwendbarkeit und
Portierbarkeit wird kaum einer der vor C++ flüchtet was einzuwenden
haben. Naja, vielleicht brauchen es viele auch nicht so dringend, vor
allem wenn sie eher für sich selber programmieren.
Leute, Leute schrieb:> Endlich mal einer der (nach dem was so zu lesen ist) sich auskennt und> DAS zugibt. Ein Satz den man sich einrahmen sollte.>> Vielen lieben Dank! ;-)
Danke auch :-D es gibt sogar Vorschläge die C++ Syntax umzubauen und die
Semantik zu behalten, aber viel ist daraus scheinbar nicht geworden.
> Ich vermute mal das ist auch der Hauptgrund, warum viele sich lieber> anderen Programmiersprachen zuwenden. Denn Wiederverwendbarkeit und> Portierbarkeit wird kaum einer der vor C++ flüchtet was einzuwenden> haben.
Naja, richtig angewendet ist C++ dank Metaprogrammierung portierbarer
und wiederverwendbarer als alles andere, aber das beherrschen leider
nicht viele... Mit etwas Gewöhnung kann man auch lustige
Template-Konstruktionen lesen.
Was mir auch auffällt sind die vielen Buzzwords, die von C++ Leuten
gerne verwendet werden.
"3-Schichten-Architektur", "Skalierbarkeit", "interface-driven
programming", "Sachen kohärent lösen und entkoppeln",
"Metaprogrammierung", "String-Tokenizer".
Die anderen hab ich jetzt mal weggelassen, da die mir vom C her selber
recht geläufig sind. Und der "String-Tokenizer" ist nichts anderes als
eine Funktion die einen String in Teilstrings zerrupft so wie hier
http://www.addison-wesley.de/service/krueger/kap12005.htm
Ist wohl wie bei der Visite am Krankenbett, wenn das Fachpersonal in
Weiß mit der Patientenakte in der Hand vorbeischaut und beginnt den
Terminus Duktus in der Fachsprache runterzurasseln.
Leute, Leute schrieb:> Was mir auch auffällt sind die vielen Buzzwords, die von C++> Leuten> gerne verwendet werden.>> "3-Schichten-Architektur", "Skalierbarkeit", "interface-driven> programming", "Sachen kohärent lösen und entkoppeln",> "Metaprogrammierung", "String-Tokenizer".
Ehehe. Nur ist es eben so dass Programmieren eine komplexe Angelegenheit
ist (wenn man mehr als zwei LED's blinken lassen will), weswegen man
eine Menge Methodik braucht um guten Code/Programme zu produzieren. Und
diese Methodiken haben eben Namen.
> Die anderen hab ich jetzt mal weggelassen, da die mir vom C her selber> recht geläufig sind. Und der "String-Tokenizer" ist nichts anderes als> eine Funktion die einen String in Teilstrings zerrupft so wie hier
Ja... und?
> Ist wohl wie bei der Visite am Krankenbett, wenn das Fachpersonal in> Weiß mit der Patientenakte in der Hand vorbeischaut und beginnt den> Terminus Duktus in der Fachsprache runterzurasseln.
Nur dass man als Programmierer keine Patienten hat die man damit
eventuell verwirren könnte. Alle Fachgebiete haben ihre eigenen
Fachsprachen damit man sich effizient unterhalten kann und nicht alles
umschreiben muss. Wenn du damit ein Problem hast, ist das dein Pech...
Bei ETechnik ist das doch auch nicht anders, "Astabiler Multivibrator"
ist doch fast ein Zungenbrecher, und unter einem Ringoszillator kann
sich auch kein Nicht-ETechniker etwas vorstellen.
Dr. Sommer (Gast) schrieb:
> Ja... und?
Ja und so einfach kann das aufgelöst sein, wofür andere so komplizierte
Begriffe verwenden (müssen). Wie war das noch gleich im anderen Thread
"Haskell für Embedded Systeme" und Industrie 4.0, mit IoT, IIoT usw.?
Man muss die Begriffe auch nicht überstrapazieren und den Dingen mehr
Bedeutung verleihen, als es eigentlich wert ist.
> Nur dass man als Programmierer keine Patienten hat die man damit> eventuell verwirren könnte.
Dafür aber Kunden, die man wohl beeindrucken möchte.
> Alle Fachgebiete haben ihre eigenen> Fachsprachen damit man sich effizient unterhalten kann und nicht alles> umschreiben muss. Wenn du damit ein Problem hast, ist das dein Pech...
Man muss es ja nicht übertreiben. Meistens nutzen gerade gerne die
Blender übermäßig viele Fachbegriffe, weil sie darauf spekulieren, dass
keiner ihrer Zuhörer mal nachfragt, was sie mit dem Kauderwelch
eigentlich ausdrücken möchten.
> Bei ETechnik ist das doch auch nicht anders, "Astabiler Multivibrator"> ist doch fast ein Zungenbrecher
Denn nenn es doch einfach Kippschaltung.
Ein Framework ist ok. Aber wenn du mehrere Frameworks in einem Programm
mischen willst, kann das Ärger geben. Die vertragen ich oft nicht
besonders gut.
Vor allem wenn jedes Framework eine eigene mainloop braucht, weil es
keine standardisierte Möglichkeit gibt, blockierend auf Ereignisse aus
verschiedenen Quellen zu warten. Aber vielleicht kannst du dieses
Problem mit Threads umgehen. Gibt dann halt einen Thread für jede
mainloop.
Konkret: Oben wurde boost asio vorgeschlagen. Ich könnte mir vorstellen,
dass sich das nicht mit QT verträgt (Außer du kommunizierst mit der GUI
über einen socket...)
> Ja und so einfach kann das aufgelöst sein, wofür andere so komplizierte> Begriffe verwenden (müssen).
Welchen anderen Begriff als Tokenizer würdest du also vorschlagen?
Funktion-die-String-in-Teilstrings-zerrupft? Klingt super.
> Man muss die Begriffe auch nicht überstrapazieren und den Dingen mehr> Bedeutung verleihen, als es eigentlich wert ist.
Das tut auch keiner, und deswegen verwendet man das weithin bekannte und
verstandene Wort "Tokenizer".
> Dafür aber Kunden, die man wohl beeindrucken möchte.
Wenns funktioniert ist doch toll. Aber ich bin gespannt auf deine
nicht-beeindruckenden Begriffsalternativen.
> Man muss es ja nicht übertreiben. Meistens nutzen gerade gerne die> Blender übermäßig viele Fachbegriffe, weil sie darauf spekulieren, dass> keiner ihrer Zuhörer mal nachfragt, was sie mit dem Kauderwelch> eigentlich ausdrücken möchten.
Du hast doch die ganzen Fachwörter zusammengesucht... Aber ob du es
glaubst oder nicht, manchmal will man einfach nur über Dinge reden und
sie bei ihrem anerkannten Namen nennen, ohne alles komisch um
schreibeiben zu müssen.
> Denn nenn es doch einfach Kippschaltung.
Ah, den kannte ich noch nicht. Aber da weiß ich leider auch nicht was
gemeint ist.
sebastian schrieb:> weil es> keine standardisierte Möglichkeit gibt, blockierend auf Ereignisse aus> verschiedenen Quellen zu warten
Die Betriebssysteme haben aber eine, und man kann typischerweise in die
Mainloops HANDLE's (Win32)/File Descriptor's (UNIX) einfügen um bei
Änderungen benachrichtigt zu werden.
> Aber ich bin gespannt auf deine> nicht-beeindruckenden Begriffsalternativen.
Ich habe ja nicht gesagt, dass man solche Begriffe nicht verwenden darf
oder soll. Ich habe nur mal freundlich auf das Beispiel aus dem
Nachbarthread hinweisen wollen. Die Parallele hat sich mir hier
aufgedrängt bei der Anhäufung von Buzzwords hier.
>> Denn nenn es doch einfach Kippschaltung.> Ah, den kannte ich noch nicht. Aber da weiß ich leider auch nicht was> gemeint ist.
Du kanntest den Begriff Kippschaltung nicht?
Kaum zu glauben ...
Leute, Leute schrieb:>> Bei ETechnik ist das doch auch nicht anders, "Astabiler Multivibrator">> ist doch fast ein Zungenbrecher>> Denn nenn es doch einfach Kippschaltung.
und schon hast Du Informationsverlust. Denn Kippschaltungen gibts in
Astabil, Bistabil oder Monostabil. Und das macht durchaus einen
Unterschied.
Da nehm ich lieber den Fachausdruck. Vor allem weil hier die Frage von
einem Programmierer kam und sich an Programmierer richtete. Da kann man
erwarten daß alle Teilnehmer die Fachtermini kennen.
Gerd E. (robberknight) schrieb:
>> Denn nenn es doch einfach Kippschaltung.> und schon hast Du Informationsverlust. Denn Kippschaltungen gibts in> Astabil, Bistabil oder Monostabil. Und das macht durchaus einen> Unterschied.
Das ist jetzt Korinthenkackerei. Diesen Unterschied kennen auch die
Allermeisten und vieles ergibt sich aus dem Zusammenhang.
> Vor allem weil hier die Frage von> einem Programmierer kam und sich an Programmierer richtete. Da kann man> erwarten daß alle Teilnehmer die Fachtermini kennen.
Na wenn alle hier alles kennen würden bräuchten sie gar nicht erst zu
fragen.
Gerd E. schrieb:> hängt davon ab wie du lesbar definierst. C++ ist ziemlich mächtig und> mit so Dingen wie z.B. Operatorüberladungen kannst Du sehr> unleserlichen, aber auch sehr leserlichen Code schreiben. Hängt ganz> davon ab wie Du das Stilmittel einsetzt.
Das sehe ich auch so. Ich kann nicht nachvollziehen, warum in dieser
Hinsicht immer so viel auf C++ geschimpft wird. Qt ist für mich das
beste Beispiel, dass man damit wirklich schönen und gut lesbaren Code
schreiben kann.
Leute, Leute schrieb:> Gerd E. (robberknight) schrieb:>>>> Denn nenn es doch einfach Kippschaltung.>>> und schon hast Du Informationsverlust. Denn Kippschaltungen gibts in>> Astabil, Bistabil oder Monostabil. Und das macht durchaus einen>> Unterschied.>> Das ist jetzt Korinthenkackerei. Diesen Unterschied kennen auch die> Allermeisten und vieles ergibt sich aus dem Zusammenhang.
So, so. Du willst es also für Einsteiger und Fachfremde einfacher
verständlich machen, in dem Du von ihnen verlangst die durch Deine
ungenaue Sprache verloren gegangene Information aus dem Kontext zu
rekonstruieren?
>> Vor allem weil hier die Frage von>> einem Programmierer kam und sich an Programmierer richtete. Da kann man>> erwarten daß alle Teilnehmer die Fachtermini kennen.>> Na wenn alle hier alles kennen würden bräuchten sie gar nicht erst zu> fragen.
Wenn ich mich nicht täusche hatte der TO nicht nach Fachtermini gefragt.
> Ich habe ja nicht gesagt, dass man solche Begriffe nicht verwenden darf> oder soll. Ich habe nur mal freundlich auf das Beispiel aus dem> Nachbarthread hinweisen wollen. Die Parallele hat sich mir hier> aufgedrängt bei der Anhäufung von Buzzwords hier.
Was ist denn für dich der Unterschied zw. Buzzword und Fachbegriff, und
warum hälst du deine o.g. Begriffe für Buzzwords?
> Du kanntest den Begriff Kippschaltung nicht?> Kaum zu glauben ...
Du kennst Tokenizer nicht? Kaum zu glauben!
> So, so. Du willst es also für Einsteiger und Fachfremde einfacher> verständlich machen,
Klar, was soll daran falsch sein? Es lesen hier ja auch andere mit.
> Was ist denn für dich der Unterschied zw. Buzzword und Fachbegriff,
Die Art und Weise des Gebrauchs bzw. des Umgangs damit.
> Du kennst Tokenizer nicht? Kaum zu glauben!
Da siehst du mal wo wir alle noch so unsere Lücken haben. :)
Nein, ganz so ist es nicht. Ich hatte nur ähnliche Gefühle wie old man
(Gast) der schrieb "
"Da kriege ich schon beim Draufgucken Augenkrebs." beim Betrachten von
typedef boost::tokenizer<boost::char_separator<char> > tokenizer;
std::string s = "Boost C++ libraries";
tokenizer tok(s);
for (tokenizer::iterator it = tok.begin(); it != tok.end(); ++it)
std::cout << *it << std::endl;
wobei mir das Codestück inzwischen klar geworden ist.
Die Frage hier
> Die Frage ist: gewinne ich was wenn ich Libs wie Boost oder QT einsetze> oder bläht das die Software unnötig auf?
wird dem TE sowieso keiner beantwoten können. Das wird er schon selber
rausfinden müssen.
> Die Art und Weise des Gebrauchs bzw. des Umgangs damit.
Also ist die kasuale Verwendung der Fachbegriffe wie hier im Thread kein
Buzzword.
> Da siehst du mal wo wir alle noch so unsere Lücken haben. :)
Mecker halt nicht mit anderen rum wenn du die üblichen Begriffe nicht
kennst...
> Nein, ganz so ist es nicht. Ich hatte nur ähnliche Gefühle wie old man> (Gast) der schrieb ">> "Da kriege ich schon beim Draufgucken Augenkrebs." beim Betrachten von
Das Codestück hat nichts mit Buzzwords zu tun und ist auch nicht so
schlimm wenn man sich ein bisschen mit C++ auskennt.
>> Die Frage ist: gewinne ich was wenn ich Libs wie Boost oder QT einsetze>> oder bläht das die Software unnötig auf?>> wird dem TE sowieso keiner beantwoten können. Das wird er schon selber> rausfinden müssen.
Die Wiederverwendung von passendem Code (Libraries) schrumpft den
eigenen Code und die Entwicklungszeit jedenfalls drastisch.
> Mecker halt nicht mit anderen rum wenn du die üblichen Begriffe nicht> kennst...
Ich Mecker doch gar nicht. Habe dich doch sogar gelobt weiter oben. Auch
habe ich mich weniger am Wort Tokenizer gestört, als an dem
Codefragment. Aber in dem Zusammenhang mit dem Posting zuvor erinnerte
mich der Gebrauch halt (in der Häufung) an die Buzzwords des Posters mit
seinem Haskell. Wer in Haskell geübt ist kann natürlich auch leicht über
andere herziehen für die das Kauderwelch darstellt.
Also bleib einfach locker und sie die Diskussion als unaufgeregten
Plausch.
Hallo,
M, nicht Q schrieb:> QT wirklich nur wenn du ein GUI brauchst. Das ist so vermüllt mit> redundanten Typdefinitionen und zwingt zu einer Applikationsstruktur, in> der einfache Dinge plötzlich kompliziert werden, dass es keinen> richtigen Spaß macht. QT ist der Versuch eine eigene Welt, unabhängig> von der darunterliegenden Plattform, zu schaffen, weil man sich vor der> Plattform fürchtet.>> Boost nur, wenn man das harte Zeug in Boost wirklich braucht, also nicht> nur weil man gerne damit angibt möglichst komplizierten Code schreiben> zu können. Boost sicher nicht, um nur ein bisschen Stringverarbeitung zu> bekommen (Pro-Tipp: Die guten alten C-Funktionen gibt es allesamt in> C++).
Ich mußte wirklich lange nachdenken, um mich daran zu erinnern, ob ich
schon einmal solchen Unsinn gelesen habe. Aber: nein, so einen
gewaltigen Unsinn habe ich in meinem ganzen Leben noch nie gelesen. Ja
Respekt! Auf so einen Quatsch muß man erst mal kommen!
Karnevalistische Grüße,
Sheeva
Hallo Mark,
Mark Brandis schrieb:> M, nicht Q schrieb:>> QT wirklich nur wenn du ein GUI brauchst. Das ist so vermüllt mit>> redundanten Typdefinitionen>> Bitte was?
Bitte bedenke, es ist Karneval! Offensichtlich übt er für seine
Büttenrede.
Liebe Grüße,
Sheeva
Hallo Hans,
Hans schrieb:> Die Frage ist: gewinne ich was wenn ich Libs wie Boost oder QT einsetze
Ja, zweifellos. Du gewinnst sauberen, wiederverwendbaren Code, den
andere bereits für Dich entwickelt und umfangreich debuggt haben.
> oder bläht das die Software unnötig auf?
Nein. Wenn Du es richtig machst, bindet ein guter Compiler wie der GCC
am Ende nur das ein, was Du auch benutzt.
> Bieten mir diese Frameworks Features, die mir die Arbeit an obigen> Punkten erleichtern
Ja, unbedingt. Das ist der Grund dafür, warum es überhaupt Bibliotheken
gibt und warum manche sogar für teures Geld gehandelt werden: weil es
immer viel billiger, schneller, stabiler und einfacher ist, bereits
ausgereiften Code wiederzuverwenden, als etwas neu zu entwickeln.
> oder komm ich ohne genauso schnell ans Ziel?
Das kommt primär darauf an, wie viel Aufwand Du in das Erlernen der Libs
investieren und wie viel Funktionalität Du von ihnen verwenden kannst.
Aber in der Regel kommst Du mit ordentlichen Libraries und Frameworks
bedeutend schneller zum Ziel, nicht nur hinsichtlich des Entwicklungs-,
sondern vor allem hinsichtlich des Debuggingaufwands.
Viel Erfolg,
Sheeva
Jörg Wunsch schrieb:> M, nicht Q schrieb:>> QT ist der Versuch eine eigene Welt, unabhängig von der>> darunterliegenden Plattform, zu schaffen, weil man sich vor der>> Plattform fürchtet.>> Nein, weil man auch die Plattform ausreichend abstrahieren muss, wenn> man auf deren mehreren unterwegs ist.
Hi Jörg, da stimme ich Dir voll zu.
> Da das für den TE allerdings kein Thema ist, braucht man das hier auch> nicht als Entscheidungskriterium zu nehmen.
Sollte man. Es macht keinen Sinn ein Programm zu entwickeln was nur auf
Windoof läuft :-)
old man schrieb:> typedef boost::tokenizer<boost::char_separator<char> > tokenizer;> std::string s = "Boost C++ libraries";> tokenizer tok(s);> for (tokenizer::iterator it = tok.begin(); it != tok.end(); ++it)> std::cout << *it << std::endl;
Wobei ich mich frage, wo ist der Seperator hier angegeben???
Da finde ich persönlich schöner
Dr. Sommer schrieb:>> Ich verwende auch die>> C++ Standardlib nicht.> Das ist natürlich besonders bekloppt. Die Standardlib ist äußerst> mächtig und effizient; was besseres von Hand hinzubekommen ist utopisch,> und natürlich wahnsinnig unnötige Arbeit.
Bei der Gelegenheit kannst du mal einen Blick auf Googles V8 werfen.
Reines C++ und portabel zu allen Betriebssystemen und Architekturen.
Schade nur dass die bekloppten Entwickler völlig vergessen haben dass es
die C++ Standard Lib gibt. Hätten sie doch lieber Dr. Sommer gefragt...
Obwohl, liegt die Kernkompetenz von Dr. Sommer nicht ehr im horizontalen
Bereich?
Leute, Leute schrieb:> Philip K. (philip_k) schrieb:>>> Ich kann nicht nachvollziehen, warum in dieser>> Hinsicht immer so viel auf C++ geschimpft wird. Qt ist für mich das>> beste Beispiel, dass man damit wirklich schönen und gut lesbaren Code>> schreiben kann.>> Ob der Code gut lesbar ist sieht am immer erst in einem direkten> Vergleich>> Ultimate++ vs Qt (R)> http://www.ultimatepp.org/www$uppweb$vsqt$en-us.html
Ich sehe da Unterschiede in der Codelänge aber nicht in der Lesbarkeit.
Philip K. schrieb:> Ich sehe da Unterschiede in der Codelänge aber nicht in der Lesbarkeit.
Wenn der Code bei gleich guter Lesbarkeit kürzer ist, so ist das doch
eindeutig ein Vorteil von Ultimate++, da einer, der sich in den Code
einarbeiten, schneller damit fertig wird, oder?
Yalu X. schrieb:> Philip K. schrieb:>> Ich sehe da Unterschiede in der Codelänge aber nicht in der Lesbarkeit.>> Wenn der Code bei gleich guter Lesbarkeit kürzer ist, so ist das doch> eindeutig ein Vorteil von Ultimate++, da einer, der sich in den Code> einarbeiten, schneller damit fertig wird, oder?
Das könnte man schon so sehen. Auch wenn das wohl nicht das einzige
Kriterium ist um ein Framework zu beurteilen. Da ich aber Ultimate++
nicht kenne und für mich überhaupt keinen Grund sehe Qt den Rücken zu
kehren kann ich dazu auch nicht mehr sagen.
Allerdings war das ja auch gar nicht die Frage. Es ging ja darum, ob C++
Code generell schlecht lesbar ist.
old man schrieb:> Bei der Gelegenheit kannst du mal einen Blick auf Googles V8 werfen.> Reines C++ und portabel zu allen Betriebssystemen und Architekturen.
So wie die C++ Standard Library.
> Schade nur dass die bekloppten Entwickler völlig vergessen haben dass es> die C++ Standard Lib gibt. Hätten sie doch lieber Dr. Sommer gefragt...
Auch ohne mich zu fragen wussten sie dass Code wiederverwendung,
insbesondere der standard library, sinnvoll ist, weswegen sie das auch
getan haben. Im Code findet man schön Verwendung von std::list,
std::vector, std::pair, std::max, std::bitset etc. etc.
> Obwohl, liegt die Kernkompetenz von Dr. Sommer nicht ehr im horizontalen> Bereich?
Deine scheint im Ignorieren von sinnvoller Technologie und im Beharren
auf antiken Ansichtsweisen zu bestehen.
Aber ich bin gespannt, welche Dinge, die in der C++ Standard Library
implementiert sind, kannst du wie und warum effizienter implementieren?
Dr. Sommer schrieb:> Auch ohne mich zu fragen wussten sie dass Code wiederverwendung,> insbesondere der standard library, sinnvoll ist, weswegen sie das auch> getan haben. Im Code findet man schön Verwendung von std::list,> std::vector, std::pair, std::max, std::bitset etc. etc.
Es macht es nicht besser wenn Unwahrheiten behauptet werden. Die V8
implementiert die Listen, Strings und Vectoren komplett selber (utils.h,
string-stream.h, list.h). Ich will nicht ausschließen, dass in den
Samples die stdlib verwendet wird. Aber eben auch nur dort. Weil sie
eben so schlau waren deine Meinung nicht einzuholen. Die haben dir in
den Samples nur ein paar Brocken hingeschmissen damit du nicht vom
Glauben abfällst.
> Aber ich bin gespannt, welche Dinge, die in der C++ Standard Library> implementiert sind, kannst du wie und warum effizienter implementieren?
Spätestens wenn du mit großen Datenmengen zu tun hast. Und ich sprechen
hier von mehreren Millarden Datensätzen. Wenn du dann die wunderschönen
dyn. Strings und Listen aus der Lib verwendest und du dir pro Datensatz
eine unbekannte Anzahl automatischer Speicherallocierungen einfängst,
weisst du warum man manche Sachen besser selbst macht. Um ein paar
Strings fürs Userinterface zusammenzubasteln ist das natürlich nicht
nötig. Aber es gibt halt auch noch Anwendungen jenseit von "Hello
World".
> Es macht es nicht besser wenn Unwahrheiten behauptet werden.
Ebenso.
> Die V8> implementiert die Listen, Strings und Vectoren komplett selber (utils.h,> string-stream.h, list.h). Ich will nicht ausschließen, dass in den> Samples die stdlib verwendet wird. Aber eben auch nur dort.
Falsch. Auch im "Core"-Code. z.B. instrument-a64.cc, Zeile 155 und
weitere. Das interessante ist dass die "Liste" in list.h das gleiche wie
ein std::vector ist, aber ohne nette Features wie move/copy-construct
etc.
> Weil sie> eben so schlau waren deine Meinung nicht einzuholen.
Auch Google macht Fehler; siehe g+ .
> Die haben dir in> den Samples nur ein paar Brocken hingeschmissen damit du nicht vom> Glauben abfällst.
s.o.
>>> Aber ich bin gespannt, welche Dinge, die in der C++ Standard Library>> implementiert sind, kannst du wie und warum effizienter implementieren?>> Spätestens wenn du mit großen Datenmengen zu tun hast. Und ich sprechen> hier von mehreren Millarden Datensätzen. Wenn du dann die wunderschönen> dyn. Strings und Listen aus der Lib verwendest und du dir pro Datensatz> eine unbekannte Anzahl automatischer Speicherallocierungen einfängst,> weisst du warum man manche Sachen besser selbst macht.
Wer eine verkettete Liste für eine Mrd Datensätze verwendet hat
vermutlich onehin etwas falsch gemacht (-> std::deque). Und wenn du es
genau wissen willst, schaust du halt in die Implementation der
jeweiligen stdlib; die Sources sind ja offen. Zu faul zu sein dort
nachzusehen ist keine Ausrede es nicht zu verwenden. Die
Listen-Implementation der GNU stdlib macht jedenfalls genau 1 Allokation
pro Element (stl_list.h:334). Wenn du die Allokation besser
kontrollieren willst gibt es ja das Allokator Argument.
> Um ein paar> Strings fürs Userinterface zusammenzubasteln ist das natürlich nicht> nötig. Aber es gibt halt auch noch Anwendungen jenseit von "Hello> World".
Ja, es gibt auch Anwendungen wo man nich akademisch die 1.Millionste
verkettete Liste implementiert, und man sich auf eine effiziente
korrekte Implementation verlassen möchte, und nimmt daher die STL.
Und falls wider Erwarten dann doch einer der Standard Container nicht
geeignet ist, ist das immer noch kein Grund die stdlib nicht zu
verwenden; die Dinge aus <type_traits>, <algorithm>, <tuple>,
<functional> etc. etc. sind immer noch sehr hilfreich.
xvzf schrieb:> Hey,> ohne alles gelesen zu haben; Schonmal an C++11 gedacht? Oder Boost?
Ja, wurde beides ca. 100x in diesem Thread erwähnt. Strg+F hilft.
Dr. Sommer schrieb:> Falsch. Auch im "Core"-Code. z.B. instrument-a64.cc, Zeile 155 und> weitere. Das interessante ist dass die "Liste" in list.h das gleiche wie> ein std::vector ist, aber ohne nette Features wie move/copy-construct> etc.
Das interessamte daran ist, dass es im V8-Code diese Datei nicht gibt.
Sie wird auch definitiv nicht für die reine V8lib benötigt.
> Ja, es gibt auch Anwendungen wo man nich akademisch die 1.Millionste> verkettete Liste implementiert, und man sich auf eine effiziente> korrekte Implementation verlassen möchte, und nimmt daher die STL.
Die STL ist dafür gemacht um einen breiten Bereich abzudecken und erhebt
nicht den Anspruch für alles die beste Implementierung zu sein. Es gibt
aber immer wieder Deppen die das nicht für möglich halten.
Google mag ja viele Fehler gemacht habe, keine Frage. Bei der V8 aber
mit Sicherheit nicht.
An dieser Stelle werde ich die zu nichts führende Diskussion beenden. Du
hast damit angefangen mit dem Wort "bekloppt" Beleidigungen in den Raum
zu werfen, und ich werden jetzt dem Klugscheißer keine weitere Munition
liefern.
old man schrieb:> Das interessamte daran ist, dass es im V8-Code diese Datei nicht gibt.> Sie wird auch definitiv nicht für die reine V8lib benötigt.
Wir reden vom selben Programm, ja?
http://code.google.com/p/v8/wiki/Source?tm=4old man schrieb:> Es gibt> aber immer wieder Deppen die das nicht für möglich halten.
Viel schlimmer sind die Deppen, die eine etablierte Implementation aka
std::list, ohne es begründen zu können, für schlecht halten, und
lieber ihren eigenen Mist produzieren, über den sich dann spätere
Maintainer freuen.
old man schrieb:> Google mag ja viele Fehler gemacht habe, keine Frage. Bei der V8 aber> mit Sicherheit nicht.
Wenn du das sagst.
old man schrieb:> An dieser Stelle werde ich die zu nichts führende Diskussion beenden.
Dann Tschüss. Für den geneigten Leser bleibt also anzumerken, dass hier
bislang kein echtes Argument gegen die Standard Library im Allgemeinen
und std::list im Besonderen geliefert wurde, und diese somit die
richtige Wahl sind.
old man schrieb:> Die STL ist dafür gemacht um einen breiten Bereich abzudecken und erhebt> nicht den Anspruch für alles die beste Implementierung zu sein. Es gibt> aber immer wieder Deppen die das nicht für möglich halten.
Es gibt aber leider auch viele "Deppen", die meinen, ihr
Standard-Anwendungsfall ist hochspeziell und funktioniert nicht, ohne
alles selbst zu implementieren. Das Resultat sind dann nicht selten
fehlerhafte Programme, die weniger effizient sind als mit den
Standardkomponenten.