转自:http://blog.csdn.net/ithomer/article/details/17225813

Clojure(发音类似"closure",['kləʊʒə(r)])是一套现代的Lisp语言的动态语言版,它是一个函数式多用途的语言,其语法和其他的Lisp一样,都是建立在 S-expression 之上,即”全是括号,前缀表达式”的语言。

Clojure可以执行于Java虚拟机(JVM)、通用语言运行时(CLR),以及JavaScript引擎之上。与其他Lisp一样,Clojure认为代码即数据,同时有复杂的宏系统。

Clojure 的理念和特性

Clojure是什么,为什么有人要学这门语言? 总的来说,那些认为 Clojure会在现有的大多数编程语言中取得成功的人至少基于这样一个理由: 它是一门新的,支持并发的语言。而那些对lisp语言缺乏了解的人却往往会认为:这是一门相当奇怪的,充斥着令人困惑的圆括号和方括号的语言.

但是,不争的事实是 Clojure 在市场上赢得比其他新诞生的编程语言更多的追捧和表现,更强的发展势头。它第一个对外的发行版是在2007年秋季的时候发布的,在2009年5月发行了第一个稳定版,到这个时候,它已经培育了一个活跃的、充满热情的社区,一个欣欣向荣的开发工具和类库的生态系统,它们被用在迅速增长的一系列专业的应用程序中。

下一代的语言

每一年,在世界范围内的众多机构中的都有很多有才华的计算机科学家通过发表成千上万的论文来阐发它们新的和有趣的想法。这些新的概念在经受了自然选择和沉淀后,其中那些优秀和有用的部分会被准许进入实际的应用环境中。

Clojure 包括了众多尚未在其他(任何)编程语言的实现中出现的最新的想法和伟大的理念. 这其中最引人注目的就是涉及并发程序的部分:软件内存交互和基于代理的进程调度 (Software Transactional Memory and agent-based processing ) 被 "烧录进" (嵌入)到 Clojure编程语言的底层. 除此之外(例如持续不可更改 persistent immutability) 还拥有很多精妙的设计理念,这些设计理念是现代学术研究的成果,也是数十载实践的经验。

抛开Clojure的学术背景,Clojure 是主要设计原则是坚持: 有用性(useful 有益处的) 高于可用性. 它的高级属性是被精心选择的,目的是向程序员提供健壮的、干净的代码,以便程序员容易理解和高效编程. Clojure虽然有很强的学术背景支持,但是绝不是一门只在象牙塔中的语言,每天都有众多开发者在各自的开发领域内使用它。

动态而强有力 (没错,它是lisp!)

对下面语句的意思的理解会因为读者编程经验的不同而有很大差异,它可能会让你非常兴奋,也可能让你产生一些轻微的不适. Clojure 是完全的,真正意义上的神圣的lisp语言的一个方言。

lisp语言因为其无以伦比强大能力和几乎无穷的表达力而获得了盛誉,Clojure自然也不例外。它的功能和元编程的能力是建立在这样的基础之上的:异常驯服的C语言的"石头" 或 具有延展性的java语言的"木头" . 你可以用几百行甚至几十行Clojure代码取替代几千行静态语言的代码,伴随着这而来的是bug数量的减少和开发时间的缩短。

样板代码(Boilerplate code )被完全删去. 域指定语言(Domain Specific Languages ) 不仅简单,而且更一般化--lisp程序往往是按照 "自下而上" 的开发方式写成的。展开式(演进式)的 结构和语法更适合特定的问题领域。你在程序运行的时候取修改程序,而不需要重新编译或重启程序。

但是,历史上也有对lisp进行诋毁的人,或许称为抱怨更为合适. lisp发展过程中,没有完整的规范, 各种不兼容的实现,陈旧落伍的限制.cruft accumulate 在其存在的四五十年里一直存在. 对于 大多数人来说,它的语法过于诡异了。

Clojure 修正上面的大多数这些问题. 它保留了 lisp 的思想和哲学,并同时清除了过去的很多限制. Clojure 高速、干净、具有优先能力和优雅的特征. 但是没有改变lisp中 "代码也是数据" 的哲学. Clojure 语言在直觉和观感上比历史上的lisp更易于阅读. 在后面开始学习的初级阶段,你就发现虽然 仍有各种括号,但是代码是难以置信的容易读和写。

对于那些熟悉lisp语言的人来说,他们很快就会发现他们非常适应Clojure. 对于那些原先没有接触 过lisp的人来说,也没有必要担心, Clojure是简洁和无痛学习。

官方文档: 
http://clojure.org/documentation

中文资料(强烈推荐): 
1. clojure入门教程 
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手册(低版本) 
http://qiujj.com/static/clojure-handbook.html 
4. clojure中文社区: 
http://blog.clojure.cn/

5. Lisp中文社区: 
http://www.lispchina.com/

英文资料(强烈推荐): 
http://clojure-doc.org/articles/content.html

clojure 开源工具: 
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连接数据库: 
http://www.clojureql.org/ 
datomic数据库: 
http://www.datomic.com/ 
fleetdb数据库: 
http://fleetdb.org/ 
https://github.com/mmcgrana/fleetdb-client 
pdf处理: 
https://github.com/yogthos/clj-pdf 
csv处理: 
https://github.com/clojure/data.csv 
json库: 
https://github.com/dakrone/cheshire 
https://github.com/mmcgrana/clj-json 
mail库: 
https://github.com/clojurewerkz/mailer 
https://github.com/MayDaniel/clj-mail 
图形处理库: 
https://github.com/mikera/clisk 
https://github.com/ztellman/penumbra/wiki/Applications 
https://github.com/quil/quil 
音频处理库: 
https://github.com/overtone/overtone 
报表工具库: 
http://incanter.org/ 
定时任务框架: 
http://clojurequartz.info 
webservices 
http://clojure-liberator.github.com

附:编程语言发展的编年史

编程语言的历史早于真正意义的计算机的出现。19世纪就有“可编程的”织布机和钢琴弹奏装置出现,它们都是领域特定语言(DSL)的样例。

据统计已有256种编程语言,这么多的语言中只有一些是常用的或实用的。

  • 1951 – Regional Assembly Language
  • 1952 – Autocode
  • 1954 – IPL (LISP语言的祖先)
  • 1955 – FLOW-MATIC (COBOL语言的祖先)
  • 1957 – FORTRAN (第一个编译型语言)
  • 1957 – COMTRAN (COBOL语言的祖先)
  • 1958 – LISP
  • 1958 – ALGOL 58
  • 1959 – FACT (COBOL语言的祖先)
  • 1959 – COBOL
  • 1959 – RPG
  • 1962 – APL
  • 1962 – Simula
  • 1962 – SNOBOL
  • 1963 – CPL (C语言的祖先)
  • 1964 – BASIC
  • 1964 – PL/I
  • 1966 – JOSS
  • 1967 – BCPL (C语言的祖先)
  • 1968 – Logo
  • 1969 – B (C语言的祖先)
  • 1970 – Pascal
  • 1970 – Forth
  • 1972 – C
  • 1972 – Smalltalk
  • 1972 – Prolog
  • 1973 – ML
  • 1975 – Scheme
  • 1978 – SQL
  • 1980 – C++ (既有类的C语言,更名于1983年7月)
  • 1983 – Ada
  • 1984 – Common Lisp
  • 1984 – MATLAB
  • 1985 – Eiffel
  • 1986 – Objective-C
  • 1986 – Erlang
  • 1987 – Perl
  • 1988 – Tcl
  • 1988 – Mathematica
  • 1989 – FL
  • 1990 – Haskell
  • 1991 – Python
  • 1991 – Visual Basic
  • 1993 – Ruby
  • 1993 – Lua
  • 1994 – CLOS (ANSI Common Lisp的一部分)
  • 1995 – Java
  • 1995 – Delphi (Object Pascal)
  • 1995 – JavaScript
  • 1995 – PHP
  • 1996 – WebDNA
  • 1997 – Rebol
  • 1999 – D
  • 2000 – ActionScript
  • 2001 – C#
  • 2001 – Visual Basic .NET
  • 2002 – F#
  • 2003 – Groovy
  • 2003 – Scala
  • 2007 – Clojure
  • 2009 – Go
  • 2011 – Dart

从1951年至今,人类一共发明了256种编程语言,每一种语言的出现都带有某些新特征。编程语言不断的在革新,很快就会有超出这个清单的新编程语言出现。更多参考 程序员必须知道的编程语言编年史

Clojure 学习入门(1) - 学习资料相关推荐

  1. React学习:入门实例-学习笔记

    文章目录 React学习:入门实例-学习笔记 React的核心 需要引入三个库 什么是JSX react渲染三步骤 React学习:入门实例-学习笔记 React的核心 1.组件化:把整一个网页的拆分 ...

  2. 【《深度学习入门》—— 学习笔记(一)】

    <深度学习入门>-- 学习笔记(一)_1-4章 第一章 Python入门 略 第二章 感知机(Perception) 2.1 感知机是什么 感知机接收多个输入信号,输出一个信号.x1, x ...

  3. python深度学习入门-与学习相关的技巧

    深度学习入门-与学习相关的技巧 博主微信公众号(左).Python+智能大数据+AI学习交流群(右):欢迎关注和加群,大家一起学习交流,共同进步! 目录 摘要 1. 参数的更新 1.1 SGD 1.2 ...

  4. 深度学习入门整理学习(二)

    深度学习入门 深度学习横跨矩阵论.概率论与数理统计.信息论.博弈论.最优化等理论,并融合机器学习.数据挖掘.大数据.人工智能等领域技术,是具有深度和广度的综合范例 数学基础 矩阵论 (1)正交矩阵 A ...

  5. 【《深度学习入门》—— 学习笔记(二)】

    <深度学习入门>-- 学习笔记(二)_5-8章 第五章 误差反向传播法 方法一:基于数学式 - 严密简洁 方法二:基于计算图(computational graph) - 直观 5.1 计 ...

  6. 深度学习入门首推资料--吴恩达深度学习全程笔记分享

    本文首发于微信公众号"StrongerTang",可打开微信搜一搜,或扫描文末二维码,关注查看更多文章. 原文链接:(https://mp.weixin.qq.com/s?__bi ...

  7. 深度学习入门课程学习笔记06 反向传播

    本篇学习笔记对应深度学习入门课程 第七课 博客地址:http://blog.csdn.net/tangyudi 欢迎转载 反向传播: 咱们在之前的课程讲了一系列的前向传播的知识点,前向传播也就是从输入 ...

  8. 《基于张量网络的学习入门》学习笔记3

    <基于张量网络的机器学习入门>学习笔记3 量子寄存器.量子状态叠加与并行处理的关系 不确定性原理 量子寄存器.量子状态叠加与并行处理的关系 叠加态的数学定义: ∣x⟩=α1∣x1⟩+α2∣ ...

  9. 深度学习入门 --- 自我学习与半监督学习

    该章节参考ufldl 1.什么是自我学习(Self-Taught Learning)与半监督学习 首先,什么是半监督学习?当你手头上拥有在大量未标注数据和少量的已标注数据,那这种场景就可以说是半监督学 ...

  10. 深度强化学习入门到精通--资料综述

    关注上方"深度学习技术前沿",选择"星标公众号", 资源干货,第一时间送达! 人工智能是21世纪最激动人心的技术之一.人工智能,就是像人一样的智能,而人的智能包 ...

最新文章

  1. tf.Variable 和 tf.get_variable的区别(2)
  2. Newtonsoft.Json反序列化(Deserialize)出错:Bad JSON escape sequence
  3. mysql 组内排序_mysql组内排序取最大值
  4. Android Sqlite
  5. 取当前进程对应之静态映像文件的绝对路径/proc/self/exe
  6. RobotFramework_4.SeleniumLibrary操作(二)
  7. C# Base64编码
  8. 《Linux内核分析》期末总结及学习心得
  9. (学习笔记)读取PDF/OFD文件
  10. android twitter 分享代码,Twitter分享集成
  11. HTML将div层级升到最高,CSS层级嵌套关系详解
  12. 将秒针声音加入JAVA_喜马拉雅联合秒针系统发布声音流广告报告
  13. asp.ne服务器代码显示http://l.longtailvideo.com/download/5/9/logo.png不可用,在Window Server2008 服务器上无法播放MP4媒体问题
  14. 计算机硬件英语词汇,计算机硬件英语词汇
  15. leetcode:2448. 使数组相等的最小开销【猜结论落在给定点 + 考虑初始值和变化量 + 三分法模板学习】
  16. oracle原销售订单退货,取消销售订单
  17. JVM内存模型是什么?
  18. 无锡清空win8应用商店缓存_微软surface常用清理内存缓存解决办法
  19. sqlserver2005 sql server database services安装失败解决方法
  20. stm32采集脉冲信号_随机脉冲信号采集卡的设计

热门文章

  1. 数据仓库3级范式(3NF)基础
  2. .Net中使用OracleDataAdapter
  3. 关于 TCP window size
  4. 黑马程序员-面向对象-08天-2 (多态)
  5. 2021 年全球知名开源项目
  6. Web XR 混合现实浏览器
  7. Spark开源学习模块
  8. 称重传感器知识:型号,认证,性能与选择
  9. TensorFlow使用--MNIST分类学习(BP神经网络)
  10. 30秒您学会配置TomCat环境变量,并运行无错