标签: dynamic-language-runtime

IronPython - 最终用户编辑

我们目前正在研究如何将IronPython(脚本)嵌入到我们的C#应用​​程序中.

我们看到它将为我们的最终用户带来的好处,使他们能够加入我们的应用程序,但一个不断出现的问题是我们如何为最终用户提供能够识别我们不同的输入上下文的代码编辑能力应用.

我知道我们可以提供一个带语法高亮的简单文本编辑器,但是我们如何更进一步,允许用户针对我们从应用程序公开的对象测试他们的脚本.请记住,我们将根据入口点的上下文公开不同的对象.

您如何允许最终用户在您的应用程序中测试,编写和编辑脚本?

PS - 我是新来的,所以如果我做得不对,请告诉我!

c# ide scripting ironpython dynamic-language-runtime

9
推荐指数
1
解决办法
1784
查看次数

使用Dynamic添加方法?

我试图在运行时添加功能,类似于:

static void Main()
{
 dynamic d = new Duck();
 d.Quack =(Action) (() => Console.WriteLine("1")); //decalre a new method on runtime ??
 d.Quack(); 

}

public class Duck : System.Dynamic.DynamicObject
{
   //...
}
Run Code Online (Sandbox Code Playgroud)

'UserQuery.Duck'不包含'Quack'的定义

不动态应该允许我这样做吗?

全新ExpandoObject是唯一的解决方案吗?

我有我的鸭类.我该如何制作Expando? - 我可以像鸭子一样做鸭子吗?

.net c# dynamic-language-runtime dynamic .net-4.0

9
推荐指数
1
解决办法
6912
查看次数

"是"运算符如何与动态对象一起使用?

is运营商如何处理DLR?

为了使我的问题更加明确,请考虑以下签名:

 public bool Is<T>(Func<dynamic> getInstance)
 { 
     return getInstance() is T;
 }
Run Code Online (Sandbox Code Playgroud)

默认情况下,Is<T>返回需要什么条件true?此外,DLR是否提供任何机制来定制此行为?

c# dynamic-language-runtime dynamic c#-4.0

9
推荐指数
1
解决办法
575
查看次数

使用DLR进行(主要)静态语言编译

我正在构建一个针对.NET的编译器,我以前直接生成了CIL,但生成DLR树将使我的生活更容易.我支持一些动态功能,即运行时函数创建和ducktyping,但绝大多数代码都是完全静态的.

所以现在已经解释过,我有以下问题:

  • 除了MSDN博客上的小例子之外,DLR是否已用于静态编译?
  • 如果是这样,取得了什么样的表现?
  • 如果没有,有什么从根本上阻止这种情况?
  • 有没有比使用DLR或直接发射IL更好的生成代码的机制?

任何对此的见解或对博客/代码/会谈的参考将不胜感激.

.net compiler-construction cil dynamic-language-runtime

8
推荐指数
1
解决办法
592
查看次数

JScript.NET可以用来编写.NET应用程序的脚本吗?

由于MS 似乎在服务器端(ASP.NET Futures)和客户端(Silverlight)的最新DLR中杀死了托管JavaScript,所以有人成功使用非过时的API来允许使用JScript.NET编写应用程序对象的脚本和/或可以解释如何这样做?Mono/JScript解决方案也可以接受,如果它稳定并满足下面的要求.

我们感兴趣的是将使用Microsoft JScript引擎和ActiveScript API的脚本宿主升级到具有更高性能和更易扩展性的东西.我们有超过16,000个服务器端脚本,重量超过42MB,因此重写为另一种脚本语言是不可能的.

我们的具体要求是:

  • 比Microsoft JScript(ActiveScript)引擎更好的性能
    • 更好的运行时性能和/或
    • 保留预解析或编译的脚本(不要在每次运行时重新解析)
    • 较低或相等的内存消耗
  • 完整的ECMA-262 ECMAScript兼容性
    • 可以容忍一点移植
  • 将自定义对象注入脚本命名空间
    • .NET对象(不是硬性要求)
    • 用.NET包装的COM对象或COM对象
  • 从Script实例化COM对象
    • àla"new ActiveXObject(progid)"
    • 鉴于前面的优先级低
  • 包含文件
    • 将"帮助程序脚本"预加载到脚本执行上下文中
    • "包含"功能或声明(如上所述,易于创建)
  • 支持全局范围的代码
    • 执行全局范围的代码
    • 保留在全局范围初始化的值
    • 从全局范围中提取值
    • 在全球范围内注入和替换值
  • 调用脚本定义的函数
    • 带参数
    • 并可访问先前初始化的全局范围
  • 源级调试
  • 商业或开源支持
  • 非过时的API

mono automation dynamic-language-runtime jscript.net managed-jscript

8
推荐指数
1
解决办法
2195
查看次数

是否可以使用DLR加载和执行C#代码段?

我发现的关于DLR的大部分材料都与IronPython有关.你能用DLR解析和执行C#吗?如果是这样,那么会阻止您在拥有大约30个用户的Web服务器上尝试此操作吗?

更具体地说,我想在用户首次启动工作流时编写工作流对象的配置脚本.根据一年中变化的条件,工作流可能从不同的步骤开始,因此运行配置脚本似乎是处理变化的好方法.

c# dynamic-language-runtime embedded-language

8
推荐指数
1
解决办法
1868
查看次数

动态地将成员添加到动态对象

我正在寻找一种动态添加成员动态对象的方法.好的,我想需要一点澄清......

当你这样做:

dynamic foo = new ExpandoObject();
foo.Bar = 42;
Run Code Online (Sandbox Code Playgroud)

Bar属性将在运行时动态添加.但代码仍然"静态"引用Bar(名称"Bar"是硬编码的)...如果我想在运行时添加属性而不知道它在编译时的名称怎么办?

我知道如何使用类的方法使用自定义动态对象(我实际上是几个月前的博客)DynamicObject,但是如何使用任何动态对象?

我可以使用IDynamicMetaObjectProvider界面,但我不明白如何使用它.例如,我应该将哪个参数传递给GetMetaObject方法?(它期待一个Expression)

顺便说一句,你如何对动态对象进行反射?"定期"反思TypeDescriptor并不显示动态成员......

任何见解将不胜感激!

reflection dynamic-language-runtime dynamic .net-4.0 c#-4.0

8
推荐指数
3
解决办法
3651
查看次数

是否有可能将.Net DLR托管在"防止白痴"的沙箱中?

我想以这样一种方式托管动态语言运行时(DLR),以便在其中运行任意脚本的用户不能使该进程失效?

DLR托管规范描述了如何举办DLR在一个单独的ApplicationDomain.这允许拆除和卸载脚本运行时并通过CAS限制某些操作(例如,我可以限制文件系统访问或禁止使用反射).

但有没有办法,例如: - 限制脚本使用的最大内存量? - 限制脚本创建的线程数? - 检测死锁脚本?

我认为使用为SQL Server开发的非托管.net托管API可以实现这种精细控制.这是方向吗?是否有这种通用.net沙盒的开源项目?

以下是我发现的一些可能有用的参考资料:

ironpython ironruby dynamic-language-runtime

8
推荐指数
1
解决办法
427
查看次数

使用在运行时在String中定义的名称调用动态对象的成员

我想在利用DLR绑定机制的同时访问对象上的属性.

  • 我不能使用本机绑定机制(dynamicC#中的关键字),因为我在编译时不知道属性名称;
  • 我不能使用反射,因为它只检索静态类型信息;
  • IDictionary<string, object>我所知,转换为只解决了选择实现该接口的动态类的情况(例如ExpandoObject).

这是演示代码:

    static void Main(string[] args)
    {
        dynamic obj = new System.Dynamic.ExpandoObject();
        obj.Prop = "Value";
        // C# dynamic binding.
        Console.Out.WriteLine(obj.Prop);
        // IDictionary<string, object>
        Console.Out.WriteLine((obj as IDictionary<string, object>)["Prop"]);
        // Attempt to use reflection.
        PropertyInfo prop = obj.GetType().GetProperty("Prop");
        Console.Out.WriteLine(prop.GetValue(obj, new object[] { }));
        Console.In.ReadLine();
    }
Run Code Online (Sandbox Code Playgroud)

.net dynamic-language-runtime

8
推荐指数
1
解决办法
2458
查看次数

如何使用与其他DLR语言类似的API在ac#app中托管PowerShell 3.0

我一直在玩ac#app,主持IronPython,IronRuby和(希望)PowerShell.由于IronPython和IronRuby完全基于DLR构建,因此使用它们的API几乎完全相同.

IronPython.Hosting.Python.CreateEngine()
Run Code Online (Sandbox Code Playgroud)

IronRuby.Ruby.CreateEngine()
Run Code Online (Sandbox Code Playgroud)

两者都创建Microsoft.Scripting.Hosting.ScriptEngine的实例.有没有希望强制PowerShell 3.0创建ScriptEngine?我没有找到很多关于这个主题的内容,除了PowerShell 3.0似乎比以前的版本更多地建立在DLR 上(参见http://huddledmasses.org/powershell-3-finally-on-the-dlr.

您似乎无法将使用以下内容创建的PowerShell引擎强制转换为ScriptEngine.

System.Management.Automation.PowerShell.Create()
Run Code Online (Sandbox Code Playgroud)

我怀疑,如果我真的想通过相同的API处理PowerShell,我需要创建自己的包装PowerShell主机的ScriptEngine.

c# powershell dynamic-language-runtime powershell-3.0

8
推荐指数
1
解决办法
521
查看次数