http://qiangkou.me/2015/10/01/r-src/
01 Oct 2015
R
语言是一门专门用于数据分析的领域特定语言(DSL),多数R
语言用户并不了解R
解释器的内部。这和使用者的背景直接相关。对R
底层有一定了解之后,对R
可能会有完全不同的评价,是好是坏,就因人而异了。
这里我把以前读R
源代码的笔记整理出来,希望对想了解R
底层机制的朋友有所帮助。主要涵盖以下内容:(1)R
解释器的初始化和R
语句求值;(2)R
底层的SEXP
结构以及相关的API;(3)environment
究竟是什么;(4)base
和method
包;(5)compiler
包,也就是JIT编译的原理;(6)R
里一些缺乏注释的黑暗角落,这些会穿插在各个章节之间。
这本书不是一本R
语言教程,市面上的R
语言图书已经足够多了。这里不会涉及任何直接的R
语言使用的问题,对于R
语言使用基本上没有任何帮助。
有两点需要说明:首先,这份源码解析基于3.2.2,源代码可以从这里下载;其次,我个人对图形设备和Windows系统的了解很有限,这里就不涉及这两方面的内容了。
作为一个学生物出身的野生码农,我的主要自学资料就是各种开源项目的源代码。一个人的命运,当然要靠自我奋斗,但是也要考虑到历史的行程,我绝对不知道我作为一个生狗怎么去做码农了。
R
社区里的很多人都教了我很多东西,在这里特别感谢我在社区里的导师Dirk。另外这里单独感谢我至今没有露面的女朋友,所以我才有足够的时间读代码和写代码。
我们先从R
源代码的组成开始,方便大家对照书中的内容查询源代码。R
解压缩之后的结构如下所示。我们的主要关注点自然在src
上,其它部分主要用于环境配置,其中po
用于多语言支持。
.
├── COPYING
├── ChangeLog
├── INSTALL
├── Makeconf.in
├── Makefile.fw
├── Makefile.in
├── README
├── SVN-REVISION
├── VERSION
├── VERSION-NICK
├── config.site
├── configure
├── configure.ac
├── doc
├── etc
├── m4
├── po
├── share
├── src
├── tests
└── tools
src
的内容如下,其中gnuwin32
用于支持Windows上编译和使用R
。除了gnuwin32
,多数部分在书后续内容都会提到。
.
├── Makefile.in
├── appl
├── extra
├── gnuwin32
├── include
├── library
├── main
├── modules
├── nmath
├── scripts
└── unix
关于源代码阅读工具,我这里推荐的是htags
,在源代码目录里使用htags --suggest
就可以生成一个网页版的源代码,查询和跳转支持都不错。
Windows下的Source Insight是最强大的源代码阅读工具之一,但因为是收费软件,我也就不着重推荐了。