Recreating SICP 1:从一个简单的计算器开始

作者:何岩,禁止转载。

0.前言

你知道MIT计算机专业的第一门课是什么吗?

那就是SICP(Structure and Interpretation of Computer Programs)

SICP被评为是一本神书。两位作者就像是炼金术士,将自己对计算机科学的真知灼见浓缩在不算厚的SICP之中。

虽然看上去SICP文字不多,但是信息量极大。很多我们常见的争论议题,例如面向对象和面向函数之争,SICP只需要几行文字就能点到本质。看完之后总有一种“原来这个问题的本质是这样!”的恍然大悟。然后才知道,之前的自己只是以为自己懂了。

SICP如此伟大,确少有人读,可谓最被忽略的宝藏。

我将用故事的形式,将其重新开采。

希望通过这个系列,让你可以“看见”SICP的光辉。

故事的主角来自神剧:Rick & Morty


1.Rick & Morty

Morty家的车库是Rick的工作室。

Rick是全宇宙最聪明的科学家,大部分时间都在这里鼓捣他的发明创造。

Morty是他的外孙,身体总是软绵绵的,和他的智商一样让人觉得不可靠。

木头桌子前,Rick盯着电脑屏幕,用鸡爪一样的双手,敏捷的敲打着键盘。

电脑的另一端连着一个发光的立方体。

Morty指着立方体问:“Hi Rick,这是你的新发明吗?”

“这是我造的小宇宙,它可以像电池一样给我的太空船供电” Rick说

“现在它有点不正常,从外面看不出问题,得进去看看。”Rick拿出两支类似蓝牙耳机的设备:“来Morty,把这个插在耳朵里,用它可以进入小宇宙,它的名字叫做:MI(意识转换器,英文全称:Mind Interpreter)”

Morty看着手中的MI,心想为什么啥事都要拉上我,本来还想看会电视。

两人同时按了一下耳朵上的MI,便失去意识,倒在了地上。

2.BUG来自GC(垃圾回收器)

Rick和Morty在一家咖啡馆醒来,墙上写着“Recreating Cafe”。

牛头人端着咖啡走过来:“Rick,你可来了!最近这里发生了一些特别可怕的事情。”


牛头人是宇宙联邦的一级通缉犯,为了不连累家庭,五年前自首后被处死了。自首之前,牛头人偷偷找到Rick,说自己还有一个梦想,想做出全宇宙最好喝的咖啡。Rick喜欢喝咖啡,就将他的意识上传到了小宇宙里,从此牛头人便在这里开起了咖啡馆。

“什么可怕的事啊?”Rick接过咖啡,品了一口,“ 嗯!牛头人,你的手艺又进步了!Morty快尝尝全宇宙最好喝的咖啡!”

Morty喝了一口,心想全世界的咖啡不都一个味吗。

牛头人没有等来Morty的赞叹,继续说:“大概一周前,一些人头顶会莫名的冒出一个光环,几天之后,同一个时刻...”牛头人打了个响指,“刷的一下,他们就那么消失了!”

Rick瞪着着眼睛:“就像天使一样的金色光环吗?”

“对!就是那种!“

“Morty!快跑!这里不安全!”Rick按下了MI的退出按钮

Morty紧跟着也做了同样的动作。

三个人面面相觑了几秒钟,结果什么也没有发生......

“R…Rick,MI坏了吗?”Mory问。

“MI没有坏,是小宇宙坏了。”Rick说。

“你可以修好它吗?”Morty问。

“不行,小宇宙的主程序Matrix并没有问题,问题出在辅助程序GC(垃圾回收器,英文全称:Gabage Collection)上,GC清理任何事物之前都会先用光环进行标记。正常情况下只会标记没人用的物品和已经死亡的生命,现在GC疯了,竟然标记起了活人。这真是太可怕了!”

“那你为什么不能修复它呢?”牛头人问

“修复GC必须要回到外面的世界,Matrix和GC是两个独立且平行的程序,他们同时运行在小宇宙这个硬件盒子里。在外面的世界我们可以同时看到他俩,但是现在我们置身其中一个,无法看到另一个。所以现在我无法修复GC。”

“本打算进来找到问题就回到外面的世界修复它,没想到是GC出了问题。GC其实很简单,我都能猜到是哪行代码出了问题。两周前我刚给GC做了升级,因为GC无法进行DEBUG(调试),只能靠脑子推算,看来我还是犯了错误。”

“Rick那么怎么办。我们会死在这里吗?”Morty问。

“也许哦!GC现在是随机清理,但愿下一轮GC不要标记你吧!刺激吧!”

“如果我们死在了Matrix,我们在真实世界的肉体也会死去吗?”

Rick忽然用水果刀划了一下Morty的手背,一道血痕缓缓出现。

“痛!”Morty叫到

Rick说:“此时此刻,你在外面的身体也会产生这道伤口”

“可是,我们现在不是在虚拟世界里吗?”

“你的意念让它成为了真实,身体无法不依赖意识而独自存在”

“牛头人,再给我来一杯咖啡吧,死之前我还想多喝几杯!”

3.那就重新写一个LISP版本的MI吧

“你犯的错误,你得修理好!我可不想死在这里!心里没数还要带我来!”Mory说

“你可是全宇宙最聪明的科学家,没有什么是你搞不定的”牛头人说

“没看到我正在思考吗?”Rick盯着脑子里虚幻景象。

忽然,Rick抓起笔,在一张白纸上写起来:

#RECREATING.ORG
( + 1 2)
=>

几秒钟之后,答案“3”自动出现在了末尾处:

#RECREATING.ORG
( + 1 2)
=>
3

“哈哈!有救了!”Rick说。

“怎么回事?”Morty问。

Rick说:“MI之所以不好使了,是因为MI是用Python编程语言写的,所有Python程序都要基于Python解释器才能运行,倒霉的是GC将Matrix里的Pyhton解释器搞坏了。所以,即便MI自身没问题,也无法运行。”

“但是我发现Matrix中的Lisp解释器还能用,还好之前我在Matrix里给自己留了一个后门,只要出现#RECREATING.ORG这行文字,Matrix就会认为到那是一个Lisp文件,并将其传递给Lisp解释器来运行。如果我用Lisp重新写一个MI,我们就可以回到外面的世界了,一但出去,我会马上修复GC,牛头人就安全了。”

“Rick!你真是太帅了!”牛头人说。

“希望GC不要再把Lisp解释器搞坏了。我得抓紧时间了!”Rick说。

“有什么我能帮上忙吗?”牛头人问。

“给我多拿些纸来,这里只能用手写代码了”Rick说。

“难道这个世界没有电脑吗?”Morty问。

“没有,这里的人们更怀念计算机发明之前的日子。所以我将Matrix模拟成了蒸汽时代。”Rick说。

“难道你不能先做出来一个计算机,然后用计算机来写代码吗?”Morty问。

“你是傻瓜吗?我连计算机都没有,我怎么造出一个计算机来?”

Rick把一摞纸放在面前,拿起笔,说:“这感觉太糟糕了,这就像一个厨师没有了刀和锅。”

“那你加油吧!我出去转转,我想去看看蒸汽时代的世界”Morty站起来要走。

“你还真有闲心!你要跟着我写代码,还要搞明白这一切,万一在我写完之前就被GC杀死了,你要继续写完。”Rick说

“可是我不会Lisp啊!虽然学校开了一门教Java的编程课”Mory说

“Lisp是这个世界上最简单的语言,你学过Java已经够了,跟着我,我会给你讲解的,难道你不想活了吗?不要抱着侥幸心理!”Rick说

“好…好吧!”

4.从一个简单的计算器开始

“我得想想,当初我是怎么设计的MI”Rick说。

“你不能查看Python版本的MI代码吗?”Morty问

“不能,MI和我们是平行的存在,就像我看不到眼前这只咖啡杯的代码一样”Rick说

Rick想了半天说:“我只能记得大体的设计思路,算了,让我们忘记过去重新开始吧!”

“我们先从一个简单的计算器开始,然后一步一步,逐步升级,期间我们会遇到各种难题,例如各种数据类型的复杂运算,图形处理等等,最终达到终点。这可真像是一场徒手攀岩。”

5.后记

Rick和Morty明确了自己要做的事,就是重新构建一个MI(意识转换器),首先从一个计算器开始,后面会加入各种复杂的功能,例如有理数的计算,复数的计算,解微积分等。通过构建MI将SICP前三章的精华挂接上来。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
禁止转载,如需转载请通过简信或评论联系作者。
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,716评论 4 364
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,558评论 1 294
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 109,431评论 0 244
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,127评论 0 209
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,511评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,692评论 1 222
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,915评论 2 313
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,664评论 0 202
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,412评论 1 246
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,616评论 2 245
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,105评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,424评论 2 254
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,098评论 3 238
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,096评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,869评论 0 197
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,748评论 2 276
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,641评论 2 271