C++ 同时支持Tcl和Python?
我有一个二进制应用程序,它与Tcl静态链接,前端是Tcl解释器。我想为用户提供使用Python执行相同命令的功能,如关键字选项。Tcl语法的一个示例是:C++ 同时支持Tcl和Python?,c++,python,api,tcl,C++,Python,Api,Tcl,我有一个二进制应用程序,它与Tcl静态链接,前端是Tcl解释器。我想为用户提供使用Python执行相同命令的功能,如关键字选项。Tcl语法的一个示例是: set_foo -foo 1.0 -bar 3.0 -cat x 因此,python等价物可能如下所示: set_foo(foo=1.0, bar=3.0, cat="x") 两次构建程序是否更好,一次作为Tcl应用程序,一次作为Python应用程序?还是将所有内容都保留为Tcl,并在其解释器中使用一个调用Python脚本的命令 这些命令的
set_foo -foo 1.0 -bar 3.0 -cat x
因此,python等价物可能如下所示:
set_foo(foo=1.0, bar=3.0, cat="x")
两次构建程序是否更好,一次作为Tcl应用程序,一次作为Python应用程序?还是将所有内容都保留为Tcl,并在其解释器中使用一个调用Python脚本的命令
这些命令的实现方式是,它们对所使用的脚本语言一无所知。api是:
void set_fooCmd(Handler &data);
处理程序是一个C++类,它负责解析选项并将其提供给命令实现。到目前为止,该处理程序是为Tcl实现的,而不是为Python实现的
所有直接与Tcl接口的代码都在它自己的目录中,并从程序的其余部分提取调用 更新: 这不是一个重复的问题: 当他们询问是否要从Tcl迁移到Python或Matlab时。我已经知道我想同时支持Tcl和Python,我非常想知道人们使用了什么方法。例如:tkinter
模块从Python调用Tcl。有一个先例,但引入太多的接口层似乎很复杂
为Python前端和Tcl前端分别编译应用程序
这是很常见的。许多项目有多个绑定——Python、Tcl、Perl等
有一种可能的方法可以稍微简化语言绑定
tkinter
模块从Python调用Tcl。有一个先例,但引入太多的接口层似乎很复杂
为Python前端和Tcl前端分别编译应用程序
这是很常见的。许多项目有多个绑定——Python、Tcl、Perl等
有一种可能的方法可以稍微简化语言绑定
您可能想看看这样的东西,它将允许您创建一个带有straitforward C接口的应用程序(以任何您喜欢的方式实现),并将该接口公开给各种其他脚本语言。SWIG支持Tcl和Python,以及Ruby、PHP、Scheme、Perl,您可能想看看类似的东西,它将允许您创建一个具有straitforward C接口(以任何方式实现)的应用程序,并将该接口公开给各种其他脚本语言。SWIG支持Tcl和Python,以及Ruby、PHP、Scheme、Perl,Tcl是完全可嵌入的(只要您记得在
Tcl\u CreateInterp
之前调用Tcl\u FindExecutable
),这样您就可以通过使用少量Python代码来准备在同一过程中执行的Tcl脚本。这将是快速和可靠的(多进程的东西需要上下文开关来进行通信,并且有更多的故障模式),并将所需的额外代码量降至最低
Python唯一的问题是Tcl解释器(即Tcl_CreateInterp
返回的句柄)与当前线程的绑定非常紧密;您无法从其他线程安全地调用它们(因为为了减少全局锁的数量,实现中使用了大量特定于线程的数据)。虽然我们可以讨论不同之处,但一般来说,这只是一种不同的做事方式;只有当你把这些东西连接在一起时,你才真正需要关心。
如果您的Python代码实际上是单线程的,那么您可以跳过复杂性,直接进入最简单的直接访问;Tcl在一个级别上是不安全的,但在另一个级别上是安全的。Tcl是完全可嵌入的(只要您记得在
Tcl\u CreateInterp
之前调用Tcl\u FindExecutable
),这样您就可以通过使用少量Python代码来准备在同一进程中执行的Tcl脚本。这将是快速和可靠的(多进程的东西需要上下文开关来进行通信,并且有更多的故障模式),并将所需的额外代码量降至最低
Python唯一的问题是Tcl解释器(即Tcl_CreateInterp
返回的句柄)与当前线程的绑定非常紧密;您无法从其他线程安全地调用它们(因为为了减少全局锁的数量,实现中使用了大量特定于线程的数据)。虽然我们可以讨论不同之处,但一般来说,这只是一种不同的做事方式;只有当你把这些东西连接在一起时,你才真正需要关心。
如果您的Python代码实际上是单线程的,那么您可以跳过复杂性,直接进入最简单的直接访问;一级不安全,但另一级安全。我想