Clojure,學(xué)習(xí)入門(mén)(1)——,學(xué)習(xí)資料x(chóng)
發(fā)布時(shí)間:2020-08-29 來(lái)源: 黨課講稿 點(diǎn)擊:
Clojure 學(xué)習(xí)入門(mén)(1 )—— 學(xué)習(xí)資料
Clojure(發(fā)音類似"closure",["kl????(r)])是一套現(xiàn)代的 Lisp 語(yǔ)言的動(dòng)態(tài)語(yǔ)言版,它是一個(gè)函數(shù)式多用途的語(yǔ)言,其語(yǔ)法和其他的 Lisp 一樣,都是建立在 S-expression 之上,即”全是括號(hào),前綴表達(dá)式”的語(yǔ)言。
Clojure 可以執(zhí)行于 Java 虛擬機(jī)(JVM)、通用語(yǔ)言運(yùn)行時(shí)(CLR),以及JavaScript 引擎之上。與其他 Lisp 一樣,Clojure 認(rèn)為代碼即數(shù)據(jù),同時(shí)有復(fù)雜的宏系統(tǒng)。
Clojure 的理念和特性 Clojure 是什么,為什么有人要學(xué)這門(mén)語(yǔ)言? 總的來(lái)說(shuō),那些認(rèn)為 Clojure 會(huì)在現(xiàn)有的大多數(shù)編程語(yǔ)言中取得成功的人至少基于這樣一個(gè)理由: 它是一門(mén)新的,支持并發(fā)的語(yǔ)言。而那些對(duì) lisp 語(yǔ)言缺乏了解的人卻往往會(huì)認(rèn)為:這是一門(mén)相當(dāng)奇怪的,充斥著令人困惑的圓括號(hào)和方括號(hào)的語(yǔ)言. 但是,不爭(zhēng)的事實(shí)是 Clojure 在市場(chǎng)上贏得比其他新誕生的編程語(yǔ)言更多的追捧和表現(xiàn),更強(qiáng)的發(fā)展勢(shì)頭。它第一個(gè)對(duì)外的發(fā)行版是在 2007 年秋季的時(shí)候發(fā)布的,在 2009 年 5 月發(fā)行了第一個(gè)穩(wěn)定版,到這個(gè)時(shí)候,它已經(jīng)培育了一個(gè)活躍的、充滿熱情的社區(qū),一個(gè)欣欣向榮的開(kāi)發(fā)工具和類庫(kù)的生態(tài)系統(tǒng),它們被用在迅速增長(zhǎng)的一系列專業(yè)的應(yīng)用程序中。
下一代的語(yǔ)言 每一年,在世界范圍內(nèi)的眾多機(jī)構(gòu)中的都有很多有才華的計(jì)算機(jī)科學(xué)家通過(guò)發(fā)表成千上萬(wàn)的論文來(lái)闡發(fā)它們新的和有趣的想法。這些新的概念在經(jīng)受了自然選擇和沉淀后,其中那些優(yōu)秀和有用的部分會(huì)被準(zhǔn)許進(jìn)入實(shí)際的應(yīng)用環(huán)境中。
Clojure 包括了眾多尚未在其他(任何)編程語(yǔ)言的實(shí)現(xiàn)中出現(xiàn)的最新的想法和偉大的理念. 這其中最引人注目的就是涉及并發(fā)程序的部分:軟件內(nèi)存交互和基于代理的進(jìn)程調(diào)度 (Software Transactional Memory and agent-based processing ) 被 "燒錄進(jìn)" (嵌入)到 Clojure 編程語(yǔ)言的底層. 除此之外(例如持續(xù)不可更改 persistent immutability) 還擁有很多精妙的設(shè)計(jì)理念,這些設(shè)計(jì)理念是現(xiàn)代學(xué)術(shù)研究的成果,也是數(shù)十載實(shí)踐的經(jīng)驗(yàn)。
拋開(kāi) Clojure 的學(xué)術(shù)背景,Clojure 是主要設(shè)計(jì)原則是堅(jiān)持: 有用性(useful 有益處的) 高于可用性. 它的高級(jí)屬性是被精心選擇的,目的是向程序員提供健壯的、干凈的代碼,以便程序員容易理解和高效編程. Clojure 雖然有很強(qiáng)的學(xué)術(shù)背景支持,但是絕不是一門(mén)只在象牙塔中的語(yǔ)言,每天都有眾多開(kāi)發(fā)者在各自的開(kāi)發(fā)領(lǐng)域內(nèi)使用它。
動(dòng)態(tài)而強(qiáng)有力 ( 沒(méi)錯(cuò), 它是 lisp!) 對(duì)下面語(yǔ)句的意思的理解會(huì)因?yàn)樽x者編程經(jīng)驗(yàn)的不同而有很大差異,它可能會(huì)讓你非常興奮,也可能讓你產(chǎn)生一些輕微的不適. Clojure 是完全的,真正意義上的神圣的 lisp 語(yǔ)言的一個(gè)方言。
lisp 語(yǔ)言因?yàn)槠錈o(wú)以倫比強(qiáng)大能力和幾乎無(wú)窮的表達(dá)力而獲得了盛譽(yù),Clojure 自然也不例外。它的功能和元編程的能力是建立在這樣的基礎(chǔ)之上的:異常馴服的 C語(yǔ)言的"石頭" 或 具有延展性的 java 語(yǔ)言的"木頭" . 你可以用幾百行甚至幾十行Clojure 代碼取替代幾千行靜態(tài)語(yǔ)言的代碼,伴隨著這而來(lái)的是 bug 數(shù)量的減少和開(kāi)發(fā)時(shí)間的縮短。
樣板代碼(Boilerplate code )被完全刪去. 域指定語(yǔ)言(Domain Specific Languages ) 不僅簡(jiǎn)單,而且更一般化--lisp 程序往往是按照 "自下而上" 的開(kāi)發(fā)方式寫(xiě)成的。展開(kāi)式(演進(jìn)式)的 結(jié)構(gòu)和語(yǔ)法更適合特定的問(wèn)題領(lǐng)域。你在程序運(yùn)行的時(shí)候取修改程序,而不需要重新編譯或重啟程序。
但是,歷史上也有對(duì) lisp 進(jìn)行詆毀的人,或許稱為抱怨更為合適. lisp 發(fā)展過(guò)程中,沒(méi)有完整的規(guī)范, 各種不兼容的實(shí)現(xiàn),陳舊落伍的限制.cruft accumulate 在其存在的四五十年里一直存在. 對(duì)于 大多數(shù)人來(lái)說(shuō),它的語(yǔ)法過(guò)于詭異了。
Clojure 修正上面的大多數(shù)這些問(wèn)題. 它保留了 lisp 的思想和哲學(xué),并同時(shí)清除了過(guò)去的很多限制. Clojure 高速、干凈、具有優(yōu)先能力和優(yōu)雅的特征. 但是沒(méi)有改變 lisp中 "代碼也是數(shù)據(jù)" 的哲學(xué). Clojure 語(yǔ)言在直覺(jué)和觀感上比歷史上的 lisp 更易于閱讀. 在后面開(kāi)始學(xué)習(xí)的初級(jí)階段,你就發(fā)現(xiàn)雖然 仍有各種括號(hào),但是代碼是難以置信的容易讀和寫(xiě)。
對(duì)于那些熟悉 lisp 語(yǔ)言的人來(lái)說(shuō),他們很快就會(huì)發(fā)現(xiàn)他們非常適應(yīng) Clojure. 對(duì)于那些原先沒(méi)有接觸 過(guò) lisp 的人來(lái)說(shuō),也沒(méi)有必要擔(dān)心, Clojure 是簡(jiǎn)潔和無(wú)痛學(xué)習(xí)。
官方文檔:
官方文檔:
http://clojure.org/documentation
中文資料 中文資料(強(qiáng)烈推薦):
1. clojure 入門(mén)教程
http://xumingming.sinaapp.com/302/clojure-functional-programming-for-the-jvm-clojure-tutorial/
2. clojure 文檔翻譯
http://code.google.com/p/clojure-doc-en2ch/w/list
3. clojure 手冊(cè)(低版本)
http://qiujj.com/static/clojure-handbook.html
4. clojure 中文社區(qū):
http://blog.clojure.cn/
5. Lisp 中文社區(qū):
http://www.lispchina.com/
英文資料 英文資料(強(qiáng)烈推薦):
http://clojure-doc.org/articles/content.html
clojure 開(kāi)源工具:
開(kāi)源工具:
clojure 工具箱匯總:
http://www.clojure-toolbox.com/
ring server:
https://github.com/ring-clojure/ring/wiki
compojure:
https://github.com/weavejester/compojure/wiki
noir web 框架:
http://www.webnoir.org
sandbar session 框架:
https://github.com/brentonashworth/sandbar/wiki
clojureQL 連接數(shù)據(jù)庫(kù):
http://www.clojureql.org/
datomic 數(shù)據(jù)庫(kù):
http://www.datomic.com/
fleetdb 數(shù)據(jù)庫(kù):
://fleetdb.org/
https://github.com/mmcgrana/fleetdb-client
pdf 處理:
https://github.com/yogthos/clj-pdf
csv 處理:
https://github.com/clojure/data.csv
json 庫(kù):
dakrone/cheshire
https://github.com/mmcgrana/clj-json
mail 庫(kù):
clojurewerkz/mailer
https://github.com/MayDaniel/clj-mail
圖形處理庫(kù):
mikera/clisk
ztellman/penumbra/wiki/Applications
https://github.com/quil/quil
音頻處理庫(kù):
https://github.com/overtone/overtone
報(bào)表工具庫(kù):
http://incanter.org/
定時(shí)任務(wù)框架:
http://clojurequartz.info
webservices
http://clojure-liberator.github.com
附:編程語(yǔ)言發(fā)展的編年史 編程語(yǔ)言的歷史早于真正意義的計(jì)算機(jī)的出現(xiàn)。19 世紀(jì)就有“可編程的”織布機(jī)和鋼琴?gòu)椬嘌b置出現(xiàn),它們都是領(lǐng)域特定語(yǔ)言(DSL)的樣例。
據(jù)統(tǒng)計(jì)已有 256 種編程語(yǔ)言,這么多的語(yǔ)言中只有一些是常用的或?qū)嵱玫摹?/p>
1 Regional Assembly Language 2 Autocode 4 IPL (LISP 語(yǔ)言的祖先) 5 LOW-MATIC (COBOL 語(yǔ)言的祖先) FORTRAN (第一個(gè)編譯型語(yǔ)言) 7 COMTRAN (COBOL 語(yǔ)言的祖先) LISP 8 ALGOL 58 FACT (COBOL 語(yǔ)言的祖先) COBOL 59 RPG APL imula 2 SNOBOL • 1963 – CPL (C 語(yǔ)言的祖先)
BASIC 4 PL/I 6 JOSS 7 BCPL (C 語(yǔ)言的祖先) 8 Logo 69 B (C 語(yǔ)言的祖先) Pascal 0 Forth C Smalltalk 2 Prolog 3 ML 5 cheme 78 SQL 0 C++ (既有類的 C 語(yǔ)言,更名于 1983 年 7 月) 3 Ada Common Lisp 4 MATLAB 5 Eiffel Objective-C 6 Erlang 7 Perl Tcl 8 Mathematica 89 FL 0 Haskell Python 1 Visual Basic Ruby 3 Lua 4 CLOS (ANSI Common Lisp 的一部分) Java Delphi (Object Pascal) JavaScript 5 PHP 6 WebDNA 7 Rebol 1999 D 0 ActionScript • 2001 – C#
1 Visual Basic .NET 2 F# Groovy 3 Scala 7 Clojure 09 Go • 2011 – Dart 從 1951 年至今,人類一共發(fā)明了 256 種編程語(yǔ)言,每一種語(yǔ)言的出現(xiàn)都帶有某些新特征。編程語(yǔ)言不斷的在革新,很快就會(huì)有超出這個(gè)清單的新編程語(yǔ)言出現(xiàn)。更多參考 程序員必須知道的編程語(yǔ)言編年史
相關(guān)熱詞搜索:學(xué)習(xí)資料 入門(mén) 學(xué)習(xí)
熱點(diǎn)文章閱讀