什么是运行时反射能做而编译时反射不能做的?



我看到一些观点认为Rust和m#可能会选择编译时反射,因为运行时反射很昂贵,并且会增加二进制文件的大小。到目前为止,我还没有找到任何好的比较,只有一些观点认为运行时反射"很少是一个好主意"。似乎探索内置编译时反射概念的语言都还在开发中。

我读过的资料:

  • http://joeduffyblog.com/2013/12/27/csharp-for-systems-programming
  • http://blogs.msdn.com/b/ericlippert/archive/2009/05/21/in-foof-we-trust-a-dialogue.aspx
  • 是反射可能在Rust,如果是这样,我怎么能调用一个未知的函数与一些参数?
  • http://www.reddit.com/r/rust/comments/1xck76/a_case_for_reflection_in_rust

下面是一些Ruby代码:

m = STDIN.gets.chomp
puts Object.respond_to?(m)

在编译时不可能这样做。我的意思是,使用CTFE,您可以在技术上在编译时运行这些代码,但作为运行程序的一部分,它实际上不起作用。

另一个有趣的:

$m = STDIN.gets.chomp
class Object
   define_method $m do
     puts "zomg"
   end
end
class Foo; end
Foo.new.send($m)

打印"zomg"

最新更新