1

在典型的长时间运行的进程环境(例如rails server.

令我震惊的是,该语言最清楚 stdlib 定义了哪些常量,并且非常适合知道从哪些文件以及何时加载了哪些常量,当然还可以重新加载它们。

有一些复杂的情况require 'foo',你也可以定义Bar,但这并不太难追踪,而且define_const使用过的情况也会使事情变得混乱。线程加载是另一个问题,但我确实可以看到允许线程从磁盘文件的当前状态重新加载自己的案例。(更快的测试服务器将是#1想法)

似乎它应该是一种语言功能,而不是许多不同的人需要为之推出解决方案的东西。

总而言之,为什么这不是语言功能?看起来应该是这样,尽管使用配置文件几乎完全限于长时间运行的开发服务器。

这里的另一个问题可能是“为什么 Rails 不使用内置的 DRB 模型来加快开发服务器并跳过所有的类重新加载”,这也是一个有趣的讨论,但现在不是。

4

1 回答 1

0

为了能够自动重新加载一个类,您需要知道该类是如何构建的。鉴于 Ruby 的动态性,这仅在最微不足道的情况下很容易。在最终形成最终形式之前,有一个类被扩展和显着改变是很常见的。确定重新创建类所涉及的步骤并不容易,跟踪这些可能会严重拖累性能。

这在很大程度上归结为一个事实,即一个类是方法、实例变量、类变量、常量以及其他模块和类的集合。与 C++ 等更多的静态类型语言不同,它们可以并且将在任何时间、任何地点、出于任何原因声明。类的状态不是可以简单地重新生成的。

Rails 重新加载类的方式是执行一些技巧来确保可以处理和重新加载有问题的类。Rails 还必须提供几个钩子来通知扩展一个类正在重新加载,这样他们就可以在重建后重新对其进行操作,否则许多扩展只会加载一次。

简而言之,表面上看起来微不足道的事情实际上非常棘手。

于 2012-09-27T14:36:23.323 回答