Questions tagged «f#»

F#是.NET的简洁,表达性强,高效的功能和面向对象的语言,可帮助您编写简单的代码来解决复杂的问题。


3
为什么贫血领域模型在C#/ OOP中被认为是不好的,而在F#/ FP中却非常重要?
在关于F#的博客文章中,它表示乐趣和收益,它表示: 在功能设计中,将行为与数据分开非常重要。数据类型是简单且“哑”的。然后分别有许多作用于这些数据类型的函数。 这与面向对象的设计正好相反,在面向对象的设计中,行为和数据必须结合在一起。毕竟,这正是一个类。实际上,在真正的面向对象设计中,除了行为外,您应该什么都没有-数据是私有的,只能通过方法访问。 实际上,在OOD中,围绕数据类型的行为不足被认为是一件坏事,甚至有一个名字:“ 贫血领域模型 ”。 鉴于在C#中,我们似乎继续从F#借用,并尝试编写更多的函数式代码;为什么我们不借用分离数据/行为的想法,甚至认为它不好呢?仅仅是因为该定义不与OOP一起使用,还是有一个具体的原因在C#中是不好的,由于某些原因在F#中不适用(实际上是相反的)? (注意:我对C#/ F#中的差异特别感兴趣,因为它们可能会改变对优劣的看法,而不是对博客文章中的任一种看法持不同意见的人)。

9
将F#引入大型代码库和工程团队的现实陷阱[关闭]
我是一家软件公司的CTO,该公司拥有大量现有代码库(全部为C#)和相当大的工程团队。我可以看到,使用F#编写代码的某些部分将变得更加容易,从而导致更快的开发时间,更少的错误,更容易的并行实现等,基本上可以为我的团队带来整体生产率的提高。但是,我还可以看到引入F#的一些生产率陷阱,即: 1)每个人都必须学习F#,这并不像从Java转换为C#那样简单。尚未学习F#的团队成员将无法处理代码库的F#部分。 2)截止目前(2010年12月),没有可雇用的F#程序员。在各种软件工程师的简历数据库中搜索“ F#”,少于1%的简历包含关键字。 3)目前(2010年12月)的社区支持较少。您可以在C#中搜索几乎所有问题,并找到已经处理过的人,而F#却不是。第三方工具支持(NUnit,Resharper等)也很粗略。 我意识到这有点Catch-22,也就是说,如果像我这样的人不使用F#,那么社区和工具将永远无法实现,等等。但是,我有一家公司可以经营,但我可以领先但不流血的边缘。 我没有考虑其他陷阱吗?还是有人愿意反驳我提到的陷阱?我认为这是一个重要的讨论,很想在这个公共论坛上听到您的反对意见,这可能对提高行业采用F#起到很大作用。

4
为什么F#具有交互模式而不是C#?
F#带有交互式REPL,开箱即用。C#没有任何种类,实际上如果不建立完整的项目就很难玩(尽管LINQpad可以工作,并且也可以通过powershell来完成)。 这些语言在本质上有什么不同,这些语言允许F#拥有交互式控制台,但是很难为C#实现它? 由于多年以后,人们仍然会提出这个问题,我应该指出,现在有很多选择。您可以使用Powershell(预装在每台现代Windows机器上)与.Net框架一起使用。或者,您可以使用LINQpad原型化任意c#代码。或者,您可以使用ScriptC,也可以使用在线jsfiddle类型的环境,例如Complify.net或Jsil。很多选择。
32 c#  .net  tools  f# 

3
为什么不注释功能参数?
为了使这个问题更容易回答,让我们假设程序员头脑中模棱两可的代价要比几次额外的击键要昂贵得多。 鉴于此,我为什么不让我的队友不注释其功能参数就逃脱呢?以下面的代码为例,这可能是更复杂的代码: let foo x y = x + y 现在,对工具提示的快速检查将向您显示F#已确定将x和y表示为整数。如果这就是您的意图,那么一切都很好。但是我不知道那不是你的意图。如果您已创建此代码以将两个字符串连接在一起怎么办?或者,如果我认为您可能打算添加双打呢?或者,如果我只是不想将鼠标悬停在每个函数参数上来确定其类型,该怎么办? 现在以这个为例: let foo x y = "result: " + x + y F#现在假设您可能打算连接字符串,因此x和y被定义为字符串。但是,作为维护您的代码的可怜的schmuck,我可能会看这件事,并想知道您是否打算将x和y(整数)加在一起,然后将结果附加到用于UI的字符串中。 当然,对于这样简单的示例,可以放手,但是为什么不执行显式类型注释的策略呢? let foo (x:string) (y:string) = "result: " + x + y 模棱两可有什么危害?当然,程序员可能会为尝试做的事情选择错误的类型,但至少我知道他们的意图是,这不仅仅是疏忽。 这是一个严重的问题...我对F#还是很陌生,正在为我的公司开拓创新。我采用的标准可能会成为将来所有F#编码的基础,并且嵌入无止尽的复制粘贴中,我相信它将在未来的几年中渗透到整个文化中。 那么...关于F#的类型推断是否有什么特别之处,使其成为一项有价值的功能,仅在必要时进行注释?还是专家F#-er习惯于为非平凡的应用程序注释其参数?
28 f#  parameters 


2
Y组合器和尾部调用优化
F#中Y组合器的定义是 let rec y f x = f (y f) x f希望将递归子问题的某些延续作为第一个论点。使用yf作为延续,我们可以看到f将应用于后续调用,因为我们可以开发 let y f x = f (y f) x = f (f (y f)) x = f (f (f (y f))) x etc... 问题是,先验的是,该方案无法使用任何尾部调用优化:的确,f中可能存在一些待处理的操作,在这种情况下,我们不能仅仅改变与f相关联的本地堆栈帧。 因此: 一方面,使用Y组合器需要一个与函数本身截然不同的延续。 在其他方面要应用TCO,我们希望f中没有待处理的操作,而仅调用f本身。 您知道这两者可以和解的任何方式吗?就像带累加器技巧的Y或CPS技巧的Y一样?还是有论据证明不可能做到这一点?

3
F#性能vs Erlang性能,是否证明Erlang的VM更快?
我一直在花时间学习函数式编程,现在我想开始编写项目,而不只是涉猎教程/示例。 在进行研究时,我发现Erlang在编写并发软件方面似乎非常强大(这是我的目标),但是用于开发的资源和工具并不像Microsoft开发产品那样成熟。 F#可以在Linux(Mono)上运行,因此可以满足要求,但是在Internet上四处寻找时,我找不到F#与Erlang的任何比较。现在,我倾向于Erlang只是因为它似乎拥有最多的压力,但是我很好奇两个系统之间是否确实存在性能差异。 由于我习惯于在.NET中进行开发,因此使用F#的速度可能比使用Erlang快很多,但是我找不到任何资源可以说服F#与Erlang一样可伸缩。 我对仿真最感兴趣,它将把大量快速处理的消息发送到持久节点。 如果我的要求做得不好,请要求更多验证。
19 f#  erlang 

3
最快的功能语言
我最近一直在研究函数式编程,尤其是Haskell和F#,而以前更是如此。经过一番探索之后,我找不到比较杰出的功能语言(Scala,F#等)的基准比较。 考虑到它们是混合语言,我知道这对某些语言(Scala出现)不一定是公平的,但我只想知道哪种语言在哪种操作和总体上胜过哪种语言。

2
F#是否提供对数据库驱动的Web开发特别有用的功能?
我的组织终于在今年升级到了MS Visual Studio 2010。Visual Studio 2010提供的一项重大新功能是F#编程语言。 我了解F#提供了类似于Lisp的功能编程范例。但是与Lisp不同,F#被编译为.net框架的托管代码。 现在,我从事数据库驱动的Web应用程序开发。现在,我正在使用后端是SQL代码的N层应用程序,前端是C#.net AJAX Web应用程序。我想知道F#是否提供对此类开发特别有用的任何东西。

4
模式匹配是惯用的类型还是不良的设计?
似乎F#代码经常针对类型进行模式匹配。当然 match opt with | Some val -> Something(val) | None -> Different() 似乎很常见。 但是从OOP的角度来看,这看起来非常像基于运行时类型检查的控制流,通常会对此皱眉。要说明,在OOP中,您可能更喜欢使用重载: type T = abstract member Route : unit -> unit type Foo() = interface T with member this.Route() = printfn "Go left" type Bar() = interface T with member this.Route() = printfn "Go right" 这肯定是更多代码。OTOH,在我的OOP-y看来,它具有结构上的优势: …

3
您是否应该同时使用C#和F#
我知道您可以在同一个项目中一起使用C#和F#,但是我不确定这样做是否是个好主意。 在我看来,将两种截然不同的编码样式(功能性与OOP)混合使用可能会导致设计缺乏凝聚力。它是否正确?
16 design  f# 

5
习惯FP思维的人应该如何阅读命令性代码?
我大约五个月前从大学毕业,并且已经在一家本地初创公司工作了四个月。在大学期间,我独自学习了Haskell,F#等。我们在大学里学过Java,但是我很快就接触了函数式编程,并且花了更多的时间在命令式编程上。结果,我的大脑开始思考功能性思维。我加入的公司使用Python,并且代码非常重要。我很难阅读命令式代码。我无法追踪突变。当“如果……否则……”嵌套的深度超过四个级别时,我将完全失去对代码中所发生情况的跟踪。另外,Python是一种动态语言,因此代码中没有类型。它' 自从我试图理解我们代码库的一部分(据称是“中等复杂”)以来已经有几个星期了,但是到目前为止,我在理解它方面还没有取得任何明显的进展。请向我提供一些实用的技巧,以帮助我理解该代码。提前致谢! 编辑: 也许我还应该提到代码中没有很多注释,而且名称也不是很直观。

4
尝试向命令式程序员讲解声明式编程时,有哪些好的做法?
我愿意在我的公司做一些F#的培训,他们似乎表现出了一些兴趣。他们通常是VB6和C#程序员,他们对编程的热情不高。话虽这么说,当您考虑功能问题时,我觉得编写正确的代码会更容易,因此他们一定会从中受益。 谁能提供一些有关我应该如何处理此问题的建议? 主意 不要专注于语法,而应该专注于如何使用该语言及其所推广的习语。 试想一下以命令式方式编写的示例很痛苦,但是以声明式方式编写时却转换为优雅的代码。

4
函数式编程—不变性
我试图理解在FP中处理不可变数据的情况(特别是在F#中,但是其他FP也可以),并打破了全态思维(OOP风格)的旧习惯。所选答案的问题的一部分在这里重申,我周边的任何问题写起坐由状态表示在OOP中FP解决与不变的人搜索(对于例如:与生产者和消费者队列)。有任何想法或链接吗?提前致谢。 编辑:为了进一步澄清这个问题,不可变结构(例如:队列)将如何在FP中的多个线程(例如,生产者和消费者)之间并发共享

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.