看了豆瓣上牛人们的影评,其数学,几何,物理知识的综合运用能力让人叹为观止,流形,非欧空间,分形,混沌的概念玄之又玄。其实这部电影对于程序员来说完全可以用面向对象语言完美解释。下面对基本概念做分析:

(1)对象。

  对象是人们要进行研究的任何事物,从最简单的整数到复杂的飞机等均可看作对象,它不仅能表示具体的事物,还能表示抽象的规则、计划或事件。

梦境是现实生活的抽象,梦境中所有的实体,都是某种抽象的实例化,这就是对象(object)。

  (2)对象的状态和行为。
  对象具有状态,一个对象用数据值来描述它的状态。
  对象还有操作,用于改变对象的状态,对象及其操作就是对象的行为。

  对象实现了数据和操作的结合,使数据和操作封装于对象的统一体中

举陀螺为例,他的状态包括,大小,重量,颜色,转速等数据,而对他的操作可以有转动,静止。那么对象就是数据和操作的结合。

(3)类。
  具有相同或相似性质的对象的抽象就是类。因此,对象的抽象是类,类的具体化就是对象,也可以说类的实例是对象。
  类具有属性,它是对象的状态的抽象,用数据结构来描述类的属性。

  类具有操作,它是对象的行为的抽象,用操作名和实现该操作的方法来描述。

c++革命性的提出了类的概念,使纷繁芜杂的世界在计算机语言中得到高度抽象。如果把所有梦境参与者看成计算机,做梦的过程看成一次程序的运行,那么造梦师(architect)等同于程序员的作用,天才小萝莉构造出的大桥,迷宫,酒店,堡垒都是其所属类的实例。正是由于这些类拥有相同的属性,梦境参与者才得以共享梦境。做梦人是程序运行的主机(host),其他人构成了一次分布式计算,以共享内存(shared memory)的方式进入主机的梦境。

(4)继承

继承(Inheritance)是指子类别(subclass)继承超类别(superclass),会自动取得超类别除私有特质外的全部特质,同一类别的所有实体都会自动有该类别的全部特质,做到程式码再用(reuse)。

其中,梦的嵌套理论深得c++中继承的精髓,每一层梦境的深入都是一次类的继承。上一层梦境的某些特质由于是私有属性,所以没有传到下一层,这也就是为什么从嘈杂的城市,缩小到一个酒店,再到雪山中的一个堡垒的原因。梦的嵌套其实和函数的嵌套非常类似,在函数运行过程中调用其他函数,以获得其他做梦人的访问权。可惜inception中的设定不支持递归调用(做梦人本身不得调用自己,再进入下层梦境)。也许因为递归调用中要大量使用堆栈,为防止堆栈溢出,避免做梦人由于大脑容量不足对其造成损害,所以不敢采用吧。所以我建议leo再下一版本中加入虚拟内存的概念,以扩大其使用范围。

函数调用的大忌是没有返回点,如死循环等状况发生,做梦人将永远陷入其中。梦的结束等效于进程放弃cpu,进程以基于时间片轮转的方式运行,只有时间片用完,也就是药力失效的时候,做梦人才能醒来,否则只能在死亡的时候(自杀或被外界强制杀死)回到上一层。外界刺激,也就是电影中 的 kick,是调度器(scheduler)给进程发的信号。而synchronized kick则借用了多线程环境下很重要的概念--进程同步。其中timing是关键因素,学过实时系统的人应该知道,可以通过发送事件的方式唤醒进程。电影中运用音乐倒计时可以说恰到好处,音乐一止,万物苏醒。至于时间上的缩放比例,无非是每一层自定义了时钟的概念,如果以cpu的时钟周期为基准,则每一层梦境都按比例定义了自己的周期,比如linux内核就以Hz作为其运行的时间度量基准。

至于limbo,电影中所谓的潜意识边缘,或者迷失域,则类似于指针的指针的指针的指针。多层指针极易造成内存越界与指向紊乱,最终程序错误,甚至内核崩溃。堕入迷失域的人会丧失记忆,就如同内存断电般可怕。虽然此时死亡(关机重启),会回到现实,但是这一行为通常需要外界的操作,以往内存中的数据也会全部消失。

盗梦空间Inception(2010)

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

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

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

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

盗梦空间的影评

刃
刃 • 挺好的
123
123 • 影评