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

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

Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
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.
20
Много интересных постов в теме, но ответа на главный вопрос так и не было. Lua или Jass?
В ситуации если доступны оба, но если с программированием ОЧЕНЬ слабо знаком - джасс будет проще для начала, но LUA был и будет перспективнее, ибо не только сможешь пилить карты в варкрафте, но и в будущем скрипты под свои нужды как для других программ, так и в целом выучишь хотя бы полезный ЯП. О чём неоднократно тут уже писали. :D
Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.