Diese Frage mag vielleicht nicht wirklich Haskell-spezifisch sein, aber es betrifft eine leichte Belästigung, dass ich mit einer bestimmten Programmieraufgabe konfrontiert bin.
Ich habe ein Programm in Haskell geschrieben, das für die Art des Problems, das ich lösen möchte, meist universell ist, aber zwei abhängige Komponenten enthält: eine Laufzeitschätzfunktion für ein Skript, die auf Testläufen bei einem bestimmten Benchmark berechnet wird und eine Dateinamenskonvertierungsfunktion, die auf das Benennungsschema der Dateien zugeschnitten ist, mit denen ich gearbeitet habe. Natürlich, wenn ich das Skript mit anderen Leistungen als dem Benchmark verwenden möchte, oder ich finde, dass die Schätzungen zu konservativ sind, würde ich gerne die Funktion ändern, die zur Schätzung der Laufzeit verwendet wird, und ebenso würde ich gerne dazu in der Lage sein Ändern Sie die Dateinamen-Konvertierungsfunktion, wenn Sie mit verschiedenen Dateien mit unterschiedlichen Namensschemata arbeiten müssen.
Auf dem (Remote-) Computer, auf dem ich meine Skripts ausführe, ist jedoch GHC oder Runhaskell nicht installiert. Daher muss ich den Code von meinem lokalen Computer aus ändern, kompilieren und erneut hochladen ein Streit. Meine Frage ist, gibt es eine einfache Möglichkeit, Änderungen in einigen Komponenten meines Codes zu implementieren, ohne neu zu kompilieren, damit die Änderungen zum Zeitpunkt des Anrufs widergespiegelt werden?
Ich entschuldige mich, wenn meine Beschreibung vage ist, und habe die blutigen Details unten eingefügt, da ich meine Frage nicht mit unnötigen Details von Anfang an überfluten möchte, sollten sich die Details als unnötig erweisen.
Ich schreibe diesen Code in Haskell hauptsächlich, weil das die Sprache ist, in der ich am besten weiß, wie man die Methoden implementiert; Während ich verstehe, dass andere Sprachen portabler sein können, bin ich mit anderen Sprachen nicht ausreichend vertraut, um dies zu implementieren, ohne viel Dokumentation lesen zu müssen und mehrere Revisionen durchlaufen zu müssen, um es zum Laufen zu bringen. Wenn das Erreichen der Flexibilität, die ich mit Haskell erreichen möchte, unpraktisch ist, kann ich das schätzen, aber ich würde eher wissen, dass Haskell es nicht tun kann, als Vorschläge anderer Sprachen zu erhalten, die dies können.
Ich schreibe Code, um unabhängige Jobs auf einem Load-Sharing-Cluster auszuführen, und deshalb möchte ich die für einen bestimmten Job benötigte Zeit am genauesten abschätzen, ohne zu scheitern und den Job zu beenden und Schießen und dadurch die Priorität der Jobs senken. Ich basiere meine Zeitschätzung auf der Größe der Eingaben für das Job-Programm, und ich habe genügend reale Daten gesammelt, um eine ungefähre quadratische Beziehung zwischen Größe und Zeit herzuleiten.
Die Art und Weise, in der ich derzeit Zeitschätzungen zugebe und damit eine Jobreihenfolge für die Eingaben festlege, besteht darin, die Ausgabe von du
mit einem Haskell-Skript zu analysieren, eine Berechnung durchzuführen und die Zeitergebnisse in eine neue Datei zu schreiben , die dann vom Job-Zuweisungsskript in einer Schleife gelesen wird.
Der Job wird für gepaarte Dateien ausgeführt, die einen gemeinsamen Namen bis zu einem bestimmten Punkt haben, wobei das letzte gemeinsame Element, das ich behalten möchte, ein 's' ist, mit keinem weiteren 's' Zeichen in beiden Namen auf. Deshalb durchquere ich die Namen rückwärts und lasse sie fallen, bis ich ein 's' erreiche. Mein Code ist unten enthalten. Es ist liberal mit Kommentaren, die helfen oder verwirren könnten. Einige von ihnen sind sehr spezifisch für die Aufgabe, mit der ich arbeite.
%Vor%Ich glaube nicht, dass es eine klare Lösung für Ihr Problem gibt.
Ohne einen Interpreter oder Compiler auf dem Remotecomputer ist es nicht möglich, Ihre Haskell-Quelle auf diesem Computer zu ändern und sie dann in ein maschinenlesbares Formular zu konvertieren.
Wie andere bereits gesagt haben, könnten Sie möglicherweise Konfigurationsdateien oder Befehlszeilenoptionen implementieren, mit denen zu ändernde Daten zur Laufzeit angegeben werden können.
Oder, wenn Ihr Remote-Computer gcc
installiert hat, können Sie GHC Ihren Haskell-Code auf Ihrem lokalen Computer in C kompilieren lassen, ihn auf den Remote-Computer übertragen und versuchen, den Code zu übersetzen. und Änderungen am C-Code vornehmen und auf dem Remote-Rechner neu kompilieren.
Wenn GHC zu schwer ist, um es zu installieren, nhc ( Ссылка ) und Umarmungen ( Ссылка ) sind beide klassische Haskell-Systeme, die seit einiger Zeit nicht aktiv entwickelt wurden, aber soweit ich weiß, immer noch funktionstüchtig sind. Sie haben kleine Binärdateien, und Sie können eine oder beide verwenden, vorausgesetzt, Sie haben minimale, einfache Abhängigkeiten in Ihrem Code, die alle auch auf solchen Systemen laufen können.
Tags und Links compilation haskell ghc portability