backup

这里是王垠发表的历史文章的一个私人备份。所有文章都属于王垠版权所有,放在这里仅仅是为了自己查看方便,因为原始文章会lost in future。

---------------------------------
王垠自己的博客:
http://yinwang0.wordpress.com/
http://www.yinwang.org/

王垠曾经用过的博客:
http://blog.sina.com.cn/yinwang0

给Java说句公道话

作者:王垠

给Java说句公道话

有些人问我,在现有的语言里面,有什么好的推荐?我说:“Java。” 他们很惊讶:“什么?Java!” 所以我现在来解释一下。

Java超越了所有咒骂它的“动态语言” 

也许是因为年轻人的逆反心理,人们都不把自己的入门语言当回事。很早的时候,计算机系的学生用Scheme或者Pascal入门,现在大部分学校用Java。这也许就是为什么很多人恨Java,瞧不起用Java的人。提到Java,感觉就像是爷爷那辈人用的东西。大家都会用Java,怎么能显得我优秀出众呢?于是他们说:“Java老气,庞大,复杂,臃肿。我更愿意探索新的语言…...

对 Rust 语言的分析

作者:王垠

对 Rust 语言的分析

Rust 是一门最近比较热的语言,有很多人问过我对 Rust 的看法。由于我本人是一个语言专家,实现过几乎所有的语言特性,所以我不认为任何一种语言是新的。任何“新语言”对我来说,不过是把早已存在的语言特性(或者毛病),挑一些出来放在一起。所以一般情况下我都不会去评论别人设计的语言,甚至懒得看一眼,除非它历史悠久(比如像 C 或者 C++),或者它在工作中惹恼了我(像 Go 和 JavaScript 那样)。这就是为什么这些人问我 Rust 的问题,我一般都没有回复,或者一笔带过。

不过最近有点闲,我想既然有人这么热衷于这种新语言,那我还是稍...

测试的道理

测试的道理

测试的道理

在长期的程序语言研究和实际工作中,我摸索出了一些关于测试的道理。然而在我工作过的每一个公司,我发现绝大多数人都不明白这些道理,很多团队集体性的采用错误的做法而不自知。很多人把测试当成一种主义和教条,进行过度的测试,不必要的测试,不可靠的测试,并且把这些错误的做法传授给新手,造成恶性循环。本来目的是提高代码质量,结果不但没能达到目的,反而降低了代码质量,增大了工作量,大幅度延缓工程进度。

我也写测试,但我的测试方式比“测试教条主义者”们的方式聪明很多。在我心目中,代码本身的地位大大的高于测试。我不忽视测试,但我不会本末倒置,过分强调测试,我并不推崇测试驱动开发(TDD...

Java 有值类型吗?

作者:王垠

Java 有值类型吗?

有人看了我之前的文章『Swift 语言的设计错误』,问我:“你说 Java 只有引用类型(reference type),但是根据 Java 的官方文档,Java 也有值类型(value type)和引用类型的区别的。比如 int,boolean 等原始类型就是值类型。” 现在我来解释一下这个问题。

Java 有值类型,原始类型 int,boolean 等是值类型,其实是长久以来的一种误解,它混淆了实现和语义的区别。不要以为 Java 的官方文档那样写就是权威定论,就可以说“王垠不懂” :) 当你认为王垠不懂一个...

Swift 语言的设计错误

作者:王垠

Swift 语言的设计错误

在『编程的智慧』一文中,我分析和肯定了 Swift 语言的 optional type 设计,但这并不等于 Swift 语言的整体设计是完美没有问题的。其实 Swift 1.0 刚出来的时候,我就发现它的 array 可变性设计存在严重的错误。Swift 2.0 修正了这个问题,然而他们的修正方法却没有击中要害,所以导致了其它的问题。这个错误一直延续到今天。

Swift 1.0 试图利用 var 和 let 的区别来指定 array 成员的可变性,然而其实 var 和 let 只能指定 array reference 的可变性,而不能指定 array...

到底是谁在欺负我们读书少?

作者:王垠

到底是谁在欺负我们读书少?

发表了之前的文章《我为什么不再做PL人》之后,我发现有人在知乎上发表文章诬蔑我。本来不想理知乎上的东西,但作者把各种刚从论文上学来的术语,似懂非懂,照本宣科列了一大堆,挺能唬人的,说起来很像那么回事儿,所以我只好破例回应一下,但是下不为例。

现在我把这篇文章,题名『王垠,请别再欺负我们读书少』的链接放在这里,供大家观看。评论的第4,第6页有我的回复,技术性比较强,不过有兴趣的人可以看看。为了方便,我也把评论整理和拷贝到这篇文章第二节。

历史和事实

文章作者彭飞自称导师是Jens Palsberg,我还没能验证这个事实。Palsberg似乎曾在CFA...

我为什么不再做PL人

作者:王垠

我为什么不再做PL人

我不做程序语言(PL)的工作已经半年了。在这半年里,我变得快乐了很多,对世界也有了新的观点。现在我想来讲一讲,我为什么不想再做PL的工作和研究。我只希望这些观点可以给正在做PL,或者考虑进入这个领域的人们,作为一份参考。

学校里的PL人

PL看似计算机科学最精髓的部分,事实确实也是这样的。没有任何一个其它领域,可以让你对程序的本质形成如此深入的领悟,然而这并不等于你就应该进入PL的博士班。这是为什么呢?

炒冷饭

PL这个领域几十年来,已经发展到了非常成熟的阶段。这里面的问题,要么在20年前已经被人解决掉了,要么就是类似“停机问题”一样,不可能解决的问题。然...

Go语言,Docker和Kubernetes

作者:王垠

Go语言,Docker和Kubernetes

当我嘲笑Go语言的时候,有些人跟我说,你说Go语言是垃圾,可是你看像Docker和Kubernetes之类的云计算项目,为什么是Go语言写的呢?

其实答案很简单:这些东西并不是非得用Go语言写才可以,用其他语言实现它们其实并没有什么问题,只不过它们碰巧是用Go语言写的而已。Docker和Kubernetes之类的项目,其实只依赖于操作系统的构架细节,对语言没有特别的要求,而且也没什么性能需求,所以它们其实可以用任何语言(包括Shell,Perl,Python,Ruby,C,Java……)来实现。只因为有人跟风,用Go语言写了这些东...

编程的智慧

作者:王垠

编程的智慧

编程是一种创造性的工作,是一门艺术。精通任何一门艺术,都需要很多的练习和领悟,所以这里提出的“智慧”,并不是号称一天瘦十斤的减肥药,它并不能代替你自己的勤奋。然而由于软件行业喜欢标新立异,喜欢把简单的事情搞复杂,我希望这些文字能给迷惑中的人们指出一些正确的方向,让他们少走一些弯路,基本做到一分耕耘一分收获。

反复推敲代码

既然“天才是百分之一的灵感,百分之九十九的汗水”,那我先来谈谈这汗水的部分吧。有人问我,提高编程水平最有效的办法是什么?我想了很久,终于发现最有效的办法,其实是反反复复地修改和推敲代码。

在IU的时候,由于Dan Friedman的严格教导,我们...

谈谈Parser

作者:王垠

谈谈Parser

一直很了解人们对于parser的误解,可是一直都提不起兴趣来阐述对它的观点。然而我觉得是有必要解释一下这个问题的时候了。我感觉得到大部分人对于parser的误解之深,再不澄清一下,恐怕这些谬误就要写进歪曲的历史教科书,到时候就没有人知道真相了。

什么是Parser

首先来科普一下。所谓parser,一般是指把某种格式的文本(字符串)转换成某种数据结构的过程。最常见的parser,是把程序文本转换成编译器内部的一种叫做“抽象语法树”(AST)的数据结构。也有简单一些的parser,用于处理CSV,JSON,XML之类的格式。

举个例子,一个处理算数表达式的parser...

© backup | Powered by LOFTER