现在的计算机太复杂,太不可靠,太费事了,建立在一堆历史遗留的,摇摇欲坠的基础之上。我有一个梦想,那就是从头设计出一套完整的,简单的,强大
的,高可靠的计算机软件系统。从程序语言,操作系统,数据库,一直到各种应用。而这其中,程序语言的设计又是至关重要的。在过去的很多年里,我饱尝了程序
语言设计的各种思路,并且把它们延展到我曾经熟悉的操作系统和数据库。我发现一个良好的程序语言,可以让操作系统和数据库变得“透明”。程序员和用户不需要知道很多系统底层细节就能编程和使用。Yin 语言就是为这个目标而诞生的,我希望它能让每一个有正常智力的人都能编程。
在过去的几个月里由于工作太忙,我只抽出几天时间来开发 Yin。虽然它目前的状况貌似只是万里长征的第一步,然而因为它彻底的丢弃了历史的包袱,没有做很多不必要的事情,再加上我多年研究和实现语言的经验,在 那短短几天的时间里,它的设计已经达到了比较深入的地步。举个例子,由于我的语法设计极其简单,所以我实现 parser 只花了两个小时,500 行 Java 代码,并且没有依靠任何 LEX,YACC 一类的工具。Yin 目前的代码已经具有一个具有精确报错定位能力的 parser,一个基本的解释器,一个带有 union type 的类型系统。目前语言的大方向已定,但还有很多小的设计决策没有定下来(比如是否需要 keyword argument 之类),也有少许 over-engineering(差点做成了 dependent type),而且还需要一个编译器和运行时系统。
从来没有一个项目可以让我如此兴奋。虽然总是受到生活的各种牵绊和限制,然而这个梦想是不可磨灭的。我希望 Yin 语言可以让用它的人翻身做语言的主人。过去的程序语言,操作系统和数据库,都把程序员甚至用户当成奴仆,把自己的设计,自己的“哲学”强加于他们之上。让 程序员和用户去“学习”,而其实很大程度上是学习绕过它们自己的设计失误。这样的作法造就了 IT 业今天的心理状况,形成了不尊重人,不人性化的所谓“黑客精神”。我希望 Yin 语言及其相关系统的出现,能够打破这种局面。为此,我决定做出以下一些改进。
这样的做法使得程序员真正的成为语言的主人,而不是它的奴隶。任何掌握了这些设计和实现技巧的人,都能够实现出自己的语言。没有到这一步的人,也能 基本的理解语言的实现原理,从而帮助他们写出更好的程序。这样一来,程序员成为了自己的上帝,就让他们完全摆脱了通常语言和系统给他们造成的思想枷锁和不 安全感,消灭了非此即彼的宗教思想,消灭了他们对各种“大师”的膜拜心理。而且由于大家都会做语言,也消灭了他们显示自己是“牛人”的倾向。
我个人其实完全不把自己的设计和代码当回事,因为我以后肯定要经常改动它,所以我完全不在乎有人批评这设计,因为它根本就不是“我的”,它没有长在 我身上,也永远不会是我最后的设计。最近接触了一些无人飞行器的设计者之后,我很高兴的发现,挺多设计机械硬件的人也是类似的心理,抱着一种“做小玩意” 的态度。我希望软件设计者也是这种态度。
Yin 就是这样一个“小玩意”,然而在以前的很多年里,我已经做出了其它一打各种穷形尽相的小玩意。我基本上已经知道哪些部件是管用的,所以我现在要做的,只是 把这些部件合理的组合在一起。Yin 大概不会给你带来什么很炫的新特性,也不会有让你感到很诧异的地方。我只希望它能让程序员自然而然的表达他们的想法。
https://github.com/yinwang0/yin
由于我只花了几天时间来实现它,其实不完整也比较乱,还不能投入实用,有很多地方还需要修改和重写,而且没有文档。其实,现在把这么不完善的代码放 出来只是为了给我自己一些 peer pressure,免得我贪玩不去改进代码 :P 我也不指望你能看懂目前的代码或者做出“贡献”。其实 Yin 的最终实现代码应该全部或者绝大部分是我自己写的。开放这些代码只是为想要学习设计语言的人提供一个学习的机会,可以看到一个语言从头开始发展的情境。当 然我也会酌情接受特别好的修改建议,不过在做大的改动之前请一定事先通知,因为也许你做的并不是正确的改动。
为了方便实现和调试,Yin 的解释器目前使用 Java 作为实现语言。之前的一个版本使用了 Typed Racket,然而由于 Racket 系统报错信息的不精确,造成比较低的开发效率,所以我后来换成了 Java。很多人对 Java 有逆反心理,然而你会发现,我的 Java 代码其实跟普通 Java 程序员的代码有很大不同,所以会比较容易读懂。
在不久的将来,Yin 语言应该能够解释自己,从而使得编译器能够使用它自己来写。在那以后,Yin 的实现将独立于其它语言而存在。
https://groups.google.com/forum/#!forum/yin-lang
我不喜欢太热闹的地方,所以这应该是一个流量比较低的讨论区。仅当有些拿不定主意的设计的时候,用于参考人们的意见。我希望加入的人有良好的的态度,所以请在加入的时候介绍你的背景和动机等等。
http://gengwg.blogspot.com/
在过去的几个月里由于工作太忙,我只抽出几天时间来开发 Yin。虽然它目前的状况貌似只是万里长征的第一步,然而因为它彻底的丢弃了历史的包袱,没有做很多不必要的事情,再加上我多年研究和实现语言的经验,在 那短短几天的时间里,它的设计已经达到了比较深入的地步。举个例子,由于我的语法设计极其简单,所以我实现 parser 只花了两个小时,500 行 Java 代码,并且没有依靠任何 LEX,YACC 一类的工具。Yin 目前的代码已经具有一个具有精确报错定位能力的 parser,一个基本的解释器,一个带有 union type 的类型系统。目前语言的大方向已定,但还有很多小的设计决策没有定下来(比如是否需要 keyword argument 之类),也有少许 over-engineering(差点做成了 dependent type),而且还需要一个编译器和运行时系统。
从来没有一个项目可以让我如此兴奋。虽然总是受到生活的各种牵绊和限制,然而这个梦想是不可磨灭的。我希望 Yin 语言可以让用它的人翻身做语言的主人。过去的程序语言,操作系统和数据库,都把程序员甚至用户当成奴仆,把自己的设计,自己的“哲学”强加于他们之上。让 程序员和用户去“学习”,而其实很大程度上是学习绕过它们自己的设计失误。这样的作法造就了 IT 业今天的心理状况,形成了不尊重人,不人性化的所谓“黑客精神”。我希望 Yin 语言及其相关系统的出现,能够打破这种局面。为此,我决定做出以下一些改进。
开放的知识系统
Yin 语言从设计一直到实现,不仅完全开源,而且完全开放其知识系统。Yin 不使用工业界采用的含混复杂的概念,也不采用 PL 学术界过度逻辑化,符号化,不考虑实际效率的的理论。Yin 的设计,理论和实现细节,都从最根本的“第一原则”(first principles)出发,从而容易被程序员自己掌握。我试图从直觉上告诉人们每一个地方为何那样设计的理由,而不只是像某些语言那样告诉程序员:“我 就是这么决定的!”这样的做法使得程序员真正的成为语言的主人,而不是它的奴隶。任何掌握了这些设计和实现技巧的人,都能够实现出自己的语言。没有到这一步的人,也能 基本的理解语言的实现原理,从而帮助他们写出更好的程序。这样一来,程序员成为了自己的上帝,就让他们完全摆脱了通常语言和系统给他们造成的思想枷锁和不 安全感,消灭了非此即彼的宗教思想,消灭了他们对各种“大师”的膜拜心理。而且由于大家都会做语言,也消灭了他们显示自己是“牛人”的倾向。
技术无神论
IT 技术的社区往往具有太多宗教性质和膜拜心理,我认为这是非常不好的现象,所以 Yin 语言没有所谓的“社区”,“支持者”或者“热心分子”,也不进行“推广”。我们应该把所有的设计和实现作为“东西”来对待,就像手工课的时候用木头做一些 小板凳。所有的东西都是为人服务的,在地位上是低于所有人的。我们应该把对人的尊重放在高于一切东西之上,不管那个东西是谁设计的。我个人其实完全不把自己的设计和代码当回事,因为我以后肯定要经常改动它,所以我完全不在乎有人批评这设计,因为它根本就不是“我的”,它没有长在 我身上,也永远不会是我最后的设计。最近接触了一些无人飞行器的设计者之后,我很高兴的发现,挺多设计机械硬件的人也是类似的心理,抱着一种“做小玩意” 的态度。我希望软件设计者也是这种态度。
Yin 就是这样一个“小玩意”,然而在以前的很多年里,我已经做出了其它一打各种穷形尽相的小玩意。我基本上已经知道哪些部件是管用的,所以我现在要做的,只是 把这些部件合理的组合在一起。Yin 大概不会给你带来什么很炫的新特性,也不会有让你感到很诧异的地方。我只希望它能让程序员自然而然的表达他们的想法。
代码
Yin 语言目前的代码已经开源,放在了我的 GitHub:https://github.com/yinwang0/yin
由于我只花了几天时间来实现它,其实不完整也比较乱,还不能投入实用,有很多地方还需要修改和重写,而且没有文档。其实,现在把这么不完善的代码放 出来只是为了给我自己一些 peer pressure,免得我贪玩不去改进代码 :P 我也不指望你能看懂目前的代码或者做出“贡献”。其实 Yin 的最终实现代码应该全部或者绝大部分是我自己写的。开放这些代码只是为想要学习设计语言的人提供一个学习的机会,可以看到一个语言从头开始发展的情境。当 然我也会酌情接受特别好的修改建议,不过在做大的改动之前请一定事先通知,因为也许你做的并不是正确的改动。
为了方便实现和调试,Yin 的解释器目前使用 Java 作为实现语言。之前的一个版本使用了 Typed Racket,然而由于 Racket 系统报错信息的不精确,造成比较低的开发效率,所以我后来换成了 Java。很多人对 Java 有逆反心理,然而你会发现,我的 Java 代码其实跟普通 Java 程序员的代码有很大不同,所以会比较容易读懂。
在不久的将来,Yin 语言应该能够解释自己,从而使得编译器能够使用它自己来写。在那以后,Yin 的实现将独立于其它语言而存在。
讨论区
为了讨论各种设计的利弊,我建立了一个讨论区:https://groups.google.com/forum/#!forum/yin-lang
我不喜欢太热闹的地方,所以这应该是一个流量比较低的讨论区。仅当有些拿不定主意的设计的时候,用于参考人们的意见。我希望加入的人有良好的的态度,所以请在加入的时候介绍你的背景和动机等等。
http://gengwg.blogspot.com/
Comments
Post a Comment
https://gengwg.blogspot.com/