budden писал(а):
1. Именованные параметры?
Нет, но принципиальных трудностей сделать это не существует.
budden писал(а):
2. Возможность переопределить отдельную функцию модуля во время выполнения, при этом не находясь в этом модуле (не знаю, как устроены права доступа в Обероне, в лиспе всё можно делать откуда угодно).
Нет, но процедурные переменные спасут мир.
budden писал(а):
3. Возможность переопределить модуль, сохранив данные. Например, я пишу бота, который общается с пользователем (сейчас модно). У меня есть база данных ответов пользователя. Она является переменной в моём модуле. Также в нём есть функция "ответить". Я хочу поменять функцию "ответить", но база ответов не должна разрушиться.
Процедурные переменные или делегаты в Активном Обероне, но вообще, нужно озаботиться архитектурой приложения, что бы отделить данные от алгоритмов.
budden писал(а):
4. Можно ли переопределить функцию модуля с изменением сигнатуры на несовместимую. При этом реальный вызов с некорректной сигнатурой должен приводить к ошибке времени выполнения. Общий сценарий использования этой возможности в лиспе выглядит так: сначала меняем функцию,потом делаем глубокий вдох и делаем пальцы крестиком. Потом меняем все точки вызова. Потом выдыхаем. Впрочем, если изменение состоит в добавлении именованного параметра, то делать вдох и держать пальцы крестиком не надо. Сигнатура получается другая, но совместимая со старой.
нет, ибо статическая типизация. ну или меняй и модуль перекомпилируй, а потом забудь перекомпилировать клиенты и будет то, что ты так хочешь.
budden писал(а):
5. То же касается объектов. Есть ли возможность расширять объекты (добавлять поля) без разрушения данных в них?
Канешна, если ты сделаешь модель и верти её как хочешь, а объекты на уровне языка в рантайме менять низя. Но. теоретически, используя рефлекшен можно извратиться. Но зачем?
budden писал(а):
6. Макросы в смысле Лиспа. В Лиспе макрос - это функция, которая выполняется во время компиляции. Она берёт на вход AST и некую информацию об окружении, в котором введено это AST. На выходе должно получиться новое AST. ПРи этом можно пользоваться всеми возможностями для преобразования AST (хоть из гугла скачивать новое AST).
не реализовано, но потенциально возможно.
budden писал(а):
7. Насколько развита сборка мусора? Сборка мусора в реальном времени - это круто, но есть другие направления развития. Например, в Эйфеле отдельны сборщик мусора на каждый тред. Во многих языках поколенческая сборка мусора. Есть ли такое?
В А2/Активном Обероне сейчас есть и сборка мусора с поколениями. в lock-free версии - неблокирующий сборщик.
budden писал(а):
8. Есть ли слабые ссылки (weak pointers)?
В Активном обероне есть небезопасные указатели (UNSAFE POINTERS) - это просто типизированный адрес. Ну и нужно чтобы переменная такого типа была UNTRACED. это и будет слабая ссылка var u{untraced}: pointer{unsafe} to T;
budden писал(а):
9. Есть ли настоящие треды?
Да, в Активном Обероне
budden писал(а):
10. Доступно ли всё перечисленное под пермиссивной лицензией (MIT,BSD и т.п., но не GPL и LGPL).
Да