• Clojure入门(1)


    clojure 是一门函数式语言。

    目前主流编程语言多是“命令式”语言 (imperative language),如:java,c++

    命令式语言强调“语句”和“流程控制”,让机器按照我们预设的逻辑路线来运转。

    函数式语言并非当今主流,它更强调“因果关系”,一个纯函数对特定的输入总是给出特定的输出结果。

    通过函数间的组合,可以提供强大的功能。

    函数式的风格,更易于程序的维护。因为我们很容易通过现象逐步追踪其原因。

    从发展趋势上看:并行,分布式,多cpu越来越普及。主流语言在对待这些变化上事倍功半,有点力不从心。

    得益于此契机,近些年,函数式语言有卷土重来的意思。

    函数式的语言特点之一是:一般情况下,程序的执行结果对执行顺序并不敏感,这对分布式执行十分有利。

     函数式的另一特点:崇尚“不变性”。因“不变”,就可以安全共享,而不需要“锁”等复杂同步机制,因而在并发中优势明显。

    函数式或崇尚函数式的语言很多,最古老的Lisp系列,学究式的 Haskell, ML家族的Ocaml

    炙手可热的scala,它特性众多,功能丰富,有很多前卫的设计,据说有取代java的潜力。它是多范式语言,也支持函数式风格。

    但这里介绍的是:至简而务实的 clojure

    clojure很简,整个语言就是一个 clojure-xxxx.jar 文件,发展了近10年,仍只有大约3M。

    函数式的共同特性是:

    1. 崇尚“纯函数”,就是没有副作用,对特定的输入,永远是相同的输出。

    2. “函数”是一等公民。可以同int string 类型的变量一样作为参数传递,作为返回值,

      也可以说,支持高阶函数特性。

    3. 使用不变的“数据”,而非“变量”

      这个好处很多,可以很容易地处理并发,无“锁”的困扰

    4. 关注点在“变换”以及“变换的组合”,这是关注“动词”,而非面向对象王国里的“名词”--即对象。有人称之为“动词的复仇”

    clojure 很务实,没有清高地畅游于数学世界,沉醉于理论上的完美,而是选择了JVM为宿主,

    虽然这会让它多少受限于JVM的特性(比如JVM不支持尾递归优化);

    JVM宿主的好处多多:clojure可以像调用自身函数一样简单地操控java类库中的类、对象、方法。

    java能做得很好的事,clojure就不再重新发明,至多是包装一下,为了更好组合。

    clojure强调“不变性”,但并不拒绝偶尔使用“变量”

    clojure强调“纯函数”,但不拒绝必要的“副作用”(比如调试的打印)

    clojure崇尚“惰性求值”,但并不强迫你必须如此。

    最后,clojure是一种Lisp的方言,在JVM上的Lisp方言。

    它保持了Lisp的强大,并且更简洁。

    即便永远都不用它,其设计理念,内中哲学绝对值得品味!

  • 相关阅读:
    Python_FTP通讯软件
    Python_NAT
    Python_跟随目标主机IP变换
    Python_网络攻击之端口
    spring
    Java多线程总结之线程安全队列Queue
    队列
    路径
    事务的概念
    GBK,UTF-8,和ISO8859-1之间的编码与解码
  • 原文地址:https://www.cnblogs.com/gyhang/p/6042846.html
Copyright © 2020-2023  润新知