重新创造Lisp1: Rick & Morty

作者:何岩,recreating.org出品,谢绝转载。

0.前言 #

为了表达计算机科学的全局定位感,我将以SICP(Structure and Interpretation of Computer Programs)为内核,用故事的形式来进行重构。

故事的人物原型采用动画片:Rick & Morty

RickAndMorty.jpeg

1.Rick & Morty #

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

木头桌子上,一个发光的立方体,电脑连着立方体,Rick盯着电脑。

“那是什么?” Morty问。

“我做的小宇宙。” Rick说,”给太空船当电池。”

“嗯…怎么有点不正常呢?“,Rick拿出两支蓝牙耳机:”从外面看不出问题,我们得进去一趟了。把这个插在耳朵里。

”这是什么?“,Morty问。

”MI (即,意识转换器,英文全称:Mind Interpreter),用来把我们的意识连入小宇宙。”,Rick说。

两人戴好MI,按下按钮,立刻失去了意识,倒在了地上。

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

Rick和Morty恢复意识的时候,发现已经置身于一家咖啡馆,墙上写着Recreating Cafe。

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

niutouren.png

牛头人是宇宙联邦的通缉犯,为了不连累家族被灭,五年前自首,后被处死,自首之前,Rick帮牛头人把意识上传到了小宇宙之中,牛头人便在小宇宙中开起了咖啡馆。

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

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

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

Rick瞪大了眼睛:“就像天使头上的那种光环吗?”

“对!对!就是那种!“

“Morty!快跑!这里不安全!”Rick摸着耳朵上的MI,按下了退出按钮。

Morty急忙学着做了同样的动作。

三个人面面相觑,什么也没有发生……

“Rick,这个耳机坏了吗!?”Mory问。

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

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

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

“GC为什么不能修复呢?”牛头人问

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

“如果能回到现实世界,我就能修复它,GC其实很简单,我都能猜到是哪行代码出了问题。两周前我给GC做了升级,看来我还是犯了错误。”

“难道你当时没有进行测试吗?”牛头人问

“GC无法进行DEBUG(调试),只能靠脑子推算” Rick答到。

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

“也许!GC现在是随机清理,但愿下一轮GC不要标记你吧!哈哈哈!刺激吧!”Rick说:“牛头人,再给我来一杯咖啡吧,死之前我想多喝几杯!”

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

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

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

“闭嘴!没看到我正在思考吗?”眼珠子在Rick的脸上乱转了起来。

忽然,Rick想起了什么,在一张白纸上写起来:

#RECREATING.ORG
( + 1 2)
=>

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

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

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

“怎么回事?”Morty问。

Rick解释说:“万幸,Matrix中的Lisp解释器还能用。”
“MI之所以不好使了,是因为MI是用Python编程语言写的,GC将Matrix里的Python解释器搞坏了。Python解释器坏了意味着所有Python应用都变成了无意义的乱码。所以,即便MI自身没问题,也无法运行了。”

“不过幸运的是这里的Lisp解释器还能用,还好之前我在Matrix里给自己留了一个后门,只要出现#RECREATING.ORG这行文字,Matrix就会识别出那是一个Lisp语言,并将其传递给Lisp解释器来运行。这样以来,用Lisp重新写一个MI,我们就可以出去啦,一但出去,我会马上修复GC,牛头人就安全了。”

“希望GC不要再把Lisp解释器搞坏了。我得抓紧时间了!给我多拿些纸来,这里只能用手写代码了”Rick说。

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

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

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

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

Rick看着一本厚厚的纸,拿起笔,说:“这感觉太糟糕了,一个厨师没有了刀和锅,就只能用石头和石板代替了。”

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

“转什么转,给我过来,你要跟着我写代码,还要搞明白这一切,万一在我写完之前就被GC杀死了,你要继续写完!然后到外面用克隆机把我复活!”Rick说

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

“Lisp是这个世界上最简单的语言,你学过C已经够用啦。跟着我,我会给你讲解的,难道你不想活了吗?”Rick说

“好…好吧!”

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

“我得想想,当初我是怎么设计的MI”Rick眼珠乱转。

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

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

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

“我们从最基本的地方入手,那就是自然数的运算,从一个简单的计算器开始,然后一步一步,逐步添加更高级的功能,最终达到终点。这可真像是一场徒手攀岩。”

5.后记 #

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

 
5
Kudos
 
5
Kudos

Now read this

Recreating Bitcoin 1:Start over with a Simple Web Transaction System

Prologue # For great creation, recreating is worship. Welcome to the world of Bitcoin !!! WHAT is the book really about? Position, concept position, concept position of Bitcoin. WHY position? Because the position is clear, understanding... Continue →