代码之家  ›  专栏  ›  技术社区  ›  Jack

从F学习.NET而不使用C#

  •  13
  • Jack  · 技术社区  · 14 年前

    我是一个爪哇/ C++开发人员,从来没有花时间学习C.*和.NETFraseFund。

    然后我学习了ocaml,因为我必须将它用于我的硕士论文,所以我听说了f并想知道:f是否允许我轻松地使用.NET API来构建功能齐全的应用程序(可能涉及gui、socket等),没有任何问题?

    我之所以这么问,是因为它似乎和OcAML非常相似,当它们不同的时候,只是因为使用了更多的OOP方法,所以Java知识将帮助我填补这些漏洞。如果F能够使用与C相同的资源,而无需学习C语法,我会考虑这一点。值得一试吗?

    除此之外,亚马逊上提供的F(主要是O'Reilly的一本书和Apress的3-4本书)的书籍是否适合学习先进的技术?因为现在我很喜欢函数式编程,但从未在.NET平台上工作过,所以我真的不知道从哪里开始。

    提前谢谢

    6 回复  |  直到 14 年前
        1
  •  10
  •   Mau    14 年前

    如果你已经知道一些像你所说的语言,那么DonSyme的专家F 2.0是对F的一个极好的深入理解。

    大多数情况下,你会努力学习图书馆,但是 MSDN 参考资料不错。

    我认为这绝对值得一试。了解C除了在框架方面的经验外,在学习F方面不会给您带来任何好处。

        2
  •  6
  •   Brian    14 年前

    F是否允许我轻松使用 .NET API以生成功能齐全的 应用程序(可能涉及GUI, 插座,随便什么)没有 问题?

    我希望在这里看到一些不同的观点;我将提供我的观点。

    “语言”有几个方面会影响您使用它构建“功能齐全”的应用程序的轻松/顺利程度:

    • 语言本身
    • 与之配套的库/框架
    • 工具功能(集成IDE)
    • 外部支持(示例、第三方库、社区)

    F是一种很棒的语言,其核心是基于OCAML。它与C_共享相同的库/框架(.net),因此对于前两个项目来说,F_与C_一样有能力构建此类应用程序。

    F比C年轻很多年,因此Visual Studio工具和社区/示例都不如C成熟。现在,“项目模板”和“设计人员”在“vs”框中与f_一起工作的数量更少,而且很难找到示例/库。F社区是伟大的,并且正在迅速开始填补第四个子弹(甚至第三个子弹中的一些)的漏洞,但是对于构建严重依赖上述第三个和第四个子弹的应用程序,C今天仍然有优势(2010年7月)。是的,你现在可以用f构建任何你喜欢的东西,但是仍然有一些情况,当c的端到端体验变得更平滑/更容易时。

        3
  •  4
  •   Yin Zhu    14 年前

    根据我的经验,你需要一些C来学习F,尤其是.NET部分。

    与你的情况类似,我在学习f之前不知道任何.net和c。对我来说,第一个困难的部分是异步IO编程。我完全理解它,直到我阅读了 CLR via C# . 我很快发现咬我的不是计算表达式/单子,而是.NET。然后我继续通过C_读取clr,例如,我知道在.NET中,1d数组是有效的,但是2d数组没有那么有效。我还可以在.NET中了解代理和事件。

    .NET是必需的。C是.NET的母音。imho,F程序员需要学习C(至少阅读C)。

        4
  •  2
  •   TechNeilogy    14 年前

    在Visual Studio中,有一件事仍然没有出现,那就是帮助用户界面设计过程自动化的工具。在C的情况下,这些是相当复杂的,但是在F中,你必须手工完成所有的管道工程。因此,如果您的目标是学习生产WPF(等)应用程序,那么C目前是一个更好的选择。如果您的目标是学习.NET、WPF(等等)的机械细节,那么任何一种语言都可以做到。

    在我看来,一个更好的方法是同时学习F和C。您的Java体验 OCAML为您提供了一个关于C和F的良好开端。使用C来处理UI,使用F来完成底层工作。

        5
  •  1
  •   Community CDub    8 年前

    简单的答案是:“是”,F_拥有对所有.NET库的完全访问权,可以使用和生成用任何其他.NET语言编写的代码,也可以直接与COM和本机DLL接口。

    也就是说,F_的工具支持不如C_成熟。虽然您可能会发现使用C_学习.NET更容易一些,但从F_开始您不会受到固有的限制。

    最重要的是,图形用户界面构建器目前不能生成F代码,不能生成强类型的ASP.NET代码隐藏页(但可以创建弱类型页),也不能直接支持在F中创建测试(但存在这样做的插件)。

    然而,人们可以很容易地用f_手工编写GUI代码,而且这样做通常更容易,而且比等效的c_更简洁。例如,可以在构造函数上设置属性;例如,让f=new form(text=“window title”),lambda函数自动转换为委托;例如,event.add(fun e->dosomething())。

    例如,还可以创建用于描述UI的DSL。有关更多信息,请参阅 F#: is there no UI (like WPF) for it?

    正如Techneilogy所指出的,推荐的样式是将逻辑作为库写入f_中,并从c_中创建的GUI调用。

        6
  •  1
  •   Liang Wu    14 年前

    我会说“不”。学习F的挑战在于改变编程、递归、高阶函数、模式匹配等思维方式。非常重要的是,你需要考虑以“功能”的方式进行编程,而不是必须作为C语言或Java编程。学习API总是很容易的,但是学习如何设计应用程序却不容易。

    那是我的2美分。