poster
2019-12-10, 20:42
我过去几年开发的仿真工具是用C ++编写的,目前具有tcl解释的前端。它的编写使其可以在交互式外壳程序中运行,也可以通过传递输入文件来运行。无论哪种方式,输入文件都是用tcl编写的(我添加了许多其他的特定于仿真的命令)。这样就可以使用功能强大的输入文件(例如,在运行蒙特卡洛模拟游戏时,可以直接在输入文件中将随机分布编程为tcl过程)。
不幸的是,与更现代的解释语言相比,我发现tcl解释器变得有些局限了,它的语法似乎有些不可思议。由于计算引擎是使用具有c兼容API的库编写的,因此编写替代前端应该很简单,我正在考虑迁移到新的解释器,但是我花了一些时间选择(主要是因为我对许多解释语言没有丰富的经验)。我已经开始探索的选项如下:
保留与tcl:
优点:
-无需更改现有代码。
-现有输入文件保持不变。 (尽管我可能会保留tcl前端作为选项)
-具有很多社区支持的成熟语言。
缺点:
-感觉受到语言语法的限制。
-从用户那里获得关于学习tcl难度的抱怨。
蟒蛇:
优点:
-效率很高的现代口译员。
-活跃的大型社区。
-众所周知的科学和数学模块,例如scipy。
-通常在学术科学/工程界使用(我的代码的典型用户)
缺点:
-我从未使用过它,因此需要花费一些时间来学习该语言(这也是专业人士,因为我一直想学习python已有一段时间了)
-严格格式化输入文件(缩进等)。
Matlab:
优点:
-功能强大且使用广泛的数学工具
-强大的内置可视化/绘图功能。
-通过社区提交的代码以及商业工具箱可扩展。
-许多科学/工程学界的人都熟悉并熟悉matlab。
缺点:
-不能作为可执行文件分发-需要是附加组件/工具箱。
-需要(?)matlab编译器(价格昂贵)。
-需要Matlab,这也很昂贵。
这些优点和缺点是我能够提出的,尽管我一般对解释型语言的经验很少。我很想听听我在这里提出的解释器的任何想法,如果列出的这些优点/缺点是合法的,以及我没有想到的任何其他解释器(例如,php是否适合这样的事情?lua ?)。在代码中嵌入解释器的第一手经验绝对是加分的!
回答:
从发行前开始,我一直是Tcl / Tk的坚定拥护者,直到我对其进行大型项目并发现它难以维护。不幸的是,由于原型在Tcl中是如此简单,因此您不得不使用“一次性”脚本来维持自己的生命。
在过去的几个月中采用了Python之后,我发现它是Tcl承诺的全部,还有更多。正如许多Python资深人士会告诉您的那样,源代码缩进最多在头一个小时就很麻烦,然后似乎不是障碍,但肯定会有所帮助。偶然地,Tcl的作者John Ousterhout因编写一种语言在Tcl编码器上强制使用True True Brace Style (http://en.wikipedia.org/wiki/Indent_style#Variant:_1TBS)而备受赞誉和批评(我当时是1TBS,所以对我来说还不错)。
Python唯一不能很好处理的Tcl构造是任意eval "${prefix}${command} arg"构造,无论如何都不应该在Tcl中使用,而是使用uplevel类型语句(这是一个不错的主意,但是为一些有毛的代码而制作的)。的确,Python对动态eval有点eval但我认为这是一件好事。不幸的是,我还没有一种包含它的GUI和Tcl / Tk的语言。 Tkinter可以用Python来完成这项工作,但是很痛苦。
我根本不能和Matlab说话。
有了几个月的Python,几乎可以肯定的是,出于理智的考虑,我几乎可以将正在开发中的任何Tcl程序移植到Python中。
更多&回答... (https://stackoverflow.com/questions/3167661)
不幸的是,与更现代的解释语言相比,我发现tcl解释器变得有些局限了,它的语法似乎有些不可思议。由于计算引擎是使用具有c兼容API的库编写的,因此编写替代前端应该很简单,我正在考虑迁移到新的解释器,但是我花了一些时间选择(主要是因为我对许多解释语言没有丰富的经验)。我已经开始探索的选项如下:
保留与tcl:
优点:
-无需更改现有代码。
-现有输入文件保持不变。 (尽管我可能会保留tcl前端作为选项)
-具有很多社区支持的成熟语言。
缺点:
-感觉受到语言语法的限制。
-从用户那里获得关于学习tcl难度的抱怨。
蟒蛇:
优点:
-效率很高的现代口译员。
-活跃的大型社区。
-众所周知的科学和数学模块,例如scipy。
-通常在学术科学/工程界使用(我的代码的典型用户)
缺点:
-我从未使用过它,因此需要花费一些时间来学习该语言(这也是专业人士,因为我一直想学习python已有一段时间了)
-严格格式化输入文件(缩进等)。
Matlab:
优点:
-功能强大且使用广泛的数学工具
-强大的内置可视化/绘图功能。
-通过社区提交的代码以及商业工具箱可扩展。
-许多科学/工程学界的人都熟悉并熟悉matlab。
缺点:
-不能作为可执行文件分发-需要是附加组件/工具箱。
-需要(?)matlab编译器(价格昂贵)。
-需要Matlab,这也很昂贵。
这些优点和缺点是我能够提出的,尽管我一般对解释型语言的经验很少。我很想听听我在这里提出的解释器的任何想法,如果列出的这些优点/缺点是合法的,以及我没有想到的任何其他解释器(例如,php是否适合这样的事情?lua ?)。在代码中嵌入解释器的第一手经验绝对是加分的!
回答:
从发行前开始,我一直是Tcl / Tk的坚定拥护者,直到我对其进行大型项目并发现它难以维护。不幸的是,由于原型在Tcl中是如此简单,因此您不得不使用“一次性”脚本来维持自己的生命。
在过去的几个月中采用了Python之后,我发现它是Tcl承诺的全部,还有更多。正如许多Python资深人士会告诉您的那样,源代码缩进最多在头一个小时就很麻烦,然后似乎不是障碍,但肯定会有所帮助。偶然地,Tcl的作者John Ousterhout因编写一种语言在Tcl编码器上强制使用True True Brace Style (http://en.wikipedia.org/wiki/Indent_style#Variant:_1TBS)而备受赞誉和批评(我当时是1TBS,所以对我来说还不错)。
Python唯一不能很好处理的Tcl构造是任意eval "${prefix}${command} arg"构造,无论如何都不应该在Tcl中使用,而是使用uplevel类型语句(这是一个不错的主意,但是为一些有毛的代码而制作的)。的确,Python对动态eval有点eval但我认为这是一件好事。不幸的是,我还没有一种包含它的GUI和Tcl / Tk的语言。 Tkinter可以用Python来完成这项工作,但是很痛苦。
我根本不能和Matlab说话。
有了几个月的Python,几乎可以肯定的是,出于理智的考虑,我几乎可以将正在开发中的任何Tcl程序移植到Python中。
更多&回答... (https://stackoverflow.com/questions/3167661)