TCL vs Lua - создание сценария для сервера mmo

StackOverflow https://stackoverflow.com/questions/1406836

  •  05-07-2019
  •  | 
  •  

Вопрос

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

Это было полезно?

Решение

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

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

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

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

Другие советы

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

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

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

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

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

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

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

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

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top