2010-07-25 137 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