V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
LinkedIn
Team
V2EX  ›  程序员

Clojure 是个神奇的语言

  •  1
     
  •   Team · 2020-12-30 08:24:16 +08:00 · 6466 次点击
    这是一个创建于 635 天前的主题,其中的信息可能已经有所发展或是发生改变。

    在读《程序员的修炼之道》的时候,每每提到一些编程思想,如变换式编程、契约式编程等等,都会提到 Clojure 和 xxx 在语言层面支持这种编程方法。

    《黑客与画家》中捧 LISP 的 Paul Graham,在此书出版近 20 多年后依然推荐 LISP,不过他这次推荐的方言是 Clojure,因为这已经是事实上最流行的方言

    A Programmer's Rantings的作者说,「实际上,我已经开始认为它是我见过的最好的程序设计语言了,然而不知怎么它就流行起来了」。

    这门语言在很多主流的平台上都有实现,例如 JVM,CLR 和 JavaScript Host,所以在任何平台上都有用武之地。

    本来我猜这个语言相关的书籍应该并不太多,结果我有点低估它了,真的有挺多资料。

    最近开始看 Clojure 书籍的前言了,也许某个时候就会深入的学习和使用它。

    第 1 条附言  ·  2021-01-03 15:17:29 +08:00
    第 2 条附言  ·  2021-01-04 08:39:04 +08:00

    @lcj2class 开设的电报群交流气氛很好,现在将邀请链接放在这里,便于有需要的人进入讨论 0.0

    欢迎入伙: https://t.me/clojurists

    39 条回复    2021-01-19 21:01:35 +08:00
    cgpiao
        1
    cgpiao  
       2020-12-30 08:53:19 +08:00
    close 的主流应用是哪方面,一直想了解纯函数式语言。
    holulu
        2
    holulu  
       2020-12-30 08:54:37 +08:00
    大学 CAD 画图的时候就写过 lisp
    pythonee
        3
    pythonee  
       2020-12-30 08:56:35 +08:00
    想到了红烧肉姐
    whileFalse
        4
    whileFalse  
       2020-12-30 09:00:41 +08:00
    对这个语言不了解,既然 LZ 这么捧,那能说说这个语言适合哪种场景吗?在该场景下对比竞品语言有什么优势?
    Jeb
        5
    Jeb  
       2020-12-30 09:20:53 +08:00
    国内 LeanCloud 在用 Clojure
    linux40
        6
    linux40  
       2020-12-30 09:27:16 +08:00 via Android
    @cgpiao 这门语言不是纯函数式。
    Wincer
        7
    Wincer  
       2020-12-30 09:41:02 +08:00 via Android   ❤️ 2
    vscode 的插件写 clojure 挺舒服的
    FaiChou
        8
    FaiChou  
       2020-12-30 09:53:25 +08:00   ❤️ 1
    上一家公司全员 Clojure, 前端 ClojureScript. 老板在 17 年时候就开始推荐 clojure. 有兴趣我可以帮忙联系下.

    https://tva1.sinaimg.cn/large/0081Kckwly1gm5n9zgklvj30u050p1ky.jpg
    ytll21
        9
    ytll21  
       2020-12-30 10:00:03 +08:00
    语言不错,可是太小众了,招不到人,上一点规模的企业都不敢用
    nthhdy
        10
    nthhdy  
       2020-12-30 10:02:00 +08:00
    @cgpiao 了解纯函数式看 haskell 啊
    zhuangzhuang1988
        11
    zhuangzhuang1988  
       2020-12-30 10:09:30 +08:00
    我们群里有人在看 metabase 源码, 经常问的是这个参数是啥意思, 该传啥, darklang 作者 也提到为何不选择 clojure(we spent a whole lot of time with dealing accidental complexity, specifically "what type is this field" and nulls all over the place. So I deliberately chose not to have a dynamically typed language, even though Clojure is a lovely language. ) https://blog.darklang.com/why-dark-didnt-choose-rust/
    molika
        12
    molika  
       2020-12-30 10:12:23 +08:00
    @Wincer emacs+cider 才叫真香
    hexiaowu1993
        13
    hexiaowu1993  
       2020-12-30 10:12:49 +08:00
    不容易,难得能见到人提到 Clojure,在 17 年的时候,写了一年的 Clojure,不得不说,语法上面,Clojure 让人写起来还是很舒服的。
    VHacker1989
        14
    VHacker1989  
       2020-12-30 10:20:49 +08:00
    反人类的函数式语法,oop 才是主流,这玩意不知道能干嘛,知名框架就一个 storm
    cmdOptionKana
        15
    cmdOptionKana  
       2020-12-30 10:24:19 +08:00 via Android
    F#更好一点,楼主不妨也了解一下
    TypeError
        16
    TypeError  
       2020-12-30 12:20:15 +08:00 via Android
    还是 oo 语言带一点函数式写法舒服,受不了纯函数式的
    aloyuu
        17
    aloyuu  
       2020-12-30 12:26:11 +08:00 via Android
    php C# 完美,其它一概不考虑
    nguoidiqua
        18
    nguoidiqua  
       2020-12-30 12:30:23 +08:00
    学着挺有意思的,但从来没真正用过,语法我觉得比其他 Lisp 方言要更好读一点。
    P233
        19
    P233  
       2020-12-30 12:31:23 +08:00
    我也是最近一有空就看 clojure + clojurescript
    secondwtq
        20
    secondwtq  
       2020-12-30 12:59:01 +08:00   ❤️ 1
    据我所知,Clojure 最牛逼的应用是 Datomic,一个利用 Datalog 技术的数据库。也是 Clojure 的创造者 Rich Hickey 搞得
    而该应用的一大硬伤在于,他是闭源的 … Cognitect 公司需要它赚钱来投入到 Clojure 中,而另一方面如果一个语言的 killer app 是闭源的,那么必然会严重影响该应用和该语言的应用(虽然我很怀疑任何一个 LISP 在现在能有什么大的应用)
    mascteen
        21
    mascteen  
       2020-12-30 13:08:53 +08:00 via Android
    @secondwtq emacs 是 lisp 写的
    yanhh
        22
    yanhh  
       2020-12-30 13:19:33 +08:00
    Python 就是新的 Lisp
    Jooooooooo
        23
    Jooooooooo  
       2020-12-30 14:44:25 +08:00
    语言流行看生态
    zfish
        24
    zfish  
       2020-12-30 14:52:39 +08:00
    clean code 这本书的作者也在搞 Clojure 了,是个不错的语言,这是 JVM 端的函数式语言,也可以学学 BEVM ( Erlang )的 Elixir,也是函数式语言,天然分布式、高并发、容灾,同时支持 Lisp 类似的宏,用代码写代码。。。
    defclass
        25
    defclass  
       2020-12-30 14:59:49 +08:00   ❤️ 4
    我们在用 Clojure/ClojureScript 做一个开源的笔记软件 logseq, 对 Clojure 感兴趣的同学可以了解一下, : ) https://github.com/logseq/logseq
    fengjianxinghun
        26
    fengjianxinghun  
       2020-12-30 15:32:22 +08:00
    @whileFalse 没有什么优势,lisp 血统就够了,纯粹是信仰。
    chanchan
        27
    chanchan  
       2020-12-30 15:36:48 +08:00
    不喜欢,对比 scheme/racket
    skenan
        28
    skenan  
       2020-12-30 15:52:18 +08:00   ❤️ 1
    @defclass 哇塞,终于发现一个开源的 roam research 替代品,好奇为么 roam 和 你的这个 logseq 都要用 clojure 写呢?其他语言有啥瓶颈?
    defclass
        29
    defclass  
       2020-12-30 15:58:54 +08:00   ❤️ 1
    @skenan 其实还有类似的如 athens . 我觉得很大程度上是因为 ClojureScript 社区有比较方便的图数据库, 前端有 datascript, 后端有 datomic, 存储和查询笔记时的双向链接这种知识图谱比较方便.
    oncethink
        30
    oncethink  
       2020-12-31 09:44:02 +08:00
    @skenan #28 roam research 不错的替代还有 obsidan
    SmiteChow
        31
    SmiteChow  
       2020-12-31 10:58:25 +08:00
    学习曲线巨高 比 Rust 不知高哪里去了 只因它是 pure function

    买了一本 Clojure 书 已经吃灰很久了
    gabrno
        32
    gabrno  
       2020-12-31 14:37:16 +08:00
    @SmiteChow 学过函数是语言就挺简单的,rust 其实不比 clojure 简单,要关注的逻辑之外的东西很多
    skenan
        33
    skenan  
       2020-12-31 16:40:02 +08:00 via iPhone
    @oncethink 都试过,但都感觉没有 roam 好用
    lcj2class
        34
    lcj2class  
       2020-12-31 17:56:36 +08:00   ❤️ 1
    欢迎入伙: https://t.me/clojurists
    Team
        35
    Team  
    OP
       2020-12-31 18:49:28 +08:00
    @cmdOptionKana #15 据我了解两种语言并不是对等的关系,在 JVM 里面和 F#对等是有,而且还很流行,当然具体是怎么拼忘记了.

    Clojure 主要还是个 LISP 方言,F#没听说和 LISP 有关,至少不在维基百科的 LISP 列表中.

    所以我推断你应该不太了解 LISP.
    AndyAO
        36
    AndyAO  
       2021-01-04 09:40:24 +08:00   ❤️ 1
    defclass 的项目挺好的,是个很有用的工具,源代码也值得看.
    看了 defclass 那帖子里的求职简介,感觉他是个很资深的开发人员
    Team
        37
    Team  
    OP
       2021-01-04 17:52:20 +08:00
    @cgpiao #1
    @whileFalse #4

    这两个问题很大,泛泛的回答的话,只能抛出几个词,但是没有深入的解释,其实那几个词也白给.

    最近看到一篇文章,讨论 2020 年平均薪资最高的岗位,主要是应用什么编程语言,答案是 Clojure,这是 StackOverFlow 给出的数据,应该还是比较准确的.

    文章简要的介绍了 Clojure 最近开始火爆的原因,我感觉比很多地方都讲得简洁而清晰,这里就贴一下,直接贴谷歌翻译的中文版,如果想看原文下面也有:


    > 根据 StackOverflow 的数据,Clojure 是收入最高的编程语言列表中的第一名,每年的收入超过$ 72,000 。
    >
    > Clojure 之所以变得流行是因为它是一种简单的语言,可以解决大多数其他语言无法解决的许多现实问题。
    >
    > 由于 Clojure 具有不可变数据结构的支持,因此可以更轻松地进行代码推理。您可以安全地孤立地考虑一段代码,而不必知道整个应用程序的状态。
    >
    > 这也使编写处理并发性和并行性的应用程序变得容易得多。Clojure 在其标准库中提供了许多出色的并发原语,而最近的增减器和 core.async 进一步扩展了此工具集。
    >
    > Clojure 的表达能力很强,您可以编写简洁而简洁的代码,而无需花费太多的仪式或样板。最重要的是,宏允许您轻松抽象代码中的重复模式。
    >
    > 托管在 JVM 上意味着 Clojure 具有成熟的运行时,其中包含许多可用的现有库。在 TechEmpower 基准测试中,Clojure 框架运行良好,并且远远领先于 Ruby 和 Python 等效项。
    >
    > 您还可以学习有关区块链的编程,这在最近非常需求。
    >
    > 函数式编程绝对是值得关注和学习的东西。在生产中使用 Clojure 的公司的成功案例越来越多,没有理由期望这种趋势在可预见的将来会改变。

    What are the highest paid programming languages? - Technology
    https://expertain.net/what-are-the-highest-paid-programming-languages/

    至于为什么,这些新起的小众语言薪资比较高,感觉这个观点是比较有解释力的:


    > 相当长一段时间里,豆瓣招聘的主要根据地就是 CPyUG 。找了解 Python 的程序员本身就完成了对员工的第一层筛选。在那几年里 Python 一直小众,一个懂 Python 的程序员大概率具备独立的审美与思考,而能主动学习一门自己认可的语言也已经完成了个人成长能力的证明。基于这些特质建立的早期团队也成为豆瓣的中坚。

    [“教授”洪强宁和他穿越的技术江湖]( https://mp.weixin.qq.com/s/UCQaNMQ3rfCwfsOApCupyA)
    Team
        38
    Team  
    OP
       2021-01-04 17:56:31 +08:00
    如果用最短的话表示 Clojure 的优势就是,①LISP(或者元编程)和②函数式.

    前者能够实现'设计模式'的复用,能定制 DSL,这个功能是非常强大的,Java 只能总结出'设计模式',而复用还是要靠码农脑子完成的,而 LISP 可以让机器自动完成.

    FP 中的函数,是没有任何副作用的,数据也是不可变的,这就导致处理数据的时候会非常方便,出错的时候稳定性强,而且天然的适合处理并发问题.

    当然 Lisp 的很多方言也能实现,在方言当中 Clojure 的优势就是能够依托 JVM,CLR 和 JavaScript Host.
    JohnXu20151211
        39
    JohnXu20151211  
       2021-01-19 21:01:35 +08:00
    @zhuangzhuang1988 同啃 metabase 源码,求拉群
    关于   ·   帮助文档   ·   API   ·   FAQ   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   4043 人在线   最高记录 5497   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 47ms · UTC 10:00 · PVG 18:00 · LAX 03:00 · JFK 06:00
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.