Tag: dynamic language runtime

C ++ / CLI中使用的动态C#对象

我目前正在构建一个c ++ / cli互操作库。 该库将由c#和vb.net应用程序使用,我想使用.Net 4动态类型。 我有一个配置模块使用动态成员访问来引用配置键,这在c#中工作得很好但是在c ++ / cli中给我带来麻烦(并非完全出乎意料)有没有办法在C ++ / CLI中使用这个库(例如通过直接调用TryGetMember()或其他东西)? 如果C ++ / CLI库然后将动态配置传递给用C#编写的派生类,那么C#是否仍然能够使用动态成员访问? 请注意,基类是在c ++ / cli中定义的,因此我无法使用dynamic关键字。 (或者我会吗?)

使用编译的IronPython标准库,C#应用程序的工作速度要慢得多

当我从标准库中加载模块作为此应用程序中的源.py文件时,结束后经过的时间大约等于4秒: Stopwatch watch = Stopwatch.StartNew(); ScriptEngine engine = Python.CreateEngine(); ScriptScope scope = engine.CreateScope(); ICollection paths = engine.GetSearchPaths(); paths.Add(@”C:\Users\Montgomery1944\Documents\Libs\IronPython-2.7.1\Lib”); engine.SetSearchPaths(paths); ScriptSource source = engine.CreateScriptSourceFromString( @”from distutils import dir_util import ftplib import os import tempfile import zipfile”); source.Execute(scope); watch.Stop(); Console.WriteLine(watch.Elapsed.Seconds); Console.ReadLine(); 但是当我从使用脚本编译的标准库加载模块时: import System import pyc def get_files(dir): res = [file for file in System.IO.Directory.GetFiles(dir, ‘*.py’)] dirs […]

与IIS 7.5结合使用的动态语言运行库中的错误

我为这个问题长度道歉,但我认为你们都觉得值得。 在开始之前,让我说我真的想要生成一个孤立的控制台应用程序,但遗憾的是,事实certificate这是不可能的。 该错误不会发生在控制台应用程序中。 它不会发生在自包含的ASP.NET应用程序中。 它仅在Windows 7上的IIS 7.5中运行时发生。 该错误似乎与动态语言运行时有关,因为它涉及__TransparentProxy (通过WCF)和dynamic变量(int)的组合。 产生问题的那一行是调用一个传递代理和动态int的静态方法(碰巧不包含方法体)。 调用该方法后,w3wp.exe进程会占用整个CPU并开始非常快速地增加内存(对我来说,每秒大约100兆,尽管它可能因为GC而逐渐减少)。 若要重现此错误,请在Visual Studio中创建一个新的ASP.NET网站(“新建”|“项目”“C#”|“Web”|“ASP.NET Web应用程序”)。 然后在IIS中创建一个新站点,其主目录是您的新项目。 (另外,为每个人提供对该文件夹的完全读/写访问权限并确保应用程序池使用.NET 4.0)为新站点提供特定端口,如7080.最后,将此代码粘贴到Global.asax.cs中: public class Global : System.Web.HttpApplication { void Application_Start(object sender, EventArgs e) { dynamic dynamicId = 5; var serviceUrl = “http://localhost:7182/FooServices.svc”; ChannelFactory factory = new ChannelFactory(new WSHttpBinding(), new EndpointAddress(serviceUrl)); factory.Open(); IFooServices fooServices = ((ChannelFactory)factory).CreateChannel(); BlowUpTheProgram(fooServices, dynamicId); // This line […]

c#4中的DLR和Javascript解释?

我想使用DLR从c#执行javascript代码。 所以我用c#和Jint编写了一个简单的代码: var script = @” function show( ) { return parseInt(‘123asd’); //in js it’s 123 }; return show();”; var result = new JintEngine().Run(script); Console.WriteLine(result); javascript中的parseInt(‘123asd’)是: 123 但我得到的结果是: 也许我看不到全貌,但如果世界另一端的程序员发给我他的脚本文件,我(和他)期望结果是一致的! 如果我弄错了,在什么情况下我会在.Net上运行其他代码? (我必须对每一行代码都 非常怀疑 ……)

DLR返回类型

我需要一些DLR帮助。 我正在实现一个IDynamicMetaObjectProvider和DynamicMetaObject,但我遇到了一些问题,获得了预期的返回类型。 我在metaobject中覆盖了BindInvokeMember,我可以看到所有的args类型但没有返回类型。 有人知道如果可能的话我会怎么做? 我知道返回类型是动态的,但如果你调用的东西依赖于返回类型会怎样。 除非我知道消费者期望的返回类型,否则我不知道要在DynamicMetaObject中执行哪个操作。 更新二 我不能在这里粘贴我的实际代码,因为它调用各种工作的东西。 下面是一些示例动态对象代码。 public class TestDynamicMetaObject : DynamicMetaObject { public TestDynamicMetaObject(Expression expression, object value) : base (expression, BindingRestrictions.Empty, value) { } public override DynamicMetaObject BindInvokeMember(InvokeMemberBinder binder, DynamicMetaObject[] args) { Delegate method = new Func(Test); return new DynamicMetaObject( Expression.Call(method.Method), BindingRestrictions.GetInstanceRestriction(Expression,Value), Value ); } public static int Test() { return 10; […]

C#DLR,使用Dynamic关键字进行数据类型推断

只是问问而已 : 为什么’withOffset’变量被推断为动态,因为Parse方法返回Struct ? dynamic str = “22/11/2013 10:31:45 +00:01”; var withOffset = DateTimeOffset.Parse(str); 并在明确地将其退回到Struct之后? dynamic str = “22/11/2013 10:31:45 +00:01”; var withOffset = DateTimeOffset.Parse((string)str); 由于DateTimeOffset.Parse的返回类型是DateTimeOffset,因此编译器必须知道。 牢记这一点,它在运行时调用的任何方法,返回始终是DateTimeOffset。 规格说明 由于您的方法将dynamic作为参数,因此它符合“动态绑定”的条件 有点可疑。 有这样的规范有什么意义? 或者在什么情况下DateTimeOffset.Parse不会返回STRUCT(暂时忘记DLR ..)? 编译器需要聪明,如果类中的所有方法/重载具有相同的返回类型以从长远来看获得性能优势。

电话网站解释?

扫描互联网,我很难以一种简单的方式理解 – 术语呼叫网站(@dlr)。 我一直在这里读到CallSite是: 一个网站说 调用方法的位置。 一本书说: 呼叫网站。 这是DLR的一种primefaces – 可以被视为单个单元的最小代码片段。 一个表达式可能包含许多呼叫站点,但行为是以自然方式构建的,一次评估一个呼叫站点。 对于剩下的讨论,我们一次只考虑一个呼叫站点。 有一个小的呼叫站点示例是有用的,所以这里是一个非常简单的,其中d当然是动态类型的变量 d.Foo(10); 调用站点在代码中表示为System.Runtime.CompilerServices.CallSite。 另一本书说: 编译器发出的代码最终会生成一个描述操作的表达式树,由DLR在运行时绑定的调用站点管理。 呼叫站点本质上充当呼叫者和被呼叫者之间的中介。 对不起,我不知道这3个解释在哪里合并为一个简单的解释。 我很乐意得到一个简单的解释: 我可以解释一下我的妻子 – 电话网站是什么?

IronPython DLR; 将参数传递给编译代码?

我目前正在使用DLR创建和执行一个简单的python计算: ScriptRuntime runtime = Python.CreateRuntime(); ScriptEngine engine = runtime.GetEngine(“py”); MemoryStream ms = new MemoryStream(); runtime.IO.SetOutput(ms, new StreamWriter(ms)); ScriptSource ss = engine.CreateScriptSourceFromString(“print 1+1”, SourceCodeKind.InteractiveCode); CompiledCode cc = ss.Compile(); cc.Execute(); int length = (int)ms.Length; Byte[] bytes = new Byte[length]; ms.Seek(0, SeekOrigin.Begin); ms.Read(bytes, 0, (int)ms.Length); string result = Encoding.GetEncoding(“utf-8”).GetString(bytes, 0, (int)ms.Length); Console.WriteLine(result); 其中“2”打印到控制台,但是; 我想得到1 + 1的结果,而不必打印它(因为这似乎是一个昂贵的操作)。 我将cc.Execute()的结果赋给的任何内容都为null。 有没有其他方法可以从Execute()获取结果变量? […]

使用DLR运行使用CompileAssemblyFromSource生成的代码?

继续这个优秀的答案后 ,我想知道使用dynamic关键字的DLR是否允许为生成的程序集编写代码的方式更简洁。 例如,上述答案的代码可以: using (Microsoft.CSharp.CSharpCodeProvider foo = new Microsoft.CSharp.CSharpCodeProvider()) { var res = foo.CompileAssemblyFromSource( new System.CodeDom.Compiler.CompilerParameters() { GenerateInMemory = true }, “public class FooClass { public string Execute() { return \”output!\”;}}” ); var type = res.CompiledAssembly.GetType(“FooClass”); var obj = Activator.CreateInstance(type); var output = type.GetMethod(“Execute”).Invoke(obj, new object[] { }); } 变成这样的东西: using (Microsoft.CSharp.CSharpCodeProvider foo = new […]

为什么我会收到此.NET错误 – “TypeError:expected List ,得到List ”

我重构了一些代码,现在我在调用函数时遇到了这个错误。 但是一切似乎都很好,我甚至比较了旧代码和新代码之间的failing_argument.GetType().AssemblyQualifiedName ,它们是相同的。 什么想法可能是错的? 函数的调用是在IronPython代码中,函数是在C#代码中(在重构过程中没有改变的程序集)。 什么样的事情会产生这个错误? 编辑:完整的IronPython回溯: Traceback (most recent call last): File “D:\Work\Framework\python\ide\tab_manager.py”, line 57, in add_chart_tab chart_tab = ChartTab(self.__main_window, self, tab_item, name, chart_descriptor) File “D:\Work\Framework\python\ide\chart_tab.py”, line 64, in __init__ self.__chart = Chart(self, self.__gui_cfg, self.__base_cfg, self.__chart_descriptor, self.__scroll_bar) File “D:\Work\Framework\python\ide\chart.py”, line 57, in __init__ self.update_topology(empty=False) File “D:\Work\Framework\python\ide\chart.py”, line 93, in update_topology self.update_config() File “D:\Work\Framework\python\ide\chart.py”, line […]