Есть такой динамический язык для JVM (Java Vistual Machine) — Groovy. Его преимущество в том, что можно конфигурировать язык практически на лету, а также обрабатывать неизвестные ему конструкции.
Мой коллега ради интереса попробовал сымитировать ЯРИЛ на Groovy. Вот что получилось:
story {
startLocation "РаспутьеЛок"
startProcedure "Стартовая"
Река = "нет"
Стартовая {
showMessage """О сколько нам историй чудных
|Готовят приключенья дух,
|И опыт, сын ошибок трудных,
|И гений, парадоксов друг,
|И случай, бог изобретатель...
|
|
|
|
|
|
|У лукоморья дуб зеленый;
|Златая цепь на дубе том:
|И днем и ночью кот ученый
|Всё ходит по цепи кругом;
|Идет направо — песнь заводит,
|Налево — сказку говорит.
|Там чудеса: там леший бродит,
|Русалка на ветвях сидит;
|Там на неведомых дорожках
|Следы невиданных зверей;
|Избушка там на курьих ножках
|Стоит без окон, без дверей;
|Там лес и дол видений полны;
|Там на заре прихлынут волны
|На брег песчаный и пустой,
|И тридцать витязей прекрасных
|Чредой из вод выходят ясных,
|И с ними дядька их морской;
|Там королевич мимоходом
|Пленяет грозного царя;
|Там в облаках перед народом
|Через леса, через моря
|Колдун несет богатыря;
|В темнице там царевна тужит,
|А бурый волк ей верно служит;
|Там ступа с Бабою Ягой
|Идет, бредет сама собой;
|Там царь Кащей над златом чахнет;
|Там русской дух... там Русью пахнет!
|И там я был, и мед я пил;
|У моря видел дуб зеленый;
|Под ним сидел, и кот ученый
|Свои мне сказки говорил.
|Одну я помню: сказку эту
|Поведаю теперь я свету...
|
|
|
|Сцена вторая.
|Руслан ищет свою жену, которую украл колдун Черномор. Но ему хочет помешать его соперник Рогдай.
|Игра начинается с того момента, когда он нападает на Руслана.
|
|Цель игры - победить Черномора, ну и традиционная - спасти принцессу.
|
|Однажды, темною порою,
|По камням берегом крутым
|Наш витязь ехал над рекою.
|Всё утихало. Вдруг за ним
|Стрелы мгновенное жужжанье,
|Кольчуги звон, и крик, и ржанье,
|И топот по полю глухой.
|«Стой!» — грянул голос громовой.
|Он оглянулся: в поле чистом,
|Подняв копье, летит со свистом
|Свирепый всадник, и грозой
|Помчался князь ему навстречу.
|«Aгa! догнал тебя! постой! —
|Кричит наездник удалой, —
|Готовься, друг, на смертну сечу;
|Теперь ложись средь здешних мест;
|А там ищи своих невест».
|
|При свете трепетном луны
|Сразились витязи жестоко;
|Сердца их гневом стеснены,
|Уж копья брошены далеко,
|Уже мечи раздроблены,
|Кольчуги кровию покрыты,
|Щиты трещат, в куски разбиты...
|
|Кому-то пасть... вдруг витязь мой,
|Вскипев, железною рукой
|С седла наездника срывает,
|Подъемлет, держит над собой
|И в волны с берега бросает.
|«Погибни! — грозно восклицает; —
|Умри, завистник злобный мой!»
|
|Сцена третья.
|После битвы наш герой продолжает свой путь. Он остановился на развилке дорог."""
}
locations {
location("РаспутьеЛок") {
name "Распутье"
description """Руслан на развилке дорог.
|Одна ведет прямо на север к лесу, другая ведет направо, огибает камень и поворачивает далее на юг, третья ведет налево на
|запад на берег моря."""
north "ЛесЛок"
south "РекаЛок"
west "БерегМоряЛок"
hooks {
instead("идти на юг") {
if (Река == "нет") {
showMessage """
| И вот уже, направя к югу
| Нетерпеливый бег коня,
| Он думал пред закатом дня
| Нагнать любимую подругу.
| Но день багряный вечерел;
| Напрасно витязь пред собою
| В туманы дальние смотрел:
| Всё было пусто над рекою.
| Зари последний луч горел
| Над ярко позлащенным бором.
| Наш витязь мимо черных скал
| Тихонько проезжал и взором
| Ночлега меж дерев искал.
|"""
goToLoc "РекаЛок"
Река = "да"
} else {
goToLoc "РекаЛок"
}
}
instead("идти на север") {
showMessage """
|Но вскоре вспомнил витязь мой,
|Что добрый меч герою нужен
|И даже панцирь; а герой
|С последней битвы безоружен.
|"""
goToLoc "ЛесЛок"
}
}
}
}
}
В принципе, его можно расширить — вместо текстовых идентификаторов локаций использовать ссылки, а также позволять в переходах вместо локаций указывать код и т.д.
Мне это напомнило систему Hydra, когда-то разрабатываемую для РИЛ. Если не ошибаюсь, на Python. Что-то не смог найти про неё информации.
А вам было бы удобно писать таким образом?

Я бы писал
Что-то не смог найти про неё информации (с)
Про Худру:
http://ifwiki.ru/Hydra
Топик «[Hydra] – новый этап развития IF на русском!!! (?)» на тяпе:
http://forum.ifiction.ru/viewtopic.php?id=558
И ещё кое-что:
http://forum.ifiction.ru/viewtopic.php?pid=4983#p4983
Спасибо!)
Хмммм… Непривычно было бы на первых порах:).
На самом деле ИМХО по первому взгляду на код трудно судить об удобстве языка — все зависит от имеющихся в нем средств. Для меня с точки зрения удобства критически важны возможность инкапсулировать действия в объект и наследование (желательно множественное).
По идее, Груви как раз это поддерживает. )