Clojure:让我兴奋的编程语言

最近我一直有想写一点关于Clojure的东西的冲动。但不巧的是,还有一个更大的冲动经常出现,就是要用Clojure语言重写我的这个博客网站,这也就让这篇文章的出炉延迟了一段时间。那么,下面就让我们开始聊聊Clojure这种编程语言吧!

我真正用到的第一种编程语言是Ruby。目前仍然每天在用Ruby为客户开发工作,大多是Rails应用。用Ruby大量的开发制作原型——这是一种非常帅的语言,尽管对编程的程序员需要极大的自律性来避免落入一些常见的陷阱。

我关注Clojure语言很久了,读了不少关于这种语言的书,看了不少谈论这种语言的视频,但大多时候都是浅尝辄止。前几周,我遇到了一次机会,要 为一个客户用Clojure写一个小的简单的服务程序,这让我有了完全不同的体验。从那以后,我开始感觉用Clojure制作原型和编写程序变得更自然顺 手。下面就是我在用这种语言开发过程中获得的感受和想法,以及为什么Clojure现在会变成我最喜欢最常用的编程语言。先免责声明,我既不是一个Clojure语言编程高手,也不能保证我说的都是正确的——这些只是我短期的在有限的一些项目中使用这种编程语言的过程中获得的体验。

Clojure给人一种经过精心设计过的感觉

从Ruby中出来,这是Clojure最让我感到震惊的特征。Clojure语言在发布前足足经历了两年的设计(甚至没有任何代码产生,完全在稿纸上)。你可以在第一次接触它的过程中就能感受到这些。

在使用一种编程语言的时候,我通常会遇到一些情况——无法理解为什么写出的代码并没有按照预期的结果输出。当这种情况发生时,比如使用JavaScript,最终弄清问题出在什么地方的结果让人非常的泄气——大多数时候当我向一个更有经验的JS程序员求助时他会说:

“哈哈,当然这样不行!你看这里,在JavaScript里,这是一个特殊情况。你需要这样做才行。”

这让我很郁闷。我不能把这当成学到了一种知识,这只是在这种语言里的一个变通技巧。这并不像是一种知识。

而在Clojure里,我通常会想明白是我错了(比如,把lazy序列当成普通序列来处理),这种语言会以某种途径让你去把事情做对。感觉就像,如果我询问Rich Hickey (Clojure语言的发明人),他会告诉我:

“哈哈,这当然不行!再想想——每个东西都应该按照它自己应该的方式运行。你用错了函数,你用错了数据结构。”

这才是真正的长知识,这会让我很开心。

Clojure简洁且优雅

Clojure并不是一种纯函数式编程语言,通常这会让这种语言更容易为大多数人接受和学习。但它仍然是非常函数式的,这使得这种语言非常优雅,简洁和强大。

使用Clojure编程,我发现自己会先开发出非常小且可复用的函数,然后巧妙的组合它们,构建成更大的程序。它的超级简单的模块化系统使得你非常容易的理清你的程序的模块和它们的依赖模块。

还有,无论何时,当我写的接口有丑陋的地方,或什么地方有重复的代码,我都能明显的感觉到,而且要去思考它,想办法重构它,这种语言会驱动你寻找最佳编程方案。这跟以前的跟那些编程语言做斗争的感受完全不一样。它会帮助你实现最简洁、最优雅编程策略。这对于我,一个曾大量使用过Ruby,C语言和JavaScript的程序员来说,是空前的新奇的感觉。

Clojure程序的开发流程让人惊叹

在我的认识里,编程工作中一个最让人头疼的问题是,我们大量的脑力浪费在一遍又一遍的等待程序反馈中。而用Clojure开发程序的流程解决了这个问题。如果你使用过Lisp语言,相信不会对此惊奇。

使用Clojure编程,你的编辑器(可以是Vim,Emacs,Light Table…)一直和运行环境实时联通。你对函数的开发、测试、修改能立刻得到反馈。你的大脑在编程中处于流状态,缓慢的反馈会打断你的逻辑思维,这是不 可接受的。这也是最喜欢Clojure的原因。

所以,这些就是我目前对Clojure这种编程语言的感觉。如果你还没有尝试过它,我高度推荐你试一试:到官方网站看看如何入手。

时间: 2024-12-11 12:51:16

Clojure:让我兴奋的编程语言的相关文章

RDBMS vs. NoSQL & Clojure概述

RDBMS vs. NoSQL 合作还是竞争 数据库要解决的主要问题 不管是RDBMS还是NoSQL,在大的方面他们都属于数据库这个范畴,这个范畴之内所要面临的一些共同问题有哪些呢.下面的图是一个大致的归纳. 从图中可以看出,一个数据库系统主要解决以下几个问题: 数据的存储,即要存入哪些数据到系统中,当然在data definition这一块,有schema和no schema两种,说白了就是数据格式和数据关系的定义问题 完成了data definition,那么接下来自然要发生的事情就是将数据

为什么我不再用 .NET 框架

.NET平台很棒.真的很棒.直到它不再那么棒.我为什么不再用.NET?简单来说,它限制了我们选择的能力(对我来说很重要),转移了我们的注意力,使得我们向内认知它的安全性,替代了帮助我们认知外面广阔世界的所有可能性. [系好安全带:这个文章的长度几乎成了一本书-] 优点 首先让我开始说说.NET做得对的许多事吧,尽管这其中的大多数并不来自.NET本身,但却是由.NET社区而来. C# C#令人惊叹.我认为它是一个令人惊叹的编程语言.从强大的C语言背景而来,我彻底地喜欢其语法,流和这门语言的所带来的

Python使用RethinkDB总结_数据库其它

和 MongoDB 类似 RethinkDB 是一个主要用来存储 JSON 文档的数据库引擎(MongoDB 存储的是 BSON),可以轻松和多个节点连成分布式数据库,非常好用的查询语言以及支持表的 joins 和 group by 操作等.昨天试玩了一下 RethinkDB,在一台虚拟机上测试,插入2500万行记录性能比较稳定,维持在 1.5K 行到 2K 行每秒之间,RethinkDB 的数据分片(sharding)功能非常简单,一个点击就可以完成.下面的安装和测试在 Ubuntu 12.0

并发编程语言 Clojure 1.5 正式版发布

Clojure 终于迎来了 1.5 正式版本,该版本要求 Java 6 或者更新的版本.该版本包含一些新特性.性能方面改进,错误提示的改进,文档完善等等,详情请看发行说明. Clojure是一种LISP风格的语言,运行在JVM上.Clojure的一大特色就是其并发机制,它支持不可变的数据结构(Clojure是来自于可持久化的数据结构).Clojure还有一个特色是软件事务存储(Software Transactional Memory,STM),其支持用事务代替锁和互斥器来更新共享内存.STM还

优化函数式编程:向 PHP 移植 Clojure 函数

许多通用程序设计语言试图兼容大多数编程范式,PHP 就属于其中之一.不论你想要成熟的面向对象的程序设计,还是程序式或函数式编程,PHP 都可以做到.但我们不禁要问,PHP 擅长函数式编程吗?本文系国内 ITOM 管理平台 OneAPM工程师编译整理. 笔者在今年冬天开始时,在 Recurse Center致力于学习 Clojure,更加深入地了解了函数式编程,并重新拾起 PHP 的客户端工作.但笔者仍然希望运用一些高阶函数和概念,并对它们进行研究. 笔者已经在 PHP 中实施了模拟 LISP 语

Java 下一代: Groovy、Scala 和 Clojure 中的共同点(一)

探究这些下一代 JVM 语言如何处理操作符重载 编程语言中的好理念可以延续并扩展到其他语言,就像美酒一样历久弥香.因此,不足奇怪的是,Java 下一代语言 - Groovy.Scala 和 Clojure - 具有很多共同的特性.在本期和下一期 Java 下一代 文章中,我将探讨每种语言语法中功 能清单的一致性.我从能够重载操作符这个特性说起  - 克服了Java 语言中长期存在的一个缺点. 操作符重 载 如果您改造过 Java BigDecimal 类,可能看到过类似于清单 1 的代码: 清单

Java 下一代: Groovy、Scala 和 Clojure 中的共同点(二)

了解Java 下一代语言如何减少样板代码和降低复杂性 Java 编程语言诞生时所面临的限制与如今的开发人员所面临的条件有所不同.具体来讲,由于上世纪 90 年代中期的硬 件的性能和内存限制,Java 语言中存在原语类型.从那时起,Java 语言不断在演化,通过自动装箱(autobox)消除了许 多麻烦操作,而下一代语言(Groovy.Scala 和 Clojure)更进一步,消除了每种语言中的不一致性和冲突. 在这 一期的文章中,我将展示下一代语言如何消除一些常见的 Java 限制,无论是语法上

Java 下一代: Groovy、Scala 和 Clojure 中的共同点(三)

反思异常.表达式和空 在 上一期文章 中,我介绍了 Java 下一代语言用来消除 Java 语言中华而不实的东西和复杂性的创新方式.在这一期 文章中,我将展示这些语言如何消除 Java  的一些瑕疵:异常.语句与表达式,以及围绕 null 的边缘情况. 表达式 Java  语言从 C 语言那里继承的一项传承是区分编程语言 和编程表达式.Java 语句的示例包 括使用 if 或 while 的代码行,以及使用 void 来声明不会返回任何值的方法的代码行.表达式(比如 1 + 2 )用于求取 某一

Groovy、Scala 和 Clojure的使用

在与 Martin Fowler 共同参加的一次主题演讲中,他提供了一个敏锐的观察报告: Java 的遗产是 平台,不是 语言. 最初的 Java 技术工程师曾做过一个了不起的决定,将语言从运行时中分离出来,最终使 200 多种语言可在 Java 平台 上运行.该基础架构对平台保持长久活力非常关键,因为计算机编程语言的寿命通常很短.自 2008 年以来,每年由 Oracle 主办的 JVM 语言峰会都会为 JVM 上替代语言的实现者提供与平台工程师公开合作的机会.   欢迎来 到 Java 下一