文档章节

为啥不该有中文编程

开源中国驻成都办事处
 开源中国驻成都办事处
发布于 2015/06/11 22:15
字数 774
阅读 54
收藏 1

大清早看到论坛有人评论国内技术说弄个中文编程看看,有感而发说几句。

国内早在十年前就有人搞过,现在也有,比如易语言。现实情况是很不成功,没有什么开放出来的项目说我用的是中文来编程。为什么呢?

麻烦

对于一个简单的标识符,用阿拉伯字母+数字+下划线比中文简单很多。比如定义一个临时变量:

int i = 0;

改成中文,可能成了

整数 哎 = 0;

要是区分下整数位数,有无符号,那就更麻烦了。类似地

uint_8 i = 0;

改成中文,可能成了

无符号八位整形 哎 = 0;

语言进化的方向就是抽象。抽象能够用简单的符号表示复杂的实际内容。u代表了无符号,8代表了8位长度。这就是一种抽象。

除了输入麻烦,还有一个麻烦事。你写的代码怎么存储?存储也麻烦。可能碰到过打开一个源文件,代码是正常的,但是中文注释变成了乱码。阿拉伯字符基本上所有的字符集都能够近乎一致地表示,但是中文这样的宽字符就不一定了,换一个编码就认不出来了。麻烦不说,占用空间也多了。用信息论来讲,这种编码效率就是低,人家8字符可以解决的你非得来16字符。

不是通用语言

这个是指代码本身应该是跟人使用的语言是无关的。因为代码是解决问题的,解决问题的方法是任何人都懂的,跟人使用的语言无关。一句话,只会阿拉伯语的人写的代码拿给只会中文的人看,刨除应用背景,阅读起来应该是完全没有问题的。因为编码是解决问题的思维固化,固化出来的表示形式应该越通用越好。为啥呢?如果中间再加入母语,转换过程就会有信息丢失。

这样看来,能够适合来描述代码的语言,肯定需要大家都理解认识。阿拉伯字母和数字无疑是唯一选择。

无意义

代码本身是一种上下文无关的文法。文法中的符号集(非终结符和终结符)不是最重要的,重要的是产生式。就是代码中的各种语法规则。中文编程无非就是替换了一下文法的符号集合。产生式没有任何变化。这种变化本身就没有多大的意义。

现在想来,这种语言初衷是帮助不懂英语的人也能写代码,但实际上编程对英语的要求低,你要是只会26个字母完全就够了。另一方面,现在小朋友都会讲几句英语了,原始的初衷也就不成立了。

© 著作权归作者所有

共有 人打赏支持
开源中国驻成都办事处
粉丝 84
博文 287
码字总数 335913
作品 0
成都
程序员
android ListView条目中TextView隐藏到显示时的测量

觉得ExpendableListView挺好用,但是就是代码复杂了点,我一时半会理解不了,于是就直接自己写个效果来实现。先来看一下expendableListView中展开的动画效果: 然后我模仿此效果,建立如下的...

tnjin
2015/09/08
1K
6
用中文编程,就不用学英语?我保证你会更头疼!

首先大概的看一下中文编码: 你以为会写中文写编程就简单了吗?这就像你以为会写汉字就会写出好文章一样。编程是和机器沟通,因此要用机器的语言而不是人类的语言。 最早的程序就是0和1的数字...

西安北大青鸟官微
07/07
0
0
开源电子书

目录 语言无关类 操作系统 智能系统 分布式系统 编译原理 函数式概念 计算机图形学 WEB服务器 版本控制 编辑器 NoSQL PostgreSQL MySQL 管理和监控 项目相关 设计模式 Web 大数据 编程艺术 ...

zting科技
2017/12/11
0
0
如果编程替换成中文就会怎样? 程序员看了表示头疼

如果编程替换成中文就会怎样? 程序员看了表示头疼 2018-06-20 17:50编辑: garace分类:程序人生来源:代码湾 代码编程中文代码 招聘信息: C++工程师 Cocos2d-x游戏客户端开发 iOS开发工程师...

garace
06/20
0
0
Fanta/free-programming-books-zh_CN

免费的编程中文书籍索引 免费的编程中文书籍索引,欢迎投稿。 国外程序员在 stackoverflow 推荐的程序员必读书籍,中文版。 stackoverflow 上的程序员应该阅读的非编程类书籍有哪些? 中文版...

Fanta
2016/11/14
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

jquery创建类似于java的map

var map = {}; // Map map = new HashMap(); map[key] = value; // map.put(key, value); var value = map[key]; // Object value = map.get(key); var has = key in map; // boolean has = ......

SuperDabai
36分钟前
0
0
java大数据转换16进制转10进制

public static void main(String[] args) {String hex = "0xdbf3accc683297cf0000";BigInteger amount = new BigInteger(hex.substring(2), 16);System.out.println(amount);......

任梁荣
昨天
2
0
OSChina 周六乱弹 —— 目测我们程序员丁克的几率不大

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @真Skr小机灵鬼儿:8.13分享Jocelyn Pook/Russian Red的单曲《Loving Strangers》 《Loving Strangers》- Jocelyn Pook/Russian Red 手机党少...

小小编辑
昨天
9
3
TypeScript基础入门 - 函数 - 剩余参数

转载 TypeScript基础入门 - 函数 - 剩余参数 项目实践仓库 https://github.com/durban89/typescript_demo.gittag: 1.2.1 为了保证后面的学习演示需要安装下ts-node,这样后面的每个操作都能...

durban
昨天
1
0
OpenCV边缘检测算子原理总结及实现

1. 拉普拉斯算子 原理:是一种基于图像导数运算的高通线性滤波器。它通过二阶导数来度量图像函数的曲率。 拉普拉斯算子是最简单的各向同性微分算子,它具有旋转不变性。一个二维图像函数的拉...

漫步当下
昨天
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部