- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在构建一个类似电子表格的应用程序,其中许多小计算需要以树状结构拼接在一起。这些计算是用户定义的,我需要一种方法让用户在运行时输入它们。
我目前的方法是在 F# 中编写一个小的“表达式 DSL”,其中我使用 FParsec 解析输入,基于可区分的联合构建语法树,然后可以评估表达式。这很好用。
但是,我正在考虑将语言建立在 DLR 上。沿着这条路走下去有什么好处(解析输入,使用 Scripting.AST 而不是我自己的东西生成 AST,让 DLR 处理计算的执行)?
每次计算可能都非常小。计算之间的相关性将在更高级别上得到处理。
我能否期待更好的性能,因为 DLR 会为表达式生成 CIL 代码,还是开销会消耗掉它?
(至于使用像 IronPython 这样的现有语言,可能会很困难,因为我计划在语言语法中添加大量切片操作符和维度处理内容)
最佳答案
很难用如此宽泛的术语来回答一个问题,但这里有一些我的想法。
使用 F# 构建解析器听起来不错。
FSParsec 是一个很棒的库。我有点偏向于 FSLex 和 FSYacc。无论哪种方式,在 F# 中都有专门用于解析的库,可以节省您的时间。
使用 DLR 生成代码听起来没问题。
DLR 是动态代码生成的绝佳平台。但是,您的应用程序要具体得多。如果您仅限于计算值,则应使用 .NET 3.5 中的表达式树 API。此 API 旨在表示任意代码表达式。另一方面,DLR 被设计为运行时或动态语言。我并不是说这是不可能的,只是它不是适合这项工作的工具。
不要编译生成的代码。
如果您确实使用 DLR 来表示您的 AST,那么编译和执行的成本可能会远远高于简单地解释树。如果出现以下情况,请编译代码:A.) 您多次执行相同的函数/方法或 B.) 函数/方法非常复杂。
C# + DLR、IronPython、F# 或三者的某种组合都是不错的选择。最终,“正确”的选择是在尽可能快的时间内完成工作的选择。
关于f# - 是在 DLR 上创建一个小型表达式 DSL 还是在 F# 中手动编写?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1548172/
我在一个较大的 C# 项目的一小部分中使用 DLR,IronPython 是有问题的语言。 对于系统的某些部分,用户可以输入一个小脚本来为它们定制行为。我想要做的是能够限制他们使用无副作用的纯函数或在
首先,我已经阅读Making a CLR/.NET Language Debuggable,但是仍然难以实现。 我编写了一种玩具语言,该语言可以通过生成Linq表达式,然后调用LambdaExpres
.Net 4 将具有 DLR(动态语言运行时)。我知道它将用于 Iron Python 和 Iron Ruby 之类的东西。但这就是它的全部好处吗? DLR 有什么用处? DLR 是如何工作的? 最佳
是否可以从非托管代码(例如 C++ 或 Delphi)调用托管代码,特别是 IronRuby 或 IronPython? 例如,我们有一个用 Delphi 编写的应用程序正在迁移到 C#.NET。我们
我到处都读到 .net 4 中的新 DLR,他们说它的一个很好的用途是反射,并且总是显示的代码片段类似于 dynamic d = GetSomeObject(); d.DoSomething(); d
我打算创建一个 Web 服务,以尽可能快的速度执行大量手动指定的计算,并且一直在探索 DLR 的使用。 抱歉,如果本文很长,请随意浏览并了解总体要点。 我一直在使用 IronPython 库,因为它使
我正在考虑限制使用 C# 的 dynamic 关键字。我的initial time trials令人惊讶 - 100,000 次迭代的性能下降不到一秒(可能是由于 DLR 缓存)。 不过,我无权访问内
我需要 DLR 的帮助。我正在实现 IDynamicMetaObjectProvider 和 DynamicMetaObject,但我在获取预期的返回类型时遇到了一些问题。我在元对象中覆盖了 Bind
关闭。这个问题不满足Stack Overflow guidelines .它目前不接受答案。 想改善这个问题吗?更新问题,使其成为 on-topic对于堆栈溢出。 8年前关闭。 Improve thi
随着 .NET 4.0 测试版的推出,以及 .NET 动态语言运行时的更广泛的可用性,我猜这些类型的主题将变得“更热”。 我对 DLR 和 PowerShell 之间的概念差异感到困惑。在我看来,如果
我使用 Antlr 编写了一个 DSL,用于从我的语法文件生成词法分析器和解析器。解析器生成一个抽象语法树,其中包含我可以计算的各种节点(例如函数节点)。在函数节点的代码中,我负责绑定(bind)——
我目前正在使用 DLR 执行以下操作来创建和执行简单的 Python 计算: ScriptRuntime runtime = Python.CreateRuntime(); ScriptEngine
我需要指出正确的方向。我已将 Iron Python 脚本宿主嵌入到一个简单的 C# 应用程序中,但现在我需要了解锁定用户生成的 IronPython 或 IronRuby 脚本的安全性的最佳实践。
DLR 层的职责是什么? 最佳答案 来自 http://msdn.microsoft.com/en-us/library/dd233052.aspx 处的文档. The purpose of the
我正在尝试学习如何在 DLR 之上编写简单的脚本语言,方法是使用一个名为 ToyScript 的非常古老的 DLR 示例。但是 ToyScript 似乎不支持以下脚本结构,我想在我的实现中使用它: p
我对 DynamicMethods、表达式树和 DLR 之间的交互和关系有一些疑问。 我知道 LambdaExpression.Compile 在内部使用 ILGenerator 来创建委托(dele
我必须为 .NET 的静态类型语言开发一个编译器,我正在考虑为此使用 DLR,而不是构建所有部分(词法分析器/解析器、语法、语义、代码生成)。 DLR 是否适合这种情况?或者直接为 .NET 构建编译
我刚刚开始尝试更多地了解 .Net VM 基础,但立即被某些东西抛弃了。我知道有一个叫做 DLR 的新东西,它允许 C# 中的所有动态内容和 IronX 语言的运行。但是现在我正在阅读有关这种称为 B
我正在构建一个针对 .NET 的编译器,并且我之前已经直接生成了 CIL,但是生成 DLR 树将使我的生活变得更加轻松。我支持一些动态功能,即运行时函数创建和鸭子类型,但绝大多数代码是完全静态的。 既
来自维基百科关于 DLR 的条目, 看起来 DLR 的目的是为了使用 Python、Ruby 等语言。这就是 DLR 的全部吗?还有其他好处吗?为什么要为 ASP.net 项目或 Winform 应用
我是一名优秀的程序员,十分优秀!