Tcl 中的 interp 命令
interp command in Tcl
我正在学习 Tcl,但现在我无法使用 tcl 命令 interp
我读到此命令用于创建和操作解释器,但什么是解释器以及何时使用它们?
Tcl 解释器是执行上下文。每个解释器都有自己的命名空间、命令和全局变量;他们不共享任何东西(除了一些东西,比如当前工作目录,process-global)。解释器被创建为普通解释器(具有全套 built-in Tcl 命令)或 safe 解释器,其中没有暴露可能对外界产生不利影响的命令。
一般来说,解释器是相互隔离的(隔离是一种安全功能)但是可以做一些交叉在它们之间的事情:主要的是 parent 解释器可以告诉它的一个 child 解释器为它评估脚本并 return 结果,并且 parent 解释器可以放置一个 别名命令 在 child 中,当被调用时,将在 parent 中调用一个(指定的)命令,传递给 parents。这样做的结果是,您可以将 parent-child 关系视为有点像 OS 内核和用户进程之间的关系,而别名命令就像系统调用。 (这不是一个完美的类比,所以不要想太多。)
set foo [interp create -safe]
proc sayhelloto {who} {
puts "Hello, $who!"
}
interp alias $foo hello {} sayhelloto
interp eval $foo {
hello "World"
hello "ThaDome23"
exec echo rm -rf evilstuff
}
# Hello, World!
# Hello, ThaDome23!
# error: no such command 'exec'
因此,只要您需要独立的执行上下文,就可以使用额外的解释器。它们是重量级的,所以您不想经常创建它们,但它们比其他工艺便宜得多。
最后,每个解释器都绑定到创建它的线程。不同的线程总是 使用独立的中断。
我正在学习 Tcl,但现在我无法使用 tcl 命令 interp
我读到此命令用于创建和操作解释器,但什么是解释器以及何时使用它们?
Tcl 解释器是执行上下文。每个解释器都有自己的命名空间、命令和全局变量;他们不共享任何东西(除了一些东西,比如当前工作目录,process-global)。解释器被创建为普通解释器(具有全套 built-in Tcl 命令)或 safe 解释器,其中没有暴露可能对外界产生不利影响的命令。
一般来说,解释器是相互隔离的(隔离是一种安全功能)但是可以做一些交叉在它们之间的事情:主要的是 parent 解释器可以告诉它的一个 child 解释器为它评估脚本并 return 结果,并且 parent 解释器可以放置一个 别名命令 在 child 中,当被调用时,将在 parent 中调用一个(指定的)命令,传递给 parents。这样做的结果是,您可以将 parent-child 关系视为有点像 OS 内核和用户进程之间的关系,而别名命令就像系统调用。 (这不是一个完美的类比,所以不要想太多。)
set foo [interp create -safe]
proc sayhelloto {who} {
puts "Hello, $who!"
}
interp alias $foo hello {} sayhelloto
interp eval $foo {
hello "World"
hello "ThaDome23"
exec echo rm -rf evilstuff
}
# Hello, World!
# Hello, ThaDome23!
# error: no such command 'exec'
因此,只要您需要独立的执行上下文,就可以使用额外的解释器。它们是重量级的,所以您不想经常创建它们,但它们比其他工艺便宜得多。
最后,每个解释器都绑定到创建它的线程。不同的线程总是 使用独立的中断。