我是天才
伟大的野心家,实践家; 程序员,技术问题解决者.

导航

 

2012年1月12日

摘要: chibi-scheme是一个scheme语言的实现(编译器).代码很优雅,又不太长,包括了编译原理的完整概念,非常值得学习.当前源代码为chibi-scheme-0.5.3版本.项目的地址在http://code.google.com/p/chibi-scheme/在线手册可以在这里看到http://synthcode.com/scheme/chibi/主要源文件最主要的几个文件是./include/chibi/sexp.h--包含了s表达式的定义,整个系统的头文件./gc.c--实现了系统的内存分配及垃圾回收工作./sexp.c--语法分析及操作s表达式的一些函数./eval.c--从抽象 阅读全文
posted @ 2012-01-12 22:46 Genius0101 阅读(1257) 评论(0) 推荐(0) 编辑
 
摘要: 代码流程从sexp_eval_string函数可以看到整个代码的全部流程。sexp_eval_string = sexp_read_from_string + sexp_eval前者完成过语法分析,后者编译并执行sexp_eval = sexp_compile + sexp_apply前面的compile完成编译生成字节码,后面apply在虚拟机上执行字节码。sexp_compile = sexp_analyze + generate编译的过程就是语法分析和代码生成的过程。词法分析词法分析主要是由sexp.c文件中的sexp_read函数完成。这个函数从外部数据流接收输入,读取一个scheme 阅读全文
posted @ 2012-01-12 22:43 Genius0101 阅读(1481) 评论(0) 推荐(0) 编辑
 
摘要: chibi-scheme的内存管理,维护着一些受控堆区.所有的scheme对象都是在受控堆中分配的,垃圾回收也是局限于此受控堆区.保守的垃圾回收算法会作用于整个堆区,而使性能受影响.而这里只有scheme语言的堆区和sexp对象是垃圾回收的,因此嵌入到C中时宿主程序不会受影响.第一部分:堆结构typedef struct sexp_free_list_t *sexp_free_list;struct sexp_free_list_t {sexp_uint_t size;sexp_free_list next;};typedef struct sexp_heap_t *sexp_heap;str 阅读全文
posted @ 2012-01-12 22:42 Genius0101 阅读(823) 评论(0) 推荐(0) 编辑
 
摘要: 这个scheme语言实现中,所有的东西都是一个对象,这就是它的类型系统.一个对象可能是一个立即值也可能是一个sexp.由于通过各种tag识别出一个对象真实的类型.现在只要明白,32位机器上,对象就是一个32位的黑箱.要么这32位本身存了它的真实数据,这种就是立即值.要么这是一个指针,这种就是一个sexp.第一部分:immediate(立即值)立即值包括整数,char,唯一的立即符号等.我们知道,一个字节是8位,所以一个指针的最后三个bit一定是0.立即数就是利用了这一点,将这三位作为tag位.一个对象,也就是这个32位的东西,先识别其最后3个bit,如果不是全0,它就是一个立即值,否则它是一个 阅读全文
posted @ 2012-01-12 22:41 Genius0101 阅读(1020) 评论(0) 推荐(1) 编辑
 
摘要: 一“C++(或者其它某种语言)是最好的编程语言”,持这种观点的往往是编程新手。这里拿C++说事是因为它尤其容易误导新手。C++是一种精神上的毒药,受害者往往中毒很深。忠实的C++信徒倾向于非常偏激,对敢于泻渎了他们信仰的人他们会予以强烈的攻击。我接触的第一门语言就是C++。半路出家的我当时只想紧紧地抓紧这根救命草。C++是如此强大以至于它能做任何事情,从C的公共语法部分学起,到类,模板。等把这些都搞透了,还有各种库STL,boost到各种实际的库。我当时对于C++的很大一个误解在于,只要学会了C++语言,就学会了编程。但后来我才发现,C++是个学不到头的语言。C++太庞大了,它从一开始就没有一 阅读全文
posted @ 2012-01-12 22:39 Genius0101 阅读(494) 评论(0) 推荐(0) 编辑