Вопрос примитивный, но все же. Что такого революционного вносит Lua в скриптинг, чего просто невозможно было достичь без него. Из того, что я заметил, анонимные методы, нативные списки и полиморфизм выглядят очень круто. Есть ли что-то еще?

Кложуры и передача данных с их помощью в нативные каллбеки от форгрупа и таймеров через анонимные функции.
Динамическая природа языка, позволяющая в любой момент времени заменить любую функцию чем-то другим. Хороший пример - оборачиваем вызов RemoveUnit своей оберткой и делаем какие-то действия перед тем как вызвать настоящий RemoveUnit.
Своеобразное но рабочее ООП.
Таблицы которые одновременно и массив и хештаблица и ассоциативный массив и при этом очень быстро работают.
Передача и хранение функций в параметрах и переменных.
Передача массивов в параметрах.
Метатаблицы и метаметоды, позволяющие переопределять поведение таблиц в разных ситуациях - добавление и получение элементов, различные операторы, вся эта фигня. Пример - можно запилить "класс" вектор и пользоваться векторной математикой без костылей, переопределив для векторов операторы сложения, вычитания, умножения и так далее.

Вобще, давно пора завести статью на эту тему и собирать там все мелкие и большие фишечки и возможности Lua в сравнении с JASS.
`
ОЖИДАНИЕ РЕКЛАМЫ...
33
а в жасс было что-нибудь от настоящего программирования? анонимные методы, нативные списки и полиморфизм просто мимо ушей и когда ещё почитать отправляют не слова же не понятно... но на наглядных примерах NazarPunk, некоторые нюансы раскрываются и то что удобно это 100%, а к простоте привыкнуть чуть надо
30
и когда ещё почитать отправляют
А как вы собираетесь программировать на языке, не читав документацию?
24
Кложуры и передача данных с их помощью в нативные каллбеки от форгрупа и таймеров через анонимные функции.
Динамическая природа языка, позволяющая в любой момент времени заменить любую функцию чем-то другим. Хороший пример - оборачиваем вызов RemoveUnit своей оберткой и делаем какие-то действия перед тем как вызвать настоящий RemoveUnit.
Своеобразное но рабочее ООП.
Таблицы которые одновременно и массив и хештаблица и ассоциативный массив и при этом очень быстро работают.
Передача и хранение функций в параметрах и переменных.
Передача массивов в параметрах.
Метатаблицы и метаметоды, позволяющие переопределять поведение таблиц в разных ситуациях - добавление и получение элементов, различные операторы, вся эта фигня. Пример - можно запилить "класс" вектор и пользоваться векторной математикой без костылей, переопределив для векторов операторы сложения, вычитания, умножения и так далее.

Вобще, давно пора завести статью на эту тему и собирать там все мелкие и большие фишечки и возможности Lua в сравнении с JASS.
Принятый ответ
7
Bergi_Bear, меня поразила возможность хранить, во-первых, объекты разных типов вместе, во-вторых, не думать о размере\индексе массива. Это то, к чему так легко привыкаешь в нормальных язык, и что кажется каким-то сюром в варике)
NazarPunk, я очень поверхностно знаком с языком. Просто одно дело предоставить немного иной синтаксис (как в cJASS) и реализовывать что-то исключительно препроцессорами, но совсем другое - вносить новые парадигмы. И вот это я и хотел уточнить. Например, что с форвардингом?
prog, спасибо, это правда интересно. Пока что именно в ООП вижу самую большую пользу.
30
Вобще, давно пора завести статью на эту тему и собирать там все мелкие и большие фишечки и возможности Lua в сравнении с JASS.
Нужно просто забыть JASS как страшный сон и кодить как белые люди)
PornoMishka:
но совсем другое - вносить новые парадигмы
Что в этом нового то? Обычное ООП.
PornoMishka:
Например, что с форвардингом?
Что вы подразумеваете под форвардингом?
7
Что в этом нового то? Обычное ООП.
Настоящий полиморфизм не существовал на c\vJASS, так что это совсем не обычное нововведение)
NazarPunk:
Что вы подразумеваете под форвардингом?
Например, то, что мы не можем использовать экземпляр структуры B в структуре A, т.к. та объявлена ниже, и интерпретатор еще не знает о ее существовании. В какой из статей это называлось именно так)
30
PornoMishka, интерпретатор двупроходный.
local function test()
	print('test')
end
test() --> test
Таким же образом можно рекурсию делать)
7
NazarPunk, это очень приятная новость, спасибо! Стало быть, даже Wurst не даст всего того, что у нас есть с 1.31.
30
Стало быть, даже Wurst не даст всего того, что у нас есть с 1.31
На данный момент да, но если создатели Wurst сделают интерпретацию на lua, то импорт пакетов из сети будет киллер фичей)
15
На данный момент да, но если создатели Wurst сделают интерпретацию на lua, то импорт пакетов из сети будет киллер фичей)
У них уже есть форк компилятора из Wurst в Lua, но какого-то реального смысла я в этом не вижу.
30
У них уже есть форк компилятора из Wurst в Lua, но какого-то реального смысла я в этом не вижу.
Я тоже. Притом я люблю публиковать наработки и посему буду сидеть на стандартном редакторе.
15
Не совсем в тему, но одно из самых существенных отличий - востребованность Lua где-то кроме самого Wc3. JASS дает намного меньше практического опыта и знаний чем боли в одном месте, в то время как Lua воздает по заслугам, поскольку используется как встраиваемый язык во многих других играх, движках, приложениях и пр, позволяя практиковать многие аспекты современного программирования. Lua позволяет расти там, где JASS упирается в потолок.
30
JASS дает намного меньше практического опыта
Мне JASS поднял навык костылеписания на заоблачный уровень)
26
prog:
Хороший пример - оборачиваем вызов RemoveUnit своей оберткой и делаем какие-то действия перед тем как вызвать настоящий RemoveUnit.
Т.е. раньше этого нельзя было сделать? (до LUA)
7
Extremator, как я понял, там фишка в том, что можно переопределять реализацию в любой момент. Это как если бы у нас была переменная типа code, а в любой момент мы могли бы, например, сделать так:
code Fn
...
Fn = function()
	print(111)
end
27
GetLocalPlayer, я вот тоже не знаю Lua, ничего кроме jass не изучал. Но интересно)
30
Steal nerves, так изучайте, я вот наработочки для этого пилю))
И как говорилось выше, луа много где используется, так что навык может пригодиться.
7
NazarPunk, и да, и нет. Я имею в виду что-то вроде Action в шарпе, т.е. хранение функции в переменной, с возможностью переопределить ее.
NazarPunk, извиняюсь за оффтоп, конечно, но у меня самого уже много вопросов к построению скриптов на Lua (именно к скриптам, а не к самому языку), а статей еще не предвидится =(
26
PornoMishka:
Это как если бы у нас была переменная типа code, а в любой момент мы могли бы ...
Так есть же тип code, которому можно задавать разные значение, не?
30
Я имею в виду что-то вроде Action в шарпе
В шарпе статическая типизация и посему там нужен этот тип. А в lua всё является объектами, которые можно свободно переопределять и возвращать:
local function sum(a)
    return function(b)
        return a+b
    end
end
print(sum(2)(3)) --> 5
sum = 'new value'
print(sum) --> new value
а статей еще не предвидится
Предвидятся))
30
в шарпе тоже можно переопределять)
Не знаком с шарпом, но врятли он позволит из строки сделать функцию
7
NazarPunk, да, из строки никак, конечно.
Всем спасибо, убедили, что все хорошо.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.