Torrent Datei mit Down them All + Fire Torrent runterladen

  • Zitat

    trotzdem sehe ich Java derzeit noch nicht als echte Lösung für Plattformübergreifende Softwareprogrammierung

    Aber genau das ist eben die Stärke von Java, ein negativer Aspekt die etwas geringere Geschwindigkeit, die aber wie erwähnt auf modernen System nicht mehr maßgeblich ins Gewicht fällt.
    Was wäre denn deine "echte" Lösung für plattformübergreifende Programmierung mit möglichst geringem Portierungsaufwand?

  • Da sich der Thread ja sowieso vom eigentlichen Thema entfernt hat, möchte ich auch noch mal was zu Java fragen:

    Ich weiß, was die Vorteile von Java sind bzw. sein sollen, eben die Plattformunabhängigkeit, verstehe dies aber nicht so ganz bzw. würde diese Vorteile absprechen wollen.

    Java-Programme laufen auch nur auf Plattformen, auf denen auch Java zu installieren ist, was ja nicht Gottgegeben ist.
    Damit haben wir imho alles andere als eine Plattformunabhängigkeit.
    Wenn nicht, dann müssten Windowsprogramme genau so als Plattformunabhängig gelten, weil man sie ja etwa per Wine auch auf Unix Systemen zum laufen bringen kann.
    Ähnliches lässt sich über Linuxprogramme sagen, die dann eben z.B. mit Hilfe von Cygwin auch auf Windows Rechner starten lassen.

    Wo ist also der Unterschied zu Java, außer, dass man mit Java sonst nicht viel mehr machen kann?

  • Zitat

    Java-Programme laufen auch nur auf Plattformen, auf denen auch Java zu installieren ist, was ja nicht Gottgegeben ist.
    Damit haben wir imho alles andere als eine Plattformunabhängigkeit.

    Auf welchen wichtigen Plattformen ist Java nicht verfügbar?

    Zitat

    weil man sie ja etwa per Wine auch auf Unix Systemen zum laufen bringen kann.

    Wine ist in der Wirkung sicherlich vergleichbar zur JRE. Allerdings entwickelst du dann unter/für Windows und bringst die Programme "mehr oder weniger" unter Linux zum Laufen. Wie machst du es dann, wenn du ein Windows-Programm unter Mac OS haben willst. Ok, Darwine, aber dann hast du bereits zwei unterschiedliche Laufzeitumgebungen mit unterschiedlichem Entwicklungsstand.
    Java entwickelst du gleich plattformunabhängig und die Programme sehen dann auch auf den Plattformen identisch aus (wenn gewünscht) oder passen sich ggf. in die Desktopumgebung ein.

    Zitat

    die dann eben z.B. mit Hilfe von Cygwin auch auf Windows Rechner starten lassen.

    Diese müssen erst portiert werden, sind also nicht unmittelbar lauffähig.

    Zitat

    außer, dass man mit Java sonst nicht viel mehr machen kann?

    Was kannst du denn mit anderen Sprachen "mehr" machen? Java bietet zudem noch einige Vorteile gegenüber anderen Sprachen.

    Grundsätzlich ist die Entwicklung in Java in Bezug auf den Portierungsaufwand einfach schlanker, da eben i. d. R. keine Portierungen vorgenommen werden müssen und durch die breite Unterstützung jedes wesentliche OS abgedeckt werden kann.

  • Mir geht es nicht um den Ist-Zustand, sondern um das Prinzip!

    Plattformunabhängig hieße für mich eine Sprache, die eben nicht erst eine Laufzeitumgebung braucht, sondern in der Lage ist, mit jedem System von vornherein umgehen zu können.
    Ich weiß, ist so nicht so einfach möglich, aber wie gesagt, mir geht es um das Prinzip.
    Du fragst zum Beispiel, auf welchem wichtigen System Java nicht läuft und genau darum geht es ja. Plattformunabhängigkeit bedeutet für mich eben nicht, erst eine Implementierung von Java vornehmen zu müssen. Es müssen also Vorbereitungen getroffen werden, um Programme auf verschiedenen Plattformen laufen zu lassen, was auch für Wine und Cygwin und bla gilt, wenn dort vielleicht auch noch wesentlich umständlicher und im Ergebnis nicht so gut.

    Zitat

    Was kannst du denn mit anderen Sprachen "mehr" machen? Java bietet zudem noch einige Vorteile gegenüber anderen Sprachen.


    In diesem Fall hatte ich Java nicht als Sprache gemeint, sondern als Laufzeitumgebung, also quasi als BS im Miniformat. Und da können die anderen BS natürlich mehr als Java.

    Mir geht es nicht darum, an Java zu mäkeln, ich versuche einfach nur, mein Verständnis auszubauen.
    Früher dachte ich halt, plattformunabhängig bedeutet auch plattformunabhängig, was aber ja nun nicht der Fall ist.

    Schön wäre es halt, etwas zu schaffen, was aus sich selbst das BS erkennt und dann die entsprechenden Teile aus der Programmierung lädt, die für das jeweilige System relevant sind. Und das selbst bei Systemen, die vorher unbekannt sind.
    Schließlich sind die Programmiersprachen letztlich ja auch nichts anderes als Übersetzungen des Maschinencodes und der dürfte ja überall gleich sein.
    Das wäre für mich Plattformunabhängigkeit!

    Hab ich das so in etwa richtig verstanden?
    Also, dass Java ein Übergang bzw. eine recht elegante Lösung des Problems ist, aber noch weit entfernt von echter Plattformunabhängigkeit?

  • Zitat

    Plattformunabhängig hieße für mich eine Sprache, die eben nicht erst eine Laufzeitumgebung braucht, sondern in der Lage ist, mit jedem System von vornherein umgehen zu können.

    In der Form wird es das auf Grund verschiedener Architekturen und Betriebssysteme nicht geben. Man braucht eine Abstraktionsschicht gegen die man Programmieren kann, jede Sprache ist dem unterworfen, außer du schreibst direkt Maschinencode, der aber alles andere als unabhängig ist.

    Plattformunabhängig im Sinne von Java heißt: write once, run everywhere.

    Zitat

    sondern als Laufzeitumgebung, also quasi als BS im Miniformat

    Genaugenommen ist es eine Abstraktion gewisser OS-Funktionen. Insofern macht es keinen Sinn die JRE mit einem OS zu vergleichen - völlig verschiedene Dinge.

    Zitat

    was aus sich selbst das BS erkennt und dann die entsprechenden Teile aus der Programmierung lädt, die für das jeweilige System relevant sind.

    Dazu müsstest du dann für jedes System Code bereitstellen, der dann ausgewählt wird. Gerade diesen Overhead vermeidet Java durch eine einheitliche API.
    Und wann soll diese Auswahl stattfinden? Beim Kompilieren? Wäre keine Änderung zur bisherigen plattformbezogenen Entwicklung. Zur Laufzeit? Dann müsste ein Zwischencode entwickelt werden und eine Laufzeitumgebung diesen interpretieren. Genau das, was Java macht.

    Zitat

    Und das selbst bei Systemen, die vorher unbekannt sind.

    Wenn daas System unbekannt ist, wie soll der richtige Code geschrieben und ausgewählt werden? Auch hier wieder die Stärke von Java. Der Code steht, neue System können durch eine neue JRE erschlossen werden. Es braucht keine Anpassung am Code selbst.

    Zitat

    nichts anderes als Übersetzungen des Maschinencodes und der dürfte ja überall gleich sein.

    Nein, eben das nicht.

  • Mir geht es, wie gesagt, nicht um die Vorteile von Java, sondern um das Gesamtkonzept und das Verständnis darüber.
    Deshalb erst mal Danke zu den Ausführungen über Java, aber trotzdem noch mal die Nachfrage, aufgehängt an ein Zitat:

    Zitat von boardraider

    Nein, eben das nicht.


    Wieso, letztlich, nicht?
    Ich habe eine Hardware und die "Versteht" anderen Maschinencode, wenn sie von Linux angesprochen wird als wenn sie von Windows angesprochen wird?

    Ich hätte gedacht, der Maschinencode ist der gleiche, muss aber durch die Treiber an/in die Eigenheiten des jeweiligen BS "übersetzt" werden, damit die Hardware anspricht.
    Ich dachte, das Bit, welches "An" bedeutet, ist dann am Ende der Schlange immer das gleiche, ebenso wie das Bit, welches "Aus" bedeutet, egal, ob nun Win, Linux oder sonst was installiert ist.
    Mehr kommt doch im Endeffekt an der Hardware nicht an?
    Insofern wäre es doch rein theoretisch eben doch Möglich, Sprachen oder Systeme zu entwickeln, die echt plattformunabhängig sind und dann auch auf bisher noch fremden BS funktionieren würden?
    Das ist eine Frage, keine Behauptung, um das noch mal klar zu stellen!

  • Mal von anderer Seite beleuchtet.

    Der Terminus Plattform ist nicht endlich ausdefiniert.

    a.) die Hardware auf der die Software laufen soll
    Von verschiedenen Herstellern in verschiedenen Familien produziert, bieten unterschiedliche Fähigkeiten und Befehlssätze

    b.) die Betriebssysteme die auf obiger Hardware laufen
    Von verschiedenen Herstellern in verschiedenen Familien produziert, abstrahieren die Hardware in dem sie Dienste in Form von Schnittstellen für Anwendungsprogramme bereitstellen, die die Befehlssätze der Hardware nutzen. Dies kann jeweils nur für eine in a.) gegeben Plattform erfolgen.

    c.) plattformneutrale Laufzeitumgebungen
    Von verschiedenen Herstellern in verschiedenen Familien produziert, abstrahieren die Schnittstellen der Betriebssysteme und die Befehlssätze der Hardware durch neutrale Strukturen und Anweisungen. Dies kann jeweils nur für eine in b.) gegebene Plattform erfolgen.

    Ob die für eine Laufzeitumgebung konzipierte Sprache nun Java, Javascript oder etc. sein mag ist dabei für die Betrachtung unerheblich. Auch eine mögliche zur Beschleunigung vorhandene interne Übersetzung ist nur eine Variation des Themas.

    Die angestrebte Neutralität ist also nur ab einer gewissen Abstraktionsebene verfügbar.

  • Quelle: Wurstwasser

    Zitat von Wurstwasser


    Wieso, letztlich, nicht? Ich habe eine Hardware und die "Versteht" anderen Maschinencode, wenn sie von Linux angesprochen wird als wenn sie von Windows angesprochen wird?

    Das hat mit dem OS zunächst nichts zu tun. Wie ulli schon anmerkte, hängt das ganz unten bspw. von verschiedenen Architekturen bei Prozessoren ab. Nicht jeder Prozessor hat den selben Befehlssatz. Schau dir mal die Entwicklung der CPUs in den letzten 20 Jahren an. Da hat sich viel verändert. Wenn du maschinennahen Code schreibst, dann ist das sehr spezialisiert. Nach und nach haben sich Abstraktionsschichten entwickelt um sich von dieser Spezialisierung zu entfernen. Eine Plattformunabhängigkeit kann es daher in dem von dir skizzierten puristischen Sinne gegenwärtig nicht geben. Man braucht mindestens eine Abstraktionsschicht.

    Zitat

    Ich hätte gedacht, der Maschinencode ist der gleiche, muss aber durch die Treiber an/in die Eigenheiten des jeweiligen BS "übersetzt" werden, damit die Hardware anspricht.

    Treiber dienen der Ansteuerung von Hardware, allerdings spielen diese in der Rechner-Theorie nur eine untergeordnete Rolle. Im Wesentlichen muss letztlich alles in gewisser Weise durch eine PU verarbeitet werden und diese PU kann über Maschinencode gesteuert werden. Welche Befehle sie versteht, hängt von der PU ab.

    Zitat

    Ich dachte, das Bit, welches "An" bedeutet, ist dann am Ende der Schlange immer das gleiche, ebenso wie das Bit, welches "Aus" bedeutet, egal, ob nun Win, Linux oder sonst was installiert ist.

    Kleines vereinfachtes Beispiel: eine ALU X kennt die vier Grundrechenarten - welche ausgeführt wird, steuern zwei Bits a und b. Es gilt:
    ab = 00 Addition
    ab = 01 Subtraktion
    ab = 10 Multiplikation
    ab = 11 Division

    Jetzt hast du eine ALU Y die macht es aber so:
    ab = 00 Addition
    ab = 01 Multiplikation
    ab = 10 Subtraktion
    ab = 11 Division

    Somit ist ein Bit 0 oder 1, kann aber bei der Verarbeitung völlig unterschiedliche Auswirkungen haben.

    Zitat

    Insofern wäre es doch rein theoretisch eben doch Möglich, Sprachen oder Systeme zu entwickeln, die echt plattformunabhängig sind und dann auch auf bisher noch fremden BS funktionieren würden?

    Wenn du eine einheitliche Hardware und identische Abstraktionschichten/Schnittstellen voraussetzt, dann würde dies funktionieren. Aber der status quo gibt das nicht her.

    Daher halte ich eine Abstraktionsschicht wie eine RE durchaus für eine geeignetes, legitimes Mittel, um die Kosten für die Software-Entwicklung zu reduzieren.

  • Ich bedanke mich bei allen, die sich die Mühe gemacht haben und auf meine Frage mit sehr guten Ratschlägen geantwortet haben.Ein besonders DANKE an "SIMON1983". Ich habe dieses Forum seit Mai 2009 nicht mehr besucht da ich keine größeren Probleme hatte. So bemerkte ich nicht das ich noch zahlreiche Tips auf meine Frage erhalten habe, die ich erst heute 03.10.2010 zum erstenmal gesehen und gelesen habe.

    Vielen Dank an alle
    Harry 44