2017 年终总结

2018 年不知不觉已经过了 20 天,从元旦开始就一直在重写之前的 History Master,其实这个插件一开始就是为了写年终总结,但功能相对较简单,经过这十几天的不断开发,算是脱胎换骨了,现在也可以好好写年终总结了。
一个词来形容 2017 的话,应该会是:变化。由于换了工作, 那就从工作开始谈起吧。

阅读全文

使用 ClojureScript 开发浏览器插件的过程与收获

随着 Firefox 57 的到来,之前维护的一个浏览器插件 gooreplacer 必须升级到 WebExtensions 才能继续使用,看了下之前写的 JS 代码,毫无修改的冲动,怕改了这个地方,那个地方突然就 broken 了。因此,这次选择了 cljs,整体下来流程很顺利,除了迁移之前的功能,又加了更多功能,希望能成为最简单易用的重定向插件 :-)

阅读全文

由浅入深学习 Lisp 宏之实战篇

本文是宏系列的第二篇文章,侧重于实战,对于新手建议先阅读宏系列的理论篇,之后再来看本文。当然如果你有一定基础,也可以直接阅读本文。
其次,希望读者能把本文的 Clojure 代码手动敲到 REPL 里面去运行、调试,直到完全理解。

阅读全文

由浅入深学习 Lisp 宏之理论篇

宏(macro)是 Lisp 语言中最重要的武器,它可以自动生成运行时的代码。宏也是编写领域特定语言(DSL)的利器,可以在不改动语言本身的基础上,增加新的程序构造体,这在其他语言中是不可能。比如,现在比较流行的同步方式写异步代码的 async/await,在非 Lisp 语言需要语言本身支持,但是在 Lisp 里面可以通过几个宏来解决,可以参考:core.async

阅读全文

《硅谷之谜》读后感

吴军博士的《硅谷之谜》 在年前就买了,可是一直迟迟没翻开。最近在一次出差的动车上把它看完了,可以说是一气呵成,根本停不下来,里面介绍的很多观点都比较深刻,而不仅仅是简单的罗列事实,更像是科学探究,试图找出每一个事情背后的原理。

阅读全文

Clojure Web 开发-- Ring 使用指南

在 Clojure 众多的 Web 框架中,Ring 以其简单统一的 HTTP 抽象模型脱颖而出。Ring 充分体现了函数式编程的思想——通过一系列函数的组合形成了一个易于理解、扩展的 HTTP 处理链。

阅读全文

“玩转” 技术面试——链表的函数表示法

简介

《Acing the technical interview》,老外写的白板面试的调侃文,声色并茂,兼具叙述文的生动与技术文的抽象。文中用函数来模拟链表的表示法我在《编程语言的基石——Lambda calculus》里面有深入讲解,感兴趣的读者可以参考。本文最后,给出了 Python、Ruby 语言中链表的函数表示。

阅读全文

辨析 Ruby 中的 Method 与 Proc

Ruby is simple in appearance, but is very complex inside, just like our human body.

– Matz https://www.ruby-lang.org/en/about

阅读全文

Clojure 运行原理之字节码生成篇

上一篇文章讲述了 Clojure 编译器工作的整体流程,主要涉及 LispReader 与 Compiler 这两个类,而且指出编译器并没有把 Clojure 转为相应的 Java 代码,而是直接使用 ASM 生成可运行在 JVM 中的 bytecode。本文将主要讨论 Clojure 编译成的 bytecode 如何实现动态运行时以及为什么 Clojure 程序启动慢,这会涉及到 JVM 的类加载机制。

阅读全文

Clojure 运行原理之编译器剖析篇

Clojure is a compiled language, yet remains completely dynamic – every feature supported by Clojure is supported at runtime.

阅读全文