当前位置: 首页 > news >正文

开源母语编程 说明 (持续更新)

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

开源母语编程说明 Programming with Mother Language(持续更新)

Programming with Mother Language = PwML

今天终于下定决心创建了一个开源项目 [PwML:开源母语编程] https://github.com/FreeBlues/PwML

前一阵子看代码看得双眼干涩、头脑发烫,尤其是英文自定义函数名,太短了不清楚意思,想清楚表达意思就要忍受长长的名字,而且还不只一个,所有的自定义函数为了清楚表达含义,都很长、很长,看得人只想吐,于是萌发了用中文做函数名的念头,再进一步,用中文、标点符号、数字来写代码。

目前国内貌似有两种中文程序语言,一个是易语言,一个就是中文化的PYTHON,都比较受限,在了解了 Common Lisp 的一些特性后,忽然发现 LISP 是最适合做母语开发的基础平台,强大到逆天的宏能力,具备自定义一种新语言的能力。
[2012-11-16 更新]

经过一番折腾,终于可以在EMACS上使用中文编写LISP程序了,主要是借助了LISP的强大的宏,把《实用COMMON LISP编程》中的一个CD数据库的例子转化为中文,中文代码如下:


可以正常编译、执行,并读写文件。

当前主要问题是语法高亮不太好,具体说就是所有的自定义函数都无法显示为指定颜色,只能显示为默认颜色,看起来不太醒目,所以下一步计划是实现自定义的高亮显示,所有自定义函数都可以显示为不同的(相同也可以)指定颜色,便于阅读区分。
另外一个问题是那些英文参数,是否需要全部转换为中文?正在权衡,暂时选择不转。

[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 结合起来, 就可以为初学者提供一键式的中文编程环境. 不需要任何手动设置!

另外需要考虑的是帮助函数, 帮助文档和基本教程以及中文例程的规划.



转载于:https://my.oschina.net/freeblues/blog/89728

相关文章:

  • 你不懂js系列学习笔记-作用域和闭包- 03
  • Mac 平台下功能强大的Shimo软件使用指南
  • 初学redis分页缓存方法实现
  • Redis 安装及配置
  • chroot 命令小记
  • Bugzilla安装问题总结-神奇
  • js 原型链(转)
  • 理解PHP中会话控制
  • LAMP架构应用实战—Apache服务介绍与安装01
  • asp.net向页面注册脚本
  • Unity 3D调用Windows打开、保存窗口、文件浏览器
  • Snapchat为Mac、Windows平台推出AR新工具,方便用户创造实景物体
  • 2003系统创建软RAID磁盘阵列完全手册
  • 如何解决临时空间暴增导致磁盘满问题?
  • 网络负载平衡
  • __proto__ 和 prototype的关系
  • CSS实用技巧干货
  • iOS动画编程-View动画[ 1 ] 基础View动画
  • Java新版本的开发已正式进入轨道,版本号18.3
  • Js基础知识(四) - js运行原理与机制
  • Magento 1.x 中文订单打印乱码
  • pdf文件如何在线转换为jpg图片
  • UEditor初始化失败(实例已存在,但视图未渲染出来,单页化)
  • WebSocket使用
  • 从@property说起(二)当我们写下@property (nonatomic, weak) id obj时,我们究竟写了什么...
  • - 概述 - 《设计模式(极简c++版)》
  • 精彩代码 vue.js
  • 漂亮刷新控件-iOS
  • 浅谈JavaScript的面向对象和它的封装、继承、多态
  • 如何用Ubuntu和Xen来设置Kubernetes?
  • 一起来学SpringBoot | 第三篇:SpringBoot日志配置
  • SAP CRM里Lead通过工作流自动创建Opportunity的原理讲解 ...
  • ​io --- 处理流的核心工具​
  • ​TypeScript都不会用,也敢说会前端?
  • #{}和${}的区别是什么 -- java面试
  • #Linux(帮助手册)
  • (1)安装hadoop之虚拟机准备(配置IP与主机名)
  • (delphi11最新学习资料) Object Pascal 学习笔记---第2章第五节(日期和时间)
  • (Git) gitignore基础使用
  • (TOJ2804)Even? Odd?
  • (zhuan) 一些RL的文献(及笔记)
  • (多级缓存)缓存同步
  • (二十四)Flask之flask-session组件
  • (附源码)springboot助农电商系统 毕业设计 081919
  • (十二)devops持续集成开发——jenkins的全局工具配置之sonar qube环境安装及配置
  • (十一)手动添加用户和文件的特殊权限
  • (一)ClickHouse 中的 `MaterializedMySQL` 数据库引擎的使用方法、设置、特性和限制。
  • (中等) HDU 4370 0 or 1,建模+Dijkstra。
  • (转)程序员技术练级攻略
  • (转)创业的注意事项
  • (转)大型网站的系统架构
  • ./mysql.server: 没有那个文件或目录_Linux下安装MySQL出现“ls: /var/lib/mysql/*.pid: 没有那个文件或目录”...
  • .java 9 找不到符号_java找不到符号
  • .mat 文件的加载与创建 矩阵变图像? ∈ Matlab 使用笔记
  • .Net高阶异常处理第二篇~~ dump进阶之MiniDumpWriter