Всем привет, подскажите/расскажите пожалуйста, что предпочтительней и почему Lua или Jass?

Первая карта (benchmark.w3m) содержит исходники скрипта.
Вторая карта (benchmark-packed.w3m) уже укомплектована DLL с нативками и готова к запуску.
Решил у себя проверить, вот разница от local integer p и local integer dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd
Разница в 24нс на 1 итерацию.
Дальше по поводу вызова функций, ForForce добавляет свою задержку, но хз по идее она не должна сильно повлиять, а по поводу сортировки, тут уже отсутствие оптимизации компилятора/интерпретатора, который есть даже на паскале, по этим нюансам офк джасс уступает, но я говорил непосредственно про нативки и про +- дефолтную "конвенцию" и работу со скриптами от большинства картоделов, кому эта разница не увидится нигде.
Но если уже судить по всем пунктам и сразу, то конечно же LUA будет лучше по всем параметрам в плане производительности и скорости, но у Джасса своя ниша, и куда более простой "путь" входа, что фактически является его самым большим и возможно единственным плюсом.
Это все очень хорошо, но так и не дали главный ответ - что лучше луа или джасс? Чтобы можно было закрыть этот тред
Ответ был уже дан - LUA профитнее по большим пунктам, если есть хоть чуть-чуть знания/азы программирования. Если же нет, то Джасс будет проще и быстрее освоить, да и в плане Вар 3 - я считаю что он всё-равно удобнее.
Загруженные файлы
`
ОЖИДАНИЕ РЕКЛАМЫ...
25
Ничто. Зависит от целей, которые ты преследуешь. Если ты привык делать все по старинке и не планируешь работать с интерфейсами, то и Jassa хватит. Но с Lua у тебя будет уже меньше кода и больше возможностей в плане гибкости написания. Если есть выбор, то почему бы не сразу на Lua? Тем более язык не только в варике используется.
32
Самое главное что луа то доступен только на рефордже, и играть в свои поделки ты сможешь только такс, это тоже стоит учитывать.
15
Главное, что стоит знать: Jass по производительности не уступает С++.
18
Самое главное что луа то доступен только на рефордже
Добавили для 1.26 еще в прошлом году

Jass по производительности не уступает С++
Современные интерпретируемые языки в 2022 уступают оптимизированному С++ коду, а jass из 2003 конечно производительнее)
15
Vlod, сравни скорость вызова нативок из плюсов и из Джасса.
18
JackFastGame, причем тут скорость исполнения функции из api варкрафта и производительность самого языка. Для примера можете посмотреть как тестируются языки тут habr.com/ru/post/532432
20
Главное, что стоит знать: Jass по производительности не уступает С++.
JackFastGame, причем тут скорость исполнения функции из api варкрафта и производительность самого языка. Для примера можете посмотреть как тестируются языки тут habr.com/ru/post/532432
С++ был и будет всегда быстрее чем джасс и тот же ЛУА, да и он +- в 100 раз быстрее ЛУА (который считается самым быстрым интерпретируемым языком). Но в Варкрафте в целом от этих разницы будет не большая разница, но как и сказал konvan5, если был опыт с ЛУА, то используй его, тем более если планируешь работать на рефорджеде (по-мимо проекта от Ev3nt и китайского YDWE с ЛУА варианто поработать на ЛУА вне рефорджеда и нет). Но вот по фреймам - неправда, ибо нативки и там и там есть и делать можно всё так же.
По вызову нативок, разница была в наносекунды, то бишь JASM байткод в целом обрабатывается на достаточно приемлемой скорости, но лимит Jass обработчика - это циклы, которые имеют лимит (который я не знаю где снимать) и при превышении его нормы игра просто на просто отказывается это "обрабатывать" и уходить в застой. :D
Всё в общем склоняется к твоим навыкам и восприятию ЯП, если же (без обид) тебе с трудом даются ЯП, то Jass будет тебе проще.
15
Я писал много на Jass и могу скзать, что он сильно уступает Lua по удобству. Анонимные функции те же, когда ты пишешь таймер и СРАЗУ же в теле этой структуры с таймером пишешь функцию на исполнение, а не отдельно. Кроме того, когда я писал ботов для моба карты, как же я задолбался с этой хэш таблицей, ключ-значение и сами функции пишутся неудобно громоздко на извлечение/получение данных из хэш-таблицы. Когда на луа вместо хэш-таблицы можно сделать ну очень удобную таблицу и даже метатаблицу. Нету избыточных операторов Call, set... Единственное что, я бы всё равно предпочёл строгую типизацию и вместо Lua если бы нормально работал конвертер, я бы писал на TypeScript всегда.
20
DarkLigthing, typescripttolua.github.io не плохо работает. + есть типы: www.npmjs.com/package/luacraft-1.26 (правда для 1.26), но если автора пнуть - то может сделает и для 1.32
19
Kirill78, к тому же, функционал луа на 1.26 будет расширятся, а с учётом текущих разработок для Jass от Unryze, там будет ещё больше функций.
38
Главное, что стоит знать: Jass по производительности не уступает С++.
Вот это полная дезинфа, комментатору нужно пойти читать книги
38
JackFastGame, в c++ нет понятия "нативки", что за бред ты несёшь, окстись
19
C++ в любом случае будет быстрее, потому что там идёт непосредственный вызов функций, в отличии от того же JASS.
15
ScorpioT1000, в чём смысл рассуждать вне контекста Warcraft API? Очевидно, что когда мы сравниваем производительность этих двух языков, нас интересует в первую очередь скорость арифметики (и то скорее для всяких библиотек типа DGUI), синтаксических конструкций, скорость вызова нативок. Если из Jass они вызываются так же быстро, как из плюсов, то Lua уже как минимум не быстрее, и вопрос производительности при рассмотрении "Jass или Lua" отпадает.
38
Lua интерпретируется либой, написанной на си - lualib, довольно быстро, я там на тысячах векторах 60 фпс неплохо исполнял и применял к юнитам.
Жасс - древнее говно, где скорость даже зависит от длины имени переменной, медленное обращение к глобалкам, про execute func, хештейблы и прочие костыли вообще молчу.
Короче, нет желания в сотый раз всё это пережевывать, читаем статьи, вики, набираемся опыта.
20
Lua интерпретируется либой, написанной на си - lualib, довольно быстро, я там на тысячах векторах 60 фпс неплохо исполнял и применял к юнитам.
Жасс - древнее говно, где скорость даже зависит от длины имени переменной, медленное обращение к глобалкам, про execute func, хештейблы и прочие костыли вообще молчу.
Короче, нет желания в сотый раз всё это пережевывать, читаем статьи, вики, набираемся опыта.
Длина переменной не влияет на скорость никак - это очередной тупой миф, который я даже не знаю откуда пошёл, но вроде как от драколича (он тоже часто ошибается). Медленное обращение к глобалкам? Для тебя 1 нс - это много? ._. ExecuteFunc срабатывает за 4 нс (2 нс вызов, 2 нс хеширование строки и запись Id, последующие вызовы 2 нс), хештейбл по скорости без стриншехей 2 нс, или же 4 нс с большими цифрами.
Скорп, разница между этими языками по скорости хоть и значительна, но на фактически даже не на уровне НАНОсекунд, а практически на уровне ПИКОсекунд. В общем говоря, Джасс на удивление не такой уж и медлительный, как его считали, но в любом случае ЛУА быстрее - это факт, но разница не такая колоссальная, чтобы обливать джасс прямо тонной.
38
Unryze, какие наносекунды, ты же вроде офигеть какие там тулзы пишешь, ну мог бы сделать бенчмарк хотябы - там только на создание сопрограммы и нового стека и потом их убития уйма времени выделяется, что в лупе аж рендер фризился
про execute
ещё
ещё
Про длину названия это ещё из 2006 xgm.guru/forum/showpost.php?p=190747&postcount=5
И потом вроде были бенчмарки, найти уже не знаю по каким кейвордам
Про глобалки вс локалки и массивы вс примитивы
ещё
ещё
Эти люди - не рандомы, писали тулзы и ловили вызовы через дебаггеры, тоже делали инъекции в исполняемый код. wc3c сдох и в веб архиве найти ничего не смог.
Естественно, ещё много лично с ними общался, щас таких мессенджеров уже нет
Есть контраргументы?
29
Скажу свой ответ:
  И то и то хорошо. Главное, на каком интерпретаторе тебе удобнее, на том и пиши. В общем решай сам для себя. Если есть то, что легче реализовать посредством LUA, то пиши на нём. Всё зависит от ситуации и твоих нужд, где LUA будет востребованнее чем JASS.
32
Ярг Восьмой, ну тут самая главная проблема - человек которырый задаёт этот вопрос явно ни-то, ни-сё не освоил, и в реалиях картостроения варкравта - это редко нужно, у жасса есть одно весомое преимущество - оно есть на всех патчах из коробки и достаточно просто в освоении.
Все эти конверторы луа - хороши для изучения и баловства, реальные проекты строить и развивать на них не удобно, решение таких задач где луа хорош в сценариях вара - приходится решать не то чтобы редко, очень редко. Ну скорость самого скрипта мало что значит - ибо вы раньше упретесь в производительность движка, начхать луа,жасс или вы длл суните - все они вызывают одни и те же функции игры, реализованные разработчиками, и сделать быстрее - никак нельзя, в итоге - толку что у вас спаун крипов работает чуть чуть быстрее, при 300+ крипах вы ловите так же 6 кадров.
Для начала пойдет и жасс, потому что пересесть на луа ничего не мешает, сам жасс скрипт ничто иное как максимально упрощенный и урезанный ЛУА со строгой типизацией. Ну а главное научится алгоритмы строить и понимать как и что делается, а не сравнивать красоту синтаксиса и кода.
20
Unryze, какие наносекунды, ты же вроде офигеть какие там тулзы пишешь, ну мог бы сделать бенчмарк хотябы - там только на создание сопрограммы и нового стека и потом их убития уйма времени выделяется, что в лупе аж рендер фризился
про execute
ещё
ещё
Про длину названия это ещё из 2006 xgm.guru/forum/showpost.php?p=190747&postcount=5
И потом вроде были бенчмарки, найти уже не знаю по каким кейвордам
Про глобалки вс локалки и массивы вс примитивы
ещё
ещё
Эти люди - не рандомы, писали тулзы и ловили вызовы через дебаггеры, тоже делали инъекции в исполняемый код. wc3c сдох и в веб архиве найти ничего не смог.
Естественно, ещё много лично с ними общался, щас таких мессенджеров уже нет
Есть контраргументы?
Мой тред про мифа Джасса - это и есть контраргумент, а по поводу функций, они в байткоде выходят в id, я не знаю что они там тестировали - кроме как пустой воздух, я же кидал байткод в моём треде для чего? Для красоты? Все функции переводятся в индексы и вызываются по НИМ, потому ДЛИНА их НАЗВАНИЯ не влияет ровно ни на что, ибо оно "компилится" в байткод ЕДИНОЖДЫ.
Я позже разберу все данные тобою ссылки, видать нужно тотально все эти бредни опровергнуть, а то не угомонитесь. :)

Начнём пожалуй очередной разбор мифов:
xgm.guru/forum/showpost.php?p=422071 (ExecuteFunc - создание потока ресурсоёмкое и прочая бурда).
От части правда, но фишка в том, что ForGroup и ForForce создают потоки тоже, и хоть они и медленнее, разница не прямо занебесная. Но так как речь об ExecuteFunc, разберём его подробнее.
Кратко о коде, название функции кешируется и закидывается в "std::map" (косвенно, ибо в С нет этого понятия, но логика та же), что же делается? Функция обрабатывается как "нативка", в том плане, что индексируется и последующие вызовы идут уже СТРОГО по индексу, делается итерация и по StringHash (внутри игры эта функция работает значительно быстрее джасс обработчика) делается проверка та ли функция. Посмотрим же на задержку:
2 мс - это итерация 10к цикла (но для удобства подсчёта оставим всё как есть), и того 53мс на 10000 вызовов, что равно 53 / 10000 = 0.0053мс или же 5300 наносекунд, для любителей секунд - 5.3e-6 секунд.
Проверим теперь обычный call и посмотрим его байткод:
Фактическая задержка тут вообще 1мс, что конечно же в разы быстрее (а точнее в 50 раз, что в целом и ожидалось), а теперь давайте же увеличим имя функции до максимума и посмотрим уже после этого на байткод:
И так, добавилось 2 мс задержки (что не смертельно), но почему же? Смотрим сюда:
В байткоде идёт 16 - call jass, а индекс 4689, то бишь JASM вызывает по индексу, но почему же добавилась задержка? Да вот дело в банальном обработчке вызовов:
Игра ещё и имя выхватывает и делает стрингхеш (чтобы убедиться, что функция есть и вызов её не повлечёт фиаско).
Но фактически эта разница не колоссальная, ибо SomeFunction - длина 12, а SomeFunctionSomeFunctionSomeFunctionSomeFunctionSomeFunctionSomeFunctionSomeFunctionSomeFunctionSomeFunctionSomeFunction - 120, что изменило результат на жалкие 2 мс, которые вы никак и никаким боком не почувствуете.
По поводу TriggerEvaluate vs TriggerExecute - фактически та же песня:
Рассмотрим причину:
А теперь TriggerEvaluate:
В то время как TriggerExecution так же вызывает нет траффик, чтобы убедиться в валидности и вызывает ивент, TriggerEvaluate не делает ничего схожего, потому конечно он быстрее, но если разница в скорости важнее, чем валидность данных, ну даже не знаю. И да TriggerExecute в начале вызывает TriggerEvaluate и лишь потом завершает свой блок, то бишь она жирнее по своему построению, вопрос только в том к чему этот пример ScorpioT1000.
Видать нужно пояснить "Скорп, разница между этими языками по скорости хоть и значительна, но на фактически даже не на уровне НАНОсекунд, а практически на уровне ПИКОсекунд." подробнее, речь о прямом сравнении обработки JASM машины и то, как делаются вызовы, ExecuteFunc - фактически не имеет аналога на ЛУА, потому сравнение банально неправильное (хотя там ExecuteFunc и не нужен, но в пример привёл ты это, хотя я говорил вообще о других вещах).
xgm.guru/forum/showpost.php?p=425373 -> пояснил выше, опять же не понимаю к чему ты это вкинул ибо эта же задержка будет и на ЛУА, иди и проверь?
xgm.guru/forum/showthread.php?t=18742 -> это вообще уровень бреда, убираются лишний код, что конечно же ускорит работу, мне немного аж стыдно, что ты это в пример привёл.
Jass Mythubusters:
Установка literal (которая занимает пикосекунду?) и setvar (который глобалкой ты хотя бы раз делаешь), но да, эта фантомная разница и выдуманные 6 операций (без каких-либо пруфов) - это конечно же аргумент.
И того, что мы имеем, большинство информации банально неверная, а которая и верная - будет иметь тот же результат и на LUA (если вызвать ExecuteFunc или же TriggerExecute на LUA то бишь, будет такая же задержка, ибо это задержка ВНУТРИИГРОВАЯ - задержка движка).
9
Unryze, ну это ты жёстко по фактам решил пройтись, респект за разбор, как раз повод дополнить свою статейку :D
6
Много интересных постов в теме, но ответа на главный вопрос так и не было. Lua или Jass?
28
BaHeK, так сказали же. Если ты на 1.26, то жасс, если же делаешь на рефе или 1.26 с модом war3-lua, то Lua.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.