7 Star 23 Fork 3

中文编程 / overview

 / 详情

[讨论]中文编程语言应当设计成什么样子?

待办的
创建于  
2021-07-12 14:20

 为了便于开展具体的讨论,这里首先梳理五个基本概念:

•英文编程
是指在编写程序的过程中,主要采用英文标识符来表达程序含义、逻辑和意图的一种编程方式。
不论编写程序时采用的是英文编程语言还是支持英文标识符的中文编程语言,只要在编写程序的过程中,主要采用英文标识符来表达程序含义、逻辑和意图,就属于英文编程范畴。

•中文编程
是指在编写程序的过程中,主要采用中文标识符来表达程序含义、逻辑和意图的一种编程方式。
不论编写程序时采用的是中文编程语言还是支持中文标识符的英文编程语言,只要在编写程序的过程中,主要采用中文标识符来表达程序含义、逻辑和意图,就属于中文编程范畴。

•英文编程语言
是指一门基于英文标识符和英文表达习惯而设计的编程语言,并且其主要的开发文档和核心资料是基于英文的。不论将英文编程语言应用于英文编程还是中文编程,都不影响英文编程语言本身“是英文编程语言”的这一事实。

•中文编程语言
是指一门基于中文标识符和中文表达习惯而设计的编程语言,并且其主要的开发文档和核心资料是基于中文的。不论将中文编程语言应用于中文编程还是英文编程,都不影响中文编程语言本身“是中文编程语言”的这一事实。

•国产编程语言
是指国内个人/企业开发的,拥有国内自主知识产权的编程语言。不论开发的是中文编程语言还是英文编程语言,只要是国内个人/企业开发的,拥有国内自主知识产权的编程语言,就属于国产编程语言。

以上五个概念的划分未必精准,但足以让我们清晰界定我们接下来将要讨论的“中文编程语言”究竟是什么:
 1. 首先必须是国产编程语言
 2. 其次必须是中文编程语言
 3. 允许额外支持英文标识符

说得直白点,就是国产中文编程语言



概念梳理清晰后,我们就可以讨论如下话题了:
 1. 中文编程语言究竟要设计成什么样子?
 2. 中文编程语言为什么要设计成这个样子?
 3. 中文编程语言要怎样才能设计成这个样子?

可以从底层编码方案、类型系统特征、数据操作规则、语言语法风格、逻辑表达习惯……各方面展开讨论。

欢迎各位在这个话题下热烈讨论,给出自己的方案和建议。抽空,我也会尽量多地发表自己深思熟虑的观点。

希望这个讨论最终能够形成有用的共识,为未来的中文编程语言的设计打下良好的基础,同时也希望这个讨论能够最终形成未来各种中文编程语言都愿意遵循的统一规范。


•2021年7月12日第一次更新

1.若确实要研究和开发中文编程语言,就免不了要回答这样的一个问题:“中文编程语言”中的“中文”是指哪种文字?

答曰:汉字。

2.随之而来的另一个问题是:“汉字”又是指哪些字?

答曰:A.全体汉字,B.通用规范汉字

如果答案是A,那就没有任何开发中文编程语言的必要性了。因为现有的支持中文标识符的英文编程语言本来就可以充当中文编程语言使用;即使是那些不支持中文标识符的英文编程语言,也能在简单汉化后充当中文编程语言使用。在这种情况下,开发一门新的中文编程语言,并不能额外解决任何问题,因而其价值、意义和必要性都不大。

而如果答案是B,情况就有所不同。因为,目前尚无任何一门编程语言是以通用规范汉字为基础而开发的,更无任何一门编程语言由于主动支持通用规范汉字而获得额外的中文信息处理能力。在这种情况下,设计一门从底层开始就完全支持通用规范汉字的中文编程语言,起码是一件有创新意义的事情,不至于完全没有价值。如果新语言由于支持通用规范汉字而额外获得独特的中文信息处理能力,那么其开发的价值、意义和必要性就更大了。

3.为什么中文编程语言非得支持通用规范汉字?

答曰:根据《中华人民共和国通用语言文字法》,我们国家的法定语言是“普通话”,法定文字是“通用规范汉字”。国家不会禁止使用普通话之外的各种方言和通用规范汉字之外的其它汉字,但会鼓励和推广使用普通话和通用规范汉字。

基于这一事实,新设计的中文编程语言无论从规范化的角度,创新的角度,现代化的角度,还是长远发展的角度考虑,都应当遵循这个规定。虽然这可能会给新语言的开发带来一些困难,但也并非无法解决。内码映射机制,就是其中的一个不错的解决方案,该方案还能够使新语言额外获得更多好处:
 1. 支持通用规范汉字本身就可以作为新语言的一个特色和宣传点
 2. 可以避免极度生僻的汉字成为标识符,提高程序可读性的下限
 3. 采用内码映射机制,可为新语言解锁独特的中文信息处理能力

4.支持通用规范汉字有什么困难?

答曰:unicode的汉字编码发展在先,《通过规范汉字表》发表在后,且二者并不兼容。这导致通用规范汉字在unicode中的码位分布十分混乱,既不连续,也无规律,难以集中化、规范化、正则化处理。那么,如果要在unicode基础上直接支持通用规范汉字,一定会产生许多困难,例如难以判断一个汉字是否为通用规范汉字,难以识别通用规范汉字的字频级别、笔画数量以及在通用规范汉字表中的位置等。另外,通用规范汉字在unicode中的码位分配过于靠后,以至转化为utf8格式后,单个汉字的平均存储空间和(传输时)的平均传输字节数偏大,这也不利于中文信息的高效存储和传输。

5. 如何克服支持通用规范汉字的困难?

答曰:针对“通用规范汉字在unicode中的码位分布过于混乱,不利于汉字的信息化处理”的问题,应将通用规范汉字的码位集中在一起,并且按照一定的规律排序和分配码位,这样才有利于中文信息的处理。而针对“通用规范汉字在unicode中的码位分配不合理,导致其存储时的平均存储空间和传输时的平均传输字节数都偏大,不利于中文信息高效存储和传输”的问题,则应将通用规范汉字的码位适当前移,才能克服这个问题。

由此可见,克服上述两大问题的关键,都要求我们对unicode进行适当的“改造”。但是显然,这样的“改造”,势必会引发新语言与unicode的不兼容,继而引发新语言与其它所有支持unicode的软件的不兼容,这是任何人都不愿意看到的结果。那么,新语言如果一定要兼顾二者,确保既支持通用规范汉字,又不破坏与unicode的兼容性,就必须引入一个中间层来隔离二者的差异。具体地说,就是要在新语言中采用内码映射机制,通过重新映射unicode字符得到内码映射表,然后在新语言的内部使用内码,外使用unicode码,这是一个相对完美的解决方案。

6.如何更合理地分配unicode的字符,尤其是通用规范汉字的编码?


答:从信息编码的角度分析,在对unicode字符编码时,如果将unicode字符按照使用频率由高至低编码,使高频字符分配于低码位,而低频字符分配于高码位,将能大幅提高unicode字符的总体存储效率和传输效率。

考虑到unicode字符在存储和传输时主要采用utf8格式的事实,不妨通过utf8格式存储和传输unicode字符时的特点,来说明这一道理:在utf8格式中,存储和传输unicode字符时,码位为0~127的字符只需要1字节,码位128~2047的字符需要2字节,码位为2018~65535的字符需要3字节,从码位65536开始的字符,需要4字节。

显然,如果将最高频字符分配至码位0~127,次高频字符分配至码位128~2047,常频字符分配至码位2048~65535,低频字符分配至码位65536及之后,确实能够极大提高unicode字符的总体存储效率和传输效率。

回到现实世界,在全球范围内,ASCII字符的单字符使用频率最高,而汉字(主要指通用规范汉字)的单字符使用频率排行第二。前者在母语/官方语言/第二语言是英语的很多国家都大量使用;而后者则主要在人口数量最多、网络规模最大、网络总流量最高、网络交流最频繁的国家——中国大量使用。这两种字符的单字符使用频率,总体上遥遥领先于其它所有字符。

特别地,在英文计算机系统中,主要使用ASCII字符,而很少使用其它字符;并且在中文计算机系统中,主要使用通用规范汉字和ASCII字符;这两种计算机系统占据了全世界所有计算机系统的主流;而在其它计算机系统中,主要使用当地语言文字和ASCII字符。

当然,字符的码位分配也不能唯字频论,还得兼顾使用的便利性。一个合理妥协的分配策略是:首先按字符子集分配码位子域;然后在码位子域内部分配子集字符的码位。例如,先将unicode字符划分为ASCII字符集、通用规范汉字集、希腊字符集、俄文字符集、数学字符集、数学箭头集、工业字符集、盲文字符集……然后将各个字符集按总体使用频率由高至低分配字符码位子域;最后在各个子域中,各自按照合适的规律分配字符子集中的各个字符的码位。这在总体上,与unicode本身的分配策略,是大致相同的。

所以综合考虑,unicode字符的码位分配不妨采用如下更合理的方案:

  1. 码位为0~127,即U+00_0000 ~U+00_007F的区域,仍然按照原unicode方案,分配128个ASCII字符;
  2. 码位为128~8232,即U+00_0080 ~U+00_2028的区域,按照《通用规范汉字表》的顺序,分配8105个通用规范汉字;
  3. 码位为8233~8319,即U+00_2029 ~U+00_207F的区域,预留87个码位给未来可能新增的通用规范汉字;
  4. 码位为8320~1_3311,即U+00_2080~U+00_53FF的区域,按顺序分配原unicode中的U+00_0080~U+00_33FF区域的1_6256个字符;
    ……其它区域的字符分配,抽空继续完善。
    输入图片说明

评论 (6)

白羽 创建了任务
白羽 关联仓库设置为中文编程/overview
白羽 修改了描述
白羽 修改了描述
白羽 修改了描述
白羽 修改了描述
白羽 修改了描述
白羽 修改了描述
白羽 修改了描述
白羽 修改了描述
白羽 修改了描述
展开全部操作日志

在设想的同时,也许应对中文编程的历史和现状作回顾和评估?暂时想到一文供参考:步履蹒跚六十年:中文编程史话

白羽 修改了描述
白羽 修改了描述

@吴烜 这篇文章很赞,里边的好几个观点都与我的想法很是契合。抽空我整理一下。

白羽 修改了描述
白羽 修改了描述
白羽 修改了描述
白羽 修改了描述
白羽 修改了描述
白羽 修改了描述
白羽 修改了描述
白羽 修改了描述
白羽 修改了描述
白羽 修改了描述
白羽 修改了描述
白羽 修改了描述
白羽 修改了描述
白羽 修改了描述
白羽 修改了描述
白羽 修改了描述
白羽 修改了描述
白羽 修改了描述
白羽 修改了描述
白羽 修改了描述
白羽 修改了描述
白羽 修改了描述
白羽 修改了描述
白羽 修改了描述
白羽 修改了描述
白羽 修改了描述
白羽 修改了描述
白羽 修改了描述
白羽 修改了描述
白羽 修改了描述
白羽 修改了描述

想起法国的 WinDev 开发环境有过中文版,还包括了一个中文编程语言——W 语言:
输入图片说明
详见 《【转载】WinDev与它的中文编程语言》

这叫自然语言编程了

有何特别呢?

白羽 修改了描述
白羽 修改了描述

大佬,可以看下我的本科毕业设计?
https://maifile.cn/dec/d59156126725@doc

登录 后才可以发表评论

状态
负责人
里程碑
Pull Requests
关联的 Pull Requests 被合并后可能会关闭此 issue
分支
开始日期   -   截止日期
-
置顶选项
优先级
参与者(4)
384016 zhishi 1578922186
1
https://gitee.com/Program-in-Chinese/overview.git
git@gitee.com:Program-in-Chinese/overview.git
Program-in-Chinese
overview
overview

搜索帮助

53164aa7 5694891 3bd8fe86 5694891