【问题标题】:Why is there an F# Runtime being installed with Visual Studio 2010?为什么在 Visual Studio 2010 中安装了 F# 运行时?
【发布时间】:2010-08-18 20:53:10
【问题描述】:

我正在一台新机器上安装 Visual Studio 2010,并列出了已安装的默认组件。

其中有“Visual Studio F# 2.0 Runtime”,这似乎很奇怪,因为据我所知,所有 .NET 语言都被编译为 MSIL,然后被平等对待(这显然是不对的,因为有F# 运行时)。

所以我的问题出现了:不是所有的语言都编译为 MSIL 吗?如果是这样的话,那就意味着运行时分析器对于任何语言都应该是相同的,不是吗?如果确实如此,为什么 F# 的处理方式与其他语言不同?

任何想法将不胜感激!

【问题讨论】:

    标签: .net f# cil


    【解决方案1】:

    C# 和 VB 也有运行时。它们只是 DLL - .NET MSIL 程序集。碰巧 F# 运行时 不是 .NET 框架的一部分(它是一个单独的组件),而 C# 和 VB 运行时是框架的一部分(因此已经作为.NET)。

    (我不知道 VB 运行时到底有什么,我认为一堆 VB 特定的函数。我认为 C# 运行时 Microsoft.CSharp.dll 仅用于 dynamic。F# 运行时,FSharp.Core.dll,有各种各样的东西,比如函数,列表,异步,所有不属于 .NET 的 F# 东西。

    将这些东西称为“运行时”可能会造成混淆,它们只是“库”,但如果没有这些库,您将只能使用该语言的一个子集。在 C# 中,没有运行时,就不能使用动态。在 F# 中,没有运行时,您几乎无能为力,可能定义一些类和简单的方法,但无法使用列表或高阶函数或某些语言结构。我不知道VB。我猜一般来说,如果该语言的编译器将生成假定该库存在的代码,则该库应该被标记为“语言运行时”的一部分。因此,像 mscorlib.dll 这样的 .NET 东西可能可以被正确地称为所有语言的共享运行时的一部分(例如,支持 C# 中的 int 关键字之类的东西),而其他库只是为了支持特定的特定功能语言(如 Microsoft.CSharp.dll 以支持 dynamic)。)

    顺便说一句,Visual Studio 安装了 F# Runtime,因为 Visual Studio 中的部分 F# IDE 集成是用 F# 编写的,因此 VS 需要 F# 才能运行。 (F# 项目系统部分用 C#、部分用 F# 和部分用 VB 编写。)同样,VS 安装 .NET 4.0,因为 很多 VS 组件是用 C# 和 VB 编写的 - 那里是大量在 VS 中运行的托管代码。

    【讨论】:

    • 仅供参考,VB 运行时包含使 VB.NET 看起来更像 VB6 的东西。我想不出任何副手(我不怎么做 VB),但我知道,过去我在 C# 中使用过它们(虽然我不记得为什么)。
    • @pblasucci:确实,例如 LEN 和 MID 函数,以及许多其他函数:msdn.microsoft.com/en-us/library/c157t28f.aspx
    猜你喜欢
    • 1970-01-01
    • 2012-07-30
    • 2011-03-02
    • 1970-01-01
    • 1970-01-01
    • 2014-03-01
    • 1970-01-01
    • 2012-08-14
    • 2011-04-08
    相关资源
    最近更新 更多