Lua и большинство языков сценариев в этом отношении не поддерживают наиболее обобщенную форму «горячей замены», как вы ее определяете. То есть вы не можете гарантированно изменить файл на диске, и любые изменения в нем распространяются в исполняющую программу.
Тем не менее, Lua и большинство языков сценариев вполне способны к управляемым формам горячей замены. Глобальные функции - это глобальные функции. Модули просто загружают глобальные функции (если вы используете их таким образом). Поэтому, если модуль загружает глобальные функции, вы можете перезагрузить модуль снова, если он был изменен, и эти ссылки на глобальные функции изменятся на вновь загруженные функции.
Однако , Lua и большинство скриптовых языков в этом отношении не дают никаких гарантий по этому поводу. Все, что происходит, - это изменение глобальных данных о состоянии. Если кто-то скопировал старую функцию в локальную переменную, он все равно может получить к ней доступ. Если ваш модуль использует данные о локальном состоянии, новая версия модуля не может получить доступ к состоянию старого модуля. Если модуль создает какой-то объект, который имеет функции-члены, если эти члены не извлекаются из глобальных переменных, эти объекты всегда будут ссылаться на старые функции, а не на новые. И так далее.
Кроме того, Lua не безопасен для потоков; Вы не можете просто прервать lua_State
в какой-то момент и попытаться загрузить модуль снова. Так что вам нужно будет установить какой-то конкретный момент времени, чтобы он мог проверить вещи и перезагрузить измененные файлы.
Так что вы можете это сделать, но это не "поддерживается" в том смысле, что это может просто произойти. Вы должны работать над этим, и вы должны быть осторожны с тем, как вы пишете вещи и что вы вкладываете в локальные и глобальные функции.