作者Schelfaniel (Schelfaniel)
看板PLT
标题[闲聊] 最近写 clojure 有感
时间Mon Jul 6 09:58:59 2009
其实除了 clojure (JVM 语言、Lisp 系语言) 之外
最近在 2010 版的 Visual Studio 可以看到 微软把 F# 放至第一线语言上
我觉得,有 微软 这麽大的厂商支援 F# 的话,
F# 可以获得的资源,应该在函数式语言之中算多的了,
在此之外,很少看到有厂商提供函数式语言如此高的商业支援。
我个人也打算在 VS 2010 出来之後,能使用 F# ( 而非 C# )
写几个小程式来个人娱乐一下,一般商业程式嘛,
其实看看 CodeJob 板就知道了,太多指定语言了,
真不知道客户端除了能跑出来之外,还要限定语言为何。
不过 F# 是 ML 系的,也就是说,它是静态语言,
而 clojure 是 Lisp 系的动态语言,两者之间还是有差的。
其实就我个人的看法来说
对初学者来说是 动态语言较容易
可是到了中级者时 静态语言反而会比较有优势
对高级者来说,当然都不成问题,
因此动态语言的学习,是比较没那麽线性的感觉,
在初段到高段之间有一个很明显的落差,
而动态语言要真的用到很精,才能在一般商业化市场站立
Lisp 的优点也同样是它的缺点,语法对程式来说好解读,
反过来就是人脑难解读,不过这特点让它在动态语言之中,
可以非经编译就达到很快的速度,用得好的话,速度和开发性可以兼顾,
但是历史证明很多人一看到语法就摇头的。
Lisp 系家族很多,之前有翻过一篇 Lisp 的系谱,看得琳琅满目的,
但是後来的 Common Lisp 可以说是语法还是太旧了,
Common Lisp 有以下缺点:
1.很多语法虽然灵活,但是和现代语言来看,太过老旧
像是对 Hashtable 没有简便语法,它的 Package 系统虽然强大,
但是要看完一章的 pdf 才会用也太困难了一点。
反过来说它可能对了和过去的 Lisp 相容,提供了一堆很怪的指令,
其实像 car cdr elm 这种我也觉得怪了 :QQ
2.Common Lisp 由於主语言缺乏太多东西,如 Thread Socket 等,
很多东西依赖各家扩充,而我看了每一家的制作之後,
商业版的太贵,免费版的在Windows系统上都不够好用,
也就是没有一个觉得是符合需要的。
结果在要放弃 Common Lisp 之时,後来才发现 clojure,
clojure 首先它走 JVM,所以很多函式库的部份不成问题,
除了本身 Java 的限制,像是 Java 太底层还是要呼叫 C 的等等
但是反过来说 clojure 语法现代化很多,和 Java 的结合性也很高,
clojure 提供了很多专为 Java 设计的,如 proxy 指令,
就是专为 Java 事件回呼函式用的,
clojure 写出来的程式也可以编译成 Java 物件。
唯然和 Java 紧密度高,不过 clojure 的函数性上比 common lisp 纯很多
common lisp 其实可以算是多元导向的,可以写成函数性、命令式、物件导向的
但 clojure 只能写成函数性的,因此在很多写法方面,必须要先做考量。
最近写的最大的感触就是了,因为可能写习惯物件导向了,
函数性对於资料和处理函式的分离,一下子不太习惯,
尤其是模组化的设计,目前还在调整当中,我目前是设了三个 namespace
但是後来想想,初期还是先用一个 namespace 就好了,以免自找麻烦。
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 163.29.29.137
1F:→ Schelfaniel:其实本篇未完,不过要赶工作所以就先写这样了。 07/06 18:07
2F:→ Schelfaniel:Ruby 板 1998 有 clojure 大致的长相。 07/06 18:54
3F:推 noctem:有听说这语言最近蛮红的~ 07/07 00:06