【问题标题】:How will F# (sharp) be used?F#(夏普)将如何使用?
【发布时间】:2009-05-29 20:42:51
【问题描述】:

我在放置 Microsoft 将要引入的 F# 语言的概念和可能性方面遇到问题。

F# 会仅用于声明函数吗?或者将 F# 与普通的 C# 或 VB 代码混合使用“完全”用 F# 编写应用程序?

【问题讨论】:

    标签: .net f#


    【解决方案1】:

    我强烈建议您观看 Luca Bolognese 在 PDC 2008 上的演讲。这不仅非常有趣,而且他还展示了令人印象深刻的 F# 用例:

    An Introduction to Microsoft F# Luca Bolognese

    【讨论】:

    • 如果可以的话,我会再次(一次又一次)投票。一个很好的参考,如果只是给意大利主持人用卡布奇诺做比喻的话,太棒了!谢谢。
    • 实际上我在发布这个问题之前已经看过视频/演示文稿。我认为这是对该语言的一个很好的介绍,他使用的示例与我之前收到的 .NET 杂志中的示例相同。但是我只看到他用 F# 编程(或者实际上是 .NET 中的 F# 解决方案)。未来的解决方案将如何?您会只是开始“解决方案”并包含 F# 和 C# 并将它们混合在一起(就像 Luca Bolognese 所做的那样?),还是会有“单独的解决方案”?
    • 该死的,你想要一个实际的答案吗? ;-) “混合”。我同意 Zifre 和 Marc Gravell 的以下回复。颠倒您的问题:为什么要针对给定的问题将自己限制在一种语言上?在我的 UNIX 世界中,大多数系统都是不相交的混合体(例如 Java 应用程序、C 应用程序容器、shell 启动/关闭、Perl 监控等)。为工作选择正确的语言是关键,将它全部挂在 CLR 和 .NET 下非常好。我认为,当人们理解其固有的简单性时,最终会朝着功能性风格迈进[免责声明:业余 ruby​​ist]。
    【解决方案2】:

    我的期望是,F# 将被用于一些专业系统的部分——涉及复杂线程/数学/财务/建模/等的位,而 F# 在这些方面做得很好。对于大多数其他领域(UI、DAL 等),像 C# 这样的通用语言似乎 (IMO) 更可取。

    F# 的优点之一是(理论上)您可以证明代码正在运行,而不仅仅是测试它。线程支持(由于不变性和 async ! 使用)也很好(尽管 PLINQ 可能会在线程上竞争)。

    连接到 .NET 以允许在 F#、C#、VB、IronPython、IronRuby 等之间进行适当的集成 - 真正展示了各自的优势。 今天如果我正在做大量的 COM 互操作,我会考虑 VB(在 4.0 中会更改为 dynamic);对于大多数代码 - C#。对于数学等,F#。整洁。

    【讨论】:

    • 这与我的观点最接近……但是看看语言结构,在当今的传统语言中,这些结构不是也很方便吗? (匹配,流水线)
    • 是的;匹配特别有用(请参阅我在 C# 中关于 SO 的问题)。不过,如果有的话,我希望 C# 团队致力于不变性,以便我可以轻松地将它与 PLINQ moer 一起使用。
    【解决方案3】:

    我已经用了半年了,我认为它会成为一种通用语言。学习起来相当复杂,因此怀疑它会在混合环境中使用太多。经理们希望将成本控制在最低限度。

    • 重构速度对我来说是 F# 最大的卖点。用它构建了一个简单的video game,我爱上了语言结构。起初,处理状态引擎的想法在函数式语言中似乎不合适,但是对于记录、元组和类型推断,它可以实现非常快速的更改。

    • F# 具有良好的可读性。一旦你熟悉了 F#,如果你允许混合多范式编程风格,代码就会变得非常简洁和易于阅读,但是就像所有语言一样,不知道自己在做什么的人可能会把它变成一场噩梦。

    我的日常工作涉及 Web 原型设计,因此我期待看到 FSharp.WebTools 的发展方向,并期待通过 Microsoft MVC 看到对 F# 的更多支持。

    【讨论】:

      【解决方案4】:

      我在以下领域使用 F#:

      DLL 和库。我在空闲时间编写的几乎所有新代码都是 F#,我只在需要快速 GUI 时才使用 C#。

      多线程。在工作中,我一直在慢慢介绍 F#。我有机会通过使用异步工作流和邮箱处理器将一些丑陋的单线程 VB.NET 迁移到多线程 F# 来演示它可以做什么。

      DSL 和解析。在我上一家公司,我使用 FsLex/FsYacc 到 parse SQL into an AST。原型代码的一个变体变成了this tutorial

      脚本。我完全

      【讨论】:

      • 好东西。我真的很喜欢你的回答提到的链接!
      【解决方案5】:

      当然,用 F# 编写整个程序是可行的。但是,我认为大多数程序不会这样。 F# 很可能用于复杂的算法和应用程序逻辑(程序的核心),而 C# 可能用于“外部”(GUI 等)。 .NET 是命令式结构,因此在您大量使用库的地方,C# 可能比 F# 更“自然”。

      【讨论】:

      • 我不明白为什么 .NET 的命令式结构会使 C# 在大量使用库的地方比 F# 更自然..?我确实认为您对 F# 的使用是最正确的!
      【解决方案6】:

      您的问题暗示所有代码最终都会成为应用程序。

      但情况并非如此,F# 的优势之一(例如,与 C# 相比)是您可以“破解”您最喜欢的 IDE 并只运行一些代码,而无需所有解决方案/项目/class 基础设施。

      对于数字运算测试结果、转换数据、测试新算法(即使我最终在“应用程序”中使用 C# 对其进行编码)、对日志文件进行排序,甚至创建一个小实用程序来告诉我有多少我的 C# 引用实际上是在给定的程序集中使用的,如果我决定进一步使用 F#,F# 很漂亮、快速,但可以快速“缩放”到一个 dll。

      【讨论】:

      • 执行的一小段代码不也是代码的应用吗? :)
      【解决方案7】:

      根据具体情况,您可以同时考虑两者。

      您可以使用 F# 构建完整的 .NET 应用程序或将其连接到其他 .NET 语言。它可以使用和公开来自/向其他 .NET 语言的库。

      【讨论】:

        【解决方案8】:

        F# 会仅用于声明函数吗?或者将 F# 与普通的 C# 或 VB 代码混合使用“完全”用 F# 编写应用程序?

        3 年多来,我们一直在用 F# 编写整个应用程序。许多公司都在使用 F# 扩充他们现有的代码库。

        最简单的 F# 入口点是交付 F# 示例,演示如何从 F# 使用您销售的库的 API。这对任何公司来说都是显而易见的,因为样品不是关键任务,因此技术专业知识和持续维护不是问题。 F# 也是为任何 .NET 语言的现有代码编写测试工具的绝佳工具。同样,客户永远不会获得该代码,因此它在您公司之外的可靠性不是问题。在实践中,我们毫无问题地全力以赴,在任何地方使用 F#,并在客户不知情的情况下将其交付给客户。这对小公司特别有效,因为大幅提高生产力为我们带来了巨大的竞争优势。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2019-06-22
          • 2017-02-26
          • 1970-01-01
          • 2012-01-23
          • 2019-06-21
          • 1970-01-01
          • 2019-05-05
          • 2011-10-28
          相关资源
          最近更新 更多