看《盗梦空间》前,并不知道它的大致讲的是什么样的故事,据说IMDB上的分数很高,下午就特地去科文中心观摩了一下。看完以后,我严重的怀疑编剧是个程序员或者曾经是个程序员。下面我们来简短的分析一下它的Script(脚本)。

-植入
电影的主题是“植入”思想,这个其实就是Spring中的IOC – Inversion of Control,所谓的控制翻转,就是将外部的思想注入到内部。

-多层的梦
电影中,有一层的梦,两层的梦,三层甚至四层的梦,这个就是函数调用中“栈”,调用的层次越深,系统开销越大,所以Leonardo们不太愿意使用多层调用。

-穿越(Kick)
当片中人从深层次的梦回到上一层的梦时,他们使用的技术就是异常(Exception),注意这里可不是简短的return,return是安静的、正常的,而他们返回上层的梦,用的都是开枪自杀、电梯坠楼这样的非正常行为。而且我们可以注意到,异常只能一层一层的抛出:比如电影的最后,他们先从第四层返回、然后第三层、第二层、最后回到现实。

对于最后Leonardo直接从第四层回到现实中,我怀疑这小子偷偷使用了GOTO语句,虽然我们不推荐使用,但是在坠入水底,这种特殊的情况下,我们还是可以考虑使用这种技术的。

-用于同步用的歌声
还记得他们如何通知分布在不同层次的人吗?放一首歌曲。对,这个就是设计模式中的Observer模式。一人放歌,每个层次的人都能收到。

-造梦者
还记得Leonardo找Ellen Page干什么的吗?让她去造各种各样的“场景”。Page担任的就是设计模式中的Abstract Factory的作用(请参考其字面意思)。而Leonardo本身并不去造梦,他使用的是代理模式。

-Limbo(迷失域)
什么是Limbo,很恐怖的一个地方,你进去了,就很难出来了。程序员通常叫它死锁,一旦陷进去,等你老的像齐滕那样,你都出不来。

-时间的快慢
为什么现实中的时间过的慢,梦中就快呢?你想想啊,电影的Script在计算机中运行的时候,它们是多快啊!车从桥上掉下去的那么短短的10秒钟,可以容许我们执行很多指令。

-多人一起做梦
Leo和同伴们是如何一起在梦中交流的呢?他们用的是共享内存(Shared Memory)和进程间通信(Inter-process Communication)技术。我怀疑他们没有使用消息队列和Web Service这类技术,因为这些技术较共享内存这类老的技术,还是显得有些慢,不满足那种惊心动魄的场景。

综上所述,我推断编剧也许大概可能是个程序员,因为他的很多灵感都来自软件开发中的技巧、技术和模式。

盗梦空间Inception(2010)

又名:潜行凶间(港) / 全面启动(台) / 奠基 / 心灵犯案 / 记忆迷阵 / 记忆魔方

上映日期:2010-09-01(中国大陆) / 2020-08-28(中国大陆重映) / 2010-07-16(美国)片长:148分钟

主演:莱昂纳多·迪卡普里奥 约瑟夫·高登-莱维特 艾利奥特·佩吉  

导演:克里斯托弗·诺兰 编剧:克里斯托弗·诺兰 Christopher Nolan

盗梦空间的影评

刃
刃 • 挺好的
123
123 • 影评