При отсутствии технологической возможности остановить часть системы, придётся останавливать её целиком.

ну, в C# есть выгрузка доменов. какой-нибудь там XSP-сервер их может использовать.
этого вполне достаточно, чтобы обновлять, например, код IRC-бота без отключения от IRC-сервера.

в языках, плохо поддерживающих горячую замену, систему разбивают на мелкие части, чтобы повысить управляемость.
Но это фактически костыли, компенсирующие отсутствие настоящей горячей замены, которая есть в довольно немногих инструментах. Такие костыли имеют свою высокую стоимость, в терминах размера системы, её суммарной сложности, сложности поддержки, проблем совместимости между компонентами, производительности. Возникает куча совершенно лишних интерфейсов.

что такое "настоящая" горячая замена? где сравнения стоимостей?

на лиспе где-нибудь 40 лет назад писали то, что стало современными СУБД, 20 лет назад отлаживали спутник на орбите Марса, а сегодня на лиспе написан военный искусственный интеллект для управления вооружёнными силами США в ходе войны.

весьма косвенный аргумент. И если покопаться в этом интеллекте, там наверняка ещё много других технологий.

Если вам кажется, что я предлагаю что-то идиотское, это скорее говорит о вашей некомпетентности, чем о моём идиотизме

невежливо.

С# всю свою историю двигался в направлении полной реализации того, что есть в Лиспе, но на сегодняшний день сишарпу до лиспа всё ещё далеко.

голословно.

стабильность - признак мастерства

Система работы, где правки идут сразу на бою и силами разработчиков, вызывает только усмешку. ... В наше время - разработчик перестал принадлежать предприятию. Чаще он - сторонняя организация и следовательно не несёт прямой ответсвтенности за последствия alter-ов. И пускать его к консоли это всё одно что обезьяне гранату дать.

почему бы не разделить механизм обновления кода и структур данных на несколько частей?
Собственно выполнение замен - это только одна из операций.

1. выгрузить данные из таблицы во внешний файл
2. уничтожить её (drop table)
3. создать её снова с новым полем (create table)
4. загрузить данные из внешнего файла

Можно создать вторую таблицу и перегружать из старой таблицы в новую, без всяких файлов.

Что есть alter table? Это и есть горячая замена определения класса (ну ладно, структуры). Горячая не потому, что она делается на боевом сервере, а потому, что не нужно останавливать базу и потому что сохраняются данные. Заменим мысленно слово table на слово record, struct или class, а записи в таблице заменим мысленно на экземпляры класса. Получится, будто бы мы в работающей программе поменяли определение типа, а данные при этом сохранились. Новое поле заполнилось чем-то по умолчанию.

копирование будет почти в любом случае. Нельзя просто так взять и вставить поле в середину объекта (хотя могут быть частные варианты с выравниванием данных на границы чего-нибудь). Мы же объекты не по столбцам храним (вот, кстати, идея для ЯП, чисто программистская, непродаваемая)...

Если дропнуто поле, то откатив миграцию, поле мы вернём, но данные в него - уже не вернём. Или вы хотите сказать, что эта система и данные тоже возвращает на место?

бекапы? нет, не слышали. Ну дальше, конечно, написано что слышали и всегда так и делаем.