S
Schlaflos
Guest
Hallo Leute,
als ich vor geraumer Zeit so in den Threads stöberte fingen meine kleinen Grauen Zellen an zu arbeiten und dabei ist mir so einiges sauer aufgestoßen:
Einige hier sind ganz gewiss sehr fit was das Programmiertechnische angeht, das macht aber die Unwissenheit über Alternativen wieder wett. Soweit ich es mitbekommen habe ist der Großteil hier doch schon sehr vernarrt in C++. Die Frage warum dies so ist bleibe zumindest ich selbst mir nicht schuldig.
Da ich selber Programmierer bin sehe ich nun ein das man bei Hardware naher Programmierung um Sprachen wie Assembler, aber vor allen Dingen auch C bzw. C++ nicht herum kommt. Doch heutzutage ist C++ bei weitem nicht mehr zwangsläufig das non plus ultra in Sachen moderner Programmiersprache.
Hier gehen vor allen Dingen andere Sprachen wie C# und Java allen anderen voran, welche Sprachelemente hier nun in wie weit voneinander abgekupfert sind sei mal total dahingestellt. Dieser Thread soll nicht dem Kampf Borland vs. Microsoft oder Sun vs. Microsoft dienen.
Gerade in der heutigen Zeit mit immer mehr Rechenleistung werden virtuelle Maschinen wohl immer bedeutungsvoller da der Code bzw. die Sicherheit des selbigen hier doch ganz anders umgesetzt wird. Gerade mit ManagedDirect X hat Microsoft diesmal einen großen Schritt getan, aber auch die neuen alternativen IO Klassen in Java zeigen große Vorzüge auf, vor allen Dingen in Sachen Geschwindigkeit.
Nun ist es ja nun so das viele hier immer noch der Meinung sind das C++ der unangefochtene Herrscher der Ausführungsgeschwindigkeit bei Programmen ist. Das aber gerade dem nicht so ist sind sich die meisten nicht bewusst.
Ich stellte mir die Frage wieso das so ist. Der eigentliche Grund der mir dazu einviel war der Folgende:
Bis heute gibt es wohl kein nennenswerters Spiel mit state of the art 3D Optik das in einem C# oder gar Java geschrieben wurde. Daraus resultiert wohl schnell das Vorurteil das diese Sprachen für eine solche Mammutanwendung schlicht zu langsam sind. Dabei geht es doch nur um Hardwarezugriffe die gerade nur oder besonders gut in C++ oder anderen niederen (obgleich C++ schon eine Hochsprache ist) Sprachen möglich sind.
Wie ich es bereits einmal in einem anderen Thread angeschnitten habe sind Sprachen die in virtuellen Maschinen ablaufen heute durchaus in bestimmten Anwendungsszenarien sehr viel schneller als native Sprachen.
Wieso ist das so? Nun, das liegt ja nun vor allem daran das die nativen Sprachen schon ein paar Jahre auf dem Buckel haben. Gerade C++ ist ja auch "nur" eine Hybride sprache und halt nunmal keine "echte" objektorientierte Sprache.
Lieblinge und Vorurteile hin oder her: Es ist es nunmal absolut bewiesen das Sprachen wie C# oder Java durchaus schneller sein können als native Anwendungen. Es gibt in mehr als einem Fachmagazin dazu immer wieder mal Benchmarks in bestimmten Zeitabständen.
Ein beliebtes Beispiel war schon immer und bleibt es auch heute noch das sortieren einer Liste. Hier wurden vor längerer Zeit mal ein paar Messungen gemacht. Das Programm wurde soweit es jede Sprache erlaubte komplett objektorientiert umgesetzt und siehe da: tatsächlich waren Delphi und C++ um längen langsamer als Java. Allen voran Stand C# an der Spitze.
Das lag nun daran das hier keine Hardwarezugriffe nötig waren und dies ist auch gerade in Unternehmensapplikation meist der Fall wo diese Sprachen heute kaum noch wegzudenken sind.
Ich selber habe bereits Erfahrungen mit Applikationsservern und verteilten Objekten sammeln dürfen (Enterprise Java Beans), kann dies also nur aus eigener Erfahrung bestätigen.
Gerade Sprachen von denen man es nicht erahnt bergen oft ungeahntes Potenzial. Das schwarze Schaaf bleibt definitv Java. Zum einen mag die Namensgebung Leute irritieren, Java ist und bleibt halt ewig etwas anderes als JavsScript und man kann damit weitaus mehr machen. Ebenfalls mehr als nur Applets in Websiten einzubetten. Die Performance und Möglichkeiten von Java an Applets zu messen wäre das selbe als würde man etwa C++ auf ActiveX Steuerelemente reduzieren.
Zum anderen leidet diese Sprache noch heute an Performance Problemen neuerer Bibliotheken, SWT/Swing allen voran.
Dabei stellt Sun schon seit Ewigkeiten andere Alternativen bereit.
Die Verwendung des Abstract Window Toolkit. Nagut, zugegeben, hier schwindet Schönheit zu gunsten von Performance, aber was jeder einzelne nun aus diesen Möglichkeiten herausholt ist eine andere Sache.
Zudem steigert die Verwendung von StringBuffer anstelle von String die Geschwindigkeit enorm.
Andere Tricks die sich auch übertragen lassen sind Konstrukte wie:
Nun ist diese Art der Programmierung bei vielen Leuten verpöhnt, mag dies doch nicht die elegante Art und Weise sein eine Schleife zu beenden. Dies rührt daher das sie entweder die Lesbarkeit nicht annehmen oder aber eine Exception immernoch mit Fehlern in Verbindung bringen. Dabei ist dies ja gerade nicht der Fall. Exceptions sind Ausnahmen die eine weitere Verarbeitung in bestimmten Situation ermöglichen, so wie in obigen Beispiel.
Durch verzicht auf die Abbruchbedingungbedingung muss nicht jedesmal geprüft werden ob jene erreicht ist, was Ausführungszeit spart. Der Einstieg in den try Block kostet ebenfalls keine Zeit, lediglich der Einstieg in den catch Block wird einmalig zur Last.
Lange Rede, kurzer Sinn: Wie steht ihr zu all diesen Fragen? C++ oder Java? PHP oder JSP? Oder doch liebe etwas ganz anderes? Warum ist das bei euch so? Keine Erfahrung mit alternativen Sprachen? Keine Zeit in diese reinzuschnuppern oder nur schlichte Vorurteile?
Los gehts
P.S.: Das ich sehr viele Beispiele gebe anhand von Java liegt hauptsächlich daran das ich diese Sprache heute nicht mehr hergeben möchte. Ich habe selber lange Zeit viel in C++ gemacht, bin dann aber irgendwann ausgestiegen. Das heißt ganz und gar nicht das ich diese Sprachen irgendwie miteinander in Konkurrenz stelle. Es hat lange persönliche Gründe.
als ich vor geraumer Zeit so in den Threads stöberte fingen meine kleinen Grauen Zellen an zu arbeiten und dabei ist mir so einiges sauer aufgestoßen:
Einige hier sind ganz gewiss sehr fit was das Programmiertechnische angeht, das macht aber die Unwissenheit über Alternativen wieder wett. Soweit ich es mitbekommen habe ist der Großteil hier doch schon sehr vernarrt in C++. Die Frage warum dies so ist bleibe zumindest ich selbst mir nicht schuldig.
Da ich selber Programmierer bin sehe ich nun ein das man bei Hardware naher Programmierung um Sprachen wie Assembler, aber vor allen Dingen auch C bzw. C++ nicht herum kommt. Doch heutzutage ist C++ bei weitem nicht mehr zwangsläufig das non plus ultra in Sachen moderner Programmiersprache.
Hier gehen vor allen Dingen andere Sprachen wie C# und Java allen anderen voran, welche Sprachelemente hier nun in wie weit voneinander abgekupfert sind sei mal total dahingestellt. Dieser Thread soll nicht dem Kampf Borland vs. Microsoft oder Sun vs. Microsoft dienen.
Gerade in der heutigen Zeit mit immer mehr Rechenleistung werden virtuelle Maschinen wohl immer bedeutungsvoller da der Code bzw. die Sicherheit des selbigen hier doch ganz anders umgesetzt wird. Gerade mit ManagedDirect X hat Microsoft diesmal einen großen Schritt getan, aber auch die neuen alternativen IO Klassen in Java zeigen große Vorzüge auf, vor allen Dingen in Sachen Geschwindigkeit.
Nun ist es ja nun so das viele hier immer noch der Meinung sind das C++ der unangefochtene Herrscher der Ausführungsgeschwindigkeit bei Programmen ist. Das aber gerade dem nicht so ist sind sich die meisten nicht bewusst.
Ich stellte mir die Frage wieso das so ist. Der eigentliche Grund der mir dazu einviel war der Folgende:
Bis heute gibt es wohl kein nennenswerters Spiel mit state of the art 3D Optik das in einem C# oder gar Java geschrieben wurde. Daraus resultiert wohl schnell das Vorurteil das diese Sprachen für eine solche Mammutanwendung schlicht zu langsam sind. Dabei geht es doch nur um Hardwarezugriffe die gerade nur oder besonders gut in C++ oder anderen niederen (obgleich C++ schon eine Hochsprache ist) Sprachen möglich sind.
Wie ich es bereits einmal in einem anderen Thread angeschnitten habe sind Sprachen die in virtuellen Maschinen ablaufen heute durchaus in bestimmten Anwendungsszenarien sehr viel schneller als native Sprachen.
Wieso ist das so? Nun, das liegt ja nun vor allem daran das die nativen Sprachen schon ein paar Jahre auf dem Buckel haben. Gerade C++ ist ja auch "nur" eine Hybride sprache und halt nunmal keine "echte" objektorientierte Sprache.
Lieblinge und Vorurteile hin oder her: Es ist es nunmal absolut bewiesen das Sprachen wie C# oder Java durchaus schneller sein können als native Anwendungen. Es gibt in mehr als einem Fachmagazin dazu immer wieder mal Benchmarks in bestimmten Zeitabständen.
Ein beliebtes Beispiel war schon immer und bleibt es auch heute noch das sortieren einer Liste. Hier wurden vor längerer Zeit mal ein paar Messungen gemacht. Das Programm wurde soweit es jede Sprache erlaubte komplett objektorientiert umgesetzt und siehe da: tatsächlich waren Delphi und C++ um längen langsamer als Java. Allen voran Stand C# an der Spitze.
Das lag nun daran das hier keine Hardwarezugriffe nötig waren und dies ist auch gerade in Unternehmensapplikation meist der Fall wo diese Sprachen heute kaum noch wegzudenken sind.
Ich selber habe bereits Erfahrungen mit Applikationsservern und verteilten Objekten sammeln dürfen (Enterprise Java Beans), kann dies also nur aus eigener Erfahrung bestätigen.
Gerade Sprachen von denen man es nicht erahnt bergen oft ungeahntes Potenzial. Das schwarze Schaaf bleibt definitv Java. Zum einen mag die Namensgebung Leute irritieren, Java ist und bleibt halt ewig etwas anderes als JavsScript und man kann damit weitaus mehr machen. Ebenfalls mehr als nur Applets in Websiten einzubetten. Die Performance und Möglichkeiten von Java an Applets zu messen wäre das selbe als würde man etwa C++ auf ActiveX Steuerelemente reduzieren.
Zum anderen leidet diese Sprache noch heute an Performance Problemen neuerer Bibliotheken, SWT/Swing allen voran.
Dabei stellt Sun schon seit Ewigkeiten andere Alternativen bereit.
Die Verwendung des Abstract Window Toolkit. Nagut, zugegeben, hier schwindet Schönheit zu gunsten von Performance, aber was jeder einzelne nun aus diesen Möglichkeiten herausholt ist eine andere Sache.
Zudem steigert die Verwendung von StringBuffer anstelle von String die Geschwindigkeit enorm.
Andere Tricks die sich auch übertragen lassen sind Konstrukte wie:
Code:
for(int i = 0; ; i++){
try{
// etwas tun
} catch(ArrayIndexOutOfBoundsException e){
// Ausnahme verarbeiten
}
}
Nun ist diese Art der Programmierung bei vielen Leuten verpöhnt, mag dies doch nicht die elegante Art und Weise sein eine Schleife zu beenden. Dies rührt daher das sie entweder die Lesbarkeit nicht annehmen oder aber eine Exception immernoch mit Fehlern in Verbindung bringen. Dabei ist dies ja gerade nicht der Fall. Exceptions sind Ausnahmen die eine weitere Verarbeitung in bestimmten Situation ermöglichen, so wie in obigen Beispiel.
Durch verzicht auf die Abbruchbedingungbedingung muss nicht jedesmal geprüft werden ob jene erreicht ist, was Ausführungszeit spart. Der Einstieg in den try Block kostet ebenfalls keine Zeit, lediglich der Einstieg in den catch Block wird einmalig zur Last.
Lange Rede, kurzer Sinn: Wie steht ihr zu all diesen Fragen? C++ oder Java? PHP oder JSP? Oder doch liebe etwas ganz anderes? Warum ist das bei euch so? Keine Erfahrung mit alternativen Sprachen? Keine Zeit in diese reinzuschnuppern oder nur schlichte Vorurteile?
Los gehts
P.S.: Das ich sehr viele Beispiele gebe anhand von Java liegt hauptsächlich daran das ich diese Sprache heute nicht mehr hergeben möchte. Ich habe selber lange Zeit viel in C++ gemacht, bin dann aber irgendwann ausgestiegen. Das heißt ganz und gar nicht das ich diese Sprachen irgendwie miteinander in Konkurrenz stelle. Es hat lange persönliche Gründe.