2012-04-07 14 views
2

Ich arbeite durch einen Text auf Scheme-Interpreter (EOPL1). Die meisten Probleme umfassen das Implementieren eines Features oder das Ändern einer vorhandenen Implementierung. Einige der Probleme sind von vorherigen abhängig.Arbeit mit Dolmetschertext - Wie verwalte ich Codeabhängigkeiten zwischen Übungen?

Ich möchte für jedes Problem Arbeitsdolmetscher und Testfälle haben, ohne den gesamten Interpreter für jede Übung kopieren zu müssen. Zuvor habe ich versucht, nur den vorherigen Code zu laden und dann verschiedene Funktionen neu zu definieren, aber das ist schlecht: es ist hässlich und schwer zu sagen, welcher Code gerade geladen ist, es eliminiert keine Codeverdopplung, wenn ich kleine Änderungen an einem Modul mache und es erzeugt Fehler (zB wenn struct Definitionen neu definiert werden). Es wird ein wenig unüberschaubar.

Ich möchte keine monolithische Datei mit vielen #ifdefs oder gleichwertig machen. Ist das ein vernünftiger Anwendungsfall für (sehr viele) VCS-Niederlassungen? Wenn nicht, was soll ich tun?

(Entschuldigt, wenn die Tags für diese Frage nicht geeignet sind.)

+0

Da ich kein Experte für Versionskontrolle bin, werde ich keine vollständige Antwort posten, aber es scheint ein perfekter Anwendungsfall für einen DVCS mit leichtem Verzweigen zu sein. Git erledigt das gut, aber es hat eine ziemlich steile Lernkurve (auf der ich immer noch stehe - daher eher der Kommentar als eine vollständige Antwort). Ich bin mir sicher, dass ein Git-Experte eine vollere Antwort geben kann. –

Antwort

0

Sie keine Zweige benötigen sollten. Einfache Versionskontrolle ist alles was Sie brauchen. Für diese Art der Arbeit empfehle ich Mercurial. Für mich ist das die einfachste und am einfachsten zu verwendende Versionskontrolle. Alternativen wären git, perforce oder subversion. (Offensichtlich gibt es viele andere)

Fangen Sie gerade an, Dinge hinzuzufügen, wie Sie sie brauchen. Es wird Überarbeitungen für Sie verfolgen. Sie können sicherlich Verzweigungen erstellen, wenn Sie möchten, oder Sie können einfach Dinge für verschiedene Übungen markieren. Es gibt viele mögliche Arbeitsabläufe, die funktionieren sollten. Obwohl fast alles besser ist als das, was Sie jetzt tun.

+0

Viele der Erweiterungen schließen sich gegenseitig aus, so dass es nicht möglich ist, nur auf dem Interpreter-Code aufzubauen. Da ich den Basis-Interpreter nicht oft kopieren/einfügen möchte, habe ich mich über Zweige Gedanken gemacht. Wie löst man das ohne Branchen? – Fixnum

+0

Nun, ich bin mir nicht sicher, aber wenn Zweige für Sie sinnvoll sind, ist es wahrscheinlich der richtige Ansatz. Ich habe noch nie einen Plan geschrieben, daher bin ich nicht vertraut mit dem, was Sie tun wollen. – jgritty

+0

Außerdem mag ich [bitbucket] (https://bitbucket.org/) sehr, um den Code zu behalten, und [github] (https://github.com/) ist eine andere Alternative, wenn Sie Ihren Code verfügbar haben möchten irgendwo. – jgritty

Verwandte Themen