Возник сабж.
Сперва мои мысли.
Значительная часть l2j требует свного скриптописания. Чего там говорить об этом, если даже официал имеет толстенную скриптовую "псевдоассемблерную" обёртку...
Когда, ещё весной, встал вопрос о скриптах (квесты, скиллы, эвенты, админкоманды и т.п.) то мой выбор однозначно упал в сторону Форта. Аргументы за этот выбор я уже приводил не раз, повторюсь вкратце:
- Лёгкость написания и расширения транслятора
- Высокая скорость
- Удобный синтаксис для интерактивной работы
- Возможность внесения изменений без рестарта системы
- Лёгкость освоения новичками, не имеющими опыта программирования вообще
- Очень высокая скорость написания кода (напомню, что язык был изначально придуман для увеличения производительности программиста на порядок, по сравнению существующими в то время конкурентами)
- Высокий уровень надёжности конечных систем из-за большой простоты интерактивной отладки (обычные средства программирования, как правило, интерактивно отлаживать большую систему не позволяют вообще)
- Простота восприятия готовых решений (правда, при использовании при программировании определённого набора неявных соглашений)
Минусы тоже были:
- Неудобный синтаксис математических выражений
- Трудности восприятия некоторыми программистами, воспитанными на традиционных языках
- Скорость, безусловно, ниже, чем на чистой Java
В общем, в то время, при отсутствии энтузиазма у, так сказать, соратников, я решил браться за Форт в одиночку и потом просто продемонстировать возможности готовой системы уже на практике.
Как нетрудно понять, система сейчас доведена до уровня полноценой работоспособности. Многие её возможности описаны на этом форуме, ещё больше - хотя бы упоминались (и я про них расписываю в деталях, когда появляются запросы).
Тут возникли два спорных момента.
1. Forth потребовал более тесной интеграции в систему. Уже хотя бы для пресловутого калькулятора вероятности срабатывания Stun'а или Anchor'а, пришлось вставлять заглушки в код. Аналогично - модифицировать функции установки уровня маны и здоровья. Вставлять свои перехватчики попыток unescape или респавна после смерти (для той же тюрьмы). И т.п.
Дальше - требуется больше. Из-за пресловутого отсутствия нормального скриптового языка в раннем l2j, пришлось изобретать совершенно кошмарные калькуляторы и парсеры XML для тех же скиллов и статсов. В результате, сейчас внести какие-то мелочные изменения, требуется в лучшем случае ковырять XML и рестартовать весь сервер, в худшем - мучаться с введением ткучи невнятного кода на Java.
2. Форт, благодаря очень высокой информационной насыщенности кода, сейчас зачастую в одну строчку делает то, что на Java занимает десятки или сотни строк! Пример, который я рискнул реализовать с неделю назад - админкоманды //ride_wyvern и //ride_strider. На Java в старом варианте это
выглядит так.
А вот как то же самое реализуется на JBForth (комментарии выброшены):
code text
: gm_ride_wyvern "ride" check-access wyvern player@ ride ;
: gm_ride_strider "ride" check-access strider player@ ride ;
: gm_unride "ride" check-access player@ unride ;
Вам мало выигрыша в размере? Хорошо, вот вам ещё два плюса:
- Уровень GM-доступа к этим командам в JBF меняется без рестарта сервера
- Команды (не эти конкретно, они персонажные) без дополнительных обработок вызываюстя и из игрового чата, и из telnet, и из htm-файлов.
Вот эти команды я для теста на JBF и перевёл...
...
Сегодня же, впрочем, не скажу, что совершенно неожиданно, так как некоторое недовольство чувствовалось и раньше, было озвучено явное желание остальной команды сделать JBForth полностью отключаемым.
Но это, во-первых, урежет некоторые его возможности, во-вторых, идёт вразрез со многими моими планами. Особенно касающихся продвижения работы над скиллами, итемами активно меняющими те, или иные параметры персонажей и т.п.
Так что, если вопрос тесной интеграци JBF встанет жёстко, то мне однозначно придётся форкать проект. Даже если сделать отключаемым Форт, то что, скажите, делать с введением, например, Форт-кода в XML-данные части скиллов? Опять вводить кучу фактически дублирующих друг друга кусков?
Но форк в такой ситуации - это дело весьма плохое для всех сторон.
К сожалению, моего языкового уровня не хватит, чтобы донести все вышеприведённые аргмументы до основной, англоязычной части команды, так что я сформулировал свои мысли и примеры тут, а Juokelis попробует донести их до основной команды а сюда поместить их мысли