Dynamic Linking während der Laufzeit unter Linux
-
schoppenhauer schrieb:
Das ist sehr schade. Java ist in einigen Punkten WIRKLICH ästhetischer als C++. Und inzwischen ist die VM auch schnell genug (Programmstarts dauern länger, aber wenn das Programm mal läuft, isses unwesentlich)
WIRKLICH? Das ist keine Tatsache, sondern Deine persönliche Meinung. Ich finde C++ in jeder Hinsicht besser als Java. Ich warne vor solchen absoluten Aussagen.
Java ist in der Sprache eingeschränkt, beim Start sehr langsam und ein Speicherfresser. Die Laufzeit ist recht schnell, hält aber in der Regel mit C++ nicht mit. Wenn Java so nach und nach immer besser wird um damit schon fast 48,7% des Funktionsumfanges von C++ zu unterstützten, warum soll ich noch Java verwenden (es sei denn, der Auftraggeber besteht darauf)?
-
schoppenhauer schrieb:
supertux schrieb:
schoppenhauer schrieb:
Ich nehme mal an, die meisten Leute werden wissen, was Java Reflections sind, wer es nicht weiß: auch egal.
ich weiß es nicht, ich hab (außer im ersten Semester und nur Hello World Beispiele) nie Java benutzt. Ich hätte dir vielleicht helfen können, wenn du erklärt hättest, was das ist.
Das ist sehr schade. Java ist in einigen Punkten WIRKLICH ästhetischer als C++. Und inzwischen ist die VM auch schnell genug (Programmstarts dauern länger, aber wenn das Programm mal läuft, isses unwesentlich).
Reflection ist die Möglichkeit zur Laufzeit Code zu erzeugen, Strukturen und Klassen zur Laufzeit zu entziffern usw.
Da eine kompilierende Sprache zur Laufzeit in erster Linie läuft, und sich nicht noch selbst neu erfindet, gibt es in C++ kein Reflection. Es ermöglicht vorrangig eine Schnittstelle auf Datenstrukturen, die zur Kompilierzeit noch nicht feststanden, wenn z.B. eine Library einen Datensatz speichern soll, von dem sie noch nicht weiß, was eine Referenz ist und was ein Valuetype usw.Ich habe es in C# kennengelernt und in C++ nie vermisst.
Dass Java WIRKLICH ästhetischer ist, wage ich zu bezweifeln, da Java große teile von der C++ Syntax übernommen hat, es optisch also keinen großen Unterschied macht, ob man jetzt Java oder C++ programmiert.
Ich empfinde Sourcecode als ästhetisch, wenn man darin die Monas Lisa erkennen kann oder das Bild, dass der Sourcecode zeichnen wird.
In der Regel reicht mir auch eine saubere Einrückung.schoppenhauer schrieb:
Java Reflections sind im Prinzig genau das adäquat zu "Plugins". In Java bekommt jede Klasse (sofern die Programmierer sich an die Coding Conventions halten) einen eindeutigen Namen (wenn man den Packagenamen hinzufügt). Und anhand dieses Namens kann man JEDE Klasse im Classpath während der Laufzeit laden. Das Ganze geht vergleichsweise einfach. Man verzichtet darauf, wenn man kann, aber für Plugins ist das eben das Beste.
Wer hindert Dich daran, zur Laufzeit JEDE DLL zu öffnen, die sich irgendwie von diesem Rechner erreichen läßt. (Abgesehen von der Firewall vielleicht)
Man verzichtet darauf, wenn man kann, aber für Plugins ist das eben WIRKLICH das Beste. Ich fand es schon bemerkenswert einen Thread über Shared Libs zu starten, in dem erstmal eine Lobeshymne über Reflection gehalten wird ("worauf man verzichtet, wenn man kann"), es dann aber egal ist, wenn man nicht weiß, wovon Du redest.
Du stellst fest, dass Du keine Ahnung hast, wie man Plugins in C++ realisiert und im gleichen Atemzug, dass Reflection (worauf man wirklich verzichten sollte, wenn man kann (=> immer)), eben das Beste für Plugins ist.
Wenn Du das erste mal über Zeiger stolperst, erzähl hier bitte nicht, dass das in Java alles viel ästhetischer gelöst ist. Da gibt es ja keine Zeiger.
In dem Fall benutze bitte gleich Referenzen (in C++), die halten die Versprechen, die Java mit ihren Zeigern, die man dort Referenzen nennt, leider WIRKLICH nicht halten kann.Ich würde es als sinnvoll erachten, erst die Möglichkeiten zu von C++ zu lernen und dann zurückhaltend zu vergleichen.
Trotzdem willkommen im Kreis der C++ Programmierer.
Wir haben alle mal mit kleineren Sprachen angefangen ;->
-
tntnet schrieb:
schoppenhauer schrieb:
Das ist sehr schade. Java ist in einigen Punkten WIRKLICH ästhetischer als C++. Und inzwischen ist die VM auch schnell genug (Programmstarts dauern länger, aber wenn das Programm mal läuft, isses unwesentlich)
WIRKLICH? Das ist keine Tatsache, sondern Deine persönliche Meinung. Ich finde C++ in jeder Hinsicht besser als Java. Ich warne vor solchen absoluten Aussagen.
Java ist in der Sprache eingeschränkt, beim Start sehr langsam und ein Speicherfresser. Die Laufzeit ist recht schnell, hält aber in der Regel mit C++ nicht mit. Wenn Java so nach und nach immer besser wird um damit schon fast 48,7% des Funktionsumfanges von C++ zu unterstützten, warum soll ich noch Java verwenden (es sei denn, der Auftraggeber besteht darauf)?
Also so ein arger Speicherfresser ist Java nun auch wieder nicht. Das war vielleicht mal so, so bei Java 1.1 oder sowas. Java hat sich in vielen Beziehungen seit dieser Zeit verbessert. Das ist nur so ein Bild, das sich in die Köpfe aller Leute eingebrannt hat, die es nicht besser wissen. Vor Allem: Im Gegensatz zu vielen Sachen, die in C++ geschrieben sind, und ihren reservierten Speicher nichtmehr korrekt freigeben, hat die Java VM wenigstens Garbage Collectors. Wenn man es aber nun UNBEDINGT schneller will, gibt es ja immernoch GCJ.
Mich wundert ehrlichgesagt (ich hab ja auf diversen Java-Foren schon posts von diversen C++-Trollen gesehen), dass die meisten Java-Befürworter eher aufgeschlossen sind, und auch die Nachteile von Java sehen - aber eben auch Nachteile von C/C++, während die C/C++-Coder immer verbissen darauf bestehen, dass C/C++ ja soviel besser ist als Java.Xin schrieb:
Wenn Du das erste mal über Zeiger stolperst, erzähl hier bitte nicht, dass das in Java alles viel ästhetischer gelöst ist. Da gibt es ja keine Zeiger.
In dem Fall benutze bitte gleich Referenzen (in C++), die halten die Versprechen, die Java mit ihren Zeigern, die man dort Referenzen nennt, leider WIRKLICH nicht halten kann.Ja. Das By-Value-By-Reference-Problem in Java ist eines der Hauptprobleme. Das gebe ich zu. Aber andererseits: Man BRAUCHT kein Call By Value, man kann auch einfach einen Copy-Constructor aufrufen. Ohnehin muss in Java nicht jede Klasse einen Copy-Constructor haben (also es hat jede einen von Class geerbt, aber wenn der nicht überschrieben ist, dann ist der Zugriff protected). Call By Value ist ja nur dann möglich, wenn es einen solchen gibt. In der Beziehung lässt einem Java jedenfalls mehr Freiraum.
Außerdem sind Callbacks über Interfaces wesentlich ästhetischer als über Funktionspointer - allgemein finde ich Funktionspointer hässlich, und sie machen den Code unübersichtlich.
Die Vererbung gleichnamiger Funktionen macht in C++ (auch wenn diese unterschiedliche Argumenttypen haben) Probleme oder ist teilweise unmöglich - Java ist wenigstens Konsequent.
Xin schrieb:
Reflection ist die Möglichkeit zur Laufzeit Code zu erzeugen, Strukturen und Klassen zur Laufzeit zu entziffern usw.
Da eine kompilierende Sprache zur Laufzeit in erster Linie läuft, und sich nicht noch selbst neu erfindet, gibt es in C++ kein Reflection.Das stimmt nur eingeschränkt. Code "erzeugen" ist sowieso recht schwierig - das macht eigentlich niemand. Wobei man dazu sagen muss: Wenn jemand in C++ eine Library schreibt, mit der man .so- oder .dll-Dateien erzeugen kann, die man dann ansteuern kann, wäre das doch wohl dasselbe. Also ist es auch in C++ wohl nicht "unmöglich" sowas zu realisieren.
Meistens lädt man doch nur eine Klasse, von der man weiß, dass sie ein bestimmtes Interface implementiert, und castet sie dann gleich zu einer Instanz dieses Interfaces, und steuert sie direkt an. Man KANN sachen wie Method.invoke() und so weiter auch verwenden... Oder Class.getDeclaredMethod(String name) (ich nehme an darauf beziehst du dich mit "Strukturen und Klassen zur Laufzeit entziffern). Aber das macht man eigentlich normalerweise nicht. Aber: Dass es die Möglichkeit dazu gibt, ist doch auch schon mal ein Vorteil.tntnet schrieb:
WIRKLICH? Das ist keine Tatsache, sondern Deine persönliche Meinung. Ich finde C++ in jeder Hinsicht besser als Java. Ich warne vor solchen absoluten Aussagen.
Was ist damit:
- Es gibt eine einheitliche API
- Man muss also nicht für jede Plattform das komplette Programm umschreiben oder irgendwelche Basteleien mit #defines und dergleichen machen
- Man muss nur EINMAL Compilieren und kann die Klassen auf jedes System einfach portieren
- In Kommenden Versionen wird es Call-By-Value geben (auch wenn man es nicht braucht), und auch Templates und dergleichen werden bald realisiert sein
- In Java bringt man wirklich ALLES in Klassen unter - heißt, es ist eine wirkliche Ordnung da
- In Java kann man die meisten (bzw. eigentlich alle) ambiguous-names trivial so auflösen
- Das Package-Verwaltungssystem ist u.A. dank den Coding-Conventions - an die sich normalerweise jeder hält - dem von C++, bei dem es quasi keine Regeln gibt, die dafür sorgen, dass z.B. Namespaces nicht kollidieren, und bei dem gerade auf Modulebene Doppelungen auftreten können, haushoch überlegen
Xin schrieb:
Trotzdem willkommen im Kreis der C++ Programmierer.
Wir haben alle mal mit kleineren Sprachen angefangenIch habe eigentlich nicht vor, "richtiger" C++-Programmierer zu werden. Ich will mir C und C++ aneignen, aber vieles, was ich bisher weiß (und ganz so wenig ist das auch wieder nicht), ist schlechter als in Java. Nachdem ich jetzt fast zwei Wochen nur C++-Spam gecodet habe, habe ich gestern mal wieder was in Java gecoded - das war eine richtige Erleichterung, mal wieder "ordentlichen" Code zu produzieren, der vor Allem auch am Ende funktioniert und mir nicht erst noch hunderte sinnloser Fehlermeldungen über irgendwelche Fehler gibt, die von irgendwelchen "Sonderfällen" der Syntax herrühren, die meistens jeglicher Logik widerstreben.
Und eines ist DEFINITIV: Java ist keine kleine Anfängersprache. Es gibt so viele Leute, die sogar beruflich hauptsächlich in Java programmieren.
Aber wie gesagt, C++ hat sicher manche Vorteile (der einzige den ich jetzt sehe ist der nicht sehr stichhaltige, dass der produzierte Code schneller ist, und ein paar Sachen, die von Sun sowieso geplant sind... Aber vielleicht sehe ich ja noch mehr in ferner Zukunft). Außerdem habe ich nichts gegen C++ gesagt, außer, dass Java in EINIGEN Punkten besser als C++ ist, ich verstehe garnicht, wieso gleich soviele Leute unbedingt ihren Senf dazu geben müssen. Ich wurde aufgefordert, mal zu sagen, was Reflections sind (jedenfalls habe ich das so verstanden), das habe ich gemacht. Und die Bemerkung, dass Java teilweise besser als C++ ist, war keine zentrale Aussage, sondern nur beiläufig erwähnt.
Und... um mich selber zu Zitieren:
schoppenhauer schrieb:
Ja. Genau das ist es, was ich will. Ich werd mal mein Glück damit versuchen, ansonsten frag ich einfach nochmal nach. Danke.
-
Leute...Java und C++ haben völlig unterschiedliche Aufgabengebiete. Das ist fast wie ein Äpfel mit Birnen Vergleich.
-
// schrieb:
Leute...Java und C++ haben völlig unterschiedliche Aufgabengebiete. Das ist fast wie ein Äpfel mit Birnen Vergleich.
Ok, einigen wir uns darauf. Damit kann ich leben. Aber nur interessehalber: Was sind das für Aufgabenbereiche. Ich progge schon länger alles mögliche mit Java. Ich hab gehört, es soll sich besonders für Netzwerkzeugs eignen.
-
schoppenhauer schrieb:
Und... um mich selber zu Zitieren:
schoppenhauer schrieb:
Ja. Genau das ist es, was ich will. Ich werd mal mein Glück damit versuchen, ansonsten frag ich einfach nochmal nach. Danke.
Bitte lass das. Du hast in dem Posting mehrfach bewiesen, dass Du überhaupt keinen Plan von C++ hast, noch dazulernen möchtest. Dafür kennst Du aber die Java Marketing Broschüren auswendig. Damit kannst Du jeden Abteilungsleiter beeindrucken, der genausowenig Plan hat. Ich würde aber aufpassen, wenn Du genausoviel Glück wie heute hast, gerätst wieder an den Richtigen und hinterläßt einen ähnlichen Eindruck.
Wer Interfaces mit Funktionspointern gleichsetzt und auch noch glaubt, dabei was kleveres zu sagen, der sollte besser in seiner Java-Welt bleiben. In C++ sollte man doch wissen, was man tut - wenigstens halbwegs. Interfaces sind in C++ mit abstrakte Klassen gleichzusetzen, die mit ausschließlich mit rein virtuellen Funktionen bestückt sind. Der Umgang mit C++-Interface ist identisch zu Java. Also genauso ästhetisch oder eben nicht, wie immer Du es wünschst. Funktionspointer sind instanzabhängig, nicht typabhängig - das nur zu Deiner Information.
Ich weiß, dass man mit Java sein Geld verdienen kann, ich bin selber zufällig selber Informatiker inkl. Diplom. Ich habe Java gelernt und Projekte damit progammiert. Seitdem streike ich, wenn's um Java geht.
Und wie es der Zufall will: mein Hauptgebiet ist witzigerweise Compilerbau und Sprachdesign, ich entwickle selber eine Programmiersprache. Dafür untersuche ich auch vorhandene Programmiersprachen, um Fehler zu identifizieren und nicht zu wiederholen.
Zum Thema Konsequenz überzeugt mich C++ nicht, weil es C mitschleift, die inzwischen 34 Jahre alt ist. Aber Java fährt so dermaßen voll gegen die Wand, da Java die Chance hatte vieles besser machen zu können und baute stattdessen Einschränkungen und zusätzliche Fehler ein. Java ist grade mal 10 Jahre alt - oder 15, wenn man Oak dazuzählt. Ich habe mich darüber anderswo schonmal ausgelassen. Über den Sinn oder insbesondere den Unsinn der Garbage Collection äußere ich mich auch nochmals, wenn meine Sprache fertig ist (absichtlich ohne Garbage Collection).Bitte werde glücklich mit Java, denn mit der Einstellung kannst Du mit C++ nicht glücklich werden. C++ lernt man auch nicht mal eben so, man guckt da nicht mal eben so rein, selbst wenn man Java bereits Jahre gut kann, hat man beim Umstieg auf C++ noch vieles dazuzulernen. Selbst wenn man C++ bereits Jahre gut kann, wird man immer wieder erstaunt sein, was alles möglich ist. Vielleicht schaust du Dir C# an, vielleicht ist das eher was für Dich.
Schönes Leben noch.
Edit: da war noch was...
schoppenhauer schrieb:
mir nicht erst noch hunderte sinnloser Fehlermeldungen über irgendwelche Fehler gibt, die von irgendwelchen "Sonderfällen" der Syntax herrühren, die meistens jeglicher Logik widerstreben.
Ich weiß, dass man in Java schon einen Schritt in diese Richtung unternommen hat. Ich weiß aber auch, dass als ich mit C anfing ich manchen "Sonderfall" nicht sofort verstanden habe.
Der Witz an der Sache ist, dass Java die syntaktisch zweifelhaften Sonderfälle mit übernommen hat. Von daher wäre ich mal interessiert, welche "Sonderfälle" Du gefunden haben willst.
-
Also wirklich. So unverfrohren unverschämt zu posten auf eine simple Frage nach dem Einsatzgebiet von Java. Wahrscheinlich bist du selber in diesem Forum ein Mod, jeder normale Mod hätt dich wegen sowas schon längst verwarnt. KEIN MENSCH hat dich hier nach deiner Meinung zu C++ gefragt - ok, auch mich hat kein Mensch nach meiner Meinung zu Java gefragt, aber im Gegensatz zu Dir hab ich auch nur beiläufig erwähnt, dass es EINIGE Sachen an Java gibt, die besser sind als an C++. Ich habe am Anfang nichtmal was von VIELEN gesagt. Dass du denkst, dass es die nicht gibt, ist ok, beziehungsweise mir absolut egal. Ich wollte auch keine Diskussion anzetteln, und habe die auch durch meinen zweiten Post SICHER nicht herausprovoziert - ich hab das bewusst vorsichtig formuliert, und hauptsächlich auf Reflections bezogen, da ich n00bz wie dich kenne. Dass du dich gleich persönlich angegriffen fühlst könnte ich ja nicht wissen - und mein weiterer Post danach war nur eine Antwort auf die Verbissenen Ansichten der Leute, die geawt haben.
Xin schrieb:
Bitte lass das. Du hast in dem Posting mehrfach bewiesen, dass Du überhaupt keinen Plan von C++ hast, noch dazulernen möchtest. Dafür kennst Du aber die Java Marketing Broschüren auswendig. Damit kannst Du jeden Abteilungsleiter beeindrucken, der genausowenig Plan hat. Ich würde aber aufpassen, wenn Du genausoviel Glück wie heute hast, gerätst wieder an den Richtigen und hinterläßt einen ähnlichen Eindruck.
Ich habe noch nie eine Java Marketing Broschüre gesehen ehrlichgesagt. Das werd ich auch nicht. Und ich bin auch kein Herr Von und Zu Diplom-Informatiker (jedenfalls bisher nicht), ich progge eigentlich hauptsächlich wenn ich ein konkretes Problem habe, das ich lösen will, etc.. Ich hab aber auch schon "größere" Sachen mit Java programmiert, also jedenfalls für meine Verhältnisse größere Sachen - dazu gehört auch eine PostScript-Engine (die ich aus Zeitmangel allerdings leider nie richtig fertiggeschrieben habe), die aber soweit recht schnell funktioniert hat.
Euch super-progger kenn ich schon... Sobald man mal irgendwas schlecht findet, was gehen die "Heiligen Gepflogenheiten der Programmierung" verstößt, reicht das schon als Beweis aus, dass man keine Ahnung hat. Das ist ja auch viel leichter, als es vielleicht einzusehen...Xin schrieb:
Wer Interfaces mit Funktionspointern gleichsetzt und auch noch glaubt, dabei was kleveres zu sagen, der sollte besser in seiner Java-Welt bleiben.
Und wer nicht richtig lesen kann, der sollte nicht in Foren posten. Es ging um Callbacks. Das ist der einzig sinnvolle Grund, Funktionspointer zu benutzen. Und er ist nicht sehr elegant.
Xin schrieb:
Und wie es der Zufall will: mein Hauptgebiet ist witzigerweise Compilerbau und Sprachdesign, ich entwickle selber eine Programmiersprache.
Und darauf auch noch stolz sein??? Die "Theorien" des Compilerbaus finde ich sehr... merkwürdig... um nicht sogar zu sagen, dämlich. Das ist nur Gedummschwätze von Sachen, die sowieso offensichtlich sind... Außerdem: Das LETZTE was die Welt braucht ist noch eine Programmiersprache.
Xin schrieb:
Bitte werde glücklich mit Java, denn mit der Einstellung kannst Du mit C++ nicht glücklich werden.
Ok, du hast mich überzeugt: Ich werde bei Java bleiben.
Trotzdem nochmal Danke für die schnelle Antwort auf die Frage nach den dynamischen Libs. Es ist schön, dass es auch anständige Menschen gibt.
-
schoppenhauer schrieb:
Mich wundert ehrlichgesagt (ich hab ja auf diversen Java-Foren schon posts von diversen C++-Trollen gesehen), dass die meisten Java-Befürworter eher aufgeschlossen sind, und auch die Nachteile von Java sehen - aber eben auch Nachteile von C/C++, während die C/C++-Coder immer verbissen darauf bestehen, dass C/C++ ja soviel besser ist als Java.
Ich habe ja schon erwähnt, daß meiner Ansicht nach C++ besser ist als Java und möchte hier die Diskussion nicht noch weiter anheizen, auch wenn es mir in den Fingern juckt, aber eines möchte ich doch korrigieren: Auch wenn es oft erwähnt wird, gibt es keine Sprache C/C++. Ich bestehe darauf, C++ zu programmieren. C ist eine völlig andere Programmiersprache, die wirklich anfällig für Bufferüberläufe, Speicherlecks und ähnliche interessante Dinge ist. Wenn man C++ korrekt verwendet sind diese Probleme weitestgehend Vergangenheit. Der Destruktor ist nicht nur ein Ersatz für den Garbage-collector, sondern eines der leistungsfähigsten Hilfsmittel, die ich in Java schmerzlich vermisse. (Tschuldigung - ich hör schon auf)
Tntnet
-
Im Gegensatz zu Xin postest du das aber wenigstens anständig und ohne andere Personen als dumm zu bezeichnen. Obgleich ich keine Diskussion anzetteln wollte, bin ich dieser auch nicht abgeneigt, hat doch jeder das Recht auf seine Meinung, und ich habe auch nicht erwartet, dass ich auf einem C++-Forum viele Java-Befürworter finde.
Falls du noch lust hast
:
Desweiteren hab ich auch nichts gegen Destruktoren, sie täten Java auch als zusätzliches Hilfsmittel gut, um etwas weniger RAM zu brauchen. Aber leider - viele C++-Programme sind da nicht optimal geschrieben, und führen keine Destruktoren aus. Sie geben also Speicher, den sie eigentlich nicht mehr brauchen, nicht frei. Für sowas ist Garbage-Collecting ideal. Das wäre möglicherweise eine optionale Erweiterung für C++, die Sinn ergäbe.
Ich verstehe sowieso nicht, warum die Java VM teilweise so dermaßen verschwenderisch mit Ressourcen umgeht, obwohl dies garnicht notwendig wäre. Man denke nur an Swing, das meiner Meinung nach eine ziemlich schwachsinnige API ist (und wohl nicht zuletzt deswegen durch SWT langsam ersetzt wird).
Wie dem auch sei. Ich habe halt z.B. ein paar sehr merkwürdige Dinge über C++ gelesen und ausprobiert. In einem der Tutorials, dies hier zum Download gibt, steht:
Werden aber in abgeleiteten Klassen Methoden definiert, die zwar den gleichen Namen aber eine andere Parameterliste wie in der Basisklasse haben, so wird diese Methode nicht -- wie man erst annehmen könnte -- überladen, sondern die Methode der Basisklasse ist nicht mehr verfügbar: sie wird verdeckt und kann nur noch über den Scope-Operator :: angesprochen werden.
Ich habe das ausprobiert... Und... Nunja... Es stimmt. Und das finde ich sehr seltsam. Ich sehe einfach keinen plausiblen Grund dafür. Und man kann diese Funktionen nichtmal außerhalb der Klasse ansteuern, also nichtmal in einer Instanz.
Und: was ich mich noch frage: Wie wird in C++ sichergestellt, dass keine zwei Klassen denselben Namen haben? Bei Java wird dies durch die Coding Convention sichergestellt, die z.B. besagt, dass das Package eines Herstellers immer mit der umgekehrten URL anfangen muss.
Außerdem: Schaut euch mal diesen Code an:
#include <iostream> using namespace std; void zeiger ( int ); void zeiger ( char ); void func ( void Zeiger ( int ) ); void func ( void Zeiger ( char ) ); int main () { func(zeiger); return 0; } void zeiger ( int i ) { cout << i << endl; } void zeiger ( char i ) { cout << (int) i << endl; } void func ( void Zeiger ( int ) ) { Zeiger(2); } void func ( void Zeiger ( char ) ) { Zeiger(3); }
Man KANN das auflösen durch eine typedef-klausel. Aber dann wird es SEHR unübersichtlich. Im Java würde man das mit Methods machen... Da gäbe es keine Probleme.
-
schoppenhauer schrieb:
Wie dem auch sei. Ich habe halt z.B. ein paar sehr merkwürdige Dinge über C++ gelesen und ausprobiert. In einem der Tutorials, dies hier zum Download gibt, steht:
Werden aber in abgeleiteten Klassen Methoden definiert, die zwar den gleichen Namen aber eine andere Parameterliste wie in der Basisklasse haben, so wird diese Methode nicht -- wie man erst annehmen könnte -- überladen, sondern die Methode der Basisklasse ist nicht mehr verfügbar: sie wird verdeckt und kann nur noch über den Scope-Operator :: angesprochen werden.
Man kann aber zusätzlich die verdeckte Methode mit einer using-Klausel wieder verfügbar machen, und somit auch auf die geerbte Methode ohne Scope-Operator zugreifen.
Man KANN das auflösen durch eine typedef-klausel. Aber dann wird es SEHR unübersichtlich. Im Java würde man das mit Methods machen... Da gäbe es keine Probleme.
Das kann man mit Templates in C++ noch viel flexibler machen, dann ist man sogar nicht mehr nur auf Funktionszeiger beschränkt sondern kann auch Funktoren benutzen.
-
Was sind Funktoren?
-
schoppenhauer schrieb:
Wahrscheinlich bist du selber in diesem Forum ein Mod, jeder normale Mod hätt dich wegen sowas schon längst verwarnt.
Zur Info: Ich bin kein Moderator.
schoppenhauer schrieb:
...da ich n00bz wie dich kenne. Dass du dich gleich persönlich angegriffen fühlst könnte ich ja nicht wissen
Interessante Zusammenstellung.
schoppenhauer schrieb:
Und ich bin auch kein Herr Von und Zu Diplom-Informatiker (jedenfalls bisher nicht)
Der Herr von und zu ist gerne bereit Fragen zu beantworten. Beim Aufstellen von Vorurteilen gegenüber C oder C++ macht der Herr von und zu allerdings darauf aufmerksam, dass dies nicht sonderlich auf solides Grundwissen des Vorurteilsträgers schließen läßt.
schoppenhauer schrieb:
Euch super-progger kenn ich schon... Sobald man mal irgendwas schlecht findet, was gehen die "Heiligen Gepflogenheiten der Programmierung" verstößt, reicht das schon als Beweis aus, dass man keine Ahnung hat. Das ist ja auch viel leichter, als es vielleicht einzusehen...
Du kennst Java und 'uns Super-Progger', aber kein C++.
Was die "Heiligen Gepflogenheiten der Programmierung" angeht, bin ich eher bekannt, diesen eher kritisch gegenüber zu stehen. Ansonsten wäre ich vermutlich dem Java-Hype hinterhergelaufen. Ich hab's ausprobiert - man will ja nicht dumm sterben - und kam zu C++ zurück.schoppenhauer schrieb:
Xin schrieb:
Wer Interfaces mit Funktionspointern gleichsetzt und auch noch glaubt, dabei was kleveres zu sagen, der sollte besser in seiner Java-Welt bleiben.
Und wer nicht richtig lesen kann, der sollte nicht in Foren posten. Es ging um Callbacks. Das ist der einzig sinnvolle Grund, Funktionspointer zu benutzen. Und er ist nicht sehr elegant.
Findest Du nicht, dass ein Beweis von Unkenntnis ausreicht? Dir hat ein C++-Programmierer, noch dazu einer, der in der Informatik ein Diplom hat, also zumindest ein bißchen mehr Ahnung hat, als Du, der grade in C++ einsteigen möchte, gesagt, dass Interfaces etwas anderes als Funktionspointer sind. Ich habe Dir sogar gesagt, wo der Unterschied zwischen Funktionspointern und abstrakten Klassen (Interfaces) liegt.
Du wirfst mir vor, dass ich nichts einsehen will...? Gib mir einen Grund, Dich und Deine Fragen ernst zu nehmen.schoppenhauer schrieb:
Xin schrieb:
Und wie es der Zufall will: mein Hauptgebiet ist witzigerweise Compilerbau und Sprachdesign, ich entwickle selber eine Programmiersprache.
Und darauf auch noch stolz sein??? Die "Theorien" des Compilerbaus finde ich sehr... merkwürdig... um nicht sogar zu sagen, dämlich. Das ist nur Gedummschwätze von Sachen, die sowieso offensichtlich sind... Außerdem: Das LETZTE was die Welt braucht ist noch eine Programmiersprache.
<°)))><
schoppenhauer schrieb:
Xin schrieb:
Bitte werde glücklich mit Java, denn mit der Einstellung kannst Du mit C++ nicht glücklich werden.
Ok, du hast mich überzeugt: Ich werde bei Java bleiben.
Danke.
-
schoppenhauer schrieb:
Was sind Funktoren?
Objekte die den ()-operator definieren.
Desweiteren hab ich auch nichts gegen Destruktoren, sie täten Java auch als zusätzliches Hilfsmittel gut, um etwas weniger RAM zu brauchen. Aber leider - viele C++-Programme sind da nicht optimal geschrieben, und führen keine Destruktoren aus. Sie geben also Speicher, den sie eigentlich nicht mehr brauchen, nicht frei. Für sowas ist Garbage-Collecting ideal. Das wäre möglicherweise eine optionale Erweiterung für C++, die Sinn ergäbe.
Viele C++-Programme sind von Anfängern geschrieben und rufen so den Destruktor nicht auf. Wenn diese Anfänger nun in Java programmieren klappt alles weil es ja die Garbage-Collection gibt. Also ist C++ nicht für Anfänger geeignet und Java schon??? Nur weil es Leute gibt, die mit C++ nicht umgehen kann, ist das kein Nachteil für C++. Diese Erweiterung ergibt überhaupt keinen Sinn. Die Anfänger, die nicht mit C++ umgehen können und ihren Speicher vergessen, sollen doch zu Java gehen.
Und auch wenn Java bald Templates hat: C++ wird auch bald wieder erweitert (variable Parameteranzahl). Alles entwickelt sich, doch momentan hat Java einfach keine Templates.
mfg.
-
Leute wie dich braucht die Welt!
(Mein letztes Wort in diesem Thread - jetzt wirds mir zu dumm. Gibts denn in diesem Forum keine Mods?)
(War @Xin)
-
schoppenhauer schrieb:
Leute wie dich braucht die Welt!
(Mein letztes Wort in diesem Thread - jetzt wirds mir zu dumm. Gibts denn in diesem Forum keine Mods?)
(War @Xin)Dein erster Satz ist total sinnlos, zeigt nur, dass du anscheinend nicht bereit bist zu diskutieren.
Und ein "mir wirds zu dumm" ist einfach nur dumm! Keine Begründung oder Argumentation!
Alles in allem versuchst du dich nur zu verdrücken, weil du nicht fähig bist deinen Standpunkt zu vertreten.
Und ich finde nicht ein Mod sollte hier was gegen Xin tun, er hat nichts gemacht. Du hast ihn als noob bezeichnet!
Und jetzt der Hammer:schoppenhauer schrieb:
Im Gegensatz zu Xin postest du das aber wenigstens anständig und ohne andere Personen als dumm zu bezeichnen.
Also bezeichnet Xin andere Leute als dumm und das magst du nicht? Okay, ist ja verständlich. Aber wie rechtfertigst du dann deinen Abschiedsgrund: "jetzt wirds mir zu dumm." Damit beschimpfst du hier auch alle als dumm!
-
Anscheinend will man hier die Disku unbedingt weiterführen. Dabei wollt ich eigentlich garkeine anzetteln. Ich betone NOCHMALS dass mein einziges Begehr hier war einen Ersatz für Reflections in Java zu finden. Der Grund für die Diskussion ist lediglich dass kein Mensch hier zugeben will, dass einiges in Java einfach besser gelöst ist, als in C++. Und anscheinend nicht einmal, dass es Dinge an C++ gibt, die man verbessern könnte.
Hier scheinen sich einige Leute gerne wichtigzumachen...
Frage: Bist du zufällig Xin selber, der sich hier nur nicht eingeloggt hat?Ich habe HINREICHEND Begründungen angegeben, die Vorteile von Java gegenüber C++ sind. Ich KANN meinen Standpunkt vertreten - und das hab ich auch gezeigt.
Abgesehen von dem Geschwindigkeitsproblem (das sich im Übrigen dank GCJ zur Not lösen lässt - es ist ein Problem des Compilers und nicht der Sprache selber) sind die meisten Punkte hier sowieso Ansichtssache gewesen.Ich habe Xin btw erst als n00b bezeichnet nachdem er ausfallend wurde.
Der Satz "Leute wie Dich braucht die Welt!" war eine Ironie und ist als direkte Beleidigung gegen Xin zu verstehen. Ich habe DREIMAL versucht wieder freundlich zu sein, anscheinend wollte das Xin aber nicht. Drum hab ich mich in diesem Post mal auf sein argumentatives Haudrauf-Niveau begeben.
"Mir wird es hier zu dumm" bezog sich allerdings auf die sinnlose Diskussion hier, die Xin veranstaltet. Die anderen Leute die hier gepostet haben haben wenigstens ein wenig Kultur beim Posten. Ich habe keine Lust mir den Schmarrn von Xin hier noch länger anzuhören. Drum hab ich auch eingestellt, dass ich bei Antworten hier nicht mehr benachrichtigt werde. Leider find ich keine Möglichkeit, meinen Account auf diesem Forum zu löschen. Aber ist ja egal.
Um Xin's Worte zu benutzen:
Schönes Leben noch.
-
schoppenhauer schrieb:
Anscheinend will man hier die Disku unbedingt weiterführen. Dabei wollt ich eigentlich garkeine anzetteln.
So, please, don't feed the trolls.
@Moderator: Bitte Thread schließen.
schoppenhauer schrieb:
Frage: Bist du zufällig Xin selber, der sich hier nur nicht eingeloggt hat?
Nopes.
schoppenhauer schrieb:
Der Satz "Leute wie Dich braucht die Welt!" war eine Ironie und ist als direkte Beleidigung gegen Xin zu verstehen.
Danke für den Hinweis mit der Ironie. Ich hätte es beinahe falsch verstanden.
schoppenhauer schrieb:
Leider find ich keine Möglichkeit, meinen Account auf diesem Forum zu löschen.
Ich weiß auch nicht, wie man sich aus dem Forum wieder austrägt. Sollte das ein Problem für Dich darstellen, bin ich sicher, dass die Moderatoren oder Admins Dir gerne weiterhelfen.
-
schoppenhauer schrieb:
Im Gegensatz zu Xin postest du das aber wenigstens anständig und ohne andere Personen als dumm zu bezeichnen. Obgleich ich keine Diskussion anzetteln wollte, bin ich dieser auch nicht abgeneigt, hat doch jeder das Recht auf seine Meinung, und ich habe auch nicht erwartet, dass ich auf einem C++-Forum viele Java-Befürworter finde.
Falls du noch lust hast
:
Desweiteren hab ich auch nichts gegen Destruktoren, sie täten Java auch als zusätzliches Hilfsmittel gut, um etwas weniger RAM zu brauchen. Aber leider - viele C++-Programme sind da nicht optimal geschrieben, und führen keine Destruktoren aus. Sie geben also Speicher, den sie eigentlich nicht mehr brauchen, nicht frei. Für sowas ist Garbage-Collecting ideal. Das wäre möglicherweise eine optionale Erweiterung für C++, die Sinn ergäbe.
Hi schoppenhauer,
danke für die Blumen
Ich hoffe, daß Du Dich von solchen persönlichen Angriffen doch nicht verscheuchen läßt. Ich finde es sehr erfrischend, gepflegt über Java kontra C++ zu debattieren.
Vielleicht liest Du ja doch noch diesen Kommentar. Gerne würde ich noch was über die Vorteile von Destruktoren sagen.
Destruktoren geben nicht nur Speicher frei, sondern können beliebige Resourcen frei geben. Da ich viel mit Datenbanken zu tun habe, nehme ich gerne eine Transaktion als Beispiel. Ich habe eine Datenbankbibliothek, in der ich ein Objekt vom Typ Transaktion definiere. Der Destruktor führt automatisch ein Rollback durch, wenn nicht vorher explizit ein Commit aufgerufen wurde. Da brauche ich kein finally-Block, der schon mal vergessen werden kann. Und das ist insbesondere bei einem Connectionpool fatal. Man stelle sich einmal vor, in einem Pool sind Connections, die eine fehlgeschlagene Transaktion halten:(
Weitere Kandidaten für Destruktoren sind Filedescriptoren, bzw. Sockets oder Shared libraries (womit wir wieder beim Ursprünglichen Thema sind).
Ich habe in meiner Bibliothek cxxtools (http://www.tntnet.org/cxxtools.hms) eine Klasse cxxtools::dl::Library. Diese hält eine Referenz auf eine shared library und entlädt sie automatisch, wenn die letzte Referenz gelöscht wird.
Java hat den Vorteil einer sehr umfangreichen Standardbibliothek, was aber streng genommen kein Sprachfeature ist.
Dein Argument, daß ich einfach mit gcj nativen code erzeuge und damit die gleiche Geschwindigkeit erreiche, wie C++ stimmt so nicht so ganz. Es gibt in C++ viele Sprachkonstrukte, die sehr maschinennah sind und damit sehr einfach in optimalen Code gewandelt werden können. Ich kann beispielsweise mit der Sprache Java einfach nicht bestimmen, ob ein Objekt auf dem Stack oder auf dem Heap angelegt werden soll. Da hilft auch ein gcj nicht. Oder nehmen wir so Sachen wie std::copy. Das ist eine Template-Funktion, die im Falle von einfachen Datentypen durch ein memcpy abgebildet wird und dadurch optimal durch entsprechende Maschinenbefehle ausgeführt werden kann. Das kann ich mit Java einfach nicht formulieren. Da fehlen mir die Ausdrucksmittel.
In Sachen Geschwindigkeit gibt es allerdings dennoch eine Sache, wo Java punkten kann. Und zwar wird ja der Maschinencode zur Laufzeit generiert und dadurch kann der Code für den aktuellen Prozessor optimiert werden. Zur Optimierung stehen noch reale Zugriffsmuster zur Verfügung, die bei C++ nur durch force-feedback-compilierung erreicht werden können, was aber erheblichen Entwicklungsaufwand bedeutet. Da kann es im Einzelfall durchaus Geschwindigkeitsvorteile geben.
Tntnet
-
schoppenhauer schrieb:
(Mein letztes Wort in diesem Thread - jetzt wirds mir zu dumm. Gibts denn in diesem Forum keine Mods?)
Doch, aber auch die sollen gerüchteweise manchmal an Orten mit eingeschränkter Internet-Konnektivität unterwegs sein.
Und manche davon glauben angeblich sogar, dass große Jungs (und Mädels) eigentlich keine Babysitter brauchen sollten, aber offensichtlich bin ich da etwas zu naiv. Nachdem in diesem Thread nichts mehr weitergeht, mach ich einfach mal zu. (Das ist übrigens ein besseres Kriterium beim Schließen, als die Tatsache, dass Du keine Lust mehr auf den Thread hast.)
Wer seinen Account löschen lassen möchte, weil ich zu schnell oder zu langsam reagiert habe oder irgendjemand etwas Böses gesagt, mit Sand geworfen oder das Lieblings-Spielzeugauto des Nachbarn kaputtgemacht hat, kann sich selbstverständlich an Marc++us wenden.
edit:
tntnet: Tut mir leid, dass ich hier unterbreche, wenn Du gerne weiterdiskutieren möchtest, dann schreib einfach eine Mail, ja?