Welche Tipps können Sie jemandem geben, der Code portiert?
8
Welchen Rat (Tipps, Techniken, Fallstricke usw.) haben Sie für jemanden, der eine Codebibliothek von einer Sprache in eine andere portiert oder neu schreibt, um in einer anderen Compilerumgebung zu arbeiten?
nicht "portieren" - dh etwas in eine neue Sprache klonen, wobei die Funktionen der Originalsprache erhalten bleiben. Schreiben Sie es vollständig neu, damit es die gleichen Testergebnisse liefert.
S.Lott
@ S.Lott Das habe ich mit "Port" gemeint.
Moshe
1
Was meintest du mit Hafen? Hier ist ein Hinweis. Kommentieren Sie nicht Ihre eigene Frage. Aktualisieren Sie Ihre Frage, um vollständig und kristallklar zu sein. Kommentieren Sie niemals Ihre eigene Frage, weil es Ihre Frage ist. Sie besitzen es und können es perfekt machen. Fühlen Sie sich frei, die Kommentare zu löschen, die einen schwer zu verfolgenden Pfad bilden, wenn Ihr Kommentar davon ausgeht, dass wir wissen, wovon Sie sprechen, mit Worten wie "Das habe ich gemeint". Worauf bezieht sich "das"?
S.Lott
Antworten:
2
Jede Plattform (Sprach- und Systembibliotheken) hat ihre eigene Person. Die Art und Weise, wie ein Ruby-Programmierer seine API entwirft, nutzt die einzigartigen Funktionen und die Kultur, die Ruby zu dem machen, was es ist. Dies unterscheidet sich deutlich von der Art und Weise, wie ein C- oder C ++ - Entwickler seine API entwerfen würde, was sich wiederum von der Art und Weise unterscheidet, wie ein Java- oder C # -Entwickler dies tun würde.
Sie möchten die Ideen von der ursprünglichen Plattform übernehmen und sie in die Konzepte einfügen, die die neue Plattform zu dem machen, was sie ist. Nichts fühlt sich weniger natürlich an als die Verwendung einer Bibliothek, die völlig anders gestaltet ist als die anderen Bibliotheken auf der Plattform. Es gibt eine Reihe von Programmierplattformen, die tatsächlich gut gestaltet und elegant sind. Sie möchten diese Stärken für Ihren Hafen nutzen.
Kennen Sie die nativen Fähigkeiten Ihrer "to" - und "from" -Sprache / Ihres Frameworks.
Ich habe eine Kalenderbibliothek von Javascript auf iOS portiert. iOS hat eine robuste Kalenderklasse, während JavaScript nichts hatte, was mir von Nutzen war. (Ich habe von einem religiösen Kalender auf den Gregorianischen Kalender umgestellt und umgekehrt.)
Ich habe Zeit damit verbracht, die gesamte Bibliothek in Objective-C neu zu schreiben, nur um festzustellen, dass mein Code weitgehend redundant war. (Übrigens, ich habe schlechte Arbeit geleistet und ungenaue Ergebnisse erzielt. Dann trat ich einen Schritt zurück und erkannte meinen Fehler.)
Mehrere zehn Zeilen Konvertierungsmethoden konnten durch etwa sechs Zeilen nativen Framework-Codes ersetzt werden.
Wenn dies ein kritisches Projekt ist (Portierung ist häufig), schreiben Sie einen vollständigen Testplan (idealerweise mit Komponententests in der Zielsprache), bevor Sie jeden Code und das gesamte System portieren.
Es gibt keine Möglichkeit auf der Welt, dass die Portierung beim ersten Versuch 100% genau ist. Sie müssen also im Voraus sicherstellen, dass Sie alles abfangen.
Führen Sie nach Möglichkeit denselben Plan für den ursprünglichen Code aus, da nicht garantiert werden kann, dass er korrekt geschrieben wurde. Ein gleichwertiges Verhalten kann in der Tat von einer falschen Implementierung abhängen.
Erstellen Sie einen Klassendiagramm- / Hierarchiebaum, damit Sie wissen, welchen Sie zuerst portieren müssen. Ordnen Sie die grundlegenden Datentypen zu (int -> Int32?). Machen Sie dasselbe für die Datenstrukturen.
Antworten:
Jede Plattform (Sprach- und Systembibliotheken) hat ihre eigene Person. Die Art und Weise, wie ein Ruby-Programmierer seine API entwirft, nutzt die einzigartigen Funktionen und die Kultur, die Ruby zu dem machen, was es ist. Dies unterscheidet sich deutlich von der Art und Weise, wie ein C- oder C ++ - Entwickler seine API entwerfen würde, was sich wiederum von der Art und Weise unterscheidet, wie ein Java- oder C # -Entwickler dies tun würde.
Sie möchten die Ideen von der ursprünglichen Plattform übernehmen und sie in die Konzepte einfügen, die die neue Plattform zu dem machen, was sie ist. Nichts fühlt sich weniger natürlich an als die Verwendung einer Bibliothek, die völlig anders gestaltet ist als die anderen Bibliotheken auf der Plattform. Es gibt eine Reihe von Programmierplattformen, die tatsächlich gut gestaltet und elegant sind. Sie möchten diese Stärken für Ihren Hafen nutzen.
quelle
Kennen Sie die nativen Fähigkeiten Ihrer "to" - und "from" -Sprache / Ihres Frameworks.
Ich habe eine Kalenderbibliothek von Javascript auf iOS portiert. iOS hat eine robuste Kalenderklasse, während JavaScript nichts hatte, was mir von Nutzen war. (Ich habe von einem religiösen Kalender auf den Gregorianischen Kalender umgestellt und umgekehrt.)
Ich habe Zeit damit verbracht, die gesamte Bibliothek in Objective-C neu zu schreiben, nur um festzustellen, dass mein Code weitgehend redundant war. (Übrigens, ich habe schlechte Arbeit geleistet und ungenaue Ergebnisse erzielt. Dann trat ich einen Schritt zurück und erkannte meinen Fehler.)
Mehrere zehn Zeilen Konvertierungsmethoden konnten durch etwa sechs Zeilen nativen Framework-Codes ersetzt werden.
quelle
Wenn dies ein kritisches Projekt ist (Portierung ist häufig), schreiben Sie einen vollständigen Testplan (idealerweise mit Komponententests in der Zielsprache), bevor Sie jeden Code und das gesamte System portieren.
Es gibt keine Möglichkeit auf der Welt, dass die Portierung beim ersten Versuch 100% genau ist. Sie müssen also im Voraus sicherstellen, dass Sie alles abfangen.
Führen Sie nach Möglichkeit denselben Plan für den ursprünglichen Code aus, da nicht garantiert werden kann, dass er korrekt geschrieben wurde. Ein gleichwertiges Verhalten kann in der Tat von einer falschen Implementierung abhängen.
quelle
-> Konzentrieren Sie sich auf die Funktionalität, nicht auf die Art und Weise, wie sie codiert wurde.
-> Überlegen Sie vor dem Schreiben, da einige Elemente bereits von Sprache, Plattform usw. verarbeitet werden können.
-> Nutzen Sie den Vorteil einer neuen Plattform.
quelle
"Portierung" - wie Sie anscheinend das Wort verwenden - ist nur TDD mit nervigem Legacy-Code.
Machen Sie die Testfälle richtig. Stellen Sie sicher, dass der Legacy-Code die Testfälle besteht.
Verwerfen Sie dann den Legacy-Code.
Schreiben Sie dann neuen Code, der die Testfälle in der neuen Sprache besteht.
quelle
Erstellen Sie einen Klassendiagramm- / Hierarchiebaum, damit Sie wissen, welchen Sie zuerst portieren müssen. Ordnen Sie die grundlegenden Datentypen zu (int -> Int32?). Machen Sie dasselbe für die Datenstrukturen.
quelle