深入浅出垃圾回收(二)Mark-Sweep 详析及其优化

在上一篇文中介绍的追踪类(tracing)GC 较引用计数(Reference Counting)性能更高,但原生的追踪类 GC 也有其自身缺点,需要对其进行改造才能真正的名副其实。这篇文章就来介绍与之相关的内容。

阅读全文

深入浅出垃圾回收(一)简介篇

现如今流程的编程语言除 C/C++ 外,都默认具备垃圾回收(garbage collection,后面简写为 GC)机制,而且即便是 C/C++ ,也有类似 Boehm GC 这样的第三方库来实现内存的自动管理。GC 已经是现代语言的标配了。

阅读全文

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

阅读全文