【发布时间】:2010-07-02 16:58:27
【问题描述】:
我在过去几年开发的模拟工具是用 C++ 编写的,目前有一个 tcl 解释的前端。它被编写成可以在交互式 shell 中运行,也可以通过传递输入文件来运行。无论哪种方式,输入文件都是用 tcl 编写的(我添加了许多其他特定于仿真的命令)。这允许非常强大的输入文件(例如,当运行 monte-carlo sims 时,可以直接在输入文件中将随机分布编程为 tcl 程序)。
不幸的是,我发现 tcl 解释器与更现代的解释语言所提供的相比变得有些受限,而且它的语法似乎有点神秘。由于计算引擎是作为具有 c 兼容 API 的库编写的,因此编写替代前端应该很简单,我正在考虑转向新的解释器,但是我有一点时间选择(主要是因为我对许多解释语言没有丰富的经验)。我已经开始探索的选项如下:
留在 tcl:
优点:
- 无需更改现有代码。
- 现有的输入文件保持不变。 (虽然我可能会保留 tcl 前端作为选项)
- 拥有大量社区支持的成熟语言。
缺点:
- 感觉受到语言语法的限制。
- 收到用户抱怨学习 tcl 的难度。
Python:
优点:
- 现代口译员,效率很高。
- 大型、活跃的社区。
- 著名的科学和数学模块,例如 scipy。
- 常用于学术科学/工程社区(我的代码的典型用户)
缺点:
- 我从未使用过它,因此需要时间来学习这门语言(这也是一个专业人士,因为我一直想学习 python)
- 输入文件的严格格式(缩进等)
Matlab:
优点:
- 非常强大且广泛使用的数学工具
- 强大的内置可视化/绘图。
- 可扩展,通过社区提交的代码以及商业工具箱。
- 科学/工程学术界的许多人都熟悉并熟悉 matlab。
缺点:
- 不能作为可执行文件分发 - 需要是附加组件/工具箱。
- 需要(?)matlab 编译器(价格昂贵)。
- 需要 Matlab,也很贵。
这些优点和缺点是我能够想出的,尽管我对一般解释语言的经验很少。我很想听听我在这里提出的解释器的任何想法,如果列出的这些优点/缺点是合法的,以及我没有想到的任何其他解释器(例如,php 是否适合这样的事情?lua ?)。在代码中嵌入解释器的第一手经验绝对是加分项!
【问题讨论】:
-
CoreMaster2?听起来就像我公司的另一个部门开发的代码。
-
不,这是一个通过多孔介质模拟器的学术流程,主要由我所在研究小组的研究生和博士后使用。
-
我不会将 Python 称为“高效”。 Python 代码效率相当低,数字运算通常由通过 Python API 访问的 C 代码完成 :) 不过我仍然使用它,因为它太简单了。
-
@Matthieu M.- 我想我应该澄清一下 - Python 似乎具有执行科学计算的高效模块(我认为这是一个公平的评估)。
-
@Juan:我最终选择了 Python。具体来说,我使用 boost::python 将 C++ 代码与 python 解释器集成。
标签: c++ python matlab tcl interpreter