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

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

Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
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?
Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.