3

我相信 eggdrop 是最活跃/最受欢迎的机器人,它是用 tcl 编写的(根据 wiki,核心是 C,但我尚未确认)。

我想知道在 node.js 或 Python 中重新编码它的功能是否会有任何性能优势,除了使它更易于访问之外,因为 Python 和 JS 可以说是更流行的语言,而且很少有人熟悉 tcl。

那么,在性能方面,它们与 tcl 相比如何?

4

2 回答 2

6

正如您所怀疑的,eggdrop 不是用 tcl 编写的,它是用 C 编写的,但是它确实使用 tcl 作为其脚本/扩展语言。

我希望在 eggdrop 的情况下,使用 tcl 作为脚本语言与使用 Python、Lua、JS 或几乎任何其他语言之间的性能差异可以忽略不计,因为 eggdrops 通常不执行高负载任务。

如果这确实是一个问题,您的问题将需要更多细节。在什么条件下执行什么任务?内存使用?CPU效率?潜伏?答案可能是“测量并找出答案”。鉴于 Eggdrop 的典型用途,每隔几分钟或几小时响应一次 IRC 触发命令并不需要特别高效的代码。

作为更一般的情况,我相信您可以找到在特定操作系统或环境上由各种脚本语言执行的特定算法或任务的基准比较,此时它与 IRC 或 eggdrop 没有任何关系。

于 2010-07-25T21:37:57.233 回答
4

如果您除了在安静的频道上等待某事发生之外没有做太多事情,那么性能几乎是无关紧要的。您可能可以在BF中编写它(好吧,添加了网络连接原语)并让它运行良好。

如果您在很多繁忙的频道上运行,并且需要关注很多事情,那就不同了。Tcl非常擅长事件驱动的 IO,非常适合这种情况。(Python 可以做到这一点,但需要外部库,Lua 也是如此。我对 JS 的了解不够,无法在此处发表评论。)

如果您需要对某些消息响应进行重要的非 IO 绑定处理,那么您需要线程。我知道 Tcl 和 Python 都支持线程,但是线程模型完全不同(Python 有一个共享内存模型,这使得传递某些类型的任务更容易,特别是当数据很大时,并且 Tcl 有一个单元模型大大减少了实现中所需的锁定量,以便在 CPU 绑定代码中获得良好的性能提升)。

这与 IRC 机器人有什么关系?好吧,这完全取决于您在机器人中所做的事情。

于 2010-07-26T00:07:57.870 回答