.net的脚本语言,支持yield并保存vm的状态

时间:2010-11-15 21:40:23

标签: .net scripting embedding scripting-language

.Net是否有一种可嵌入的脚本语言支持某种收益(程序停止并将控制权交还给主机......下一次运行它继续停止的地方)?

此外,应该可以保存虚拟机的状态,并让它在稍后的某个时间继续。

EDIT1: 我已经看过了lua,虽然可以从c#访问全局变量,但是整个方法都会让人觉得很糟糕。

EDIT2: 我也在看ironruby,看起来人们可以查询和设置全局变量,但不能一次性完成所有变量。

6 个答案:

答案 0 :(得分:1)

用VB或C#编写,用一个定义良好的类树来保存你的所有状态。这个树将由一个根类组成,列表中的所有数据都是可序列化的。

在适当的时候,XML将所有内容串行化为流文件。

重新启动时,从保存的文件中反序列化,然后从上次停止的位置开始。

答案 1 :(得分:1)

Boo。
有一本关于使用boo制作自己的嵌入式DSL的书。我强烈推荐阅读(由伟大的奥伦):http://www.manning.com/rahien/
示例章节:http://www.manning.com/rahien/Sample1.pdf
以下是嵌入它的方式:
http://boo.codehaus.org/Boo+as+an+embedded+scripting+language

答案 2 :(得分:1)

bungee#是一个C#脚本。实际上,用c#和语法开发的编程语言与C#相同。 Bungee#将在短时间内成为一个开源项目,但尚未发布。您将能够在codeplex上找到源代码。我想这是你想要的东西。因为它几乎支持c#中的每个关键字,并且有定义的方法,您也可以在其中编写新方法。我希望你会喜欢它。 bungee link is this but not published yet

答案 3 :(得分:0)

您是否尝试过将C#用作“脚本语言”?有关可将c#作为脚本轻松集成到应用程序中的库,请参阅http://www.csscript.net。它使用.NET构建的编译器从文件或字符串创建和加载新的程序集。您可以在应用程序中执行任何操作,因为您拥有完整的c#。包括收益率。要暂停“VM”,您可以让脚本在一个线程中运行并暂停并恢复它。

答案 4 :(得分:0)

我建议再次看看lua,如果你觉得有什么东西是hacky,只要确保你做得对,然后将它包装在一个让你之后不那么hacky的课程中。如果这是一个问题,那么已经有existing个管理的lua解决方案可供使用。有时你根本无法找到一个非hacky解决方案,因为还没有人打扰制作一个。

答案 5 :(得分:0)

取决于上下文PowerShell可能是一个很好的候选人。 有关如何在.Net应用程序中托管PowerShell的文档 可以找到here,PowerShell支持在a上执行命令 per command bases以及添加chunks of code 要运行PipeLine

保存vm的状态听起来有点棘手我还没找到 证明PowerShell可以做到这一点。但是你可以 使用名为CmdLetExport-Clixml来保存状态 你可能感兴趣的任何对象。

如果您的脚本需要,

PowerShell将是一个很好的匹配 因为PowerShell Modules似乎与环境互动 除了厨房水槽以外的所有东西的弹出窗口This就是这样的 在CodePlex上搜索了。