У меня возникла мысль.
Актор это удачная абстракция. Компьютеры в сети ведут себя как акторы. Устройства в компьютере ведут себя как акторы. Процессы ОС тоже акторы. Процессы Эрланга тоже акторы.
У актора своя память, протокол обмена сообщениями.
Окей.
---
1) Люди взяли процесс ОС за единицу композиции, и стали строить распределённые системы: контейнеры, кубернетис, и всё такое.
Более громоздко чем процессы Эрланга, зато отлично можно интегрировать легаси, приложения написанные на хер пойми чём хер пойми когда.
Окей.
---
2) И тут и там полезли ИИ сервисы генерящие код: Github Copilot, Codeium и подобные. Неплохо генерят код для решения изолированных задач, когда не нужно изобретать чего-то радикально нового. Пока не очень разбираются в существующих системах и не очень умеют связывать их между собой.
На что бы ни стали способны ИИшки, формулировать КАКИМ ИМЕННО должно быть поведение программы всё равно нужно человеку. Машина не будет за нас формулировать смыслы.
Окей.
---
Если скрестить 1) и 2), то напрашивается очевидное:
Раз мы умеем генерить код для изолированных задач, и раз процесс ОС с помощью контейнеров стал универсальной единицой композиции распределённых систем, то разве не разумно было бы сделать систему тестирования процессов уровня системных вызовов? Language/Runtime-agnostic.
Т.е. пишешь декларативные тесты на уровне конкретных данных что должны быть отправлены/получены в сокет/файл. В терминах системных вызовов которые должен или не должен сделать процесс ОС.
Т.е. строишь приложения, собираешь библиотеку (глюкотеку) багов и разных входных данных от пользователей. Превращаешь их в тесты. Все семантика, смысл твоей системы, описывается тестами.
И уже под тесты ты либо пишешь код, либо копируешь чужое и криво-косо интегрируешь, либо вообще генеришь ИИшкой. Код становится расходных строительным материалом, на него плевать. Главное чтобы смыслы в тестах были переданы правильно.
actors, docker, erlang, k8s, strace