为科学代码挑选前端/口译员

Mar*_*rkD 6 c++ python matlab interpreter tcl

我在过去几年中开发的仿真工具是用C++编写的,目前有一个tcl解释的前端.编写它可以在交互式shell中运行,也可以通过传递输入文件.无论哪种方式,输入文件都是用tcl编写的(我添加了许多其他特定于仿真的命令).这允许非常强大的输入文件(例如,当运行monte-carlo sims时,随机分布可以直接在输入文件中编程为tcl过程).

不幸的是,我发现tcl解释器与现代解释语言提供的内容相比变得有限,而且它的语法似乎有些神秘.由于计算引擎是作为具有c兼容API的库编写的,因此编写替代前端应该很简单,而我正在考虑转移到新的解释器,但是我有一点时间选择(主要是因为我没有很多解释语言的经验).我开始探索的选项如下:

保留tcl:
优点:
- 无需更改现有代码.
- 现有输入文件保持不变.(虽然我可能会将tcl前端作为一个选项)
- 成熟的语言,有很多社区支持.
缺点:
- 感觉受语言语法的限制.
- 从用户那里获得有关学习tcl困难的投诉.

Python:
优点:
- 现代翻译,已知非常有效.
- 庞大,活跃的社区.
- 众所周知的科学和数学模块,如scipy.
- 常用于学术科学/工程界(我的代码的典型用户)
缺点:
- 我从未使用它,因此需要时间来学习语言(这也是专业人士,因为我一直有意学习python很长一段时间)
- 严格格式化输入文件(缩进等..)

Matlab:
优点:
- 非常强大和广泛使用的数学工具
- 强大的内置可视化/绘图.
- 可扩展,通过社区提交的代码,以及商业工具箱.
- 科学/工程学院的许多人都熟悉并熟悉matlab.
缺点:
- 不能作为可执行文件分发 - 需要是一个附加/工具箱.
- 需要(?)matlab编译器(这是pricy).
- 需要Matlab,这也很昂贵.

这些优点和缺点是我能够提出的,尽管我对解释语言的总体经验很少.我很想听到我在这里提出的解释器的任何想法,如果列出的这些优点/缺点是合法的,以及我没有想过的任何其他解释器(例如,php是否适合这样的事情?lua ?).在代码中嵌入解释器的第一手经验绝对是一个优势!

msw*_*msw 5

我是预先发布的强大的Tcl/Tk支持者,直到我用它做了一个大的项目,发现它是多么难以维护.不幸的是,由于Tcl中的原型非常简单,所以最终会有"一次性"脚本占用自己的生命.

在过去的几个月中采用了Python,我发现它是Tcl承诺的所有内容,还有更多.正如许多Python退伍军人可以告诉你的那样,源缩进最多只是第一个小时的麻烦,然后它似乎不是一个障碍,但肯定有帮助.顺便提一下,Tcl的作者约翰· 奥斯特豪特(John Ousterhout)因为写了一种迫使Tcl编码员使用One True Brace Style的语言而受到赞扬和反对(我是1TBS所以我很好).

Python中没有很好处理的唯一Tcl构造是任意eval "${prefix}${command} arg"构造,不管怎样都不应该在Tcl中使用,但是和uplevel类型语句(这是一个很好的想法,但是对于一些毛茸茸的代码而言).事实上,Python对动态感觉有点对抗,eval但我认为这是一件好事.不幸的是,我还没有使用一种语言来接受它的GUI以及Tcl/Tk; Tkinter在Python中完成了这项工作但却很痛苦.

我根本不能和Matlab说话.

有了几个月的Python,我几乎肯定会将正在进行开发的任何Tcl程序移植到Python中,以达到理智的目的.