POLL (Programmiersprachen)
-
Und ich stell jetzt mal ne These auf, auch wenn sie noch so blöd ist:
Wenn C++ eine komplett neue Sprache wäre, und nicht C kompatibel wäre (was ja aber natürlich schon gut ist), dann gäbe es solche Threads wie diesen hier gar nicht. Den "Frickel"-Ruf hat C++ doch nicht zuletzt deswegen, weil eben immer wieder veraltete C Konstrukte eingesetzt werden, anstatt die moderneren C++-Mittel zu verwenden. Und das nicht nur von Anfängern, sondern auch im professionellen Bereich. Liegt einfach auch daran, dass man nicht gezwungen ist, sich mit den ganzen C++-Sachen auseinanderzusetzen, merke ich ja auch selbst manchmal bei mir.Da steckt viel Wahres drin. Leider ist in dem Fall die Hybridität absolutes Problem statt Vorteil. Da man in C++ zu nichts gezwungen ist kann man kaum Leute einsetzen die sich nur halb oder wenig auskennen. Hier im Forum findet man ja maximal 50 Leute denen man einen Job im C++-Bereich geben sollte ohne das Projekt in schlimme Probleme zu reiten.
MfG SideWinder
-
SideWinder schrieb:
otze schrieb:
gibt es denn einen sinnvollen grund, wieso container polymorph sein müssen, wenn die sprache ein funktionierendes iteratorkonzept(also nicht sowas wie in java) unterstützt?
Z.B. kann ich je nach Einstellung zur Laufzeit entscheiden welche konkrete Implementierung ich verwenden will. Meine Funktion verarbeitet Daten in einer Liste. Ob sich jetzt für eine ArrayList entschieden wurde oder eine LinkedList ist abhängig von dem wie der Benutzer die Daten einfügen konnte. Was ist übrigens deiner Meinung nach am Java-Iteratorkonzept soviel schlecheter als am C++-Konzept?
java iteratoren sind nicht vergleichbar, man kann also nicht zwischen 2 iteratoren hin und her iterieren. Geht halt maximal bei ner list, wenn man start und end index kennt, aber jede operation auf dem container(wie zb remove) würde die indices ungültig machen(was zb bei C++ nicht unbedingt sein muss). dazu kommt halt noch, dass man die rückgabewerte immer casten muss, aber da bin ich wohl zu sehr C++ verwöhnt, da passt das alles irgendwie besser, wirkt ntürlicher.
-
Rückgabewerte casten? Du redest von <= 1.4.2 und wir sind bei 1.6. Da kannst du nichtmal mehr mit TRs kommen. 1.5 ist mehr als nur Standard. Es ist bereits 1.7 in Entwicklung. Selbst die letzte Entwicklungsumgebung hat schon auf 1.5 umgestellt.
for(Entity e : c) e.doSmth(); // oder von mir aus das: Iterator iter = c.iterator(); while(iter.hasNext()) { Entity e = iter.next() e.doSmth(); }Das soll "nicht natürlich" wirken im Gegensatz zu:
list_iter iter = c.begin(); while(iter != c.end()) iter->doSmth();Junge junge...
MfG SideWinder
-
Oder gar extröm:
std::list<Entity>::iterator iter = list.begin(); const std::list<Entity>::const_iterator ende = list.end(); while(iter != ende) iter->doSmth();Jippie.
MfG SideWinder
-
Ab C++2009 wird das so aussehen:
auto iter = list.begin(); auto ende = list.end(); while(iter != ende) iter->doSmth();Aber stimmt ja, so lange kannst du ja nicht warten.

-
Artchi schrieb:
Ab C++2009 wird das so aussehen:
auto iter = list.begin(); auto ende = list.end(); while(iter != ende) iter->doSmth();Aber stimmt ja, so lange kannst du ja nicht warten.

Beim iterieren interessiert mich der Containertyp nicht wirklich, deswegen scheint mir das auto nicht so unpraktisch. Aber der Inhaltstyp wär schon interessant. Was hat eigentlich gegen die Einführung einer foreach-Schleife gesprochen? Alles was Iterable implementiert kann in der foreach angewandt werden und schwups wärs noch kürzer und noch schöner geworden:
for(Entity e : c) e.doSmth();MfG SideWinder
-
SideWinder schrieb:
Rückgabewerte casten? Du redest von <= 1.4.2 und wir sind bei 1.6. Da kannst du nichtmal mehr mit TRs kommen. 1.5 ist mehr als nur Standard. Es ist bereits 1.7 in Entwicklung. Selbst die letzte Entwicklungsumgebung hat schon auf 1.5 umgestellt.
Stimmt, aber die IBM-Webspheres gurken leider noch auf 1.4 rum, so das die RMI-Java-Binary-Kompatibilität mit dem Client >1.4 nicht stimmt. Ergo muß der Client noch 1.4 laufen. Aber wenigstens sind vor knapp 2 Jahren die Serverfarmen von IBM von 1.3 auf 1.4 migriert worden. Müssen wir wenigsten keine 1.3-Clients mehr benutzen.
-
SideWinder schrieb:
Artchi schrieb:
Ab C++2009 wird das so aussehen:
auto iter = list.begin(); auto ende = list.end(); while(iter != ende) iter->doSmth();Aber stimmt ja, so lange kannst du ja nicht warten.

Beim iterieren interessiert mich der Containertyp nicht wirklich, deswegen scheint mir das auto nicht so unpraktisch. Aber der Inhaltstyp wär schon interessant. Was hat eigentlich gegen die Einführung einer foreach-Schleife gesprochen? Alles was Iterable implementiert kann in der foreach angewandt werden und schwups wärs noch kürzer und noch schöner geworden:
for(Entity e : c) e.doSmth();MfG SideWinder
foreach soll auch drin sein, kenne deren Syntax aber nicht... sieht aber glaub ich so aus wie deine gepostete. In Kombination mit den Concepts müsste das dann auch funktionieren.
-
Kannst ja einen Proxy mit 1.4.2 vorschalten. Bzw. anderen AppServ verwenden. Selbst JBoss ist ja schon bei 1.5 angelangt

MfG SideWinder
-
BTW: Schonmal überlegt auf WebServices umzusteigen, dann fällt dir das mit den Versionen raus. RMI ist ja in der Hinsicht nicht gerade das Gelbe vom Ei
Oder gibts da zuviele Performanceprobleme bzw. zu wenig Kapital zur Umsetzung?MfG SideWinder
-
WebServices habe ich in meinem Vorletzten Projekt gemacht. Bei den RMI-Projekten handelt es sich um Altprojekte, wohlgemerkt Plural (es geht nicht um eine Mittelständige Firma). WebServices sind sozusagen für neue Projekte vorgeschrieben. Altprojekte müssen erstmal Budget auftreiben, da alles in Production ist. Den Switch kann man nicht so ebend machen.
Performanceprobleme gibt es in wenigen Projekten, mit RMI dauern die Antwortzeiten schon im Minutenbereich. (kein Witz) Die werden sich das zweimal überlegen.
-
SideWinder schrieb:
Oder gar extröm:
std::list<Entity>::iterator iter = list.begin(); const std::list<Entity>::const_iterator ende = list.end(); while(iter != ende) iter->doSmth();Jippie.
MfG SideWinder
Da sieht man wieder, wie gut die Leute sich mit C++ auskennen, die immer meckern. Wo wird denn der Iterator in der Schleife bitte verändert?
Ich finde an C++ allerdings auch die fehlenden Bibliotheken nervig... Wenn man für GUIs, Sockets, Threads usw. jeweils eigene Bibliotheken verwenden muss, die miteinander nicht kompatibel sind und die nicht die Standard-Bibliothek verwenden, nervt das schon. Das hat aber mit der Sprache an sich erstmal nichts zu tun. Von der SPRACHE an sich (unabhängig von Tools, Bibliotheken, etc.) finde ich C++ nämlich weitaus eleganter und schöner als Java, das aber halt einige nette Tools und Bibliotheken mehr hat.
Just my 2 Cents zu diesem Flamewar der Extraklasse

Felix
-
Das ist kein Flamewar mehr. Das ist ein Chat.
-
Ja, man hätte ein Typedef nutzen können, wäre kürzer geworden. Oder am besten gleich std::for_each oder std::transform.
Ich finde an C++ allerdings auch die fehlenden Bibliotheken nervig... Wenn man für GUIs, Sockets, Threads usw. jeweils eigene Bibliotheken verwenden muss, die miteinander nicht kompatibel sind und die nicht die Standard-Bibliothek verwenden, nervt das schon.
Haben wir schon mehrmals angesprochen: es gibt Lösungen die sich nach der Stdlib richten. Wenn man natürlich Qt oder so benutzt, wird das nichts. Aber Sockets z.B. sind mit Boost.asio schon mal ein sehr guter Schritt und ist auch für TR2 vorgeschlagen. Basis-Threads und neues Speichermodell für Threads kommen in den C++2009 rein (wer dann immer noch motzt, kann ich nicht helfen) und ne größere Thread-Lib kommt wohl in den TR2.
GUIs wirst du aber NIE in der Stdlib sehen. Das müssen sich die Leute einfach aus dem Kopf streichen. Dazu hat sich das Komitee schon geäussert. Da kann niemand was dran ändern.
-
Eventuell wärs nicht blöd die Standardbibliothek überhaupt zu streichen, C++ als Sprache schön zu definieren und keine halben Sachen zu veranstalten.
Dann erfinde ich ein Package-System ähnlich wie bei Linux und verwende was gut ist

Irgendwie merkt man nämlich schon Mängel an der Standard-Bibliothek, sonst würde man ja gar nicht auf die Idee kommen Boost in den Standard zumindest teilweise aufzunehmen

MfG SideWinder
-
Artchi schrieb:
WebServices habe ich in meinem Vorletzten Projekt gemacht. Bei den RMI-Projekten handelt es sich um Altprojekte, wohlgemerkt Plural (es geht nicht um eine Mittelständige Firma). WebServices sind sozusagen für neue Projekte vorgeschrieben. Altprojekte müssen erstmal Budget auftreiben, da alles in Production ist. Den Switch kann man nicht so ebend machen.
Performanceprobleme gibt es in wenigen Projekten, mit RMI dauern die Antwortzeiten schon im Minutenbereich. (kein Witz) Die werden sich das zweimal überlegen.
Ich hoffe du machst auch betriebswirtschaftliche Software und der durchschnittliche VW hat keine Reaktionszeiten im Minutenbereich? Oder warst du bei ner anderen Firma?
Klar Budget ist immer ein Problem, deswegen muss man Altlasten mittragen 
Da sieht man wieder, wie gut die Leute sich mit C++ auskennen, die immer meckern. Wo wird denn der Iterator in der Schleife bitte verändert?
Meinst du wegen const-correctness oder weil das ++iter fehlt? Ich hoff bloß ich hab bei Ersterem was falsch geamcht und du weist mich hier nicht auf Zweiteres hin...
MfG SideWinder
-
ich würde eher sagen, von deinen unkenntnissen der java-lib.

macht ehrlich gesagt keinen spaß mit dir zu diskutieren, da du ständig irgendwas vorwirfst und die beleidigte leberwurst spielst.Ganz einfach, weil mich dieser Blödsinn nervt. Es gibt hier alle paar Tage einen Thread Java-vs-C++, wo dann so Pappenheimer wie kommen und Schwachsinn erzählen. An C++ gibt es sehr viel zu kritisieren und sehr viele Dinge sind kaputt. Aber anstelle das vernünftig anzugehen, wird dann so ein Blödsinn erzählt, das IO-Streams nicht erweiterbar seien oder das man Template-Programmierung nicht bräuchte etc.
Im ganzen scheinen eigentlich Java-Programmierer nur davon zu leben, das C++ keine "File"-Klasse hat. Das ist lächerlich. C++ ist sicher kaputt (in Teilen). Aber das ist absolut gar kein Argument für Java. Ist Java gar so crappy, das man es nur loben kann, wenn man C++ schlecht macht? Denkt euch doch lieber Sachen aus, warum Java toll ist, anstelle C++ schlecht zu reden. Wie ich schon sagte: Die Welt ist größer als C++ vs Java und bisher habe ich alles wofür Java gelobt wird in anderen Programmiersprachen nur deutlich besser, einfacher und schneller erlebt. Also bitte, erklärt mir warum Java toll ist. Die Fehler von C++ kenn ich schon alle (und bei der kümmerlichen Kritik hier, wohl deutlich besser als ihr).
ach ja, ich kann auf einem mobilen gerät - für das ich derzeit entwickle - kein boost oder qt verwenden (hierfür gibt es technische als auch organisatorische gründe!). habe nur die stl. was nun? c++ erhebt ja den anspruch die eierlegendewollmilchsau auf allen plattformen zu sein...
Wenn du die STL verwenden kannst, kannst du auch sehr viel von boost verwenden...
Kann man nicht verknüpfen (BufferedReader, Input___Reader, etc.). Aktuelles Problem im C++-Forum: Es gibt keinen Weg die Dateigröße rauszufinden. Es wird nicht wirklich zwischen Datei und Dateiinhalt unterschieden (bzw. auf ersteres wurde komplett vergessen).
Was kann man nicht verknüpfen? Streams kann man ganz toll verknüpfen. In einem aktuellen Projekt habe ich zB einen Socket, mit TLS und Zlib Streams verknüpft. Ging ganz problemlos.
Natürlich wird zwischen Datei und Dateiinhalt unterschieden? Wo siehst du die Trennung aufgehoben und wie gesagt: Boost::Filesystem.
Dafür kennt Java keine Verzeichnisse, nur Dateien!!
(der Hauptgrund warum man C++ nicht verwendet ist ja wohl weils einfach umständlich ist damit umzugehen).
C++ wird verwendet. Alles andere ist deine Phantasiewelt. Schau dir allein an, welche Programme die du regelmäßig benutzt nicht in C++ geschrieben wurden.
Es sei denn sie hat Gründe ala: Es ist kein Platz, Compilezeit kostet Geld, etc.
Er kann sich die Teile ja kopieren, die er braucht bzw. nur einzelne Module verwenden.
Du tust glatt so als wär das bereits etablierer Standard. Das ist nichtmal irgendeine Form von Standard. Das ist ein "Technischer Report", ein anderer Name für Beta.
Nö, technischer Report steht nicht für Beta und es ist bereits etabliert. Und das beste ist, es ist noch nicht mal inkompatibel zu dem Vorgänger. Da sollten sich die Java-Leute mal ne scheibe abschneiden. Nicht umsonst regst du dich auf, weil die Leute hier Java 1.5 und nicht 1.6 kritisieren. Zwar gibt es von Java ständig neue Versionen, aber man kann nicht upgraden. Also frickelt man eben mit 1.4.2 rum oder solchen spielereien.
Ich kann C++ doch leiden, aber mir gehen die Leute auf den Sack die behaupten Java wäre für Anwendungsentwicklung und Mid-Tier-Entwicklung die falsche Sprache.
Java ist da zumindest nicht die richtige Sprache. Jede Sprache hat eben seinen Einsatzzweck. Java ist zB für Handy-Spielchen.
-
rüdiger schrieb:
Dafür kennt Java keine Verzeichnisse, nur Dateien!!
nana, gleich 2 ausrufezeichen

http://java.sun.com/j2se/1.4.2/docs/api/java/io/File.html#isDirectory()

die klammern gehören zum link...
-
vista schrieb:
rüdiger schrieb:
Dafür kennt Java keine Verzeichnisse, nur Dateien!!
nana, gleich 2 ausrufezeichen

http://java.sun.com/j2se/1.4.2/docs/api/java/io/File.html#isDirectory()

Es geht ihm darum, dass es keine Klasse Directory gibt. Bzw. zumindest keine Klasse Path. Das sein Betriebssystem der Wahl afaik auch nur Dateien kennt...naja egal
MfG SideWinder
-
@rüdiger
du kannst kritik an deiner lieblinssprache einfach nicht ertragen.
c++ ist eine mächtige sprache und wird in vielen bereichen eingesetzt. wenn diese jedoch schneller mit der zeit mitgehen würde, wäre sie noch erfolgreicher. hierfür gibt es "einfache" ansätze, die hier schon mehrmals genannt wurden und seit jahren genannt werden. komischerweise tut sich jedoch leider nur wenig...ach ja, dadurch, dass du dir die java-streams bzw. das decorator-pattern nicht angeschaut hast und dadurch stl-streams weiterhin "einfach und toll findest" zeigt deine ignoranz. und damit hast du dich disqualifiziert.
