Я думаю, что это идея динамита и особенность, которую я хотел бы иметь! Задумывались ли вы о том, как бы вы хотели взаимодействовать с этой функцией?
obj1 = Foo()
compiler.Recompile(Foo, '/some/path/myapp/newsrc/foo.blah');
obj2 = Foo()
// Would this be True?
type(obj1) == type(obj2)
Я предполагаю, что вы ожидаете, что существующие экземпляры останутся неизменными после перекомпиляции?
Кажется, что с функциями было бы проще, если бы они сохраняли один и тот же прототип, но делать это с классами, похоже, было бы грязно.
Кроме того, что делать с потоками?
Thread.start(wait 1; bar();); // bar is a function
compiler.Recompile(bar, '/some/path/myapp/newsrc/bar.blah');
Допустим, в нашем потоке мы начинаем вызывать "bar" во время перекомпиляции. Блокирует ли вызов, пока не будет выполнена перекомпиляция, а затем вызовет новую функцию? Старая функция все еще существует до завершения компиляции? Что если после перекомпиляции у нас есть указатель на функцию, куда он указывает? К исходной функции или к новой?
У кого-нибудь есть мысли о том, как это можно осуществить прямым путем?