【发布时间】:2009-05-29 20:42:51
【问题描述】:
我在放置 Microsoft 将要引入的 F# 语言的概念和可能性方面遇到问题。
F# 会仅用于声明函数吗?或者将 F# 与普通的 C# 或 VB 代码混合使用“完全”用 F# 编写应用程序?
【问题讨论】:
我在放置 Microsoft 将要引入的 F# 语言的概念和可能性方面遇到问题。
F# 会仅用于声明函数吗?或者将 F# 与普通的 C# 或 VB 代码混合使用“完全”用 F# 编写应用程序?
【问题讨论】:
我强烈建议您观看 Luca Bolognese 在 PDC 2008 上的演讲。这不仅非常有趣,而且他还展示了令人印象深刻的 F# 用例:
An Introduction to Microsoft F# Luca Bolognese
【讨论】:
我的期望是,F# 将被用于一些专业系统的部分——涉及复杂线程/数学/财务/建模/等的位,而 F# 在这些方面做得很好。对于大多数其他领域(UI、DAL 等),像 C# 这样的通用语言似乎 (IMO) 更可取。
F# 的优点之一是(理论上)您可以证明代码正在运行,而不仅仅是测试它。线程支持(由于不变性和 async ! 使用)也很好(尽管 PLINQ 可能会在线程上竞争)。
连接到 .NET 以允许在 F#、C#、VB、IronPython、IronRuby 等之间进行适当的集成 - 真正展示了各自的优势。 今天如果我正在做大量的 COM 互操作,我会考虑 VB(在 4.0 中会更改为 dynamic);对于大多数代码 - C#。对于数学等,F#。整洁。
【讨论】:
我已经用了半年了,我认为它会成为一种通用语言。学习起来相当复杂,因此怀疑它会在混合环境中使用太多。经理们希望将成本控制在最低限度。
重构速度对我来说是 F# 最大的卖点。用它构建了一个简单的video game,我爱上了语言结构。起初,处理状态引擎的想法在函数式语言中似乎不合适,但是对于记录、元组和类型推断,它可以实现非常快速的更改。
F# 具有良好的可读性。一旦你熟悉了 F#,如果你允许混合多范式编程风格,代码就会变得非常简洁和易于阅读,但是就像所有语言一样,不知道自己在做什么的人可能会把它变成一场噩梦。
我的日常工作涉及 Web 原型设计,因此我期待看到 FSharp.WebTools 的发展方向,并期待通过 Microsoft MVC 看到对 F# 的更多支持。
【讨论】:
我在以下领域使用 F#:
DLL 和库。我在空闲时间编写的几乎所有新代码都是 F#,我只在需要快速 GUI 时才使用 C#。
多线程。在工作中,我一直在慢慢介绍 F#。我有机会通过使用异步工作流和邮箱处理器将一些丑陋的单线程 VB.NET 迁移到多线程 F# 来演示它可以做什么。
DSL 和解析。在我上一家公司,我使用 FsLex/FsYacc 到 parse SQL into an AST。原型代码的一个变体变成了this tutorial。
脚本。我完全
【讨论】:
当然,用 F# 编写整个程序是可行的。但是,我认为大多数程序不会这样。 F# 很可能用于复杂的算法和应用程序逻辑(程序的核心),而 C# 可能用于“外部”(GUI 等)。 .NET 是命令式结构,因此在您大量使用库的地方,C# 可能比 F# 更“自然”。
【讨论】:
您的问题暗示所有代码最终都会成为应用程序。
但情况并非如此,F# 的优势之一(例如,与 C# 相比)是您可以“破解”您最喜欢的 IDE 并只运行一些代码,而无需所有解决方案/项目/class 基础设施。
对于数字运算测试结果、转换数据、测试新算法(即使我最终在“应用程序”中使用 C# 对其进行编码)、对日志文件进行排序,甚至创建一个小实用程序来告诉我有多少我的 C# 引用实际上是在给定的程序集中使用的,如果我决定进一步使用 F#,F# 很漂亮、快速,但可以快速“缩放”到一个 dll。
【讨论】:
根据具体情况,您可以同时考虑两者。
您可以使用 F# 构建完整的 .NET 应用程序或将其连接到其他 .NET 语言。它可以使用和公开来自/向其他 .NET 语言的库。
【讨论】:
F# 会仅用于声明函数吗?或者将 F# 与普通的 C# 或 VB 代码混合使用“完全”用 F# 编写应用程序?
3 年多来,我们一直在用 F# 编写整个应用程序。许多公司都在使用 F# 扩充他们现有的代码库。
最简单的 F# 入口点是交付 F# 示例,演示如何从 F# 使用您销售的库的 API。这对任何公司来说都是显而易见的,因为样品不是关键任务,因此技术专业知识和持续维护不是问题。 F# 也是为任何 .NET 语言的现有代码编写测试工具的绝佳工具。同样,客户永远不会获得该代码,因此它在您公司之外的可靠性不是问题。在实践中,我们毫无问题地全力以赴,在任何地方使用 F#,并在客户不知情的情况下将其交付给客户。这对小公司特别有效,因为大幅提高生产力为我们带来了巨大的竞争优势。
【讨论】: