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