【问题标题】:F#: is there no UI (like WPF) for it?F#:它没有 UI(如 WPF)吗?
【发布时间】:2009-06-28 11:41:22
【问题描述】:

我最近在 F# 上看到了一些视频。它似乎主要用于服务或类?我在 VS2010 Beta 中没有看到“F# WPF”应用程序?

【问题讨论】:

    标签: wpf f#


    【解决方案1】:

    F# 实际上有一些非常好的构造用于创建事件驱动的 UI 应用程序,例如 First Class EventsObject Expressions,从构造函数调用属性设置器,例如:

    new Form(Text="My Window Title", Width=600, Height=400),

    还有很多其他的。

    但是,在 VS 中创建 表单设计器 需要为您的语言提供 CodeDom。当前的 CodeDom 架构运行良好,只要您的语言看起来完全像 C# 或 VB;它不适合生成 F# 代码(这是来自我现在无法找到的网络广播或采访)。它还需要部分类,如果我没记错的话,从 Beta 1 开始,语言不支持这些类。F# 团队决定将资源用于增强语言的其他部分,而不是专注于第一个版本中的设计器支持,比如异步和并行编程等。

    这意味着在 F# 中创建 UI 时至少有 4 种选择:

    • 手动编写所有 UI 代码,适合简单的应用;
    • 将您的 F# 代码创建为一个库来处理“困难部分”,例如异步和并行代码或以计算为中心的代码,并从 C#/VB 调用它;
    • 将您的 UI 代码创建为 C#/VB 库,并将其从 F# 驱动并将事件处理委托给 F#;或
    • 使用 DSLComputation Expression (monad) 来简化手动构建 UI(刚刚在此答案中寻找其他链接时发现了这一点)。

    其中,从 F# 调用 C# UI 库可能是最灵活的,同时仍保留熟悉的范例。但是,使用计算表达式手动快速构建 UI 确实值得一看。

    【讨论】:

    • 另外,这里有一系列关于在 F# 中创建 WPF 应用程序的优秀文章:blogs.msdn.com/dsyme/archive/2008/01/05/…
    • DannyAsher on hubFS.com 采用了上面答案中链接的计算表达式(monad)并将其直接应用于 WPF。有一些问题,但 F# 开发团队的 Brian 帮助我们对其进行了调试(滚动到线程末尾)。在此处查看主题:cs.hubfs.net/forums/thread/11127.aspx
    • 请注意,您可以在 C# 构造函数中调用属性设置器: var f = new Form { Text="My Window Title", Width=600, Height=400 };
    【解决方案2】:

    使用 F# 3.0 和 XAML type provider,可以在 Visual Studio 11 中为 F# 创建 WPF 设计器。请参阅 http://www.navision-blog.de/2012/03/22/wpf-designer-for-f/

    【讨论】:

      【解决方案3】:

      您当然可以在 F# 中创建 GUI - 毕竟它只是另一种 .NET 语言。

      Tomas Petricek 的书,Functional Programming for the Real World(我提供了一些帮助)有各种 GUI 示例。如果您想查看示例,可以下载source code

      诚然,GUI 编程的某些方面非常不能很好地映射到函数式风格,因为其中涉及到很多变化,但有一些方法和手段可以解决这个问题:)

      【讨论】:

      • 哦,所以我可以说 F#(或函数式编程)主要用于开发库以供其他东西(例如 C#)使用?
      • 不,我认为这种概括也不合适。
      • 我在某种程度上同意,但是 F# 语言的类型使得创建 GUI 变得容易。无论它是否具有良好的功能风格。 :)
      • 您能否详细介绍一下围绕它的方式和方法?
      • @Ken:恐怕我还不够专业,无法在这方面提供好的建议。
      【解决方案4】:

      我们出售一个名为 F# for Visualization 的商业库,它是用 100% F# 代码编写的,并使用 WPF 来提供交互式图形以及来自您的 F# 代码的排版数学:


      (来源:ffconsultancy.com

      所以当然可以使用 WPF 在 F# 中编写 GUI 应用程序。

      【讨论】:

        【解决方案5】:

        它是一种 .NET 语言,因此可以使用 .NET 类库。这意味着 Winforms、WPF 或您可能在 C# 中使用的任何其他东西。

        【讨论】:

          【解决方案6】:

          根据 James Hugard 的链接更新

          目前 F# 不会被太多地用于 GUI,因为它不是最重要的用例。来自Don Syme's blog

          在第一个受支持的版本中,我们的目标必须是专注于 F# 的核心优势,以便使用 F# Interactive 进行探索性编程、使用数据进行编程以及实现并行和异步组件。

          虽然理论上您可以使用 F# 和标准 GUI 库,但如果您需要 GUI,您应该使用 VB 或 C#:

          F# 用户应使用 Visual Studio 设计器工具生成 C# 或 Visual Basic 代码并将这些组件合并到他们的 F# 应用程序中。

          Syme 认为,从长远来看,“生成 F# 代码的面向演示的设计器工具”“绝对可行”。

          【讨论】:

          • 看看 wxHaskell 或 Gtk2Hs :) AFAIK,F# 可以与 WPF 集成。
          • 当然,您可以很好地进行 OOP 和状态。尽管如此,重点还是在语言的功能方面。否则,没有GUI项目类型的原因是什么?
          • @weiqure - 对于其他 ML 派生语言,这种说法可能更正确,但只是稍微如此。恕我直言,F# 设计人员在总体上使 OOP,特别是 .NET 集成非常自然,并且在许多情况下比在 C# 中容易得多;例如对象表达式、隐式构造函数、属性访问器、构造函数中的属性设置器、lambda 到委托的自动转换、一流事件,更不用说由于是 ML 派生语言而进行的类型推断。其中大部分直接支持有状态的、可变的 OOP 风格的编程。
          • 很抱歉造成了误解。 F# 很好地支持这些特性。 GUI 编程并不比 C# 或 VB 差。但我仍然认为这不是该语言的主要用例,我认为这是 WPF 中没有“F# WPF”项目的原因,而最初的问题是关于该项目的。不过,如果有其他原因,我很乐意了解它。
          • 您在断章取义地引用了 Don Syme。他的陈述专门针对 UI 设计器工具(如 Expression Blend)的使用。他说的不是一般的 GUI 编程。
          【解决方案7】:

          当然,您也可以使用 F# 中的所有 WPF 类。您可以从 F# 创建 Windows、控件和其他所有内容,我有时也从 F# 控制台使用它。

          它还没有像 C# 或 VB 那样紧密集成到 Visual Studio 中,但正如您在 cmets 中看到的那样,未来的设计器支持是可行的。我想我们必须等到那时(或使用其他工具)。

          【讨论】:

          • 投反对票,因为虽然 1.0 版本的重点是实用程序和核心代码,但意图最终将 F# 带入全面集成,包括表单设计器等。
          • 哦,抱歉,不知道。但是 F# 的完全集成听起来很有趣,并且使用它会很有趣。敬请期待。
          • 只是为了支持这一点,请参阅blogs.msdn.com/dsyme/archive/2008/12/10/… 的 VS2010 集成公告。具体来说,“在第一个受支持的版本中,我们的目标必须是专注于 F# 的核心优势,以便使用 F# Interactive 进行探索性编程、使用数据进行编程以及实现并行和异步组件。”在后来的评论中,“Don 说:从长远来看,生成 F# 代码的面向演示的设计器工具绝对是可行的。”
          猜你喜欢
          • 2017-07-28
          • 1970-01-01
          • 2016-11-03
          • 2012-04-01
          • 2011-05-28
          • 2019-01-05
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多