开源母语编程说明 Programming with Mother Language(持续更新)
Programming with Mother Language = PwML
今天终于下定决心创建了一个开源项目 [PwML:开源母语编程]
前一阵子看代码看得双眼干涩、头脑发烫,尤其是英文自定义函数名,太短了不清楚意思,想清楚表达意思就要忍受长长的名字,而且还不只一个,所有的自定义函数为了清楚表达含义,都很长、很长,看得人只想吐,于是萌发了用中文做函数名的念头,再进一步,用中文、标点符号、数字来写代码。
目前国内貌似有两种中文程序语言,一个是易语言,一个就是中文化的PYTHON,都比较受限,在了解了 Common Lisp 的一些特性后,忽然发现 LISP 是最适合做母语开发的基础平台,强大到逆天的宏能力,具备自定义一种新语言的能力。
[2012-11-16 更新]经过一番折腾,终于可以在EMACS上使用中文编写LISP程序了,主要是借助了LISP的强大的宏,把《实用COMMON LISP编程》中的一个CD数据库的例子转化为中文,中文代码如下:
![](http://static.oschina.net/uploads/space/2012/1218/151052_sfPo_219279.png)
当前主要问题是语法高亮不太好,具体说就是所有的自定义函数都无法显示为指定颜色,只能显示为默认颜色,看起来不太醒目,所以下一步计划是实现自定义的高亮显示,所有自定义函数都可以显示为不同的(相同也可以)指定颜色,便于阅读区分。
另外一个问题是那些英文参数,是否需要全部转换为中文?正在权衡,暂时选择不转。[2012-12-18 更新]
LispBox用户增加下面这行代码到 lispbox.el 中
(font-lock-add-keywords 'lisp-mode '("[(]" "[)]"))
就可以实现把括号按照关键字的格式进行着色,看起来是否好多了?
[2013-01-16 更新]
目前仍然在考虑,开源母语编程中对母语的使用应该达到何种程度?也就是说程序的哪些部分使用母语?是全部使用还是局部使用?如果是局部使用,那么哪些用哪些不用?LISP原来的关键字用不用?函数名是一定要用的,临时变量是否要用?
似乎一切选择都应以是否易于阅读、是否易于理解为标准
[2013-01-16 更新]
试试这个新 REPL 界面:
[2013-01-18 更新]
前几天花了点时间浏览了 HyperSpec ,发现一个惊人的事实,Common Lisp 的标准里有978个扩展操作符,也就是说 CL 库有978个标准函数,如果全部翻译成对应的中文名称,估计工作量比较大。
昨天了解了下 GitHub 的使用,顺便更新下知识结构,发现 MarkDown 真是个好东东,以前最头疼就是写好 word 文档后的格式调整,稍微不慎就会在排版过程中把以前的版面搞得面目全非,而且 Word 的排版命令又是极其的非人性化,痛苦的过去。。。
现在有了 MarkDown,写起文档来感觉清爽许多,当然 MarkDown 也不是最好的,但是跟 word 相比总是一个质的飞跃,就像当初第一次接触 Google 的 SketchUp,看着视频教程里几分钟就把一个复杂的3D模型建好了,整个操作行云流水,没有一丝停滞,当时的感觉简直是惊艳,什么 3DS,什么 Auto CAD,简直都没法比了。
[2013-05-17 更新]
最近一直在考虑是否把关键字和标准函数全部建立对应的中文别名,比如:
1、为 if 建立中文别名为 “如果”;
2、为 defun 建立中文别名为 “定义函数”;
3、为 defparameter 建立中文别名为 “定义参数”
4、其他类似
这样做的好处是可以把绝大多数代码完全中文化,每个感兴趣的人都可以轻松阅读这些代码,了解其中的算法,坏处是会对使用者造成新的学习成本--毕竟需要重新学习中文化了的关键字,反复权衡之后还是觉得现在这么做有些得不偿失, 暂时比较恰当的做法是自定义变量、函数和宏全部使用中文名称,语言固有的关键字和标准函数仍然使用原来的英文,个别名称过长的函数或宏可以建立简短的对应中文别名,如多值和列表解构的相关函数:
1、destructuring-bind 解构
2、multiple-value-call 多值调用
3、multiple-value-bind 多值接收
似乎可以遵循这么一条简单原则:
英文符号名称超过 10 个字母,或者超过3个单词,就建议使用简短的中文别名
这样可以把一些过长的英文符号大大缩短,暂时就按照这个思路来试验
[2013-06-10 更新]
原来计划把支持母语编程的相关功能函数写成一个 lisp 源文件, 然后每次手动加载, 但是这样就要求使用者必须有一定的 Lisp 开发经验, 比如要了解 Lisp 的加载机制, 要懂得如何使用 load 函数, 等等, 这样的发布形式对于一些初学者来说还是会带来一些不必要的困扰.
前几天忽然想到一个更简单有效的办法: 把加载好中文支持的 image 文件转储出来, 发布时直接用这个 image 文件替代原来的 image , 这样就可以保证使用者一启动 Lisp 环境就自动进入中文编程的支持中, 可以顺利地没有任何障碍地使用中文编程.
再把这种方式跟 LispBox 结合起来, 就可以为初学者提供一键式的中文编程环境. 不需要任何手动设置!
另外需要考虑的是帮助函数, 帮助文档和基本教程以及中文例程的规划.