用Tcl编写的IRC机器人与Python/Node.js克隆相比如何?
我觉得eggdrop是最活跃和受欢迎的机器人,它是用tcl语言写的(根据维基百科,核心部分是用C语言写的,但我还没有确认这一点)。
我在想,如果把它的功能用node.js或者Python重新编写,会不会在性能上有好处?而且这样也更容易让人使用,因为Python和JavaScript可以说是更流行的语言,很多人对tcl不太熟悉。
那么,从性能上来说,它们和tcl相比,表现如何呢?
2 个回答
如果你只是静静地在一个安静的频道里等着事情发生,性能就没什么太大关系。你甚至可以用BF(当然要加上网络连接的功能)来写这个程序,它的表现也还不错。
但如果你在很多忙碌的频道上,同时需要关注很多事情,那就不一样了。Tcl在事件驱动的输入输出方面非常出色,这种情况特别适合用它来处理。(Python也能做到这一点,但需要额外的库,Lua也是这样。我对JS不太了解,所以不做评论。)
如果你需要处理一些消息响应时进行大量的非输入输出相关的计算,那就需要用到线程。我知道Tcl和Python都支持线程,但它们的线程模型完全不同(Python使用共享内存模型,这让传递某些类型的任务变得更简单,特别是当数据量很大时;而Tcl使用的是公寓模型,这大大减少了实现中所需的锁定,从而在CPU密集型代码中提升性能)。
这和IRC机器人有什么关系呢?其实这完全取决于你在机器人里做什么。
正如你所猜的,eggdrop并不是用tcl写的,而是用C语言写的,不过它确实使用tcl作为脚本和扩展语言。
我认为在eggdrop的情况下,使用tcl作为脚本语言和使用Python、Lua、JS或者其他任何语言之间的性能差别应该是微乎其微的,因为eggdrop一般不需要处理高负载的任务。
如果这真的是个问题,你的问题需要更具体一些。性能是指什么任务,在什么条件下?是内存使用?CPU效率?延迟?答案可能就是“测量一下就知道了”。考虑到eggdrop的典型使用场景,写出特别高效的代码并不是必须的,因为它只需要每隔几分钟或几小时响应一次IRC的触发命令。
从更广泛的角度来看,我相信你可以找到关于特定算法或任务在不同操作系统或环境下由各种脚本语言执行的基准比较,这时候就和IRC或eggdrop没有太大关系了。