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

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


person Byron Whitlock    schedule 10.09.2009    source источник


Ответы (6)


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

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

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

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

person RHSeeger    schedule 10.09.2009

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

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

person Kylotan    schedule 11.09.2009
comment
Мне кажется забавным, что у нас могут быть такие противоположные мнения. Все, что вы говорите, делает Lua лучше, чем Tcl, я бы сказал, что делает Tcl лучше, чем Lua. Синтаксис Tcl для меня значительно чище и очевиднее, чем у Lua и т. Д. - person RHSeeger; 11.09.2009
comment
Я согласен с RHSeeger в комментарии о том, что вы говорите о Lua, я бы сказал о Tcl. Вы (kylotan) сказали, что думаете, что Lua лучше для менее опытных пользователей, но я также думаю, что это наоборот. Основная проблема с Tcl IMO заключается в том, что опытные программисты несут слишком много багажа - ожиданий относительно того, как язык должен работать. Tcl нетрадиционен из-за своей простоты, но в этой простоте его сильная сторона. Все, что вам нужно знать о Tcl, можно выразить на одной веб-странице. - person Bryan Oakley; 11.09.2009
comment
Это на грани перерастания в языковые войны. Я думаю, это вопрос правильного инструмента для работы, и, помимо синтаксиса, оба инструмента в этом случае почти одинаково подходят, но, на мой взгляд, Tcl выигрывает из-за его зрелости и, следовательно, его библиотек; на самом деле Lua кажется заведомо недельным в этом отделе. Что касается синтаксиса, да, Lua может показаться более знакомым, почти в стиле Basic / Python, и это действительно может быть сильной стороной. Но для тех, кто лишь поверхностно коснулся Tcl, я призываю вас: копайте глубже. Когда вы его получите, он практически на том же уровне, что и Lisp или Haskell. - person Dexygen; 12.09.2009
comment
Я признал и заявил, что мое мнение было субъективным, и что TCL отлично подходит для тех, кто его знает. Однако в области написания игровых сценариев обычно люди, которые будут этим заниматься, будут лучше знакомы с простыми основными императивными языками, такими как VBScript и Javascript, и будут далеки от продвинутых программистов, которые могут извлечь из них максимум пользы. Haskell или Lisp. Это как раз то, что я видел в этой области, и это в значительной степени не связано с тем, насколько мощным является TCL как язык. - person Kylotan; 12.09.2009
comment
Да, и что касается библиотеки - часто при написании игровых сценариев вы явно не хотите предоставлять какие-либо внешние библиотеки сценарию из соображений производительности, обслуживания или безопасности. Опять же, все зависит от того, кто будет писать сценарии, и, надеюсь, это будет учтено на оригинальном плакате. - person Kylotan; 12.09.2009
comment
На стороне клиента нет, вам не нужна большая поддержка библиотеки, но на сервере, где всем кодировщикам / пользователям доверяют, это в худшем случае безвредно и, возможно, очень полезно. - person SingleNegationElimination; 16.09.2009
comment
Даже на стороне сервера это может быть рискованно, поскольку пользователи не обязательно являются разработчиками программного обеспечения, но часто менее техническими дизайнерами. От этих пользователей не всегда можно ожидать, что они будут осведомлены обо всех последствиях определенных системных вызовов и т. Д. Поэтому вы часто заставляете их работать только через интерфейс песочницы, который вы им предоставляете. Очевидно, что истинность этого в случае OP будет зависеть от его конкретной ситуации, но, вообще говоря, встроенный язык сценариев в игре предназначен для синтаксиса, а не для библиотек. - person Kylotan; 16.09.2009
comment
@Kylotan Lua имеет более сложный синтаксис, чем TCL, похоже, это обычное недоразумение TCL, люди читают в нем больше, чем есть на самом деле. который сказал, что вы все еще можете быть правы, что Lua более дружелюбен к новичкам, поскольку простой синтаксис TCL кажется слишком простым для многих, чтобы действительно понять - person jk.; 24.05.2010
comment
@jk: Я определенно понимаю, что вы имеете в виду, в том, что TCL имеет элегантно небольшое количество правил, которые определяют, как он работает. Но он полагается на правильную пунктуацию и форматирование, а не на ключевые слова на английском языке, что само по себе делает его менее удобным для (англоговорящих!) Новичков. ПО МОЕМУ МНЕНИЮ. - person Kylotan; 24.05.2010

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

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

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

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

person RBerteig    schedule 10.09.2009

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

person Dexygen    schedule 10.09.2009

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

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

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

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

person SingleNegationElimination    schedule 16.09.2009
comment
Преимущество Javascript в том, что он знаком обычным программистам, но определенно есть недостаток в виде разреженных библиотек времени выполнения, по крайней мере, для реализаций C. - person SingleNegationElimination; 16.09.2009

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

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

person Demi    schedule 21.10.2016