![]() |
DLL systemunabhängig?
Hallo,
ich soll für eine Software einen Funktionskern schreiben der Systemunabhängig gehalten werden soll. Ist eine DLL Systemunabhängig? Oder wie sollte ich sonst einen unabhängigen Kern schreiben? Danke schonmal für eure Antworten :angel: |
Re: DLL systemunabhängig?
Was meinst du damit genau?
Von der Hardware her? oder vom Betreibssytem? oder von was soll die DLL unabhängig sein? |
Re: DLL systemunabhängig?
Eine DLL ist auch nichts anderes als eine Datei im PE32-Dateiformat und somit zumindest Windows spezifisch.
|
Re: DLL systemunabhängig?
Und wie kann ich dann einen systemunabhängigen Funktionskern schaffen? :shock:
|
Re: DLL systemunabhängig?
Wenn du Betriebssystem unabhängig meinst und das auf Windows und Linux beziehst, gar nicht.
|
Re: DLL systemunabhängig?
Zitat:
Falls dem nicht so ist sollte er dir erklären was er mit System meint. Meint er damit dass man die Funktionalität auch in anderen Softwaresystem verwenden können sollte, dass sie unabhängig von einem vielleicht zerfriemelten System ist, oder soll sie plattform-unabhängig sein. Erstes und zweites lässt sich noch mit Delphi erledigen, für letzteres gäbe es FreePascal. |
Re: DLL systemunabhängig?
echt jetzt? Es gibt nicht die Möglichkeit zB alles in C++ zu machen und dann auf Windows und Linux auf die selben Dinge zuzugreifen? Also es können schon unterschiedliche Dateien sein, aber der Quellcode sollte nur einmalig vorkommen.
Das einzige was es dann gäbe wäre wohl das komplette in Java zu programmieren oder? @Elvis alle drei Punkte am besten :D |
Re: DLL systemunabhängig?
Zitat:
|
Re: DLL systemunabhängig?
Zitat:
Du redest von einer DDL, also einer Bibliothek, die Funktionen enthält. Und diese Implementierungen würdest du gerne von Woanders benutzen können? Solange der benutzende keine Java-App ist, dürfte sich eine Java-Bibliothek als KRAMPF erweisen um die Funktionen auszuführen. Zitat:
FPC generiert größere Binaries als Delphi, aber der Compiler ist viel strenger und die Binaries selbst laufen oftmals auch noch schneller :). Die GUI kannst du ja in Delphi lassen, auf der Windows seite. Für andere Plattformen kannst du dann eine andere GUI bauen, zum Beispiel mit Lazarus. |
Re: DLL systemunabhängig?
Zitat:
.NET ist da ne gute Alternative. |
Re: DLL systemunabhängig?
Zitat:
Aber wie es aussieht soll das ganze nativ bleiben (da bereits eine native GUI existiert, oder? ) und da fliegen sowohl Java als auch Mono raus. |
Re: DLL systemunabhängig?
ne es existiert noch keine GUI, wenn Java geeignet wäre würde man Java nehmen, aber es wird als "zu lahm" angesehen.. ich mag Java eigentlich :D
|
Re: DLL systemunabhängig?
Zitat:
Mache dir selbst ein Bild von Lazarus und Java um herauszufinden was dir besser gefällt. Aber wie gesagt, eine Java Bibliothek in einer nativen Anwendung zu benutzen wird so abartig dass es zu einem Kündigungsgrund deinerseits werden kann. Überlege dir also genau wie das gemeint war, frage besser ob da überhaupt etwas gemeint war (@Manager, oben). Soll es as Bibliothek zur Verfügung stehen, sollte es eine native DLL sein. Die GUI kannst du aber immer noch in Java schreiben. (Von Java eine native Lib zu benutzen ist einfacher als andersrum, etwa um den Faktor 10^100) |
Re: DLL systemunabhängig?
ne es sollte ein Funktionskern für unsere neue Software sein, es ist noch nicht klar in welcher Sprache das programmiert werden soll, aber es ist klar das es auch auf Linux laufen soll.
Die Frage ist jetzt: Alles in Java, wobei dann ein Thema wie ein Dienst etwas schwierig sein dürfte, oder eben eine Bibliothek in Delphi/C++ und für jedes System ne eigene GUI. |
Re: DLL systemunabhängig?
[OT]
Also, auf meinen Rechnern sind WPF und Windows Forms wesentlich schneller als jede Java-Anwendung, die ich bisher gesehen habe, während Java, egal ob AWT, SWT oder sonst was immer dahinkriecht. [/OT] Schonmal Qt ausprobiert? C++, "plattformunabhängig" (Unix/X11, MacOS X Native und Win32 Native), ein Quellcode für alle Plattformen und eine relativ gute Bibliothek, die den C++-STL-Murks und auch Boost überflüssig macht. |
Re: DLL systemunabhängig?
Als ob ich mit dem Performance-Argument kommen würde... :lol: . Es geht simpel um Wartbarkeit der Anwendungen.
Java wird inzwischen von QM-Unternehmen (imho zurecht) als so unwartbar angesehen, dass die z.B. Pharmaunternehmen die ISO-Zertifizierung nur noch unter der Auflage erneut zuteilen, bestehende Java-Anwendungen durch wartbare Anwendungen abzulösen. Befolgt das Unternehmen die Auflage nicht, ist das QS-Zertifikat wech. Das war z.B. bei Phizer und Sanofi Aventis schon so. |
Re: DLL systemunabhängig?
warum soll Java unwartbar sein? :gruebel:
Also ich mach jetzt seit inigen Monaten Java. Es stimmt schon das wenn ich von 1.4 auf 1.6 gehe sich einiges ändert, aber wenn ich bei 1.6 bleibe über Jahre hinweg, ändert sich nichts an Funktionen und man muss dann wenn man die Version wechselt nur einmal alles überarbeiten, was relativ schnell geht.(Naja kanns chon paar Tage/Wochen gehn wenns viel ist, klar) Aber wie gesagt: Ich find mich sehr gut in Java zurecht. |
Re: DLL systemunabhängig?
Zitat:
eine Geschichte die MS bisher auch nicht besser gemacht hat, schauen wir uns mal die Vorgänger von .net (COM, COM+, DCOM, DDE) an und die Entwicklung .net 1.x, 2.x, 3.x (ok 3 ist ja nur ein leicht erweitertes 2). Was die Geschwindigkeit angeht, so ist das eh immer ein (langweilig altes) Argument, dass man mal mit heutigen JITs betrachten sollte, da relativiert sich dann doch einiges. Nebenbei gibt es auch Qt mittlerweile für Java. Qt läuft dabei nativ und wird über eine JNI (Java Native Inteface) - Brücke angesprochen. An sich kannst Du aus Java heraus eben auch native Programme in dyn. linkbaren Bibliotheken ablegen und diese nativ ausführen. Für den Aufruf und das marshaling geht natürlich etwas Zeit drauf, aber das Problem hast Du auch wenn Du Objekte verwendest. .net ist leider als Plattformunabhängige Plattform noch ungeeignet, da es keine Implementierung für genügend Plattformen gibt (über die Wartbarkeit von Managed C++ könnte man z.B. auch streiten). Aber es gibt trotzdem Alternativen zu Haskell, z.B. kannst Du auch auf Python, Haskell oder die universelle TuringMachine zurückgreifen (ok, das mit dem unendlichen Speicher wird schwer), was am besten geeignet ist sollte nicht pauschal festgelegt werden. Vielmehr hat jede Sprache so ihre Nische in der sie besonders toll ist (oder auch nicht). Gruß Der Unwissende |
Re: DLL systemunabhängig?
OK, das heisst man müsste Aufgaben definieren die die Software tun soll und dann schauen welche Sprache für diesen Bereich am geeignetsten ist?
In unserem Beispiel hiesse das, das die Software sehr viele Dateien vergleicht und kopiert. Ausserdem soll sie als Dienst laufen und übre Netzwerk kommunizieren. Ich weis das Java schneller als C++ ist wenns darum geht Objekte zu erzeugen. da es viele Dateien sein werden und jede vmtl ein Objekt sein wird, wäre das evtl ein Vorteil oder? Allerdings wie es mit Java auf Dateiebene aussieht weis ich nicht. |
Re: DLL systemunabhängig?
Zitat:
Zitat:
Netzwerk ist immer so ein Wort, wo viele Leute an Java denken. Java ist nun mal mit Netzwerken groß geworden und bietet von sich aus gleich eine ganze Menge schöner gekapselter Funktionen rund um das Thema Netzwerk. In C++ ist das eventuell (kenn mich da nicht so aus) anders, hier kann es sein, dass eher auf die direkte Schnittstelle des OS zurückgegriffen werden würde. Qt abstrahiert davon, stellt auch in C++ eine unabhängige Schnittstelle für solche Dinge bereit (vielleicht hat C++ die ja ohnehin). Die .nets dürften hingegen ähnlich wie Java arbeiten (aber kaum unter Linux voll unterstützt werden). Zitat:
|
Re: DLL systemunabhängig?
Und in welchen Bereichen ist Java jetzt genausoschnell oder gar schneller und wo ist es langsamer? :gruebel:
|
Re: DLL systemunabhängig?
Da es kaum Vergleichstests gibt, deren Vergleichsmethoden nicht irgendwie seltsam anmuten, wirst du wohl oder übel selbst testen müssen.
Was das "Objekterzeugen in Java ist schneller als in C++" angeht, das ist nur ein Teil der Wahrheit, jetzt mal ganz abgesehen davon, dass es unzählige C++-Compiler gibt. Objekte auf dem Heap zu erzeugen und zu zerstören ist in Java ebenso wie in C# und ähnlichen Sprachen schneller als in C++, wenn man sich nicht ums Speichermanagement kümmert. Aber in C++ kann man Objekte auch auf dem Stack erzeugen (das geht in Java überhaupt nicht, in C# nur, wenn die jeweilige "Klasse" dafür entworfen wurde), und man kann sein eigenes Speichermanagement zusammenbauen, wie z.B. einen MemoryPool (im Endeffekt ist das, was Java macht, auch nicht viel anders). Wenn du also ungefähr weißt, was du tust, kannst du nur durch deine eigenen Tests wirklich Performance-Unterschiede herausfinden und diese sind dann, mehr oder weniger, für dein Problem spezifisch. Von bestimmten Dingen abgesehen kann man kaum sagen, dass eine bestimmte Sprache schneller als eine andere ist. Was C++ angeht, die C++-Bibliothek bringt in der bisherigen Standardversion ungefähr nichts mit, außer einer Hand voll umständlich zu verwendender Container und Algorithmen und einer String-Klasse. Das Ganze nennt man dann STL, stuft es als Grundwissen ein und hofft, es nie benutzen zu müssen. Mit Boost wird dann aus C++ schon eine einigermaßen benutzbare Sprache, weil Boost viele Features hinzufügt, die andere Sprachen auch können (Delegaten, Threads, Smartpointer usw.) Wirklich viel Spaß mit C++ hat man in meinen Augen aber nur mit einer Bibliothek wie Qt, die so ziemlich alles, was man benötigt, mitbringt, in einer Form, die angenehm zu verwenden und plattformunabhängig ist. Qt ist unangenehmerweise für kommerzielle Anwendungen nicht kostenlos (aber ich finde, es ist das Geld wert ;)). Zumindest anschauen solltest du es dir als Alternative zu Java auf jeden Fall. |
Re: DLL systemunabhängig?
Zitat:
Java ist also schon mal schneller, als wenn Du wiederum exakt gleiche Algorithmen und Datenstrukturen in einem Interpreter ausführst. Da Du aber i.d.R. keine Architektur besitzt, die der der JVM entspricht, muss der Code noch in solche übersetzt werden, der von Deiner Maschine verstanden wird. Hier kommt ein Just In Time Compiler (JIT) zum Einsatz. Während dieser die Instruktionen einliest versucht der diese auf Dein System zu optimieren und übersetzt die für die Zielplattform, wo sie dann auch ausgeführt werden. Das kostet natürlich etwas Zeit und ist damit langsamer als ein gleichartiges Programm, dass schon komplett für diese Zielplattform gelinkt vorliegt. Letzteres kann eben direkt ausgeführt werden, die Übersetzung durch den JIT entfällt. Jetzt ist es aber nicht so, dass alle Sprachen exakt gleich arbeiten. So könnte ich immer behaupten, dass C Code schneller ist als solche in ObjektOrientierter C++ Code. Einfach weil C keine Objekte kennt und diese einen gewissen Overhead mit sich bringen. Auch kümmert sich C recht wenig um Typsicherheit, in C++ sieht das anders aus. Jedes try... except bedeutet eine Verlangsamung, Indirektionen durch die Verwendung von Objekten und insbesondere bei virtuellen Methoden kommen dann noch hinzu. Nichts desto trotz wird häufig auch Objekt Orientiert programmiert, da dies ganz andere Möglichkeiten und Vorteile als die rein imperative Programmierung bietet. Ein schönes Beispiel ist vielleicht gleich J2EE (Java 2 Enterprise Edition), deren Vorteile erst durch die OOP erreicht werden, z.B. die einfache Skalierung und die automatische Nebenläufigkeit. Aber es gibt noch weitere Unterschiede, so verwaltet Java seinen Speicher selbst, es gibt keine (expliziten) Destruktoren. Während Du in C/C++ einfach mal einen Destruktor-Aufruf vergessen kannst und Dir damit den Speicher zumüllst, wird in Java von Zeit zu Zeit (läuft asynchron) die Garbage Collection aufgerufen, die einfach allen Speicher, der nicht mehr benötigt wird, aufräumt. Hast Du einen solchen Destruktor an einer ungünstigen Stelle vergessen, dann dürfte ein voller Speicher Dein Programm ordentlicher ausbremsen als vieles anderes. Zudem sind natürlich die Bibliotheken in Java und C++ (oder anderen Sprachen) auch unterschiedliche aufgebaut. Je nach Implementierung (die muss auch nicht in jeder Version gleich sein, ein Vorteil von Abstraktion), kann dann die eine oder andere Sprache eine deutlich schnellere Implementierung verwenden. Die Unterschiede zwischen C++ und Java mögen hier für die meisten Programme noch gut messbar sein, aber nicht unbedingt spürbar! Da spielen andere Faktoren eine viel wichtigere Rolle. Jeder sich bewegende Fortschrittsbalken bzw. sein Fehlen macht psychologisch doch deutlich mehr aus (da ist der Gefühlte Unterschied immens!) [add] Kein roter Kasten, na toll. Zitat:
[/add] |
Re: DLL systemunabhängig?
Weitere Funktion des Programms: ein Programm soll als Dienst/Daemon laufen. Gibts da Vor-/Nachteile bei Java/C++?
|
Re: DLL systemunabhängig?
Sagen wir's so, es ist vielleicht unglücklich, wenn ein Dienst noch gleich eine VM mit sich rumschleppt. Kann ein Javaprogramm überhaupt als Dienst gestartet werden?
|
Re: DLL systemunabhängig?
Ja es gibt einen Wrapper mit der man die als Dienst starten kann
|
Re: DLL systemunabhängig?
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:41 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz