Добрый день! Языков, поддерживающих горячую замену кода, довольно мало. В т.ч. Оберон и Лисп. Я разрабатываю ещё один, он называется Яр и является русскоязычным. Сейчас я разрабатываю его в Лисп. Проблема в том, что Лисп очень непопулярен в России. Рассматриваю возможность перехода на Оберон. Однако, насколько я понимаю на данный момент, Лисп намного мощнее и гибче. Известно, что Оберон в ядре умеет мало, но многое может быть реализовано в виде модулей. Т.е. нужно сравнивать не Лисп с ядром ОБерона, а лисп с (Ядро Оберона + библиотеки).

Соответственно, хочу сравнить возможности Оберона с модулями с лиспом. Есть ли в Обероне следующее:

1. Именованные параметры?
2. Возможность переопределить отдельную функцию модуля во время выполнения, при этом не находясь в этом модуле (не знаю, как устроены права доступа в Обероне, в лиспе всё можно делать откуда угодно).
3. Возможность переопределить модуль, сохранив данные. Например, я пишу бота, который общается с пользователем (сейчас модно). У меня есть база данных ответов пользователя. Она является переменной в моём модуле. Также в нём есть функция "ответить". Я хочу поменять функцию "ответить", но база ответов не должна разрушиться.
4. Можно ли переопределить функцию модуля с изменением сигнатуры на несовместимую. При этом реальный вызов с некорректной сигнатурой должен приводить к ошибке времени выполнения. Общий сценарий использования этой возможности в лиспе выглядит так: сначала меняем функцию,потом делаем глубокий вдох и делаем пальцы крестиком. Потом меняем все точки вызова. Потом выдыхаем. Впрочем, если изменение состоит в добавлении именованного параметра, то делать вдох и держать пальцы крестиком не надо. Сигнатура получается другая, но совместимая со старой.
5. То же касается объектов. Есть ли возможность расширять объекты (добавлять поля) без разрушения данных в них?
6. Макросы в смысле Лиспа. В Лиспе макрос - это функция, которая выполняется во время компиляции. Она берёт на вход AST и некую информацию об окружении, в котором введено это AST. На выходе должно получиться новое AST. ПРи этом можно пользоваться всеми возможностями для преобразования AST (хоть из гугла скачивать новое AST).
7. Насколько развита сборка мусора? Сборка мусора в реальном времени - это круто, но есть другие направления развития. Например, в Эйфеле отдельны сборщик мусора на каждый тред. Во многих языках поколенческая сборка мусора. Есть ли такое?
8. Есть ли слабые ссылки (weak pointers)?
9. Есть ли настоящие треды?
10. Доступно ли всё перечисленное под пермиссивной лицензией (MIT,BSD и т.п., но не GPL и LGPL).

Также интересно узнать, используется ли Oberon в каких-то живых проектах в России.