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, пока на нем еще ничего не написано.
Я понимаю, что ты уже проделал огромную работу и придется много переделать. Но если уж это будет следующее поколение языка, давай сделаем хорошо.
|