几乎所有的语言项目,其核心都是用更底层的语言写的.
底层语言大部分是 C,C++,而扩展这门语言的核心,就要用另外一种语言
去写。这给语言设计者较大的挑战。
开发语言必须具备底层语言的编写能力,而为了能用自己喜欢的语言编写
代码,就必须用另外一种低级的语言去写要经历反复测试的优秀的代码,
这是一种无奈。
很多语言的自举项目是非常吸引人的,例如 PyPy, Java 语言也实现了
自举。
现在有一种新的实现语言自举的办法:从解析语法开始
Perl6 从语言设计阶段就决定让语言实现自举:让语法分离出来。
语言的能力总是要有一定的表现形式,而这种表现形式的制定具有很强的
随意性,这种随意性和开发者的喜好,性格,阅历,经验有关。而语言的
核心能力其实相差无几,在形式上的喜好追求,造就了编程语言的多样性。
大部分语言都有和其相似的语言存在,很多人的沉迷在形式的构建上,做
了许多重复的事情。
其实形式是可以单独形成一门语言的,而这门语言可以被解释执行。这让那些
注重形式的人可以从不同形式语言的形式中解放出来,可以专注于按照自己
的风格书写代码。这种将形式独立出来的东西就是语言的语法。
在语言的语法背后,是非常单调的语言能力:
变量赋值
数据类型
算数表达式
条件判断
循环结构
代码续延
函数代码块
命名空间
代码预处理宏
代码注释
类型,函数的组织架构(面向对象,元类)
还有一些语言支持并发,抽象出进程和协议栈等数据结构。
这些结构本质上是续延:
代码可以在后台运行,而让接下来的代码继续执行。
管理在后台运行的代码,合并后台代码计算的结果,构成了并发的各种
不同表现形式。
描述语言的语言叫做语法,大部分现存的语法规则都是文档性质的,
也就是不是作为代码执行的依据,而是人写代码的参考。
也有一些可以作为代码被执行的语法,但形式多样,能力不一:
这和语言的现状一样,形式化的不同造成了这个领域的重复建设
既然把形式分离出来,还要注重形式吗?
所有的东西,都要有一定的表现形式,如果这种形式可以被定义,那么:
形式应当尽可能的简洁,尽可能的沿用现有的规则,被大多数人理解
language Ruby
main : expression+
expression: condition | loop | assign | compute
有解析语言的能力的人,都有能力创立新的语言。有人愿意拥有这种能力后,只是转换别的语言吗?
现存的语法主要有 BNF EBNF Antlr-g4 Haskell-Parsent