198_emacs lisp之setq

         之前学习了几种编程语言了,都比较顺利。现在想想,其实之前我自己学习的都算是类C的编程语言。近一段时间,尝试学习lisp,从common lisp开始的路线看起来似乎是不容易的。网络上找到的口碑很好的《实用common lisp编程》实在是也不符合我自己的脾胃。或许,这本书我还会继续看下去,但是显然不是现在。一直啃读这本书,解构总是昏昏然。我觉得换一个方向,从emacs lisp开始。而我这一次的学习,将从代码阅读开始,不再去专门看一个什么教程了,或许这样我会获得我期待的更好的收获。

         我的代码阅读,就从我使用的emacs的配置开始。今天遇到的第一个未知对象就是setq。通过内置的查询方式,我找到了这个函数的相关描述文档。

         从这个描述看,这个这个函数的实现似乎使用的是C代码,或许这个关乎效率或者使用极其频繁?功能就是给符号赋值,而这个赋值可以是一组符号和数值对儿,也可以是多个。从功能上看来,这里面的赋值其实可以理解为是一个顺序赋值的序列,后面的赋值也可以继承前面的结果。这个赋值的返回值,是最后一个赋值的数值对儿。

         这样,看看我遇到的代码应该如何理解。

         这个功能其实很简单了,就是给gc-cons-threshold这个变量进行赋值为100000000,也就是100M。

         那这个变量有什么具体的含义呢?继续查看相应的帮助文档如下:

         这个变量也是在C代码中定义的,数值为100000000,原始值为800000。

         从功能设计上看,这个应该是在垃圾回收动作之间允许的存储消耗数值,单位是字节。自从上次垃圾回收之后,一旦存储小号的字节数过多垃圾回收就可以自动发生。所有的数据类型都会被统计。

         只有eval被调用的时候,垃圾回收才会发生。通过给这个变量赋一个大一点的值,我们可以在程序的某一部分避免垃圾回收提高效率。

         小结:变量含义可以理解为垃圾回收内存消耗阈值,通过提示,其实还有一个存储消耗百分比可以查看。

         这么看的话,这个setq很可能是可以作用于全局变量的。

发布了812 篇原创文章 · 获赞 163 · 访问量 172万+

猜你喜欢

转载自blog.csdn.net/grey_csdn/article/details/104158807
198