Dynamic Linking während der Laufzeit unter Linux
-
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?