Portierung

Im Softwareentwicklung, Portierung ist der Anpassungsprozess Software zum Zweck der Erreichung einer Form der Ausführung in a Computerumgebung Dies unterscheid Zentralprozessor, Betriebssystem oder Dritte Bibliothek). Der Begriff wird auch verwendet, wenn Software/Hardware geändert wird, um sie in verschiedenen Umgebungen verwendbar zu machen.[1][2]

Software ist tragbar Wenn die Kosten für das Portieren auf einer neuen Plattform erheblich geringer sind als die Kosten für das Schreiben von Grund auf neu. Je niedriger die Kosten für die Portierung von Software im Vergleich zu den Implementierungskosten sind, desto tragbarer wird es als tragbarer.

Etymologie

Der Begriff "Port" wird vom Latein abgeleitet Portāre, bedeutet "zu tragen".[3] Wenn Code nicht mit einem bestimmten kompatibel ist Betriebssystem oder die ArchitekturDer Code muss in das neue System "übertragen" werden.

Der Begriff wird im Allgemeinen nicht auf den Prozess der Anpassung von Software angewendet, um mit weniger Speicher auf derselben CPU und dem gleichen Betriebssystem auszuführen, und er wird auch nicht auf die Umschreibung von Quellcode in einem anderen angewendet Sprache (d. h. Sprachumwandlung oder Übersetzung).

Softwareentwickler behaupten häufig, dass die von ihnen geschriebene Software ist tragbar, was bedeutet, dass wenig Anstrengungen erforderlich sind, um es an eine neue Umgebung anzupassen. Die tatsächlich benötigte Anstrengung hängt von mehreren Faktoren ab, einschließlich des Ausmaßes, in dem die ursprüngliche Umgebung (die Quellplattform) unterscheidet sich von der neuen Umgebung (die Zielplattform) die Erfahrung der ursprünglichen Autoren, welche wissen welche Programmiersprache Es ist unwahrscheinlich, dass Konstrukte und Bibliotheksanrufe von Drittanbietern tragbar sind, und die Menge an Aufwand, die von den ursprünglichen Autoren in die Verwendung von tragbaren Konstrukten investiert werden (plattformspezifische Konstrukte bieten häufig eine billigere Lösung).

Geschichte

Die Anzahl der deutlich unterschiedlichen CPUs und Betriebssysteme, die heute auf dem Desktop verwendet werden, ist viel kleiner als in der Vergangenheit. Die Dominanz der x86 die Architektur bedeutet, dass die meisten Desktop -Software niemals auf eine andere CPU portiert werden. In demselben Markt wurde die Auswahl der Betriebssysteme effektiv auf drei reduziert: Microsoft Windows, Mac OS, und Linux. Jedoch in der eingebettete Systeme und Handy, Mobiltelefon Märkte, Portabilität bleibt ein wesentliches Problem mit dem ARM eine weit verbreitete Alternative sein.

Internationale Standards, wie sie, die von der verkündet wurden ISOErleichtert die Portierung erheblich, indem Sie Details der Computerumgebung so angeben, dass die Unterschiede zwischen verschiedenen Standards-Konformieren verringert werden Plattformen. Das Schreiben von Software, die innerhalb der von diesen Standards angegebenen Grenzen bleibt, ist ein praktischer, wenn auch nicht trivialer Anstrengung. Portierung eines solchen Programms zwischen zwei Standards-konformen Plattformen (wie z. Pox.1) kann nur eine Frage des Ladens des Quellcodes sein und neu kompilieren Es auf der neuen Plattform. Praktiker stellen jedoch häufig fest, dass aufgrund subtiler Plattformunterschiede verschiedene kleinere Korrekturen erforderlich sind. Die meisten Standards leiden unter "Grauzonen", bei denen Unterschiede in der Interpretation von Standards zu kleinen Variationen von Plattform zu Plattform führen.

Es gibt auch eine immer größere Anzahl von Werkzeugen, um das Porting zu erleichtern, wie die GNU Compiler -Sammlung, was konsistente Programmiersprachen auf verschiedenen Plattformen liefert und Autotools, was die Erkennung kleinerer Schwankungen in der Umgebung automatisiert und die Software entsprechend vor der Zusammenstellung anpasst.

Die Compiler für einige hochrangige Programmiersprachen (z.B. Eiffel, Esterel) Gewinnträglichkeit durch Ausgabe von Quellcode in einer anderen hohen Ebene Zwischensprache (wie zum BeispielC) für welche Compiler für viele Plattformen im Allgemeinen verfügbar sind.

Zwei Aktivitäten im Zusammenhang mit (aber anders als) Portierung sind emulieren und Cross-Compiling.

Portierung Compiler

Anstatt direkt in überzusetzen in Maschinensprache, modern Compiler Übersetzen Sie zu einer Maschine unabhängig Zwischencode Um die Portabilität des Compilers zu verbessern und die Designbemühungen zu minimieren. Die Zwischensprache definiert a virtuelle Maschine das kann alle in der geschriebenen Programme ausführen Zwischensprache (Eine Maschine wird durch ihre Sprache definiert und umgekehrt).[4] Die Zwischencode -Anweisungen werden durch a in äquivalente Maschinencodesequenzen übersetzt Code Generator erschaffen ausführbarer Code. Es ist auch möglich, die Generierung von Maschinencode zu überspringen, indem sie tatsächlich eine implementieren Dolmetscher oder Jit für die virtuelle Maschine.[5]

Die Verwendung von Zwischencode verbessert die Portabilität des Compilers, da nur der maschinenabhängige Code (der Interpreter oder der Codegenerator) des Compiler selbst auf die Zielmaschine portiert werden muss. Der Rest des Compilers kann als Zwischencode importiert und dann vom Ported Code Generator oder Interpreter weiter verarbeitet werden, wodurch die Compiler -Software erstellt oder der Zwischencode direkt auf dem Interpreter ausgeführt wird. Der maschinenunabhängige Teil kann auf einer anderen Maschine entwickelt und getestet werden (die Hostmaschine). Dies reduziert die Designbemühungen erheblich, da der maschinenunabhängige Teil nur einmal entwickelt werden muss, um tragbaren Zwischencode zu erstellen.[6]

Ein Dolmetscher ist weniger komplex und daher einfacher zu portieren als ein Codegenerator, da er aufgrund seiner begrenzten Ansicht des Programmcodes nicht in der Lage ist, Code -Optimierungen durchzuführen (er sieht nur eine Anweisung jeweils vor, und Sie benötigen eine Sequenz, um dies zu tun Optimierung). Einige Dolmetscher sind äußerst einfach zu portieren, da sie nur minimale Annahmen über den Anweisungssatz der zugrunde liegenden Hardware treffen. Infolgedessen ist die virtuelle Maschine noch einfacher als die Ziel -CPU.[7]

Das Schreiben der Compilerquellen vollständig in der Programmiersprache, die der Compiler übersetzen soll, macht den folgenden Ansatz, besser bekannt als Compiler Bootstrapping, machbar auf der Zielmaschine:

  1. Portinterpreter portieren. Dies muss codiert werden in Montagecodemit einer bereits vorhandenen Verwendung Assembler auf dem Ziel.
  2. Passen Sie die Quelle des Codegenerators an die neue Maschine an.
  3. Führen Sie die angepasste Quelle mit dem Interpreter mit der Codegeneratorquelle als Eingabe aus. Dadurch wird der Maschinencode für den Codegenerator generiert.

Der schwierige Teil der Codierung der Optimierungsroutinen erfolgt mithilfe der hochrangigen Sprache anstelle der Montagesprache des Ziels.

Nach Angaben der Designer der BCPL Sprache, interpretierter Code (im BCPL -Fall) ist kompakter als der Maschinencode. Typischerweise um den Faktor zwei zu eins. Der interpretierte Code läuft jedoch etwa zehnmal langsamer als kompilierter Code auf demselben Computer.[8]

Die Designer der Java -Programmiersprache Versuchen Sie, die Kompaktheit des interpretierten Code zu nutzen, da möglicherweise ein Java -Programm über das Internet übertragen werden muss, bevor die Ausführung mit dem Ziel beginnen kann Java virtuelle Maschine (JVM).

Portierung von Videospielen

Portierung ist auch der Begriff, der verwendet wird, wenn a Videospiel Entwickelt, um auf einer Plattform zu laufen, sei es ein Arkade, Videospielkonsole, oder persönlicher Computer, wird konvertiert, um auf einer anderen Plattform zu laufen, vielleicht mit einigen geringfügigen Unterschieden.[9] Von Beginn der Videospiele bis in die neunziger Jahre waren "Ports", zu dieser Zeit oft als "Conversions" bezeichnet, oft keine wahren Ports, sondern überarbeitete Versionen der Spiele aufgrund von Einschränkungen verschiedener Systeme. Zum Beispiel das Spiel von 1982 Der Hobbit, ein Textabenteuer, das mit grafischen Bildern erweitert wird, hat deutlich unterschiedliche Grafikstile in der Bandbreite der PCs, für die seine Ports entwickelt wurden.[10] Viele Videospiele des 21. Jahrhunderts werden jedoch mit Software entwickelt (häufig in C ++), die Code für eine oder mehrere Konsolen sowie für einen PC ausgeben können, ohne dass eine tatsächliche Portierung erforderlich ist (stattdessen auf die gemeinsame Portierung einzelner Komponente angewiesen Bibliotheken).[10]

Es war schwierig, Arcade -Spiele auf Heimsysteme mit minderwertiger Hardware zu portieren. Die portierte Version von Pac-Man für die Atari 2600 ließ viele der visuellen Merkmale des ursprünglichen Spiels aus, um den Mangel an auszugleichen Rom Space und die Hardware hatten Probleme, als mehrere Geister auf dem Bildschirm erschienen, und einen flackernden Effekt. Die schlechte Leistung der Atari 2600 Pac-Man wird von einigen Gelehrten als Ursache der Videospielabsturz von 1983.[11]

Viele frühe Ports erlitten erhebliche Probleme mit der Qualitätsqualität, da Computer stark unterschiedlich waren.[12] Richard Garriott angegeben 1984 bei Ursprünge Spielmesse das Herkunftssysteme entwickelte Computerspiele für die Apple II -Serie Zuerst portierte sie zuerst zu Commodore 64 und Atari 8-Bit, weil die letzteren Maschinen ' Sprites und andere hoch entwickelte Funktionen machten sie von ihnen zu Apple "weitaus schwieriger, vielleicht sogar unmöglich".[13] Bewertungen beklagten sich über Häfen, die unter "Apple Conversionentis" litten.[14] Bleiben der "miesen Klang und schwarz-weiß-grün-lila Grafiken";[15][16] nach Garriotts Aussage, wann Dan Bunten fragte "Atari und Commodore -Leute im Publikum, sind Sie mit den Apple -Umschreibungen zufrieden?" Das Publikum rief "Nein!" Garriott antwortete: "[Ansonsten] wird die Apple -Version niemals erledigt. Aus der Sicht eines Verlags ist das nicht Geld."[13]

Andere arbeiteten anders. Ozark Softscapeschrieb zum Beispiel MAULTIER. Für den Atari zuerst, weil es es vorzieht, sich für die fortschrittlichsten Computer zu entwickeln, wodurch die Funktionen bei der Portierung nach Bedarf entfernt oder verändert werden. Eine solche Politik war nicht immer machbar; Bunten erklärte, dass "M.U.L.E. nicht für einen Apfel geschafft werden kann",[12] und dass die Nichtatari-Versionen von Die sieben Goldstädte waren minderwertig.[17] Berechnen Sie! Gazette schrieb 1986, dass das Original normalerweise überlegen war, als er von Atari nach Commodore portierte. Die Qualität der Spiele der Spiele verbesserte sich, als Entwickler Ende 1983 neue Software dafür erstellten, erklärte das Magazin.[18]

Im Portieren Arcade-SpieleDie Begriffe "Arcade Perfect" oder "Arcade genau" wurden häufig verwendet, um zu beschreiben, wie genau das Gameplay, die Grafiken und andere Assets der portedierten Version mit der Arcade -Version übereinstimmten. Viele Arcade -Ports in den frühen 1980er Jahren waren alles andere als Arcade Perfect, da Heimkonsolen und Computer die anspruchsvolle Hardware in Arcade -Spielen fehlten, aber Spiele konnten immer noch das Gameplay annähern. Vor allem, Rauminvasoren auf der Atari VCS wurde die Konsole Killer App Trotz seiner Unterschiede,[19] während der später Pac-Man Hafen war berüchtigt für seine Abweichungen von der Arcade -Version.[20] Arcade-Genauigkeitsspiele wurden ab den neunziger Jahren häufiger, beginnend mit dem Neo Geo System von Snk, das sowohl eine Heimkonsole als auch ein Arcade -System mit fortschrittlicheren Versionen der Haupthardware der Heimkonsole bot. Dies erlaubte nahezu perfekte Spiele, um zu Hause gespielt zu werden. Weitere Konsolen wie die Playstation und Traumbesetzungauch basierend auf Arcade-Hardware, machte Arcade-perfekte Spiele Wirklichkeit.[10]

Ein "Konsolenport" ist ein Spiel, das ursprünglich für eine Konsole vorgenommen wurde, bevor eine identische Version erstellt wurde, die auf a gespielt werden kann persönlicher Computer. Dieser Begriff wurde von der Gaming -Community weit verbreitet. Der Prozess der Portierung eines Spiels von einer Konsole zu einem PC wird aufgrund der höheren Leistungsstufen, die Computer im Allgemeinen nicht genutzt haben, häufig negativ angesehen, was teilweise darauf zurückzuführen ist, dass die Konsolenhardware während ihres Laufs festgelegt wird (wobei Spiele für Konsolenspezifikationen entwickelt werden). Während PCs leistungsfähiger werden, wenn sich die Hardware weiterentwickelt, aber auch aufgrund portierter Spiele, die manchmal für PCs schlecht optimiert oder träge portiert werden. Obwohl allgemein ähnlich, können architektonische Unterschiede bestehen, wie beispielsweise die Verwendung von Einheitlicher Speicher auf einer Konsole.

Siehe auch

Anmerkungen

  1. ^ Whitten, D.E.; Demaine, P.A.D. (März 1975). "Eine Maschine und eine Konfiguration unabhängiger FORTRAN: tragbarer Fortran". IEEE -Transaktionen auf Software -Engineering. SE-1 (1): 111–124. doi:10.1109/tse.1975.6312825. S2CID 16485156.
  2. ^ "Portabilitätsprobleme". .. diskutiert .. Portabilität von .. fortran
  3. ^ "Port, v.2". Oxford English Dictionary (OED online). Oxford University Press. Abgerufen 21. Dezember, 2017. Herkunft: von mehreren Ursprüngen. Teilweise eine Kreditaufnahme aus Französisch. Teilweise eine Kreditaufnahme aus dem Latein. Etymons: Französisch Porter; Latein Portāre. ... 1. trans. Zu tragen, zu tragen oder zu übermitteln; bringen.
  4. ^ Tanenbaum 1984, p. 3. §1.1 Sprachen, Ebenen und virtuelle Maschinen beschreibt die Begriffe und ihre Beziehungen.
  5. ^ Tanenbaum 1984, p. 2. Ch. 1 Einführung erklärt Übersetzung und Interpretation.
  6. ^ Richards & Whitby-Strevens 1984, p. 124. §7.1 Einleitung Erläutert die Kompiler -Portabilität mithilfe des Zwischencode.
  7. ^ Richards & Whitby-Strevens 1984, p. 133. §7.4 Der Bootstrapping -Prozess und IntCode erklärt die Rolle des Intcode -Interpreters.
  8. ^ Richards & Whitby-Strevens 1984, p. 136. §7.4.3 Beispiel gibt eine Beispielübersetzung eines BCPL -Programms in IntCode für den Interpreter.
  9. ^ Wolf, Mark J. P. (2008). "Glossar". Die Explosion der Videospiele: Eine Geschichte von Pong bis PlayStation und darüber hinaus. p. 315. ISBN 978-0-313-33868-7.
  10. ^ a b c Grabarczyk, Pfoten; Aarseth, Espen (2019). "Port oder Konvertierung? Ein ontologischer Rahmen für die Klassifizierung von Spielversionen | Digra Conference 2019". {{}}: Journal zitieren erfordert |journal= (Hilfe)
  11. ^ Nicoll, Benjamin (2015). "Überbrückung der Lücke: Die Neo Geo, die Medien imaginären und die Domestizierung von Arcade -Spielen". Spiele und Kultur. doi:10.1177/1555412015590048. S2CID 147981978.
  12. ^ a b Bunten, Dan (Dezember 1984). "Versand / Erkenntnisse aus der Strategiespieldesign -Front". Computerspielwelt. p. 40. Abgerufen 31. Oktober 2013.
  13. ^ a b "Die CGW Computer Game Conference". Computerspielwelt (Podiumsdiskussion). Oktober 1984. p. 30. Abgerufen 31. Oktober 2013.
  14. ^ Dunnington, Benn; Brown, Mark R.; Malcolm, Tom (Januar - Februar 1987). "64/128 Galerie". Die Info. S. 14–21.
  15. ^ Stanton, Jeffrey; Wells, Robert P.; Rochowansky, Sandra; Mellid, Michael, Hrsg. (1984). Das Addison-Wesley-Buch der Atari-Software. Addison-Wesley. S. 12, 21, 44, 126. ISBN 0-201-16454-x.
  16. ^ Bernstein, Harvey (Mai 1985). "Jenseits von Castle Wolfenstein". Antik. p. 83. Abgerufen 8. Januar 2015.
  17. ^ Bunten, Dan. "Die Spielsammlung". Ozark Softscape M.U.L.E.. Abgerufen 2017-10-04.
  18. ^ Yakal, Kathy (Juni 1986). "Die Entwicklung der Commodore -Grafik". Berechnen Sie! Gazette. S. 34–42. Abgerufen 2019-06-18.
  19. ^ Kent, Steven (2001). Ultimative Geschichte der Videospiele. Drei Flüsse Presse. p. 190. ISBN 0-7615-3643-4.
  20. ^ Kent, Steven (2001). "Der Herbst". Die ultimative Geschichte der Videospiele. Drei Flüsse Presse.S. 237–239. ISBN 978-0-7615-3643-7.

Verweise