公共命名空间的例子2

“公共命名空间是什么”,可以百度,也可以查看我的其它博客。
可能有人会说:现在都研究人工智能了,花费大力气去填充公共命名空间有意义吗?我的回答是:人工智能依赖海量的训练样本,为了使AI具有智能,需要付出大量的劳动来准备训练样本。这一过程同样消耗劳动力,而填充公共命名空间的过程,显得更智能。
如何填充公共命名空间?

一个例子

显示[hello \name]\换行。
其中name是一个变量,显示语句的中括号内,默认是一个字符串。换行还是不换行,这是一个“同位素”,可以在源代码浏览器中设置是否显示同位素。隐藏同位素之后,上述句子成了:
显示[hello \name]。
公共命名空间的作用就在于,能让程序员讨论计算机语言的细节。例如上述句子,加不加双引号就可以讨论一番:
显示["hello \name"]。

关于转义符的讨论

当反斜线后边的内容可以识别出一个单词时,不用加小括号。但是有时单词和后边的内容连在一起,这就需要加小括号,如下:
"hello \name good." #可识别
"hello \namegood" #连在一起了
"hello \(name)good" #加上小括号
反斜线加小括号是默认情况,不加小括号是简化形式。
新的转义符来自于\n\(new line)的思考,加小括号,可以表达更复杂的意思。

输入函数需要正则表达式

C语言的scanf实现了一个简单的正则,更好的方案是引进完整的正则。
输入["(.*),(.*)\n"]至[s1, s2]
同样是需要讨论,公共命名空间正是给程序员讨论用的。上述句子还可以怎样修改,不是哪个语言之父可以决定的,而是由广大程序员决定的。作者提出的修改方案是:
输入["\(=s1),\(=s2)\n"]
用转义符描述输入的内容储存于哪些变量中,在这个例子中,是储存于s1和s2中。每个变量都实现一个toString函数,用于输出;也都实现一个asString函数,用于输入。在输入函数中调用s1和s2的asString函数,实际上是一个有限状态机,和描述该变量的字符串相对应的正则表达式等价。
类似地还有输出函数:
输出["\(=s1),\(=s2)\n"]
这个句子调用s1和s2的toString函数,并用逗号和换行符拼接一个字符串来输出。

总结

公共命名空间尝试收集所有的句子,它给程序员准备了一个讨论、甚至是“吵架”的地方。程序员对计算机语言的设想和要求,在这里得到体现。
语言的制作者通过分析别人讨论的内容,进行权衡,决定语言应该是什么样子的。这比他自己在那想象要好。
结果,语言凝聚了众人的智慧,不再是某个语言之父的个人创作。
先填充公共命名空间,再实现计算机语言。这个过程可能要重复多次,但还是次数少一点为妙。不能指望一次成型,但像现在那样,出现上千种语言,把一个过程重复上千次,也是不好的。
“让2000年后的程序员能看懂今天的源代码”,这是个设想,希望能够实现。
“中国的程序员用中文编程,美国的程序员用英文编程,世界各地的程序员都可以用母语编程”,这是建设公共命名空间的原动力。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值