节日最后一天,没什么事情,想聊聊我对中国计算机技术发展的一个遗憾,为什么我们没有开发出自己的编程语言
1.华为推“智慧养猪”,或许暗示方向有变
近日,华为机器视觉总裁在微头条爆料称,华为机器视觉推出了智慧养猪方案。养殖业的发展方向是数字化、智能化和无人化。此前任正非接受媒体采访时也曾提及养猪,他说:“如果我考不上大学,养猪可能也是养猪状元”。
由于众所周知的原因,因为美国制裁华为无芯片可用,导致华为无手机可卖,在这种情况下,企业靠情怀是留不住人的,最主要的还是活下来。
华为养猪可以说是华为要生存下来的无奈之举,用时间换空间。你可以说华为的智慧养猪采用了全新的5G,AI等先进技术,但是那毕竟对技术要求不高。
这就像自动驾驶,虽然有人说自动驾驶应该先用在农业耕地上面,等成熟了再推广到城市道路上,但是毫无疑问,农业对无人驾驶要求远远比城市的低很多。没有太大参考意义。
2.方舟编译器暗淡,中国推自己的编程语言前途渺茫
方舟编译器是华为推出的首个完全自主研发的编译器平台,于2019年8上线。他包含编译器、工具链、运行时等关键部件。
在发布方舟之前,方舟说自己编译的App比Google的快。
也许多少有点宣传的噱头,导致知乎上有很多人讨论方舟编译器。
赞扬支持者有之,冷嘲热讽者有之
总之,方舟编译器轰动一时。
在我看来,方舟编译器的重要性不亚于鸿蒙操作系统的推出。
编译器有了,如果华为想推出自己的编程语言,就会水到渠成。
射人先射马,擒贼先擒王。如果没有自己的编译器,想做自己的操作系统无异于水中月,镜中花。
但是,随着华为出售荣耀手机,华为推智慧养猪。。。
这些都让方舟编译器前途暗淡,让中国推自己的编程语言前途渺茫。
3.再论编译器的重要性
编译器,简单的说,就是打通高级语言和硬件芯片的桥梁。这里引用知乎上“养猫的哈士奇”的一段话来说明编译器。
编译器是很基础的软件,不过已经很多年没有冒出新的编译器了,技术也很成熟了,华为为什么要搞一个方舟编译器呢?当然是为了编译程序使之更好的运行了。多数人都知道JAVA是一个跨平台的编程语言,为什么JAVA可以跨平台呢?这就是JAVA虚拟机(JVM)的功劳,JAVA语言其实是通过JVM来运行的,JVM与各个平台之间做了适配,其实跨平台的是JVM,Android的ART虚拟机是一个特别的JVM。
在计算机领域没有什么问题是不能通过增加一个间接的中间层来解决的,JVM就是这样的中间层。很多人会问Android 的APP需要跨平台运行吗?现在来看不需要,那Google为什么选JAVA作为开发语言呢?可能有很多因素的考量,但是谁也没有想到SUN居然被著名的专利流氓ORACLE收购了,即便Google把JVM改写了好几遍也依然没躲过这个专利官司,
真正的大公司还是要有自己能完全控制的编程语言呀。
也正是因为此,微软推NET/TypeScript语言,谷歌推Go/Kotin语言,苹果推Object-C/Swift语言也就在情之中了。
一句话:卧榻之侧岂容他人鼾睡,最重要的核心技术必须自己掌握
4.现代流行编程语言的比较
我们摘录了runoob网站上列出的几中编程语言,做一个比较。在下表里,列出了当前最流行的14种开发语言。
注意:像VB基本上被淘汰所以不再加入,而像Django太小众了,所以也忽略了。
可以发现,这些开发语言,美国占10份,日本1份,新西兰1份,加拿大1分,荷兰1分。
事实上,Ruby也不怎么流行了,R语言主要用于教学,受众小。再去掉他们2个 。
最终的结论是:流行的12种开发语言,美国占了10份,新西兰1份,加拿大1分,中国的是0。
5.开源了,还需要推出自己的编程语言吗?
一个常见的问题是:现在编程语言甚至编译器都开源了,还需要开发自己的开发语言吗?
例如现在的Go语言,Swfit,Kotin,以及微软的.NET,也都早已经公开了自己的源代码,还有必要在乎这个语言是自己的还是别人的吗?
我们常说:一流的企业卖标准,二流的企业卖品牌,三流的企业卖产品,四流的企业卖苦力;还是要开源的 (这就像TikTok,TikTok数据存美国,使用人是美国,雇佣的人也是美国,但是美国还是不放心,要求出售他)
1)开源是手段,不是目的
我们认为,现在的开源是手段而不是目的。也就是开源是为了占用市场率,吸引更多开发者,而不是真的为了开源而开源。
如果说的更直白些,我不认为微软真想开源NET,谷歌想开源Kotin,苹果想开源Kotin。
毕竟那些代码都是自己的工程师辛辛苦苦写的,干嘛要无私奉献开源出来?企业又不是慈善机构。
心里不愿意但是身体很诚实,不开源会让使用者担心代码后没有留有后门,有没有BUG等等,
而开源了,还可以广纳天下人才为我所用,有漏洞也能及时解决,何乐而不为。
2)有些最核心技术未必真的开源
很多开源确实是为了共享,但是有时候最核心的未必公开。例如视觉图片处理开源软件OpenCV,公开了很多代码,但是对于一些最核心
的代码,他是不开源的。
3)免费的未必是最便宜的
我们都喜欢免费,一个常见的营销是手机,想要0元就可以拿到XX手机,心动了吗?心动就来那吧,可是当你买时才发现,0元手机的前提是每个月至少消费200元,
而且至少要签订24个月。所以,免费的背后有时候是更大的消费。
4)开源协议受限
开源了免费的,不代表可以无限制使用。最直接的例子是芯片的RISC-V是一个基于精简指令集(RISC), 对指令集使用,RISC-V基金会不收取高额的授权费。开源采用宽松的BSD协议,
企业完全自由免费使用,同时也容许企业添加自有指令集拓展而不必开放共享以实现差异化发展。
但是,当美国制裁华为时,你就会发现,此时就算是开源的可能你也无权使用。
6.中国为什么产不出自己的开发语言?
1.中国市场足够大
每年的雨水季节,非洲草原植物生长茂盛,食草动物大量繁殖,这时食物充沛。因为食物太多了,狮子对走过身边的羚羊已经没有兴趣。
这可以简单解释为什么中国产不出自己的开发语言。
中国市场太大了,做底层开发(例如开发语言编译器,设计一套编程语言)太辛苦,吃力不讨好,还是做App赚钱快。
不管是拼多多还是美团饿了么,甚至包括阿里腾讯,不用太为钱发愁。
例如中国14亿人,一人给你一元钱,看起来没多少,但是合起来就是14亿。
这么大的市场可以让中国的巨头活的很好。
但是,美国就不一样了,美国才3亿多人口,而且美国的巨头比中国的大很多,那里养活不了这么多巨头,
因此一方面对外进行全球扩张,一方面对内互相攻入对方的地盘。
2.政旨与语言因素
中国的互联网确实阻断了很多国外优秀的技术网站,使得在中国发布的新的技术很难推广的全球。
难易引起国外开发者的注意。
可能语言也算一个,毕竟英语是全球通用语言。在上面的流行语言里,除了日本的,基本上都是说英语的国家。
7.补充问一个简单的问题: 根号2等于多少?
问一下,根号2等于多少?在.NET里,提供了Sqrt(2)就立刻知道了结果,但是具体怎么实现的?.NET里直接给出二行代码:
[MethodImpl(MethodImplOptions.InternalCall),ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)] public static extern double Sqrt(double d);
也就是,他是调用操作系统级的Sqrt函数,但是操作系统怎么实现的就不知道了,
而且,操作系统实现的方法是不是最好的最优的方法,也不知道。
如果自己开发一个编程语言,想要效率更高,可能就要你自己实现Sqrt方法,而不是直接调用底层的Sqrt。
附:关于人口的一些隐忧
2020年,中国公布的生人口数据为1003万,与2019年1465万出生人口相比,断崖式下滑。
而且,长远看,中国人口下降是必然。
过去,中国互联网之所以成功,最根本的原因就是人口多,市场广。
当人口下降后,市场缩小,就可能会出现竞争激烈的情况。
这或许会逼迫一些国内厂商开发自己的编程语言。