У меня есть проект на стороне сервера C ++, в который мне нужно встроить какой-то скрипт. Это часть сервера онлайн-MMO. У меня есть значительный опыт использования TCL, и мне кажется, что он мне подходит. В дни разработки игр я использовал Lua минимально, и мне интересно, может ли это быть лучшим языком для встроенных скриптов. Также приятно выучить новый язык. Каковы относительные сильные и слабые стороны TCL и Lua? Спасибо!
TCL vs Lua - создание сценария для mmo-сервера
Ответы (6)
Честно говоря, они оба очень хорошо подходят для этой задачи. Оба они легко встраиваются в приложение и имеют довольно простой синтаксис. Я точно знаю, что добавлять новые команды (для взаимодействия с приложением) в Tcl чрезвычайно просто, и мне сказали, что Lua тоже очень хорош в этом.
Я бы порекомендовал немного поиграть с Lua, чтобы посмотреть, как он вам нравится (поскольку вы уже знаете Tcl) ... а затем выберите тот, который вам наиболее удобен. Если вы пишете большую часть кода, вам придется много с ним работать, поэтому вам также понадобится что-то, что можно будет использовать. В конце концов, оба языка должны быть довольно легкими для использования вашими конечными пользователями.
Лично я предпочитаю Tcl как потому, что мне не нравится Lua (я достаточно много программировал в нем для дополнений Warcraft), так и потому, что я люблю Tcl (я много программировал на нем как для профессионалов, так и для профессионалов). частная работа).
Изменить: добавлено примечание о том, что оба варианта просты для конечных пользователей. Получил 2 голоса против и не мог придумать ничего другого, кроме как не прояснять часть моего заявления, почему.
Думаю, я там противоположность RHSeeger. Я использовал как Lua, так и TCL, встроенные в игры (кстати, онлайн-игры), и я бы не стал снова трогать TCL с 10-футовой штангой, если бы у меня был выбор. Мое очень субъективное мнение состоит в том, что Lua - нормальный язык, а TCL - нет. По сравнению с другими вариантами языков сценариев синтаксис TCL очень неясен для большинства людей, со всеми наборами, выражениями, знаками доллара и множеством скобок и т. Д. этот отдел тоже.
Если этот интерфейс сценариев предназначен исключительно для вас, тогда вы также можете перейти на TCL, потому что Lua не предложит вам ничего нового (если только объектная ориентация не ваша вещь). В руках опытного пользователя TCL - разумный инструмент. Если, однако, вы ожидаете, что менее опытные пользователи будут использовать систему, то переходите на Lua - более простой синтаксис принесет им большую продуктивность.
Lua C API чрезвычайно легко интегрировать в приложение. С C у вас есть полный доступ к состоянию Lua и его родным типам данных. Я рекомендовал использовать Lua только для реализации хеш-таблицы, например, даже без необходимости написания сценариев.
Функции Lua, написанные на C, могут быть введены как глобальные имена, собраны в таблице, как большинство стандартных библиотечных функций, или реализованы в библиотеках DLL и динамически загружены во время выполнения. Это позволяет приложению предоставлять стабильный API, а также поддерживать плагины, написанные на Lua или C.
Lua как язык удивительно мощный, он поддерживает как функциональные, так и объектно-ориентированные стили программирования. Кроме того, он на удивление легкий: полный комплект исходных текстов и полная документация умещаются менее чем в 1 МБ, а вся виртуальная машина, компилятор и стандартные библиотеки в DLL занимают всего 164 КБ в Windows.
Я серьезно не изучал TCL начиная с версии 2 или около того ... Я не буду пытаться сравнивать их конкретным образом. Я считаю, что они оба были изобретены, чтобы занять одну и ту же нишу и примерно в одно время. Это, безусловно, оба зрелых языка с активными сообществами пользователей.
Я подозреваю, что в Tcl будет больше библиотек, которые вы сочтете нужными или удобными.
Как утверждали другие, оба языка будут работать очень хорошо. Третий вариант, который, вероятно, также будет работать, - это JavaScript, поскольку он занимает примерно ту же нишу. Вместо того, чтобы пытаться добиться от вас одного или другого (поскольку мне очень нравятся оба языка), я постараюсь сосредоточиться на некоторых объективных различиях и указать, в чем, по моему мнению, один лучше другого.
Наиболее важной проблемой игрового сервера, вероятно, будет чистая производительность. Оба языка являются зрелыми и хорошо оптимизированными, но оба также признают, что некоторые проблемы лучше всего оптимизировать, откладывая выполнение скомпилированного кода. Оба языка используют для этого в основном один и тот же механизм. С точки зрения самих языков, похоже, что Lua немного быстрее. ссылка
С точки зрения библиотек, что является следующим важным фактором, ни один из языков не требует использования каких-либо библиотек, чтобы быть полезными; то есть оба языка очень компактны по сравнению с такими языками, как Java, для использования которых требуются большие библиотеки времени выполнения; Опять же, это следствие требований их оригинального дизайна. Оба языка имеют множество дополнительных библиотек на выбор, но мне кажется, по крайней мере, что TCL имеет несколько большее разнообразие в этой категории. tcl :( Архив расширений Tcl / Репозиторий расширений Tcl) lua: (LuaForge )
Еще одно различие - между самими основными языками. Оба языка ценят простоту выше стиля, но на этом сходство заканчивается. Lua использует синтаксис, который может быть знаком большинству программистов, с очень простой контекстно-свободной грамматикой. Синтаксис TCL также прост, но на самом деле не имеет ничего общего с другими существующими языками, хотя внешне он немного похож на язык оболочки unix. Tcl, вероятно, проще только для непрограммистов, потому что его строчно-ориентированный командный синтаксис довольно ясен, но программисты, имеющие опыт работы с другими языками, обычно возражают против его загадочного синтаксиса. Ни один из них не является ужасно снисходительным с точки зрения генерации кода, но оба обладают мощными средствами метапрограммирования (сопоставимыми, но, возможно, не такими надежными, как макросы CLISP).
В Lua есть LuaJIT, JIT-компилятор, который достигает скорости C в узких циклах и используется для таких проектов, как Snabb Switch, где производительность критична (Snabb может обрабатывать гигабит в секунду, все обрабатываются через LuaJIT). LuaJIT также имеет простой в использовании FFI, который позволяет получить доступ к функциям C без написания кода заглушки C.
PUC-Lua (стандартная реализация) поддерживает восстановление после нехватки памяти. Ни LuaJIT, ни TCL этого не делают.