【发布时间】:2013-05-22 21:23:35
【问题描述】:
在 Rebol 2 中有一个 user.r 和 rebol.r 文件,用于添加将在启动期间加载的代码。 Rebol R3 有什么变化?
【问题讨论】:
在 Rebol 2 中有一个 user.r 和 rebol.r 文件,用于添加将在启动期间加载的代码。 Rebol R3 有什么变化?
【问题讨论】:
在 Rebol 3 中,您使用 rebol.r 加载代码,它应该与 rebol 可执行文件位于同一目录中。它不会从用户的主目录加载rebol.r,因为该目录中的文件往往可以被以用户权限运行的程序写入,这使它成为放置恶意软件的好地方。假设您放置 rebol 可执行文件的位置更容易防止用户代码写入它。
文件user.r 保留用于放置用户特定的设置和偏好,以非程序性方言(我们尚未讨论)表示。即使它返回,它也不是加载代码的一种方式,原因与rebol.r 不是从用户的主目录加载的原因相同。它仅用于偏好。
如果您想加载特定于用户的代码,您可能希望使用rebol.r 中的代码显式执行此操作,但请注意安全问题。在 Rebol 3 中很少需要用户特定的代码。
您也可以考虑利用 Rebol 3 的模块系统。大多数库和实用程序代码最好在模块中定义,您可以通过设置system/options/module-paths 来决定将这些模块放在哪里。然后您的脚本按名称导入实际模块,而不必知道它们的实际位置。您还可以设置system/options/default-suffix,模块的默认文件扩展名,以防%.reb 不符合您的喜好。
您很少需要加载代码以供全局使用,因为对代码的需求是脚本本地的。一种这样的用途是在锁定安全性之前在rebol.r 中加载扩展,这样就无法加载更多的扩展;这使您可以限制对已批准列表的扩展。任何全局代码都可以延迟加载,因此不会因为不需要它的脚本而使系统混乱。延迟加载的代码在脚本请求之前不会真正导入。
【讨论】:
目前 user.r 作为安全风险已弃用。应该有一种方言的方法来实现这一点..但还没有人开始研究它。
见https://chat.stackoverflow.com/transcript/291?m=9149463#9149463
【讨论】: