0x00 引言
Emacs有三大杀器:Emacs、Org、Magit。函数式编程真的很喜欢,抽象程度很爽。从Emacs能看到很多东西,或许我以后可以为此编写一本书吧?
0x01 Emacs
Emacs 诞生于函数式编程的热潮中,在Emacs中传承者MIT的Lisp Machine的理想。关于Lisp Machine你需要 去学习Lambda Calculus的内容。可能你敬佩图灵,但我更敬佩Church。Church是图灵在普林斯顿大学攻取博士学位的导师。Lambda Calculus就是由Church提出来的。我喜欢基于Lambda Calculus的Lisp系语言,其实对于初学者来说,从Lisp系走进编程世界是最优美的姿势。这个世界有很多庸人,却自以为是导师,踏着学生的血肉,养活了自己的房产。
Emacs是由从MIT出来的,提倡free software运动的Richard Stallman博士依据一个闭源软件开发出来的。Emacs 中有很多特别的东西,这些东西在IT人员以后的手工生涯中都能用上的:分层设计、内存回收机制、hook机制、代码注释。
分层设计
虚拟机最先出现在函数式编程语言中,Java语言和.NET平台的虚拟机是后来很久之后才从函数式编程世界中借鉴过来的。来自于MIT的Emacs也有一个虚拟机——Emacs VM。这个虚拟机采用C语言编写,在其上层开发出了Emacs Lisp语言,可以用Emacs Lisp语言来写扩展。从现在的角度来看提供扩展功能是一个伟大而优美的设计,但提供扩展的方式有很多,这种直接开发出一种专有的编程语言未必是最好的方法。
建立在Emacs VM上的Emacs Lisp语言有两种文件:.el和.elc文件。在下面的介绍中,我将Emacs Lisp和Java做对比。.el文件是一种纯文本文件,相当于Java编程语言的.java文件;.elc文件是一种字节码文件,相当于Java中的.class文件。当你为Emacs写插件的时候,你可以将.el文件编译为.elc字节码格式来提高插件的反应速度。
如果你理解到这种分层方法的优美,那么以后你在开发系统的时候如果采用了分层设计的话,你会深深的被你那优美的设计所折服。
内存回收机制
在Emacs中,你可以在加载文件中通过变量gc-cons-threshold来设置启动回收机制的时间。
(setq gc-cons-threshold 100000000)
关于有自动回收机制好,还是手工回收机制好,这是一场战争。
hook机制
如果你用过Javascript或者Node.js你会体会到这个真的很爽啦。
代码注释
如果你写Emacs Lisp,你会养成写注释的习惯。Emacs的这个妙处,当你用过C-h的时候,你会喜欢上玩它。
0x02 Org
Org在Emacs的世界中有好几个指代,可以指Org插件,可以指Org文件格式。在这里如果指Org内置的插件,本文将用Org插件来表示,如果指Org文件格式的话,本文将用Org文件来表示。
Literate Programming
如果你曾经看过Knuth的书,你会觉得这个文化编程的概念很高大上,当你在Emacs里进行文化编程的时候你会发现真的很爽。用这个你会爱上写文档的,在代码中写文档。
TODO 管理
0x03 Magit
执行git status:
然后可以在这里面进行你常用的Git操作了,感觉比tig好用多了。
0x04 随感
如果Emacs从一开始就用GNU Guile 来写的话,他的用户会更好玩。GNU Guile可是为了GNU系统专门开发的插件语言。
如果你能读懂的话,那么你会看到很多很多。
0x05 UPDATE
2016-04-20