2010-07-25 136 views
3

我相信eggdrop是最活跃/最受欢迎的bot,它是用tcl编写的(根据Wiki,核心是C但我没有证实)。在tcl中编写的irc bot如何与python/node.js克隆堆叠起来?

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

那么,他们将如何在一般情况下堆叠vs tcl,在性能方面呢?

回答

6

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

我认为对于eggdrop而言,使用tcl作为脚本语言以及使用Python,Lua,JS或几乎任何其他方法之间的性能差异可以忽略不计,因为eggdrops通常不会表现得很好加载任务。

如果确实是一个问题,您的问题需要更多细节。在什么条件下执行什么任务?内存使用? CPU效率?潜伏?答案可能是“衡量和发现”。考虑到典型的使用鸡蛋滴,它不需要特别高效的代码来每隔几分钟或几小时响应偶尔的IRC触发命令一次。作为一个更一般的情况,我相信你可以找到特定算法或者特定算法或者特定操作系统或者环境下各种脚本语言执行的任务的基准比较,在这种情况下,它实际上与IRC没有任何关系或者蛋清。

4

如果除了等待某个安静的频道发生某些事情之外,您还没有做其他事情,那么性能几乎无关紧要。你可以写下BF(好吧,添加了网络连接原语),并让它执行OK。

如果您正在很多繁忙的频道上运行,并且有很多事情正在观看,那就不一样了。 Tcl的非常适合事件驱动IO,这对于这种情况非常理想。 (Python可以做到这一点,但需要外部库,就像Lua一样,我不知道JS足以在那里发表评论。)

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

这与IRC机器人有什么关系?那么,这一切都取决于你在机器人中做什么。

+0

node.js基于Python的Twisted和ruby的Event Machine,并且是非常事件驱动的。我选择了node.js路由,因为我非常流利地使用js:http://nodejs.org/#about。感谢您的回答。 – 2010-11-27 23:45:11