| 
 
				Berserker, у тебя в примерах константы типа ARR_AUTO, PM_LMB_PUSH и пр. определяются пользователем или захардкодены? 
В первом случае - это потенциальные коллизии, во втором - требуется справочник констант, что может быть более неудобным. 
Поясню: 
ARR_TEMP - соответствует 0 (массив не сохраняется) 
а как будет 1 - "массив сохраняется"? ARR_CONST? ARR_PERM? ARR_STATIC? Ну вот, лезть в справочник... 
PM_LMB_PUSH? или PM_LMB_PRESS или MOUSE_BUTTON? Да фиг я буду помнить названия большинства констант, если не сам их строкой выше определил 
Я до сих пор психую и использую !?PI вместо onAfterERMInstruction... или onPostInstruction... или <еще 2-3 варианта>.... да ну его нахрен, пусть будет !?PI. Иногда даже с учетом подсказки редактора попадаю не с первого раза, если недавно не использовал.
 
Получение Ид массива сразу при автовыделении - здорово. 
В UN:U максимум 12 значений задать можно?
 
Есть еще один весьма напрягающий момент - разнообразие нового синтаксиса при работе с переменными.
 
Если раньше все было просто 
?v# - сохранить значение в переменную 
v# - использовать значение из переменной 
в некоторых командах # - сохранить значение в переменную v# или z# (что уже нестройный остыль) 
%V# - подстановка значения в строку
 
то теперь к ним добавляются 
i^^ 
blabla:y 
$blabla$ 
(blabla) 
+ отдельно массивы (но тут вопросов нет - это новая сущность) 
и, вроде,  что-то еще упустил
 
Я понимаю, что разный синтаксис для разных случаев парсить удобно, но без унификации это выглядит уже кашей.
Предлагаю :
обычные или (именованные) переменные ?v#, ?v(bla), ?z#, ?z(bla)
 v#, v(bla), z#, z(bla), x#, x(bla), y#, y(bla)
 
 переменные из json (только использование значений, без подстановок)
 t(key)
 
 элементы массива и переменные героя
 ?mi(#,#), ?ms(#,#), ?w#, ?w(#,#), ?w(HERO_ORRIN,#)
 mi(arrname,#), ms(arrname,#), w#, w(#,#), w(HERO_ORRIN,#)
 
 флаги (есть ли вообще смысл продолжать их использовать?)
 ?f#, ?f(bla)
 f#, f(bla)
 
 Строковые подстановки
 %V#, %V(bla), %Vi,
 %Z#, %Z(bla),
 %Y#, %Y(bla),
 %X#, %X(bla),
 %T(key),
 %Mi(#,#) %Mi(arrname,#), %Ms(#,#) %Ms(arrname,#),
 
 Индексы (желательно)
 vy1, xy(bla), vz(bla), mi(z(bla),y(bla))
 
 Строковые подстановки с индексами (вот уж не знаю насколько целесообразно, но было бы просто обделаться как круто
  ) %T(%Ms(%Z(bla),%W(HERO_ORRIN,%X16)))
 
 При желании, можно разнести строковые и целочисленные массивы по разным литерам:
 !!VRm(bla,3):С4/5/6/7;
 !!VRa(bla,5):S^six^;
 !!IF:M^%A(bla,5) %M(bla,5)^; six 6
 
 
Чтобы не ломать/городить совместимость, сделать это только для ZVSE2, пока на нем еще ничего не написано.
 
Я понимаю, что ты уже проделал огромную работу и придется много переделать. Но если уж это будет следующее поколение языка, давай сделаем хорошо.
			 |