编程语言发展 & 中文编程的相关讨论

背景

不知道为什么最近知乎上经常能刷到中文编程的前景如何的,本来不想浪费时间回答这种问题。但看到太多不太动脑子就回答,就像不动脑子就说鸿蒙不是安卓套壳一样,实在难以理解。

我不是计算机专业,没有完整地了解过计算机组成原理,但是电子信息工程稍微知道一些,因此用词、逻辑不一定十分准确,欢迎指正,但请勿杠。

历史

机器指令码:众所周知,CPU 作为电子设备的计算核心,是用逻辑门也就是电子元件的通电与否来表示状态的。通过海量的元件组成了计算逻辑,对于我们来说就是 0 和 1 的二进制。在编程界叫做机器指令码。日常写代码时用 16 进制表示。当年比克盖茨就是靠给别人写机器码,输入计算机来赚钱的。

网上随便找的图,应该是某程序反编译回来的机器指令

汇编语言:随着程序越来越复杂,这些指令是在令人难受。于是有人用机器码写了一个程序。开发者将简单的英文字母输入到这个程序里,这个程序就会将这些英文字母转换成机器指令来执行。

依旧随便找的,汇编语言的简单程序。

高级语言(C/C++):汇编语言也很复杂,因为指令简单所以写起来复杂。而且,上述语言对机器 CPU 指令集有着极强的一致性要求,同一段程序放在不同的 CPU 上,是不能正常运行的。第一个高级语言叫做 FORTRAN,目前依旧在使用。但是由于离我们不叫远,不多介绍。随后,1969 年,B 语言诞生。但由于其没有数据类型的概念,无法表示字符等信息。随后,1971 年开始,改进后的 C 语言诞生了。这也是目前大部分高级语言的底子。相对于前两者,C 语言的特性就是用比较自然化的指令去描述程序,通过不同平台的编译器,对不同 CPU 进行了跨平台兼容。也就是不需要修改程序就可以运行程序了。C 语言的工作流程,就是代码检查.c-编译为汇编语言.o-将不同依赖链接到一起生成可执行文件。C 语言上到自然语言,下到内存汇编,因此很多操作系统也是用 C 语言写的。C 语言是面向过程的语言,跟汇编、机器指令一样。后来随着工程量变大,结构变复杂,又出现了 C++这种面向对象的编程语言。不展开了。

高级语言(Java 等一切日常看得见的语言): C 语言是可以直接操作硬件的。。而且内存回收等机制不完善。给了开发者很大的自由,也就给了开发者很大的错误空间。C++本质上是 C 语言扩充了面向对象的功能,上述说的也没有完善。并且其本身也不是完全面向对象的。此外,对不同机器上 int 长度不同这种事情也是个问题。因此,更多的语言逐渐诞生了。首当其冲就是 Java,前身是 Oak,现在的实现是,利用 C++在不同的平台上编写 JVM 虚拟机,将 Java 编译成虚拟机可识别的字节码来运行。也可以说是跑在 C++上的语言。借此,Java 成为了第一个一套代码全兼容的开发语言。 当然,说到自然语言,没有比 python 更直观的语言了。不过,像 python、php 这种语言,底层均是由 C 语言和汇编语言组成的。这也就是为什么源码编译(也就是 C 语言的编译过程)一定要有 GCC。他们的标准库、各种库都是由 C 语言/C++写的(比如 php 扩展)。由此我们才说这些语言是基于 C 语言的。像 Java 运行起来已经看不到 C 语言的影子了。 golang 属于比较特别的。其实它最初的底层也是 C+汇编。不过随后,开发者用 go 语言实现了 gcc 编译器的功能。也就是说,它可以用自己的编译器编译自己的代码,也就脱离了 c 语言,实现了“自举”。C 语言也是当初汇编语言写出后实现的自举。

现状

上面比较简单地说了一下目前的语言和发展过程。现在的语言基本都是开源的,比如 python、php、go 等等。我们写代码时,所谓的复制粘贴,更多的是在网上找开源的库避免实现同一复杂功能。因此,各流行语言都有自己的包管理工具,比如 python 的 pypi、go 的 mod、php 的 composer(这个不是官方,官方应该是扩展 pecl)、swift 的 swift package manager 等等。通过设计模式和业务相结合,利用各种工具带来的便捷,实现了各种各样的功能。

那么问题来了:中文编程现实么?

先说结论,也是必然:不可能。即使有,也只是昙花一现,获取不了正常的开发者。

为什么中文不能作为编程语言

先看一个网站:https://www.wikihow.com/Create-a-Programming-Language

不好意思又是英文的。

听着有些难受,但是,上述的内容,都是外国人做的。当然,随着开源的进程,我们国内的开发者对各种语言均有不同程度的贡献。

我们现在知道了目前流行语言编程的步骤,其语言的语法结构、产生模式,那么设计一门编程语言,是不是轻而易举了呢?

高级语言层

在这里用高级语言去代表 C 语言除外的高级语言,以便于区分。

这层是必然可以实现的。有一个叫做易语言的东西。我没用过。据百度百科介绍(看起来也是易语言公司的人写的),其支持可视化编程、多语言兼容等等。其实无非是 VB 套壳,可以调用其他语言的可执行文件。本质不能算是目前讨论的编程语言。而且这属于一个公司的一个产品,要收费的。

此外,其实利用中文写代码,通过 gcc 的编译器翻译成汇编(编译型语言),或者直接调用 C 语言编写的的扩展库(脚本语言)来实现功能,这个是可行的。不过在不同机器上,就要考虑编码问题。我们也知道,计算机目前的字节编码已经从 ASCII 过渡到 utf8 了。其目的就是为了兼容 unicode 字符,也就是除了英文、数字和常见标点符号之类的内容。这会是写这个编译器比较复杂的地方。而且,编译器将会有大量的英文代码用来将中文转成英文。如果这是这些人所谓的编程语言,那你们赢了。

C 语言/汇编语言

单说编码问题就不现实…

u 还是上面的问题。utf8 是占多字节的,汇编语言是不可能将中文直接转为字节码的。

机器语言

机器语言本身就不存在语种的问题。不过我们平时表示的时候会用十六进制表示,比如 0xfa,其实机器识别的还是二进制,十六进制只是一个易于阅读的表示方法而已。这里如果你愿意用中文表示那就随你了。。

日常认知

最简单地举个例子,以下是一段最简单的 C++代码:

1
2
3
4
5
6
7
8
9
#include<iostream>

using namespace std

int main()
{
    cout << "Hello, World!";
    return 0;
}

如果直接用中文表示是这样的:

1
2
3
4
5
6
7
8
9
提示包括标准库输入输出流

使用 命名空间 标准

整型 入口函数()

    输出以下内容  你好世界”;
    返回 0

如果按某些人说的,按我们中文的语义进行翻译的话:

1
2
3
4
5
6
7
使用出入流这个库

使用标准这个命名空间

叫入口函数并且不接收参数返回整数的函数如下
你好世界传递给标准库里的输出函数
然后函数结束正常返回

不知道各位想看到的是哪种写法呢?

换一个所有语言都有的循环,

1
2
3
4
5
6
use "fmt"

for(var i=0; i<10; i++)
{
	fmt.Println(i);
}

中文:

1
2
3
4
使用库《格式化》

对于(定义循环标志为0,当循环标志小于10的时候,每次循环结束后循环标志加1
使用格式化库的打印方法输出循环标志

以上。我已经尽量语义化了。

这是你们想要的中文编程吗?

如果有人想说“是”的话,那接下来,请问单纯说最后一个循环的中文,怎么写在你的编辑器里?

1
2
3
4
shiyong1ku  geshihua

duiyudingyi xunhuan biaozhi wei20dang xunhuanbiaozhi xiaoyu 10deshihoumeici xunhuanjieshuhou xunhuanbiaozhi jia1
shiyong geshihua ku de dayinfangfa shuchu xunhuanbiaozhi

以上。

好玩吗???

一帮不会编程的人在那做梦,疯了?

请问你打算在写这段文字的时候是用英文开发的搜狗拼音输入法还是英文开发的微软拼音输入法呢?

结论

有人喜欢乱扣帽子,比如以下:

我的回答是这样的:

这 zz 给我的反驳是这样的:

链接在这:https://www.zhihu.com/question/512297310/answer/2318423686

这位自己的回答是这样的:

是否为计算机专业与学习英文有任何的关系吗?编程中出现的英文,别说四级,但凡有能力考上全日制普通大学都知道是什么意思吧?

之前怼过的话我就不再重复了。接下来是教学时间:

截止到目前,所有的编程语言中都有以下关键字:

for、while、if、else、return。

普遍出现的有:

int、string、float、double、var、let、const、null、class、func(tion)、struct、use、print、do、try、catch、finally、foreach、range、public、protected、private、extends、implement、interface、trait、override..

这已经包含了大部分语言的大部分关键字了。

连超过 10 个字母的单词都没有哎,学不会?

有人好像会说,我们中国人就要有自己的编程语言。

如果你能发明真正的中文键盘,重设计中文汇编语言、中文指令集定义、再上升到高级语言、编译器,适合所有人的中文语法结构,你牛。然而即使真的设计出来了,谁会采用?谁会为了你这个独树一帜的想法买单,抛弃原有成熟的架构、语法、库,从复杂的中文中选出合适的字词当作关键字写代码来为了你们骄傲?

有需求才会有市场,在现今相对饱和,完全满足当下需求的开发界,要搞中文编程,对此,我只想说仨字,闲的。

1
2
3
4
5
6
7
8
9
// 东北话版hello world

给我整个个打字儿的

再给我整个差不离儿的流儿

开整吧
给我整个世界
整完了,再见