相关疑难解决方法(0)

最动态的动态编程语言

当它说明这一点时,似乎我必须同意这篇文章

[...]动态类型语言中的代码遵循静态类型约定

我遇到的很多动态语言代码确实看起来非常静态(思考PHP),而动态方法看起来有些笨拙或不必要.

大多数情况下,它只是省略类型签名,在类型推断/结构类型的上下文中,甚至根本不必暗示动态类型.

所以我的问题(并不意味着过于主观)是动态语言应用领域都是这些更高级的动态语言特性(不能在静态/编译语言中轻松复制)实际上和在语言使用.

例子:

  • 反射
  • 一流的延续
  • 运行时对象更改/生成
  • 元编程
  • 运行时代码评估
  • 不存在的成员行为

这些技术的有用应用是什么?

programming-languages

15
推荐指数
2
解决办法
2492
查看次数

如何通过堆栈跟踪访问本地?(模仿动态范围)

背景

即使可以在运行时编译C#代码,也不可能在当前范围中包含和运行生成的代码.相反,所有变量都必须作为显式参数传递.

与像Python这样的动态编程语言相比,人们永远无法真正复制完整的行为eval(如本例所示).

x = 42
print(eval("x + 1")) # Prints 43
Run Code Online (Sandbox Code Playgroud)

这个问题

所以我的问题是(无论它是否真的有用;))是否可以通过使用反射来模拟.NET中的动态范围.

由于.NET为我们提供了Diagnostics.StackTrace允许我们检查调用方法的类,因此这个问题归结为以下内容:( 如何)可以可靠地访问调用方法的本地

堆栈跟踪是否为我们提供了足够的信息来计算内存偏移量,或者托管代码中是否禁止这样做?

这样的代码是否有可能?

void Foo() {
   int x = 42;
   Console.WriteLine(Bar());
}

int Bar() {
   return (int)(DynamicScope.Resolve("x")); // Will access Foo's x = 42
}
Run Code Online (Sandbox Code Playgroud)

.net c# scope dynamic-languages

7
推荐指数
2
解决办法
472
查看次数