TCL vs Lua - создание сценария для сервера mmo - PullRequest
9 голосов
/ 10 сентября 2009

У меня есть проект на стороне сервера c ++, в который мне нужно встроить какой-то сценарий. Он является частью онлайн-сервера типа MMO. У меня есть значительный опыт использования TCL, и это кажется естественным. Я выполнил минимальное количество Lua в свои дни разработки игр, и мне интересно, может ли это быть лучшим языком для встроенных скриптов. Также приятно выучить новый язык. Каковы относительные сильные и слабые стороны TCL против Lua? Спасибо!

Ответы [ 6 ]

21 голосов
/ 11 сентября 2009

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

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

Мое личное предпочтение - Tcl, потому что я не люблю Lua (я сделал достаточно много программ для аддонов Warcraft) и потому что я люблю Tcl (я сделал много программирования для него как профессиональная, так и частная работа).

Редактировать: Добавлено примечание о том, что оба легко для конечных пользователей. Получил 2 голоса и не мог думать ни о чем другом, кроме как прояснить причину моего заявления.

16 голосов
/ 11 сентября 2009

Полагаю, я противоположность RHSeeger. Я использовал как Lua, так и TCL, встроенные в игры (между прочим, в онлайн-игры), и я бы не стал снова трогать TCL с 10-дюймовым ударом, если бы у меня был выбор. Мое очень субъективное мнение, что Lua - здравомыслящий язык, а TCL - нет. По сравнению с другими вариантами для языков сценариев, синтаксис TCL очень неясен для большинства людей, со всеми наборами, выражениями и знаками доллара, множеством скобок и т. Д. Единственное объективное преимущество, которое он имеет, - это простота встраивания, но Lua не является неряшливым в этот отдел тоже.

Если этот интерфейс сценариев предназначен исключительно для вас, то вы также можете использовать TCL, потому что Lua не предложит вам ничего нового (если только вам не нужна ориентация на объекты). В руках опытного пользователя TCL является разумным инструментом. Однако, если вы ожидаете, что менее опытные пользователи будут использовать систему, тогда используйте Lua - более простой синтаксис принесет им большую производительность.

7 голосов
/ 16 сентября 2009

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

Наиболее важной проблемой на игровом сервере, вероятно, является грубая производительность. Оба языка являются зрелыми и хорошо оптимизированы, но оба также признают, что некоторые проблемы лучше всего оптимизировать, если отложить их до скомпилированного кода. Оба языка используют в основном один и тот же механизм для выполнения этого. С точки зрения самих языков, Lua выглядит немного быстрее. ссылка

С точки зрения библиотек, что является следующим важным фактором, ни один из языков не требует использования каких-либо библиотек; то есть оба языка очень компактны по сравнению с такими языками, как Java, для которых требуются большие библиотеки времени выполнения; Опять же, это является следствием их первоначальных требований к конструкции. Оба языка имеют множество дополнительных библиотек на выбор, но, по крайней мере, у меня сложилось впечатление, что TCL имеет несколько большее разнообразие в этой категории. tcl :( Архив расширений Tcl / Репозиторий расширений Tcl ) lua: ( LuaForge )

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

7 голосов
/ 11 сентября 2009

Я подозреваю, что в Tcl будет больше библиотек, которые вы могли бы найти необходимыми или удобными на этом пути.

6 голосов
/ 11 сентября 2009

Lua C API чрезвычайно легко интегрировать в приложение. Из C у вас есть полный доступ к состоянию Lua и его родным типам данных. Я рекомендовал использовать Lua просто для получения реализации хеш-таблицы, даже без необходимости сценариев, например.

Функции Lua, написанные на C, могут быть введены как глобальные имена, собраны в таблицу, как большинство стандартных библиотечных функций, или реализованы в DLL и динамически загружены во время выполнения. Это позволяет приложению предоставлять стабильный API, а также поддерживать плагины, написанные на Lua или C.

Язык Lua на удивление мощный, с поддержкой как функциональных, так и объектно-ориентированных стилей программирования. Он также удивительно легкий: полный исходный код и полная документация умещаются не более 1 МБ, а вся виртуальная библиотека, компилятор и стандартные библиотеки в DLL составляют всего 164 КБ в Windows.

Я серьезно не изучал TCL начиная со второй версии или около того ... Я не буду пытаться сравнивать их конкретным образом. Я считаю, что они оба были изобретены, чтобы соответствовать одной и той же нише, и примерно в одно и то же время. Они оба являются зрелыми языками с заядлыми сообществами пользователей.

0 голосов
/ 21 октября 2016

Lua имеет LuaJIT , который представляет собой JIT-компилятор, который достигает скоростей C в тесных циклах и используется для проектов, таких как Snabb Switch , где производительность критична (Snabb может обрабатывать гигабит во-вторых, все обрабатывается через LuaJIT). LuaJIT также имеет простой в использовании FFI , который позволяет получить доступ к функциям C без написания кода заглушки C.

PUC-Lua (стандартная реализация) поддерживает восстановление после нехватки памяти. Ни LuaJIT, ни TCL не делают.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...