相信许多跟我一样不熟鸡肠文的同志在编程时都有这种尴尬:给变量、函数等命名时,找不到一个贴切的鸡肠词来描述,这时仅用a、b、c、d或I、j、k、l又不太合适,最后只能用拼音字母代替,来个土洋结合。这时我总会由衷地发出感慨:世上只有汉字好!
微软的VBA让我过了一阵瘾。只可惜我的兴趣不在做应用,不免再次地失望。
Linux闯入我的生活后,虽然至今还不看好她的桌面市场,但她坦诚的性格还是深深打动了我的心。
有意无意中,我发现,Binutils中的nm、ld、objdump、objcopy等工具是不理会字符是否isascii的。我是这样试验出来的:随便编个C程序,故意弄点全局变量,编译成.o文件,再用HexEdit将全局变量名改为等长的汉字串。然后nm它,你会看到汉字符号;ld它,你会看不到你所期望的错误信息;objdump --source它,你会得到带汉字的反汇编程序……。
这着实让我兴奋了好一阵子。但更激动人心的一刻远不在此。
当我折腾了好几天之后,才又猛然发现,Gas已然与臭名昭著的isascii分居了。看这段程序就会知道:
.text
mov $0xffff, %ecx
蠢才: inc %eax
loop 蠢才
ret
(注:Fool缺l是Foo,蠢材缺木是蠢才)
Gas看看,想错都难!
美中不足的是,下面这段代码却出错了:
.macro 酒吧
inc %eax
.endm
.text
mov $0xffff, %ecx
蠢才: 酒吧
loop 蠢才
ret
呜呼!isascii的幽灵还在欧美徘徊!
唉!洋鬼子用情也会藕断丝连的。明明分居了,还老惦记着。
如果(甲 大于 乙)则 打印("%d\n", 甲); 否则 打印("%d\n", 乙);
<I>/* 中文编程不再是梦!!! */</I>
|
高级语言经编译后,一般要经过汇编和连接才能成为可执行文件,这正是binutils的工作。
我们惊喜地看到,binutils已经支持中文符号了。这是一个令人兴奋的信息!同时还向我们表明两件事:
一、如果重新设计一个中文编程语言,要考虑的是产生汇编代码之前的事,即词法分析、语法分析、中间语言生成等步骤,范围缩小了,而且增加了跟现有系统的兼容性。
二、可以考虑汉化现有编程语言。既然源程序到可执行文件的整个过程中,最后两个阶段都没有对符号是否isascii加以限制,可否类推到前面的阶段?理论上说,除了词法分析阶段需要isascii限制之外,其它步骤都不需要。这给汉化工作带来极大方便。
不管怎样,binutils支持中文编程的事实,给了我们很大机会。从技术角度看,我们有理由相信,中文编程时代即将来临!
请留意我的签名档:
如果(甲 大于 乙)则 打印("%d\n", 甲); 否则 打印("%d\n", 乙);
/* 中文编程不再是梦!!! */
|