Re: [问题] 大家觉得函数式语言有前途吗?

楼主: Schelfaniel (Schelfaniel)   2013-10-06 21:46:27
※ 引述《carelai (风云人物)》之铭言:
: 就是以Haskell,OCaml,Clojure,Scala为代表的语言,
: 在将来会有前途吗?正面和反面的理由各是什么?谢谢诸位。
来说一下个人对 Scala 和 Clojure 的感觉好了。
Scala 和 Clojure 都是 JVM 语言,Java函式库直接拿来用大部分不会有问题,
Java函式库的完整性很高,不管是开发网页、手机(Android)、Hadoop 等,
都有现成的可以用,要写游戏,甚至部分系统程式也可以。
因此选择 JVM 语言,就实务上来说,实用性很高,
比较少会碰到,需要某种功能,但是没现成函式库要自己开发的情形。
Scala :
非常容易入门,只要写过 Java 的人要转过来很容易,
一开始就算不会写函数式语言也没差,靠基本的 OO 功力,
把 Java 语法稍微调一下,就是个 Scala 程式了。
甚至 Scala 在语法上算是领先 Java 的,
先学 Scala 对于未来 Java 语言可能会有的功能,可以预先使用 :QQ
加上 Scala 人材培养难度也比较低,找个会 Java 的人,
大概一下子 Scala 就能上手了,程式要交接问题也比较小。
当然 Scala 要写得很函数式也行,我觉得 Scala 可以说是,
OO 和函数式语言的完美融合,也许完美是有点言过其实,
但是它至少整合得蛮漂亮的,
Scala 也有不少进阶的语法,尤其是有一堆符号的使用,
有一些的确初期看起来是很困难的,而且 Scala 语言的广度也很够,
就语法来说,Scala 算是很多的,这些不是短时间能马上理解的,
要慢慢靠时间去学的。
用 Scala 建议先把 sbt (Simple Build Tool)学起来,
对开发 Scala 程式很有帮助。
但大体来说 Scala 的优点是:
JVM 语言
上手容易但深度广度够 ( 有点类似 Blizzard 游戏的感觉 )
静态型别 ( 动态语言还是适合高手用,尤其 Java 物件型别不少,
动态不见得比较好 )
Clojure :
如果试过了 Scala 觉得想要挑战一下 Hard Mode 的话,
就可以考虑走 Clojure 了。
Clojure 是 Lisp 系的语言,不过拜 Java 函式库支援的实用度所赐,
加上 Clojure 在语法上来说,比起其他 Lisp 语言,个人觉得容易阅读,
想学 Lisp 系语言,我是比较推荐 Clojure。
但是 Lisp 系语言天生的一堆括号和前置式语法,
对于很多人会造成阅读和撰写的困难 ( 很需要排版 ),
加上编辑器的支援,编辑器只要支援括号就解决大多问题了。
Clojure 虽然有人觉得它比 Scala 更偏向纯函数式语言,
但在使用 Java 函式库的前提之下,部分的 OO 还是必要的
( 除非包装起来 或是用别人包装好的 Clojure 函式库 )
举例来说,很多 Java 函式需要你继承某个类别来写自己的类别,再传给他,
这 Clojure 的 proxy 只能适合于简单的场合,
太复杂的还是要用 gen-class 的方式。
另一方面,Clojure 是动态语言,除错上比 Scala 困难,
就算把可读性写得不错了,实际执行效能也要考量,
要写出和 Scala 可以匹敌的程式,要花的功夫超过 Scala。
也因此,如果程式用 Clojure 写的,要交给下一个人,
十之八九他会恨你的,就算自己维护,有时候自己要看懂还要一下子,
使用 Clojure 则是建议使用 leiningen。
Clojure 的优点:
JVM 语言
如果喜欢 Lisp 的 S-Expression 形式可以考虑
富有挑战性
总而言之,
Scala 像是 法师和牧师的全套技能都给,让你自由用。
Clojure 则像是体内两股真气让你可用两套武功,
但是又互相牵制让你没办法只用同一套。

Links booklink

Contact Us: admin [ a t ] ucptt.com