金钱豹推荐一门新语言F#

Discussion in 'C++ / C# / Java' started by laserhz, Jan 11, 2010.

  1. 为什么要使用 F#?
    对于小部分 .NET 程序员来说,学习一门 .NET Framework 函数化语言无疑将使自己在编写功能强大软件方面前进一大步。而对其他程序员来说,学习 F# 的理由就因人而异了。F# 能为开发人员提供哪些益处?
    随着多核 CPU 的普及,安全并发程序已成为过去三年来的关注焦点。函数式语言倡导一种固定不变的数据结构,可在线程和机器之间传递,而无需担心线程安全或原子访问,开发人员可以利用这一特点支持并发操作。函数式语言还可更轻松地编写更支持并发特性的库,如稍后将在本文中介绍的 F# 异步工作流。
    尽管对于专攻面向对象开发的程序员而言,可能对这种语言感觉不是这么强烈,但在很多情况下,函数式程序确实可以简化某些应用程序的编写和维护。例如,编写一个将 XML 文档转换成其他格式数据的程序。虽然完全可以通过编写一个 C# 程序,让它解析整个 XML 文档并应用各种 if 语句确定在文档中的不同位置采取何种措施,但实际上更好的方法是编写可扩展样式表语言转换 (XSLT) 程序。当然,XSLT 肯定包含大量的内置函数机制,如同 SQL 一样。
    F# 强烈建议不要使用空值 (null),而是提倡使用固定不变的数据结构。这些特性可以减少需要编写的特例代码量,从而有助于降低编程出错的频率。
    使用 F# 编写的程序还更加简洁。您可以切实地从两方面减少键入的内容:击键次数更少并且必须要向编译器通告变量类型、参数或返回类型的位置点也更少。这意味着需要维护的代码将大大减少。
    F# 具有与 C# 相似的性能特点。但是,与简洁程度相似的语言(特别是那些动态和脚本语言)相比,它的性能特点要好得多。并且,F# 也包含通过编写程序段并交互式执行查看数据的工具,这一点与许多动态语言类似。

    个人感觉f#是类似matlab工作方式的一种语言,而且完美支持多核cpu,和其他20多种语言的完美通信,还有其他更多的优点,所以,今后,此语言的应用场景将非常巨大!
    更多资料请见以下链接:
    F# 入门
    F#系列随笔索引
    F# for Scientists
     
  2. 没有朋友对这个F#感兴趣?
    这是微软未来统一编程语言王国的利器啊!
     
  3. 这个语言我学得差不多了。跟Matlab还是不一样的。目前为止还没有中文书籍。
    F# for Scientists 这本书谁能帮我找一下啊?
    laserhz兄有没有下载到这本书?
     
  4. fortran .net版?
     
  5. 你早就是我的QQ友了。
    我下不了那本书。也懒得到处找了。
    如果你下过了,随便给我吧。万分感谢。
    另外,我下了另外两本,兄若需要,告我一声。
    <Foundations of F#>
    <Expert F#>


    这是microsoft的一门新语言。不是Fortran .net
     
  6. 好的,老兄!有空给我qq留言,我3本都有的!
     
  7. 在学c#的时候,觉得似曾相识,问周围的人得知。是微软将delphi之父挖到了微软。界面基本不变,语言少许改变,多了些新名词。
    f# 的开发者是什么人?产品有什么样的市场定位?
     
  8. 开发者就不太清楚是哪些人,定位是统一编程语言市场,作为几十种计算机语言的一个粘合剂!
     
  9. F#语言是函数式语言啊,似乎偏重科学编程领域。
     
  10. F#是微软剑桥研究院把ocaml移植到.Net平台的一种尝试,起初采用的是开源性质的版权协议,并未正式进入微软的产品序列,主要目标用户是科学计算领域。刚出来的时候我曾尝试过将以前的ocaml代码移植到F#上,后来因为转向APL语系没有再跟进了,不知道现在微软对待F#的态度如何。我的wiki中有相关页面:http://itfin.3322.org:4809/wiki.pl/Ocaml,如有同学有编辑兴趣我可以提供编辑密码,谢谢!
     
  11. itfin兄多介绍一些APL的国际上的应用现状吧。
    KDB+既然是内存数据库,那不知那超级大的数据量是如何办的。如几十年的每分钟的BAR数据,可能是几G的数据,内存里放不下。
    F#是MIROSOFT今后主推的语言,可能会成为今后的主流语言。未来二十年可能是函数式编程语言的天下,好多人一致看好它。唯一的难度是对当前的程序员学习难度大,改变思维困难,程序不易读。没想到海洋论坛也有itfin这方面的专家。
     
  12. APL系的大本营在http://www.vector.org.uk/.
    kdb+的表可以是内存表,也可以是磁盘表,以内存映射文件的方式动态加载到内存,只要运算的中间结果可以容纳在内存中就可以了,64位版本可以支持TB级的内存(已经有公司这样用了).
    我对微软会主推免费的F#持怀疑态度,也对函数式编程语言能进入主流保持怀疑.在F#出现以前就有SML.net和Dyalog APL for the Microsoft .NET了,估计现在听说过的人也很少吧.
     
  13. F#及functional语言的兴起于multi-core,many-core的未来发展方向有很大关系。说白了就是并行计算在imperative语言这么多年的各种各样方案后,仍然不能有效解决的问题,在funtional语言中不存在了。

    除了F#外,Java派系的Scala, 及Haskell, Erlang等都有很不错的势头。并行计算是programming language界这两年最热门的话题,许多Java人都在说Scala是未来Java的话题。

    F#在quant中也在处于起飞状态中,很快的,数学软件,quant软件,都处于面对大量计算及并行处理问题的最前沿,而multi-core,甚至GPU的几百个core现在已经走入每个人的手提电脑中,而绝大多数软件仍然是用C,C++,java,c#语言编写的,不难想象即将到来的是怎样一场变革,对软件设计,系统架构,programmer的skill等将是多大的一个冲击。

    慢慢希望有人能探讨把QD/OD的strategy改为用F#来实现,用多核或GPU来提高backtesting速度,与实时的strategy运行速度,这可能是个有意思的方向。
     
  14. to russelharvey
    高人啊!
    f#目前必须在.net 4中使用,如果qd是基于.net4,那么使用f#就没问题,不知道是否可以在目前版本实现
     
  15. CPU多核心化和云计算的背景下,函数式编程可以很好的解决多并发运算的问题(在处理并发问题方面,面向对象编程存在一定程度的固有缺陷,比如类和实例化过程中产生的一些副作用。


    哪位大虾能指点一下,为什么函数式编程能够更好地适应并发计算问题?
    这一点好像是函数式语言是未来主流的最重要理论支撑。
     
  16. 网上现在比两三年前多了许多functional的信息,随便找找就能找到一大堆。Microsoft 去年在PDC上有个不错的对于F#及并行计算的session, 这里是当时的video,这里大家英文都不错,可以看看。

    http://microsoftpdc.com/Sessions/FT20
     
  17. 感觉比ruby 的block and iterator还"看"起来要抽象,代码也难读很多,太不自然了.
    如果不是特别追求性能的话......
     
  18. 走马观花看了一点F#,感觉可能是一种适于编写策略的好语言