作者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