Как бот irc, написанный на tcl, будет противостоять клону python/node.js?

Я считаю, что eggdrop — самый активный/популярный бот, и он написан на tcl (и, согласно вики, ядро ​​— C, но я этого не подтверждал).

Мне интересно, будет ли какая-либо выгода в производительности от перекодирования его функциональности в node.js или Python, в дополнение к тому, что он станет более доступным, поскольку Python и JS, возможно, являются более популярными языками, и немногие знакомы с tcl.

Итак, как они будут сочетаться с tcl в целом с точки зрения производительности?


person meder omuraliev    schedule 25.07.2010    source источник


Ответы (2)


Как вы подозревали, eggdrop написан не на tcl, он написан на C, однако использует tcl в качестве языка сценариев/расширений.

Я ожидаю, что в случае с eggdrop разница в производительности между использованием tcl в качестве языка сценариев и использованием Python, Lua, JS или практически чего-либо еще будет незначительной, поскольку eggdrop обычно не выполняет задачи с высокой нагрузкой.

В случае, если это действительно была проблема, ваш вопрос потребует более подробной информации. Производительность для какой задачи при каких условиях? Использование памяти? Эффективность процессора? Задержка? И ответ, вероятно, будет "измерить и узнать". Учитывая типичное использование eggdrop, не требуется особенно эффективного кода для ответа на случайную команду триггера IRC раз в несколько минут или часов.

В качестве более общего случая, я уверен, вы могли бы найти сравнения конкретных алгоритмов или задач, выполняемых различными языками сценариев в определенных операционных системах или средах, и в этот момент это не имело бы никакого отношения к IRC или eggdrop.

person Brook Miles    schedule 25.07.2010

Если вы не делаете ничего, кроме ожидания на тихом канале, пока что-то произойдет, производительность практически не имеет значения. Вероятно, вы могли бы написать это в BF (ну, с добавлением примитивов сетевого подключения) и заставить его работать OK.

Другое дело, если вы работаете на множестве загруженных каналов, за которыми отслеживается множество вещей. Tcl очень хорошо справляется с управляемым событиями вводом-выводом, что идеально подходит для такого рода ситуаций. (Python может это сделать, но ему нужны внешние библиотеки, как и Lua. Я недостаточно знаю JS, чтобы комментировать это.)

Если вам нужно выполнить значительную обработку, не связанную с вводом-выводом, для некоторых ответов на сообщения, вам нужны потоки. Я знаю, что и Tcl, и Python поддерживают потоки, но с совершенно разными моделями потоков (у Python есть модель с общей памятью, которая упрощает передачу некоторых типов задач, особенно когда данные большие, а у Tcl есть модель квартиры, которая значительно уменьшает количество блокировок, необходимых в реализации для хорошего повышения производительности в коде, привязанном к процессору).

Насколько это актуально для IRC-ботов? Ну, все зависит от того, что вы делаете в боте.

person Donal Fellows    schedule 26.07.2010
comment
node.js был основан на Python Twisted и Ruby Event Machine и в значительной степени управляется событиями. Я решил пойти по пути node.js, так как довольно свободно разбираюсь в js: nodejs.org/#about . спасибо за Ваш ответ. - person meder omuraliev; 28.11.2010