【问题标题】:What scripting language for our .NET based IDE? [closed]我们基于 .NET 的 IDE 使用什么脚本语言? [关闭]
【发布时间】:2010-08-18 20:03:36
【问题描述】:

我们有一个用于机器自动化的 IDE,它允许用户通过视觉连接对象和组件来开发解决方案。他们还可以使用 C++ 和 C# 编写“插件”。 IDE 是使用 .NET 编写的。它的用户通常不是建立在传统的软件开发和编程领域,而是更多地从事技术/电气和自动化工程师方向,但他们都需要了解 C# 和 C++ 编程的基础知识。

如果我们要为 IDE 本身引入宏/脚本语言,包括交互式控制台(仅限设计时),我们应该选择哪种语言?它应该是一种动态脚本语言,在 .NET 和 DLR 方面都有良好的基础,因为它是面向未来的,具有良好的支持和良好的发展势头,但对于我们的特殊开发人员来说,学习曲线不会那么陡峭。理想情况下,如果您了解 C++ 和/或 C#,则使用起来应该完全直观——即使您不是坚如磐石的软件开发人员。

更新: 目前对我们最有吸引力的选项是使用动态编译的 C#。我们的用户可以继续使用 C#。正如CSI 所证明的那样,甚至似乎可以构建一个交互式控制台。你觉得这个选项怎么样?是否有任何我们(由于我们缺乏一般的脚本编写经验)尚未意识到的潜在缺陷/缺点?

【问题讨论】:

  • 好吧,看起来 DLR 将来不会得到支持,所以你要么摆脱“未来证明”的要求,要么使用 DLR 以外的东西。
  • @Richard - 他们为什么要这样做?
  • 它被合并到 .NET 4.0 框架中。并由 C# dynamic 关键字使用。不完全是即将死亡的迹象。
  • @Hans 那完全不同。
  • @Lucas 好吧,IronRuby 几乎已经死了,而且 IronPython 能否幸存下来还有很多疑问,如果两者都没有幸存,那么 DLR 就没有意义了。请参阅channel9.msdn.com/forums/Coffeehouse/565848-IronRuby-deadblog.jimmy.schementi.com/2010/08/…

标签: .net scripting dynamic-language-runtime design-decisions


【解决方案1】:

Python (IronPython) 将获得我的投票。它是一种动态语言,可用于编写 .NET 程序的脚本,并且可以交互地使用它(实际上尚未尝试与 IronPython 交互,但您当然可以使用“常规”python)。不幸的是,对于您的 C++ 和 C# 开发人员来说,它并不完全直观。

你可以只使用 C# 作为你的脚本语言(你可以在运行时编译和执行代码),但是你不会得到一个交互式控制台,而且它不是很像“脚本”。

我认为简单性在脚本语言中非常重要。 Python 中的“Hello World”就是 print "Hello World",在 C# 中,您需要命名空间、类、静态 Main 方法等。如果您想使用 C#,可以通过将用户提供的代码包装在编译之前的函数定义(或至少一个类),因此它们的“脚本”可以简单地是函数的内容。这会在一定程度上限制他们在脚本中可以做的事情,这可能是好是坏,这取决于你想要什么。如果他们需要多个类和函数,也许他们需要为您编写一个完整的插件。

【讨论】:

  • “类脚本”在现实生活中究竟意味着什么?哪些功能将脚本语言带到了桌面上,这些功能是 c# 所没有的重要/有用的。
  • 我的评论太长了,所以我编辑了我的答案。此外,使脚本语言与众不同的主要特性之一是非常动态的(并且是动态类型的)。虽然 .NET 4.0 中有新的动态扩展,但 C# 仍然是一种相当静态(和静态类型)的语言。
  • 所以拥有动态输入语言的主要原因是能够输入更少的字符?
  • 不,这是两个不同的问题。此外,“动态”语言不一定是动态类型的。对不起,如果我的回答有点混乱。
  • 我同意“脚本语言”应该很简单,因为您的用户可能不是专家级程序员。如果您需要这种功能和复杂性,我认为有很多基于 C# 的脚本选项。我编写了自己的解释器SILK,它的设计目的是更加简单和容易。
【解决方案2】:

我认为我们要么推出我们自己的基于 c# 的脚本环境,有点像非常酷的 CS-Script 的简化版本,要么我们会立即集成 CS-Script。

【讨论】:

    【解决方案3】:

    我在应用程序中嵌入了一个小 C# 编辑器并编译/运行结果

    阿拉

    var codeProvider = new CSharpCodeProvider( 
                  new Dictionary<string, string> { { "CompilerVersion", "v3.5" } } );
    
    var parameters = new CompilerParameters( );
    // add any of your 'library' dlls as references
    parameters.ReferencedAssemblies.AddRange( dlls.ToArray( ) );
    parameters.OutputAssembly = outputPath;
    CompilerResults r = codeProvider.CompileAssemblyFromFile( parameters, sourceFiles );
    

    【讨论】:

    • C# 对我们的用户最有吸引力。我们只需要确保您通常期望从脚本环境(例如交互式控制台)中获得的一切都确实存在。
    【解决方案4】:

    DLR 目前支持的动态语言 IronRuby 和 IronPython 的未来并不明朗。不清楚的是微软在这 2 方面的方向。在我从 The Gu 或更高版本那里听到之前,我会避免对这 2 中的任何一个做出决定。这对你今天没有帮助,为你的用户做出设计决定。我感觉 IronPython 会保留支持,但这只是毫无根据的猜测。

    对于 .NET 脚本,也可以考虑 Boo。

    Boo 是一种面向对象的静态类型编程语言,旨在利用公共语言基础架构对 Unicode、国际化和 Web 应用程序的支持,同时使用受 Python 启发的语法1,并特别关注语言和编译器可扩展性。一些值得注意的特性包括类型推断、生成器、多方法、可选的鸭子类型、宏、真正的闭包、柯里化和一流的函数。

    【讨论】:

    • The dynamic language runtime (DLR) is a new API in .NET Framework 4. It provides the infrastructure that supports the dynamic type in C# msdn.microsoft.com/en-us/library/dd264736.aspx
    • @Lucas:复制/粘贴的内容很棒。 C# 是编译的,而不是解释的。 OP 想要“动态脚本语言”的选项。不确定您的评论与 Boo 有什么关系。
    • 再次复制粘贴 :) 你说的是The future isn't clear for the DLR。很清楚,除非微软想在 C# 5+ 中替换它。即使他们这样做了,DLR 本身也是安全的,直到 C#4 不受支持。
    • @Lucas:确实,你是对的。 DLR 已经到位,并且至少与 .NET 4 一样长,并且希望更长。我应该更正我的措辞。
    【解决方案5】:

    如果你看看微软在其产品的脚本/自动化方面的发展方向,PowerShell 将是目标。

    开发您的自定义主机和提供程序应该很好地集成到您的 .NET 应用程序中。

    【讨论】:

      猜你喜欢
      • 2023-03-29
      • 2010-10-02
      • 2012-10-25
      • 2011-03-12
      • 1970-01-01
      • 1970-01-01
      • 2023-03-31
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多