题
我一直梦想着用脚本语言创建一个“真正的可执行文件”。有了基于 DLR 的 Python 和 Ruby 实现,这是否更接近现实了?
我想创建一个“真正的应用程序”:
- Windows 窗体应用程序
- 控制台应用程序
- Windows 服务
并让分发单位是编译后的exe。
这可能吗?或者 MS 刚刚创建了基于 .NET 的脚本文件解释器?
如果您正在这样做,您将如何构建您的应用程序/项目?您是否使用 C# 和 DLR 代码的混合体?
解决方案
IronPython 或 IronRuby 项目可以很好地编译为 dll 或可执行文件,并且在各个方面都是“真正的”可执行文件,但运行它们的人必须安装相关的 .Net 框架和依赖项(依赖项可能存在于默认情况下位于同一目录,但必须安装框架)。与 Visual Studio 的集成仍然不存在,但是像这样的项目 IronPython工作室 使用免费的VS Shell效果不错。DLR 作为 VS 2010 中 c# 动态的依赖项的存在意味着与 Iron* 组的 VS 集成将成为一个更容易的目标和更高的优先级。
结果绝不会被解释(CIL 在运行时或通过 ngen(如果需要)被编译成机器代码),并且 DLR 的某些方面意味着某些操作以与后期绑定类似的方式推迟,但通过一些复杂的缓存机制更加强大和关键与天真的解释器相比,这使得它相对较快。
许多传统的解释型脚本语言正在创建自己的基于 VM 的编译策略或利用现有策略(例如 JVM、.Net CLR 或开放策略,例如 LLVM),因为这在许多常见情况下会导致性能显着提高。
就 Iron* 语言而言,以 MS CLR 作为基础的好处是,生成的可执行文件可以在最常见操作系统系列的绝大多数安装上“正常工作”。与 Java 不同的是,在许多操作系统中,jar 文件不能通过直接单击 / 或通过 shell“执行”来“运行”。不利的一面是,与基于 JVM 或 LLVM 的解决方案相比,这降低了互操作性,其中平台支持更广泛,但不可避免地在操作系统集成方面更加多样化。