[原创]论母语化编程与程序设计语言容错性

hack_dingli 收藏 15 1341




中国黑客联盟安全系统研发团队跟踪与反馈组 丁立

[摘要]

本文就以人为本的编程思想进行了探讨,并针对初学编程的高门槛问题,提出了“母语编程”和“高容错性”的主张。同时,根据当今业界的各类“汉语编程”方案的不足,以及各编程语言容错性不高的问题,提出了插件式的预处理解决方案。

[关键字]

母语编程、高容错性、以人为本、预编译

[正文]

一、引言

31年前邓小平同志的一句“计算机要从娃娃抓起”揭开了我国计算机普及教育的序幕,在dos早已成为历史的今天。我们发现,从电子小报的编排到网页设计再到歌曲串烧的制作,微机的各类应用在960万平方公里的土地上无所不及,无所不在。但是,许多非计算机专业的硕士、博士,同时却连一个最简单的“Hello,world!”都不大会写。时至如今,计算机编程仍旧是少数人的专利,程序员在普通人眼里依旧是一种神秘。程序设计语言的重要自然是不言而喻,但是对于不及我们却又似乎显得那般无力。

作为一名热爱计算机科学的在校初中生,我曾在很长一段时间负责过学校计算机社团的社员培训工作。在多次的基础培训中,我深刻的感到了非母语编程给程序设计语言的普及带来的不便。是的,或许对于专业程序员来说,用英语进行编程并没有什么不便,就像如同吃饭那般寻常。但是,对于普及而言,毫无疑问那却是一道极高的门槛。

从结构化程序设计到面向对象,从FORTRAN到Ruby,不难发现程序设计语言所追寻的无非是高效和便捷。个人认为,程序设计语言更多的只是一种表述方式,不论你使用的是“print”还是“write”抑或“cout”,很明显这三者之间并没有任何区别或者优劣的差别。当然,对于真正的商业程序员来说,那算不了什么。但是,对于程序设计语言的普及而言,高容错性(或者说是兼容性),那绝对是必不可少的。

就总体而言,这些似乎都只是微小的细节。但是,程序设计语言普及的艰难,却又似乎存在于这般的一念之间。以人为本,很明显是程序员编写程序,而绝非程序造就程序员。个人认为,在不产生二意性的前提下程序设计语言所需要的是更多的包容,而非古板。

二、母语编程

谈及母语编程,大概自上世纪90年代起便不断有大量方案提出,同时似乎也曾引起过一场规模不小的争论。依本人肤浅的见识而言,或许就商业开发而言,似乎有了些华而不实的味道。但是,就普及而言那似乎却又是必不可少的了。

记得曾有人说,汉字在计算机占双字节(这里以GB2312-80为例),较之英语编程略显臃肿,效率不高。我个人对于这种说法是啸之以鼻的,众所周知从汇编语言开始源代码便必须在编译(或解释)后方可运行。源代码本身的书写形式和书写语言,对最终编译后程序的效率和大小完全是没有任何关系的。即使就源代码本身而言,在大容量存储设备随处可见的今天,源码体积的稍稍增大大抵便是影响不大的。

谈及现在市面上各种已具备实用性价值的母语编程方案,大概可分为两种。一种是完全自主研发的程序设计语言(如:易语言),另一种则属于针对现有的英文程序语言进行扩展的方案。众所周知,在今天的计算机业界处于并长期处于一种大量不同的编程语言同时存在,甚至在一个项目中混合使用的情况。基于此,本人认为完全自主研发新的母语程序设计语言会造成大量的人力资源,今天你为了初学者去设计一个类basic、类Pascal的语言,明天又为了程序员去弄上个类C的,然后后台为了搞什么B/S模式又去弄个php的汉语版本出来,如此这般恐怕除了浪费之外,还会颇为的吃力不讨好吧。

而就后一种扩展方案而言,我个人则认为还有优化、修改的余地所在。我在上文总已经提到过,当前的程序设计语言各有优劣,长期处在一种混合使用的状态。鉴于此,这种母语化的扩展方案,应该属于一种通用方案,而绝非特定针对某一种语言的单一方案。

在许多所谓多国语言版本的软件中,常使用一种字符替换的形式,来完成多语言特性。本人认为,是否可以通过开发为IDE插件的形式,而后在程序编译前进行预处理、替换字符的方法完成母语编程的操作。


需要特别说明的,关于变量名(或函数名、常量名 等等)在源码录入阶段可以允许使用中文来予以命名,而后在预处理过程中可将之全部替换成其他符合原语言语法规则的名称。

关于调试方面,鉴于母语录入的源码和预处理后的中间源码,各语句的执行顺序基本上完全。因此,直接将原出错信息输出即可。

关于源码中的语用部分(这里特指程序中输出的字符串信息),因为其在本身在语言中便处于特殊的结构中,极易识别。因此,可直接在预处理时予以跳过。

以Pascal语言为例,则该方案的工作流程如下:


论母语化编程与程序设计语言容错性



三、宽松语句与容错性

就我本人所接触到得各类所谓的汉语程序设计语言而言,基本上各个关键字的名称都有所出入。1个最简单的cout就有“输出”、“命令行.输出”、“写”、“显示”等诸多译法。而此外,以我个人的经验而言。在进行基础教学时,将“echo”、“write”、“cout”、“<p></p>”、“print”搞混的大有人在。诚然,作为一个程序员而言,严谨是必不可少的。但是,程序设计语言终究是一种工具,既然可以低成本的使之更为人性化,那么何乐而不为哪?

关于容错性,本人认为基于上一节所属的预编译法可以很好的解决。即,在相关的配置文件中,可以包含多个关键词,而非仅仅只具备单个关键词。

个人认为在确保不会产生歧义的前提化,程序设计语言的表述风格应该尽量的自由和人性化。

四、总结


基于在编译前进行预处理(按特定规则进行的关键词替换)可以很好的解决母语化编程语言,同时可以在不产生歧义的情况下使程序设计语言的编写风格尽量的自由和人性化。同时,基于当今计算机科学业界的态势,本论文提出母语化编程不应该只是针对某一种特定的程序设计语言的翻译工作或一种新的程序设计语言的研发工作,而应该是一种通用的解决方案。


如上所述2点,对于专业程序员或许只是食之无味的鸡肋而已,但对于计算机程序设计语言的普及工作而言则是不可获取。只有当全民都可以通过编程来解决一些简单的自动化问题(排序、税率计算···)时,才能说明我国在信息化建设领域取得了辉煌成绩。

另,谨以此文向中华人民共和国建国60周年、小平同志提出“计算机要从娃娃抓起”31周年致敬!


[感谢]

感谢信息学奥林匹克初学者之家[OIBH]的朋友们对我的帮助与支持。

感谢宁波市曙光中学的徐国芳老师在程序设计语言方面给我带来的启迪。

感谢宁波市曙光中学信息社的全体社员们给与我的支持与建议。

感谢锦州市第14中学的刘宇擎同学在论文写作中给我的无私帮助。

感谢国际信息学奥林匹克竞赛中国国家队的陈启峰同学在论文的写作格式上给予我的指导。

特别感谢我的朋友Tide,没有她这篇论文将不可能出现,是她启发了我的灵感。


[参考文献]

《全国信息学奥林匹克联赛培训教程(一)》,吴文虎

王建德,清华大学出版社

《C++程序设计(第2版)》,李龙澎,清华大学出版社

《Size Balanced Tree》,陈启峰,IOI中国国家队2007论文集

[附录]

以Pascal语言为例的关键字替换文件[不完整]

//母语编程扩展文件

//Pascal—简体中文

//ver:0.1

[main]

AND=和&以及&同

ARRAY=数组

BEGIN=开始&入口

CASE=选择&选项&情况

CONST=常量&固定值

DIV=整除

DO=到

DOWNTO=反循环&向后循环&递减

ELSE=否则&不然

······

[date]

Integer=整型&证书

Real=实型&实数

Char=字符型&字母&字符

Boolean=布尔型&逻辑型

······

[char]

。=.

;=;

‘=’

’=’

[=[

]=]

........

[information]

Else x = ‘X’ & :=X

& program x & function x

& procedure x &

x:= & x=^

//意为:当关键词x以x=’x’或:=x等形式出现时则不进行替换

X-[program x

& function x & procedure x

& x=^]

//意为:在上述语句中x为变量名(或函数名

等),需要替换为符合规则的新名称。

.........


以Pascal为例,编译过程的实例如下:

源码:


1.

程序名 显示;

2.

常量 信息 =

‘你好,世界!’;

3.

开始

4.

输出(信息);

5.

结束。


预编译后,源码为:

1.

Program a;

2.

Const a=’你好,世界!’;

3.

Begin

4.

Write(a);

5.

End.


编译过程与普通Pascal程序的编译无区别,全部完成后,则一共有如下文件:

Hello.pas.chs 中文源代码

Hello.pas

预处理后的源代码

Hello.bak

备份文件

Hello.o

编译的中间文件

Hello.exe

编译后的可执行文件




本文内容为我个人原创作品,申请原创加分

[ 转自铁血社区 http://bbs.tiexue.net/ ]

8
回复主贴
聚焦 国际 历史 社会 军事
15条评论
点击加载更多

发表评论

更多精彩内容

经典聚焦

更多
发帖 向上 向下
广告 关闭