6 Stimmen

Auswahl eines Frontends/Interpreters für einen wissenschaftlichen Code

Das Simulationsprogramm, das ich in den letzten Jahren entwickelt habe, ist in C++ geschrieben und verfügt derzeit über ein tcl-interpretiertes Front-End. Es wurde so geschrieben, dass es entweder in einer interaktiven Shell oder durch Übergabe einer Eingabedatei ausgeführt werden kann. In beiden Fällen ist die Eingabedatei in tcl geschrieben (mit vielen zusätzlichen simulations-spezifischen Befehlen, die ich hinzugefügt habe). Dies ermöglicht recht leistungsfähige Eingabedateien (z.B. können bei Monte-Carlo-Simulationen Zufallsverteilungen als tcl-Prozeduren direkt in der Eingabedatei programmiert werden).

Leider stelle ich fest, dass der tcl-Interpreter im Vergleich zu moderneren interpretierten Sprachen etwas eingeschränkt ist, und seine Syntax erscheint mir ein wenig obskur. Da die Rechenmaschine als Bibliothek mit einer c-kompatiblen API geschrieben wurde, sollte es ein Leichtes sein, alternative Front-Ends zu schreiben, und ich denke darüber nach, auf einen neuen Interpreter umzusteigen, allerdings fällt mir die Auswahl etwas schwer (vor allem, weil ich mit vielen interpretierten Sprachen nicht viel Erfahrung habe). Die Optionen, die ich zu erkunden begonnen habe, sind wie folgt:

Bleiben Sie bei tcl:
Vorteile:
- Der bestehende Code muss nicht geändert werden.
- Vorhandene Eingabedateien bleiben unverändert. (obwohl ich wahrscheinlich das tcl-Frontend als Option beibehalten würde)
- Ausgereifte Sprache mit viel Unterstützung der Gemeinschaft.
Nachteile:
- Sie fühlen sich durch die Syntax der Sprache eingeschränkt.
- Beschwerden von Benutzern über die Schwierigkeit, tcl zu lernen.

Python:
Vorteile:
- Moderner Interpreter, der als sehr effizient bekannt ist.
- Große, aktive Gemeinschaft.
- Bekannte wissenschaftliche und mathematische Module, wie z.B. scipy.
- Üblicherweise in der akademischen Wissenschafts-/Ingenieurgemeinschaft verwendet (typische Nutzer meines Codes)
Nachteile:
- Ich habe es noch nie benutzt und würde daher Zeit brauchen, um die Sprache zu lernen (das ist auch ein Vorteil, denn ich wollte schon seit einiger Zeit Python lernen).
- Strenge Formatierung der Eingabedateien (Einrückung, etc..)

Matlab:
Vorteile:
- Sehr leistungsfähiges und weit verbreitetes mathematisches Werkzeug
- Leistungsstarke integrierte Visualisierung/Plotting.
- Erweiterbar durch von der Gemeinschaft eingereichten Code sowie durch kommerzielle Toolboxen.
- Viele Akademiker aus dem Bereich Wissenschaft/Ingenieurwesen sind mit Matlab vertraut und können damit umgehen.
Nachteile:
- Kann nicht als ausführbare Datei verteilt werden - müsste ein Add-on/Toolbox sein.
- Dazu wäre der (teure) Matlab-Compiler erforderlich.
- Erfordert Matlab, das ebenfalls sehr teuer ist.

Diese Vor- und Nachteile sind das, was ich bisher herausfinden konnte, obwohl ich nur sehr wenig Erfahrung mit interpretierten Sprachen im Allgemeinen habe. Ich würde gerne Meinungen sowohl zu den Interpretern, die ich hier vorgeschlagen habe, als auch zu anderen Interpretern, an die ich noch nicht gedacht habe, hören (z.B. wäre php für so etwas geeignet? lua?). Erfahrungen aus erster Hand mit der Einbettung eines Interpreters in Ihren Code sind definitiv von Vorteil!

3voto

reso Punkte 183

Haben Sie die Verwendung von Octave in Betracht gezogen? Soweit ich weiß, ist es fast ein Ersatz für einen Großteil von Matlab. Dies könnte es Ihnen ermöglichen, Matlab für diejenigen zu unterstützen, die es haben, und eine kostenlose Alternative für diejenigen, die es nicht haben. Da das "Fleisch" Ihres Programms in einer anderen Sprache geschrieben zu sein scheint, scheinen die Leistungsüberlegungen nicht so wichtig zu sein wie die Bereitstellung einer Umgebung, die über Plot- und Visualisierungsfunktionen verfügt, plattformübergreifend ist, eine große Benutzerbasis hat und in einer Sprache geschrieben ist, die fast jeder in der Wissenschaft und/oder mit der Modellierung von Strömungen befasst ist, wahrscheinlich bereits kennt. Matlab/Octave kann potentiell alle diese Eigenschaften aufweisen.

0voto

MarkD Punkte 4664

Nun, wenn es keine anderen Vorschläge gibt, ist die endgültige Antwort, die ich gefunden habe, Python zu verwenden.

Ich habe ernsthaft Matlab/Octave in Erwägung gezogen, aber wenn ich die Octave-API und die Matlab-API lese, sind sie so unterschiedlich, dass ich für jede Schnittstelle eine eigene entwickeln müsste (oder sehr kreativ mit Makros werden müsste). Mit Python habe ich eine einzige, leichter zu pflegende Codebasis für das Frontend, und sie wird von fast allen, die wir kennen, verwendet. Vielen Dank für die Tipps/Feedback an alle!

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X