创建新的语言

由于人的月历和知识的有限性,性能和开发效率的矛盾,一门语言的发明者不可能满足所有程序员的要求。随着高级语言的普及,那些不满于现状的程序员们会越来越多的选择定制自己的语言,当然我这里不是说想Lisp那么干,而是真正的从语言特性上定制。

说到这里,就不得不提及语言特性优劣该如何量化问题。简单的说就是我们该怎么判断一门语言的某个特性是优秀的还是表现一般呢?对于主观性很强的问题往往难以量化。我个人的量化标准是它对实际问题的抽象程度,抽象度越高越慢、越高级、越智能、开发效率越高。

比如C语言的for循环,相较于汇编的jump或者loop,抽象程度更低,它封装了更加抽象的循环过程——人们日常计数的行为过程:起始点,终点,步长,每次计数后干点什么。功能都可做到一致,但是表达方式的变化对于人们的理解有很大的影响。

这里出现了人们的日常行为,我觉得很重要,如何将底层的操作抽象成人们熟悉的日常操作行为是语言设计的重要问题。

另一个问题是如何将智能引入到语言本身,比如类似Object-C的智能垃圾回收,这个我觉得将是下代高级语言的发展方向。

为了简洁化描述,这里以lua为参考对比描述,没有申明的地方就和lua一样,参见《Programming in Lua》。有时间就不断补完,闲下来就自己试着写这个语言的解释器,首选还是用C来实现。另外影响动态类型语言编程快感的最大问题之一就是难以设计智能IDE,我打算将强制类型用一种巧妙的方式嵌入到语法中,专门为IDE设计铺路,概念有点类似于IDE引导。

代码块

基本相同,但是同时又如同vhdl一样可以为代码块给一个名字,下面给出一个例子以示区别:

特殊符号

字符串

用中括号包围字符串如:

这个不同于以往的语法,意图明显,更容易判断字符串的开始和结尾,即使类似下面的情况也无需使用转义符:

这样就不用纠结于普通字符串的转义问题了。比起输入双引号的语言,省去按shift键。

在字符串中嵌入代码:

这个思想和C#的Razor引擎一样。比起Ruby的做法更加智能简洁。@比#键离shift更近。

重定义

任何运算符都是对象,都可以通过系统提供的对象接口重定义。提供内部的语法系统接口。

字典对象

这个的定义由于字符串占用了中括号,而代码块又没有像C语言那样使用大括号,于是定义像如下这样:

循环

不使用for、while、do之类有歧义的关键词,对初学者不太好理解。循环只用一个关键词loop。虽然比for多一个字母,但循环关键词使用的次数并不像变量和函数那样频繁。就像ruby的宗旨那样,语言应该像说话一样,简洁而易于理解记忆。输出不是print,而是echo,以例子说明:

import

和java一样使用这个来导入外部类,但用除号“/”分隔命名空间,而不是点号“.”,很容易理解为什么这么干,这是利用了uri定义,于是也支持所有uri的特性。举几个具有代表性的例子:

信号和线程

Windows里将信号称为消息。直接将这两个常用的项目集成到语言特性。线程定义和定义函数一样,这有点像并行语言。