由汉语编程所想到的

/ 灵感, 编程, lisp, racket

原回答于知乎-汉语编程语言意义何在?

更新于: 2019-12-15

    我这样的中文母语者对汉语编程的直观感觉

    进一步的思考和探讨

    展望

我这样的中文母语者对汉语编程的直观感觉🔗

由于信息革命发生于美国,诞生于英文语言文化的国家,很多人也因此在一开始的时候都是从英语语境所构造出来的计算机环境入门的。思维惯性,在很多人想象中汉语编程好像是一无是处的,然而恰恰相反,汉语编程是有他的现实意义存在的。

区别于当下的以英文语法逻辑作为母体的编程而言,汉语编程对于汉语使用者和非汉语使用者,而言,可能都会有很大的现实意义。至于具体意义多大,只有在有人充分尝试过的,并且整个社会的公认认识到他的意义,并且充分推动后,才能有所结论。 汉语相较于英语有着更加充分的事物描述和表达能力和语言构造能力。英语虽然是一个简单直接易学的语言,但是在词法构造和时态表达上是不足够严谨工整以及对仗的(譬如很多动词过去式/现在进行时的形式变化规则不同,很多相同意义的形容词动词变形的基词汇不同,难以简单组成对仗严谨的组合词汇),而在编程之中,常常会想要为了逻辑严谨性,而追求对仗功能,中文的这种拥有丰富表达能力和语言构造能力的语言恰恰提供了足够的空间给于类似的需求来充分发挥(中文古诗词中的对仗充分奠定并巩固了他的基础)。 例如你可能会想要对类似意义的函数名起结构类似的名字来使编程语言的构造名字更加简短工整,虽然工整不是编程中追求的绝对意义,但谁也不能否认这种工整所带来的的美感和阅读以及使用中的现实意义。我可以以一段lisp语言为例来作简单阐明,比如在汉语中我们可以如此构造具有特定目的意义类似的函数:

假设date为一个固定时间,例如我写这篇评论的时间,2019年11月29日 14时45分 0秒 0纳秒,假设中文命名定义了一些函数,则可以有如下调用:

 (月初时 date)
;调用此函数返回date这个时间的当月月初时间,即2019年11月1日 0时0分 0秒 0纳秒
 
(年初时 date)
;此函数返回date这个时间的当年年初时间,即2019年1月1日 0时0分 0秒 0纳秒
 
(日初时 date)
;此函数返回date这个时间的当天初时时间,2019年11月29日 0时0分 0秒 0纳秒
 
(纪初时 date)
;此函数返回date这个世纪的初始时间,2000年1月1日 0时0分 0秒 0纳秒

以此类推,你还可以因为汉语语言的丰富性和汉字古文中单字作为表述单元的特性,几乎无限制的构造类同函数:夜初时,昼初时,旬初时,季初时.......

以上这些命名规则,你可以尝试用英语作为元语言来构造尝试一下,你就会发现因为英语语言的局限性所带来的的问题,从这个角度看,汉语这个弹性和广度的语言,比较英语显然将有更加充分的发挥空间。

然而,对于编程语言元语言中英语作为母语的讨论,学术界好像早已有之:

WIKI-梵语#計算語言學
曾有人提议使用梵语来交流和传播知识,比如使之成为机器翻译和自然语言处理等领域的元语言,因为它有比较严格的结构体系。
严格的古典梵语是从古老和丰富的吠陀梵语中提炼出的正规化表达形式。这种结构严谨的古典梵语文法从梵书阶段就已经开始,直到波你尼的时代仍未彻底完成,但那时这门语言已经脱离了普通使用。

梵语使用者在当代几乎已经没有了,然而,汉语却是当前世界上使用人数最多的语言。

进一步的思考和探讨🔗

上面这个回答,其实是我偶尔看到知乎上面的问题的时候,直接想到后又略加思考得到的。其中比较有意义的我觉得是计算机学术界曾经提出过要使用梵语这种屈折变换高度严格一致的语言来替换英语成为计算机编程的元语言。我觉得这表明了:在使用英语作为元语言的过去时间里,大家明显的注意到了因为英语在朝向着分析语方向发展的原因导致其语言规则明显不够严格所造成的问题,也就是,这种不规则的词形或者词形变换导致的问题,比如不能够完美一致,或者完美对称,或者有碍阅读等等方面的所造成的问题。

英语在自然语言学中,被归类为综合语,汉语是分析语。汉语相较于英语非常明显的特点,也就是分析语相较于屈折语非常明显的特点是:没有时态变换的问题。换句话说,如果真的要解决英语作为计算机编程的元语言词形规则不够完美的问题,除了用词形规则严谨的梵语来替换英语外,另一种可行的方案可以是用完全不具备词形变换规则的分析语–汉语来替换英语。

汉语对时态的表述是通过自由语素的加入完成的,例如:过去时态可以用「了」表示、进行式可以用「着」、「正在」表示;未来时态可以用「会」、「将会」表示。而英文,会通过变换词形和时态来完成以上表达。

一个例子,英文表达过去进行时:He was playing basketball.,英文表达将来时:I will fix the bug.。而在汉语中,通常情况下相应的表达是:他(昨天)在玩篮球,我(明天)会修bug的。

我觉得,英语和汉语比较,实质的实质上是没有什么区别的,其不同仅仅是在语言元素的抽象粒度上,或者是说,他们在语言元素的单位抽象粒度上,所蕴含的表达范围上。(好像在哪里看到过说,地球上的汉语印欧等有可能共同发源于同一种语言。)

另外现在很明显的是,英语在是在朝着分析语的方向在进化的,一些分析表明,上古汉语可能是综合语,这可以让人联想,是否分析语在自然语言的进化中,是在综合语之前的?我在想这个问题的时候,恰巧搜索到了一个相关的帖子

另外一个有趣的问题是,大家共所周知,汉语可以被认为是一脉相承源自于古汉语的,而英语源泉的欧洲语言在进化过程中,衍生出了很多其他语言。这其中的原因,我觉得在于汉语是表象语言,其文字含义和发音并无很大关联,或者其发音系统是源自文字书写的(例如,都读作xiang,用声调来区分读音时候所指代的不同文字区别),所以不同区域的人操持不同的口音,却书写同一套系统。而英文是音形语言,从发音可以推测如何书写,那么一旦由于发音产生偏差,就很容易诞生出不同的书写方式,也就很容易分化出不同的语言。

人工语言-逻辑语
它依照形式语言尤其是谓词逻辑构造,而非建基于现有的自然语言。其特点是:言文一致、形意一致、文化中立。

综合来说,汉语是进化了很久的语言,上古汉语可能存在一定程度的屈折,但在很早的时候已经分析化了。英语有可能存在因为本身语言的音形同步的特点,在进化中不停的分化语言,导致不能有充分的时间完成分析化。

我们再来看看编程语言相较于自然语言有哪些明显的特点,我觉得很显然,编程语言是一套书写系统语言,很明显不存在口头交流沟通的问题。而在书写系统中,汉语独有的特点可能是摇摇领先于其他语言的:比如他源远流长,长远的时间内,一直保持文字形态和内部含义,一直不断被简化被改进文字形态;也比如文言文的信息密度极大,中文阅读效率相当惊人

展望🔗

可以想象,汉语如果是编程的元语言,某一天在你写代码的时候引入某一个库的时候,相应的,可能还要在你的输入法中,引入这个库的汉语输入法库,或者你会使用一个特别的输入法来写代码。想起来还是挺有意思的。

然而的是,发展到21世纪的此时,我们已经不能单纯的考虑语言性质的问题了,更加需要讨论的是这个社会复杂性上,编程作为计算机发展的基石,诞生在英语语境,更加是诞生在西方文化所构造出来整体文化上,包括很多现代的学科,比如物理学,逻辑学等等,尤其是数学,包括这几十年来西方人作为主导的发展过程。

而且,编程除了这些之外,更是包含着另外一种逻辑思考和思维认知的方式,如果你见到过英语作为母语国家的英国人或美国人因为编程语言计算机专业知识匮乏和自身能力或经验所限的原因,而写出了的糟糕的代码的话,就会一下子意识到编程的另外一层含义了。

但总之,综合来讲,某种程度上来说,汉语中文如果要作为编程的元语言,因为它的固有属性和历史积淀,确实是存在一定的优势的。其到底能发展与否,以及将发展的如何,难以有定论。