您好我想选择一种FP语言(当您在不需要学习的位置工作时总是很痛苦),经过一些研究后,我觉得Erlang和OCaml是我的两个因为以下原因,我真的很想弄湿我的脚:
1)我主要使用C ++中的高可用性Web服务器后端系统。我听说Erlang在可扩展性和容错性方面是一个很好的解决方案。虽然我不认为我现在的公司会在Erlang有任何项目,但我觉得Erlang可能是我长期职业发展的好语言。
2)我有一个非常擅长OCaml的同事,我的意思是他真的很擅长(但他现在没有为他的日常工作工作。他维护着几个图书馆)。所以如果我学习OCaml,我认为他可能是一个很好的资源。
我的兴趣主要是分布式系统(我目前的工作是一些中间件开发工作)和高性能计算(猜猜看,我有几年研究生院的研究,特别是金融应用程序中的PDE - - 所以我总觉得我可能会在稍后的某个时候回去做一些财务建模工作)
有什么建议吗?请不要建议“同时学习”,因为我不聪明: - )
由于
答案 0 :(得分:8)
Ocaml是一种很棒的语言 - 我最喜欢的语言之一 - 但是如果您对分布式系统感兴趣,那么我建议使用Erlang,这与其他FP语言在分布式系统方面领先一步(尽管有一个名为Jocaml的Ocaml的分支,它有一些有趣的方面)。
Ocaml在考虑其基础架构的情况下,即使仅考虑并行性也很弱。 Haskell和Clojure都有更好的故事,imho。 (也就是说:一旦你获得了一种FP语言,你就能够很容易地将基本原理传递给其他语言,并且它们将来可能会有用.Scala和Clojure都可以通过它们很容易地进入组织JVM。)
答案 1 :(得分:6)
我认为Ocaml是开始使用FP的好方法,一旦你掌握了基本的FP概念,Erlang并不是很难。
但是'aneccodeal'的建议太棒了 - 也就是说,如果你对Ocaml感兴趣并且有一个已经很强大的朋友,那么就一定要为它开发一个并发(也许是MPI)库。
但请记住,使Ocaml并发的一个障碍是缺少并发垃圾收集(或者我已阅读)。
答案 2 :(得分:3)
如果你有一个与OCaml“非常好”的同事,那么听起来你有一个很好的资源,假设他/她愿意回答你的问题。当有知识渊博的人知道你是否会被卡住时,它总是更容易学习。
是的,OCaml在并行性方面没有最好的故事,但是有很多方法可以在OCaml中获得并行性(基于fork的方式似乎是最常见的 - checkout prelude.ml,其中包括并行地图:http://github.com/kig/preludeml/tree/master)。此外,似乎Erlang的基于Actor的并发性在其他语言中实际上相当容易复制。也许您和您的同事可以参与一个项目来为OCaml开发基于Actor的并发库?这将为您提供一个很好的学习项目,您的同事可能会觉得有趣的事情可以与您合作......此外,您最终可能会为整个OCaml社区创建有用的东西。
答案 3 :(得分:2)
我也会考虑看F#(特别是当VS 2010出局时)。 使用漂亮的IDE学习新语言会更容易,更方便。 F#和OCaml非常相似,你可以在其他SO线程中看到(例如here)