ИМХО.
Я уже высказался насчет Forth'а в L2J в одной из тем на форуме SF (насчет того, что у Forth нестандартная структура, и не хочется перестраивать парсер в голове с языков обычного синтаксиса на 'извращенный' Forth, и отсюда сделал вывод - лучше, чтобы вместо Forth в L2J был какой-либо другой более привычный скриптовый язык).
Признаю, что я тогда немного погорячился, и это вызвано скорее ленью - ну тяжело найти время и мозговые ресурсы, когда изучаешь другие языки, работаешь и учишься в универе, боюсь окончательно забить голову и сойти с ума
. Форт действительно интересный язык, и я уважаю Balancer'а за то, что он в одиночку реализовал и продолжает улучшать Forth в L2J!
Но хотелось бы высказать свое мнение по поводу одного из пунктов, который приводит Balancer в пользу Forth - краткость и вес исходников. В данный момент я не согласен с тем, что короткий стиль записи в Форте удобен для понимания. Мне лично удобнее видить и разделять части программы скобочками, и я не вижу проблемы или неудобства в большом количестве строк в программе вида
блабла {
блаблабла
} блабла {
блаблаблабла
}
Balancer привел сравнение обработчика админ команды для катания на страйдере/виверне, и это был один из доводов: "Вам мало выигрыша в размере?". Для меня лично одинаково читаются и "большой код" на яве, и эти 3 форт строки - не вижу преимущества в малом размере этих 3х Форт-обработчиков. Считаю, что не имеет значения, сколько весят и сколько строк содержат исходники - главное то, как они читаются человеком (а скобочки и обычное деление программы разбирается очень хорошо, да и в том, чтобы печатать их, я проблем не вижу), а также во что они превращаются, когда выполняются. Ведь одна строка на Форте, грубо говоря, выполняет столько же процессорных команд, сколько и несколько строк на другом, 'обычном' языке... Конечно все это дело вкуса, вполне возможно, что я и сам потом полюблю стиль Форта, но тем не менее, я не считаю стиль и краткость Форта его достоинством. Вот это сейчас мне больше нравится (кусок скрипта из stolen-офф сервера):
code text
talk_selected_event_begin
condition = [HaveMemo(talker, @letters_of_love1)==0 &&
GetOneTimeQuestFlag(talker, @letters_of_love1)==1]
choice_string = 0000101
handler(fhtml0, talker) =
[
ShowPage(talker, "finishedquest.htm");
]
talk_selected_event_end
quest_accepted_event_begin
handler(talker, quest_id) =
[
talker.quest_last_reward_time = 0;
SetMemo(talker, quest_id);
SoundEffect(talker, "ItemSound.quest_accept");
if(OwnItemCount(talker, @darings_letter) == 0)
GiveItem1(talker, @darings_letter, 1);
ShowPage(talker, "daring_q0001_06.htm");
]
quest_accepted_event_end