Logo

代码的未来

ISBN:9787115317513

作者:[日] 松本行弘

译者:周自恒

出版社:人民邮电出版社

出版时间:2013.6

摩尔定律的局限

  • 光速
  • 印刷时使用光的波长
  • 保持绝缘,漏电流
  • 发热,热密度
  • 量子力学

巴拉姆效应是一种心理学现象,指的是将一些原本是放之四海而皆准、模凌两可的一般性描述往自己身上套,并认为这些描述对自己是准确的。

冷读术,就是通过观察对方言行举止中的一些细微之处来进行揣测的技巧。 热读术则是通过事先对对方进行详细的调查,来准确说出对方的情况。

“垃圾回收的统一理论”,书中阐述了一种理论,即:任何一种 GC 算法,都是跟踪回收和引用计数回收两种思路的组合。

通过 retry 可以在异常处理中实现重试的操作,非常方便。不过它也有一个缺点,那就是如果在 retry 之前没有仔细检查是否对产生异常的条件进行了充分应对的话,就很有可能陷入死循环。

对象是在数据中以方法的形式包含了过程,而闭包则是在过程中以环境的形式包含了数据。 例如,对 n 进行累加,并显示它的值。 用闭包:

function extent(){
  var n = 0;
  return function(){
    n++;
    console.log("n="+n);
  }
}
f = extent(); 
f(); // n=1
f(); // n=2

用面向对象:

function extent(){
  return {
    val: 0,
    call: function(){
    this.val++;
    console.log("val="+this.val);
  }}
}
f = extent(); 
f.call(); // val=1
f.call(); // val=2

Ruby 和 JavaScript 的行为是有很大差异的。

obj.m

在 Ruby 中,这行代码表示对 m 方法进行无参数调用,而在 JavaScript 中则表示返回实现 m 方法的函数对象,而如果要进行无参数调用的话,括号是不能省略的,如:

obj.m()

也就是说,JavaScript 中由圆点所引导的房屋代表对属性的引用,将函数作为属性值返回就是方法,而加上括号就可以对其进行调用。

另一方面,Ruby 中圆点所引导的访问只不过是对方法的调用而已,加不加括号,是不影响方法调用这一行为的。在 Ruby 中,如果要获取实现该方法的过程对象,则需要使用 method 方法。

obj.method(:m)

Python 也采用了和 JavaScript 相同的方法,如果对一种原本并非为面向对象设计的语言添加面向对象功能的话,这是一种十分有效的手法。 类似这样的设计思想的差异,在 Lisp 中早就存在,这两种做法分别叫做 Lisp-1(JavaScript风格)和 Lisp-2(Ruby风格)。 在 Lisp 方言中,Scheme 属于 Lisp-1,EmacsLisp 属于 Lisp-2。

像布隆过滤器这样“偶尔会出错”的算法,被称为概率算法(probabilistic algorithm)。

comments powered by Disqus