中文编程的路该怎么走?
说起来,我关注程序和编程,是从小学时姑姑家买了电脑,我把玩后开始感兴趣的,
然后是初中毕业,想找到一条生存路,开始研究程序世界,但遇上了互联网铺开和娱乐至上年代,
后面读了个大专学软件工程,但屁用没有,老师完全不教编程相关,竟然还教毛概,大数,大语等半点关系都没有的,
还要考试,我那会儿就开始反思中国的教育是不是出问题了,
之后,自然地,毕业即失业,一直打散工,直到16年开始关注中文编程,一直找了这么多年,
寻觅过很多道路,其中也遇到过一些道友,发现都无法精准命中中文编程的痛点,即中文编程的出路在哪里,
时至今日,中文编程尚处于萌芽状态,从吴涛的易语言到现在,可以看出,中文编程既没有PL理论,也没有建立出什么实际的程序生态和编程生态,更别提基于共识起草标准了,所以中文编程这个事业,还是一事无成的零蛋,
程序的本质就是,从零凭空构造一套系统,看起来脱离实际,其实它紧密围绕世界的实际逻辑建立,即策略、模式匹配、算法等概念描述的一个抽象对象,
我观中文编程的现状,得出一些肤浅的分析结论;
它从上到下(顶到底),或从下到上,都行不通,因为这些已经是西方软件工程建立了半个多世纪的壁垒,
其体系和生态已经非常庞大繁杂,所以现在入程序行业的人,一般都是加入他们,
这些人秉持的理念是打不过就加入,而非独立自主搞自己的,毕竟像倪光南和吴涛这样有骨梁的在一个群体里始终是少数,
所谓从上到下,就是从应用层到指令系统,应用层就是生态,生态每天都在产生海量的库,
无论是汉化它还是使用它(这个使用是指生产者实施者)都是南辕北辙,只会疲于奔命地跟着西方的屁股跑,
而从下到上,看似简单,实则壁垒高到难以想象,西方人在最基本的东西里穿插了技术墙,
比如指令系统,就是指令集,我用的是x86,我想找到指令的机器码,我发现它根本没有固定的0101构成的机器指令,
因为它是CISC,所以它的指令是动态编码的,我想做一个x86的汇编器,我需要看懂它的说明书,
还要会一门静态编译性语言,而这两样对一个非专业的普通人来说就像天书,
其说明书,要看英文是基本的,其技术性的词汇和描述,和带有文法陷阱(俚语,惯用口语)的句子和缩写,
是壁垒和技术墙的双重压制,而静态编译性的语言一样有这个问题,更别提破解静态编译语言的编译器,
比登天还难,这一系列就像三体里的质子,从最基本的规则中锁死我们在这个领域的发展,
拟人比喻就是,削掉你的头和四肢和五脏六腑,只留十个手指和血管连着,让你只用手指为西方的软件工程生态添砖加瓦,
通过血管输送养分供养西方程序生态,现在加入的那帮人就在干这个事,并且他们还有优越感,
当然,现在有开源的RISC-V可供选择,它有固定的0101机器指令,写汇编器应该没那么难了,
但我没有基于它的CPU和整机,所以我无从下手,
经过上述分析,和平日里的反思,我找到的路就是虚拟机这条路,
虚拟机指语言虚拟机,不局限于某种指令系统和处理器架构,也不局限于某个操作系统,
因为它是一台虚拟的机器,是对图灵机或冯氏结构的虚拟化,用软件和程序来模拟,
当前只有这条路可走,它能破解从上到下还是从下到上的问题,jvm字节码和llvm中间码就是这种产物,
我以前没注意到这条路的可行性,但现在我发现虚拟化才是中文编程真正可以实现和走的路,
有人要说龙芯,但龙芯的指令系统和处理器架构,一是继承自西方体系的指令集和设计理论,二是为了接西方体系的轨,
而非真正的独立自主,它没有真正意义上的从零的汇编器和编译器,大家可以去看它的官方文档,
龙芯的目的还是为了供养西方软件生态,因为他们想从西方生态里分一杯羹,所以龙芯从源头的路就是歪的,
所以中文编程想要拥有自己的硬件生态体系,那就必须要完全从零设计指令系统,和由此而生的PL理论和汇编标准,
以及,适应这套指令系统的电路,IC生态,等等,
当然,我们现在热衷中文编程的道友,不奢望硬件生态,因为那实在可望不可及,
所以我们只能搞搞中文编程的软件生态体系,通过语言虚拟机来构造中文汉字程序生态这个上层建筑,
经过这么多年的热衷探索,中文编码标准在冯氏结构里是一个全面性被打压的问题,
冯氏结构有5大部件,分别是[运算器、存储器、控制器、输入、输出],这不单单是硬件电路使用了这些概念,
冯氏结构是一种理论,它在软件和程序里也是可以应用的,编程语言的功能清单里,不但包含了基于5大概念构造的功能,
比如数组,变量,流程控制. 还有基于这基本概念构造的复合功能,比如结构体,函数.
还有文件系统也有5大概念的本质,输入法也一样,例子太多不列举,
如果光是寻觅编程语言的编码,其实是南辕北辙,真正应该研究的是冯氏结构概念实例化后的编码和指令系统的字符编码,
方能深入破解中文编程编码标准的根源,
中文字符编码不单单只局限于输入和输出,大家明白吧,
基于上述分析,若要搞中文编程的语言虚拟机,第一步是设计基于中文汉字的指令系统,
用汉化的方式写虚拟机是基本要求,即标识符就得是中文汉字,设计虚拟机所用的冯氏结构概念得用中文汉字编码,
这样就可以从源头用中文汉字封装冯氏结构概念为基本编程组件,
那么用这样的语言虚拟机建立的上层建筑,比如汇编器,PL理论,编译器,输入法等等基础设施,才能完全是基于中文汉字的,
也就不会遇到编码问题,
说一个歧视性的问题,UTF8是对Unicode的再编码,当它编码汉字的时候,大多是用2-3个字节来存储汉字的,
每个字节8位二进制(一个字节),也就是说存储一个汉字要有16位-24位二进制,大家考虑下,16位甚至24位二进制可以代表多少个状态了?
常用汉字3000-5000个,也就是说最多只需5000个状态,所以要存储汉字12位-16位是完全够了,
甚至康熙字典都能全部存储下来,而UTF8是为了适应拉丁字母的排位而设计的,字母在UTF8码表里享有第一优先级,
字母大多是用8位二进制编码的(一个字节),所以UTF8编码算法是未满256个状态之前存储字母,超过256个状态的字符,
就用16位甚至24位二进制来编码存储,故意增高非拉丁字符的存储成本,让非欧罗巴文明的种族觉得自己使用的文字低人一等,
而UTF8是现在软件程序互联网打印机反正就是信息传输、存储、处理的事实标准,
大家仔细想吧,为啥不是UTF16流行或干脆Unicode本身流行?为啥非得定义8位二进制 = 一个字节?一切都是为了西方优先.
要搞中文编程,其实首先应该解决中文编码的问题,然而却没有任何人反思这一点,
当然,UTF8也是可以用,就是成本和代价高了亿点,自然就由大家来全体承担了,
还有一个,PL理论不是非得用龙书虎书鲸书那一套编译理论,并且,除了图灵机以外还有一大把计算理论,
但是当你打开搜索编译器相关的时候,出来的几乎全都是"词法分析""语法分析""代码生成"那一套,为啥?
因为被降维打击了呀,因为"加入他们"的那部分人在十多年前就开始带节奏了,典型的比如轮子哥,
中文编程的生路难走至极,但走出来就可以日月换,
生态的问题不是一个人能解决的,打破封印需要破解者,而非归顺者,
-----------------------------------
我终于明白了为啥中文编程这么难,受到西方施加的壁垒钳制,昂撒人果然是专门搞了一个技术墙来挡住我们的发展,
最近在Windows上练习cpp的时候,我发现即便是用支持UTF8的终端来输出,一样显示乱码,
然后我又专门测试了char 和 string 两种数据类型对中文汉字的支持,
结果是要不就显示乱码要不就是胡乱的图形块,即便是加上小u大U也无济于事,一样的结果,
由此我得出结论是编译器的问题,看来根本问题是编译器不支持Unicode,
源代码在编译器里处理的时候,从本源上不支持Unicode,对UTF8的支持也是半杯水半成品,
我发现8位二进制 = 1字节与char类型还有ASCII是深度绑定了的,在我查阅了cpp的标准文档以后确定了这点,
原来编程这个事从根源上就对中文汉字排斥,编译器有排他的内因,
联想到目前的编译器大多用c或cpp进行开发,例如gcc和llvm,私有的更不必说,
再加上Windows的cmd几乎无法与编译器对非拉丁文输出和谐相处,
而大多数别的C语族编程语言都是基于gcc和llvm或用c和cpp开发,我发现这是把死循环焊死了属于是,
又联想到本国Windows的市占率,昂撒人的野心果然不是盖的,
不过,Linux我还没测试过,据说Linux早就完全从最底层支持了UTF8,希望有人能测试下,
不知道基于c和cpp开发的gcc和llvm能否在Linux上无差别支持中文汉字,
静态编译型语言除了c和cpp,现在也就rust了,我倒是测试过rust,毕竟出生得晚,确实完全支持UTF8,
带有中文汉字的源码编译后运行没有任何乱码,苹果系的编译器和系统没机会测试,不晓得,
,