我在过去几年中开发的模拟工具是用C ++编写的,目前有一个tcl解释的前端。编写它可以在交互式shell中运行,也可以通过传递输入文件。无论哪种方式,输入文件都是用tcl编写的(我添加了许多其他特定于仿真的命令)。这允许非常强大的输入文件(例如,当运行monte-carlo sims时,随机分布可以直接在输入文件中编程为tcl过程)。
不幸的是,我发现与更现代的解释语言相比,tcl解释器变得有限,而且它的语法似乎有点神秘。由于计算引擎被编写为具有c兼容API的库,因此编写替代前端应该很简单,而我正在考虑转移到新的解释器,但是我有一点时间选择(主要是因为我没有很多解释语言的经验)。我开始探索的选项如下:
保留tcl:
优点:
- 无需更改现有代码
- 现有输入文件保持不变。 (虽然我可能会保留tcl前端作为选项)
- 成熟的语言,有很多社区支持
缺点:
- 感觉受语言语法的限制。
- 收到用户对学习难度的投诉。
的Python:
优点:
- 现代翻译,已知效率很高。
- 大型,活跃的社区
- 众所周知的科学和数学模块,如scipy
- 常用于学术科学/工程界(我的代码的典型用户)
缺点:
- 我从来没有使用它,因此需要时间来学习语言(这也是一个专业人士,因为我已经有一段时间学习python的意思了)
- 严格格式化输入文件(缩进等)。
Matlab的:
优点:
- 非常省电和广泛使用的数学工具
- 强大的内置可视化/绘图
- 可扩展,通过社区提交的代码,以及商业工具箱
- 科学/工程学院的许多人都熟悉并熟悉matlab
缺点:
- 无法作为可执行文件分发 - 需要是附加组件/工具箱
- 需要(?)matlab编译器(这是pricy)
- 需要Matlab,这也很昂贵。
这些优点和缺点是我能够想到的,尽管我对解释语言的总体经验很少。我很想听到我在这里提出的解释器的任何想法,如果列出的这些优点/缺点是合法的,以及我没有想过的任何其他解释器(例如,php是否适合这样的事情?lua ?)。在代码中嵌入解释器的第一手经验绝对是一个优势!
答案 0 :(得分:5)
我是预先发布的强大的Tcl / Tk支持者,直到我用它做了一个大的项目,发现它是多么难以维护。不幸的是,由于原型在Tcl中非常容易,你最终会使用“一次性”脚本来承担自己的生活。
在过去的几个月中采用了Python,我发现它是Tcl所承诺的全部内容。正如许多Python退伍军人可以告诉你的那样,源缩进最多只是第一个小时的麻烦,然后它似乎不是一个障碍,但肯定有帮助。顺便提一下,Tcl的作者John Ousterhout因为编写了一种迫使One True Brace Style使用Tcl编码器的语言而受到赞扬和反对(我是1TBS所以我很好)。
Python没有很好处理的唯一Tcl构造是任意eval "${prefix}${command} arg"
构造,不应该在Tcl中使用但是和uplevel
类型语句(这是个好主意但是为一些毛茸茸的代码而制作)。事实上,Python对动态eval
感到有点敌对,但我认为这是一件好事。不幸的是,我还没有使用一种语言来接受它的GUI以及Tcl / Tk; Tkinter在Python中完成了这项工作但却很痛苦。
我根本不能和Matlab说话。
有了几个月的Python,我几乎肯定会将正在开发中的任何Tcl程序移植到Python中,以达到理智的目的。
答案 1 :(得分:3)
你考虑过使用Octave吗?从我收集到的内容来看,它几乎是matlab大部分内容的替代品。这可能允许您为拥有它的人支持matlab,并为那些没有它的人提供免费替代方案。由于您的程序的“肉”似乎是用另一种语言编写的,因此性能考虑因素似乎不如提供具有以下特性的环境那样重要:绘图和可视化功能,跨平台,具有庞大的用户群,以及几乎所有学术界和/或模型流体流动的人都可能已经知道这种语言。 Matlab / Octave可能具备所有这些功能。
答案 2 :(得分:0)
好吧,除非有任何其他建议,我得出的最终答案是使用Python。
我认真考虑过matlab / octave,但是在阅读octave API和matlab API时,它们的不同之处在于我需要为每个API构建单独的接口(或者用宏来创造非常有创意的接口)。使用python,我最终会为前端提供一个更容易维护的代码库,并且几乎我们所知道的每个人都会使用它。感谢大家的提示/反馈!