Есть ли быстрый язык программирования с возможностью динамической перекомпиляции?
То есть, к примеру, что-то меняешь в коде, и в уже запущенном приложении сразу применяются изменения и виден результат.
Теоретически ведь такое возможно. Например, если после завершения работы функции и до нового обращения к ней, подменить её, то ничего фатального не произойдёт. В крайнем случае можно даже поменять её место в памяти, одновременно с этим изменив все адреса, где происходит обращение к ней.
В скриптовых языках с этим проблем нет особых, т.к. функция там часто - отдельный тип данных. Хотя и приходится отдельным образом посылать код функции (скажем, в консоль). А что насчёт быстрых компилируемых языков?
Здесь, кстати, уже немаловажным будет не только скорость языка, но и скорость компиляции, ведь её нужно делать на лету.
sim3x, я имел в виду немного другое - быстрое тестирование. То есть написал исправление - и сразу смотришь, как что поменялось, без перезапусков. А со вторым монитором даже без телодвижений. То есть чуть ли каждая строчка кода сразу тестируется на лету. Конечно, на самом деле всё не так просто, но идея такая.
А то, что вы описали, это тоже интересно и круто. Патчить серверную часть без даунтайма... мне даже в голову не приходило, что такое возможно (не считая веб-сервера). Хотя даже здесь не до конца ясно, как, скажем, быть с изменением структуры БД или формата кешей (если не очищать их после патча). Но звучит круто, да.
например, на .Net можно сделать примерно так.
хост приложение:
1. Читает каталог(и) на предмет требуемых сборок.
2. Найденные сборки копирует в папку кеша.
3. Загружает скопированные сборки.
4. Выполняет контракт на инициализацию сборки, передавая ему сохраненное состояние (если оно было).
... дальше сборка живёт своей жизнью, возможно, взаимодействуя с хостом по определённым интерфейсам.
6. Мониторит каталоги на предмет изменения подключенных сборок (также можно смотреть добавление / удаление).
7. Если сборка изменилась, то запрашивает у текущей сборки её текущее состояние.
8. Выгружает ее и копирует себе в кеш новую сборку.
... далее переход в п.4.
Собственно, классический ASP.NET примерно так и работает, благодаря чему, файлы приложения не блокируются при исполнении и доступны к изменению.
Еще в .Net MEF есть.