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

导航

 

2012年3月15日

正文内容加载中...
posted @ 2012-03-15 19:54 Genius0101 阅读(335) 评论(0) 推荐(0) 编辑
 

2012年3月5日

摘要: 室友弄个题目来给我做,好像说是以前微软的笔试题。开始觉得蛮扯蛋的,谁无聊写这种东西.不过想一想倒还是考不少基本功的.分析一下题目,应该是模拟计算机组成原理上学的硬件的加法器来实现.从最低位到最高位,依次计算每一位的运算结果及进位,从而得到最终结果考查了计算机组成原理的知识,考查了位操作.符号位的处理需要理解补码表示,我都快忘光了,呵呵.#include <stdio.h>#include <stdlib.h>int add(int a,int b){ int i,c; int ret = 0; int jinwei = 0; int tmp1,tmp2; int ... 阅读全文
posted @ 2012-03-05 12:56 Genius0101 阅读(2032) 评论(5) 推荐(1) 编辑
 

2012年2月15日

摘要: 假设c语言写的二个函数为void hello_user(const char *name) { printf("Hello, %s.\n", name); return;}void goodbye() { printf("Goodbye!\n"); return;}如果想在chibi-scheme中调用c写的函数第一步,建stub文件可以建一个test.stub文件,内容如下(define-c void hello-user (string))(define-c void (so-long goodbye) ())默认会把hello-user转化为c语言 阅读全文
posted @ 2012-02-15 22:02 Genius0101 阅读(781) 评论(0) 推荐(0) 编辑
 

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 阅读(1205) 评论(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 阅读(1377) 评论(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 阅读(799) 评论(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 阅读(973) 评论(0) 推荐(1) 编辑
 
摘要: 一“C++(或者其它某种语言)是最好的编程语言”,持这种观点的往往是编程新手。这里拿C++说事是因为它尤其容易误导新手。C++是一种精神上的毒药,受害者往往中毒很深。忠实的C++信徒倾向于非常偏激,对敢于泻渎了他们信仰的人他们会予以强烈的攻击。我接触的第一门语言就是C++。半路出家的我当时只想紧紧地抓紧这根救命草。C++是如此强大以至于它能做任何事情,从C的公共语法部分学起,到类,模板。等把这些都搞透了,还有各种库STL,boost到各种实际的库。我当时对于C++的很大一个误解在于,只要学会了C++语言,就学会了编程。但后来我才发现,C++是个学不到头的语言。C++太庞大了,它从一开始就没有一 阅读全文
posted @ 2012-01-12 22:39 Genius0101 阅读(472) 评论(0) 推荐(0) 编辑
 

2011年12月29日

摘要: 为什么Lisp语言如此先进?Lisp的本质Lisp之根源我是如何成为 Lisp 程序员的scheme之道感兴趣的自己google之。 阅读全文
posted @ 2011-12-29 18:35 Genius0101 阅读(257) 评论(0) 推荐(0) 编辑