2010-07-02 3 views
6

Das Simulation Tool, das ich in den letzten paar Jahren entwickelt habe, Pflücken, ist in C++ geschrieben und derzeit ein tcl interpretierte Front-End hat. Es wurde so geschrieben, dass es entweder in einer interaktiven Shell ausgeführt werden kann oder indem eine Eingabedatei übergeben wird. In beiden Fällen wird die Eingabedatei in tcl geschrieben (mit vielen zusätzlichen simulationsspezifischen Befehlen, die ich hinzugefügt habe). Dies ermöglicht recht leistungsfähige Eingabedateien (z. B. wenn monte-carlo-Sims ausgeführt werden, können zufällige Verteilungen als tcl-Prozeduren direkt in der Eingabedatei programmiert werden).ein Front-End/Interpreter für eine wissenschaftliche Code

Leider finde ich, dass der tcl-Interpreter etwas eingeschränkt wird immer im Vergleich zu dem, was modernere interpretierten Sprachen zu bieten haben, und seine Syntax scheint ein wenig obskur. Da die Rechenmaschine als Bibliothek mit einem c-kompatibelen API geschrieben wurde, soll es einfach sein, alternativen Frontends zu schreiben, und ich denke an einen neuen Dolmetscher zu bewegen, jedoch bin ich die Auswahl ein bisschen einer Zeit, die (meist weil ich keine bedeutende Erfahrung mit vielen interpretierten Sprachen habe). Die Optionen, die ich begonnen haben, zu erforschen sind wie folgt:

Rest mit tcl:
Pro:
- Keine Notwendigkeit, den vorhandenen Code zu ändern.
- Vorhandene Eingabedateien bleiben gleich. (Obwohl ich wahrscheinlich das tcl vordere Ende als Option halten würde)
- Mature Sprache mit vielen Unterstützung der Gemeinschaft.
Nachteile:
- Gefühl begrenzt durch die Sprachsyntax.
- Erhalten von Beschwerden von Benutzern über die Schwierigkeit des Erlernens von Tcl.

Python:
Vorteile:
- Moderne Interpreter, bekannt ziemlich effizient.
- Große, aktive Gemeinschaft.
- Bekannte wissenschaftliche und mathematische Module wie scipy.
- Häufig in der akademischen Scientific/Engineering Community (typische Nutzer von meinem Code) verwendete
Nachteile:
- ich habe es nie benutzt und somit Zeit, um die Sprache (dies ist auch ein Profi, wie ich lernen würde habe die Bedeutung gewesen python seit geraumer Zeit)
zu lernen - Strenge Formatierung der Eingabedateien (Einzüge, etc ..)

Matlab:
Vorteile:
- Sehr Macht und weit verbreitete mathematisches Werkzeug
- Leistungsstarke integrierte Visua Lokalisierung/Plotting.
- Extensible, durch Community-Code vorgelegt, als auch kommerzielle Toolbox.
- Viele in Wissenschaft/Technik Akademia ist vertraut und komfortabel mit Matlab.
Nachteile:
- Kann nicht als ausführbare Datei verteilt werden - müsste ein Add-on/Toolbox sein.
- Würde bedürfen der Matlab-Compiler (was teuer ist) (?).
- Benötigt Matlab, die auch teuer ist.

Diese Vor-und Nachteile sind, was ich in der Lage, zu kommen, obwohl ich sehr wenig Erfahrung mit interpretierten Sprachen im Allgemeinen habe.Ich würde gerne irgendwelche Gedanken zu den beiden Dolmetschern hören, die ich hier vorgeschlagen habe, wenn diese aufgeführten Pros/Contras legitim sind, und an alle anderen Interpreten, an die ich nicht gedacht habe (zB - wäre das für so etwas angemessen? Lua ?). Erfahrung mit der Einbettung eines Interpreters in Ihren Code ist definitiv ein Plus!

+0

CoreMaster2? Klingt wie ein Code, den eine andere Abteilung in meiner Firma entwickelt. – Dave

+0

Nein, es ist ein akademischer Fluss durch poröse Medien-Simulator, der meist von Absolventen und Post-Docs in der Forschungsgruppe, die ich bin, verwendet wird. – MarkD

+0

Ich würde Python nicht als "effizient" bezeichnen. Python-Code ist ziemlich ineffizient, und das Zahlen-Crunching wird normalerweise durch C-Code ausgeführt, auf den über eine Python-API zugegriffen wird. Ich benutze es trotzdem, weil es einfach zu einfach ist. –

Antwort

5

Ich war ein starker Tcl/Tk-Befürworter von der Vorveröffentlichung, bis ich ein größeres Projekt damit machte und fand, wie unhaltbar es ist. Leider, da Prototypen in Tcl so einfach sind, enden Sie mit "einmaligen" Skripten, die ein eigenes Leben führen.

Nachdem ich Python in den letzten Monaten adoptiert habe, finde ich es alles, was Tcl versprochen hat und noch viel mehr. Wie viele Python-Veteranen Ihnen sagen können, ist die Quelleneinrückung höchstens für die erste Stunde störend und scheint dann nicht hinderlich, sondern affirmativ hilfreich zu sein. Übrigens wurde Tcl's Autor, John Ousterhout, abwechselnd gelobt und geschwenkt, weil er eine Sprache schrieb, die die One True Brace Style auf Tcl-Codierer zwang (ich war 1TBS, also war es in Ordnung).

Die einzigen Tcl-Konstrukte, die nicht gut von Python behandelt werden, sind willkürlich eval "${prefix}${command} arg" Konstrukte, die nicht ohnehin in Tcl verwendet werden sollen, aber, und die uplevel Typ Aussagen (die eine nette Idee, waren aber für einigen haarigen Code gemacht). In der Tat, Python fühlt sich ein wenig antagonistisch gegenüber dynamischen eval, aber ich denke, das ist eine gute Sache. Leider muss ich noch eine Sprache mitnehmen, die sowohl die GUI als auch Tcl/Tk umfasst. Tkinter macht den Job in Python, aber es tut weh.

Ich kann überhaupt nicht mit Matlab sprechen.

Mit ein paar Monaten von Python unter meinem Gürtel würde ich fast sicher jedes Tcl-Programm portieren, das aus Gründen der Vernunft in Python weiterentwickelt wird.

+0

"Mit ein paar Monaten Python würde ich fast sicher jedes Tcl-Programm portieren, das gerade in Python weiterentwickelt wird ..." Ist das ein Angebot? ;) Im Ernst, es sieht so aus, als hätte Python einiges zu bieten, und da wir eine neue Post-Doc Verbindung haben, die ziemlich vertraut damit ist, sieht es ziemlich attraktiv aus. Danke, dass du deine Perspektive teilst - es ist definitiv hilfreich! – MarkD

+1

Als Kontrapunkt habe ich mit großen kommerziellen Projekten mit Tcl gearbeitet und festgestellt, dass es extrem wartbar und skalierbar ist. Meiner Erfahrung nach sind diese beiden eher ein Faktor des Programmierers oder Teams als die Sprache. –

+1

Ich bin seit 15 Jahren in der Tcl-Community und erinnere mich nicht an jede Anhörung, die John Ousterhout gemacht hat, weil er "eine Sprache schrieb, die den One True Brace Style auf Tcl-Codern zwang", aber vielleicht habe ich einfach nicht aufgepasst. Sicher, manche Leute mögen es nicht, aber jeden anderen Stil und es wäre nicht Tcl. Es ist eine Funktion, kein Fehler. –

3

Haben Sie überlegt, Octave zu verwenden? Soweit ich weiß, ist es fast ein Ersatz für Matlab. Dadurch können Sie Matlab für diejenigen unterstützen, die es haben, und eine kostenlose Alternative für diejenigen, die es nicht haben. Da das "Fleisch" Ihres Programms anscheinend in einer anderen Sprache geschrieben ist, scheinen die Leistungsaspekte nicht so wichtig zu sein wie die Bereitstellung einer Umgebung mit Plot- und Visualisierungsfähigkeiten, plattformübergreifend, hat eine große Benutzerbasis und in eine Sprache, die fast jeder in der Wissenschaft und/oder in der Modellierung von Fluidströmungen wahrscheinlich bereits kennt. Matlab/Octave kann potenziell alle haben.

+0

Ich hatte so eine schreckliche Erfahrung mit der Oktave (vor Jahren und Jahren), dass ich nicht einmal daran gedacht hatte. So gesehen, macht es auf jeden Fall Sinn als Option. Ich frage mich, wie ähnlich die API für die Erweiterung der von Matlab ist? – MarkD

+0

HI Mark, ich habe es auch seit Jahren nicht mehr benutzt und war nicht beeindruckt, als ich es ursprünglich benutzt habe. Ich arbeitete letzte Woche mit einem EE-Professor zusammen: Er hatte einen vollständigen, rein in Octave geschriebenen elektromagnetischen Tomographie-Code, und er lief sehr schnell und brachte mich wirklich dazu, darüber nachzudenken, ihn noch einmal anzusehen. Ich weiß nicht, wo Octave in Bezug auf die Integration anderer Sprachen steht, so wie Matlab es mit Mex macht, aber etwas Googeln zeigt in diesem Bereich ein wenig Erfolg. – reso

+1

Gut zu hören, dass es in den letzten Jahren einen langen Weg gegangen ist. Ich werde es auf jeden Fall nochmal versuchen müssen. – MarkD

0

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

Ich dachte ernsthaft über Matlab/Octave nach, aber beim Lesen der Octave-API und Matlab-API sind sie so unterschiedlich, dass ich für jedes einzelne Interface eigene Interfaces erstellen müsste (oder sehr kreativ mit Makros werden). Mit Python habe ich eine einzige, einfacher zu wartende Codebasis für das Frontend, und sie wird von fast allen verwendet, die wir kennen. Danke für die Tipps/Feedback alle!

Verwandte Themen