java
的synchronized、try catch、xxx ? yyy: zzz;
python
的yyy if xxx else zzz、range;
js
的map、sort、`xxx${yyy}zzz`、e=>;
不仅如此,兼容大部分语法包括
Golang、Python、JavaScript和Java;
既可以使用
;
明确表示一行语句结束,也支持大多数场景智能自动分行;
如果把这些好用的功能都“揉在一起”会如何?日前,笔者便发现了这样一个网站(z1h.org),提供这样的语言的下载。
根据作者的介绍,Z1h 是一门跨平台编程语言, 它能轻松开发各种应用程序或服务接口。
Z1h从2019年国庆期间由曾威人开发,并于2020年对外发布了包含Windows、mac OS、Linux、Android、iOS、WebAssembly、树莓派等平台的v1.0.0发行版。
这款语言语法由诸多其他语言发展而来, 包括Go、Java、JavaScript、Python等等。而解释器则由Go实现(Rust版本正在开发中)。
作者强调,对于许多领域而言, Z1h 语言无疑比大多数其它语言有着更高的开发效率. 它提供了灵活的开发语法以及海量并行的支持, 这尤其对于想要快速开发http服务后端的团队和个人而言是再好不过了。
对初级程序员而言, 是一种伟大的语言, 它支持广泛的应用程序开发, 从简单的文字处理到http服务再到游戏。
据作者在知乎上表示,这款语言已经在其公司用在了生产环境。
01
很多人也畅想过这种语言
知乎上有网友提问“如果你们想要自创一个编程语言,你们希望它有什么特色?”,便拥有这样的畅想。
当然,这种问题之前也有人曾经解答过,大概意思就是各个程序在一些功能实现上并不尽相同。
因为其实不同编程语言之间的理念很多是矛盾的,但是又都有它们擅长的场合。简单的举例子,编译型语言在编译期间检查数据类型,因为这样可以生成最优的代码,但是这样会造成不同类型间琐碎的转换问题;解释型语言在执行期根据上下文自动判断类型,这样写代码就简单了,可是效率又不行了。
当然,从上面所举的Z1h语言说起,其实在功能方面,并非一股脑的整合。
有人表示,加入冗余的功能容易产生副作用。不过Z1h的作者对这款语言的评价是,不管稳不稳定,至少在公司上已经实现应用了。
02
还想要什么样的其他编程语言
值得一提的是,还有人表示希望能够有一款语言能够方便使用异构编程,对多核CPU、GPU以及各种SIMD指令,及其所对应的内存显存系统进行抽象,让语言的使用者,不再需要关注(或者至少不需要过度关注)计算机的底层,编译器实现由编程语句到处理器硬件指令的转换。
纵观行业,在摩尔定律放缓,登纳德缩放比例定律和阿姆达尔定律接近瓶颈下,CPU单兵作战并不能满足计算要求,因此出现了CPU+FPGA、CPU+GPU、CPU+ASIC的这种异构计算。而英特尔推出的超算计算机,也是CPU+GPU+FPGA形式。
因此,网友所描述的这种需求,其实是具有着相当实用性的。虽然FPGA厂商们正在努力让程序员们只用一个C就能编好一切,但还缺乏一种语言能够实现这种功能。
还有网友,还奇思妙想“一款AI智能编写语言”。不过,这种大胆的想法并不是什么痴人说梦。
早在之前,谷歌的首席执行官桑达尔·皮查伊(Sundar Pichai)就谈到了“自动编写自己”的软件。根据他的说法,软件1.0时代一切皆由人类码指导计算机,但到了软件2.0时代,拥有深度学习、神经网络的计算机只需命令便可自己编写自己。
当然,懂得中文的AI,或许在后台代码也将变为纯中文。一名Google的高级软件工程师/技术主管便“发明了”一款文言文编程(https://github.com/wenyan-lang/wenyan),万能的define被他玩出了花儿。
03
编程语言都是怎么来的
早期的计算机程序员,大多数是女性手工进行开关切换你敢信?
我们都知道计算机内部是二进制的,而那时候便是使用这种简单暴力的方式,用电路的高低电平来代表“0”和“1”的。
计算机有一个很大的操作空间,通过控制横竖排列的开关,就能完成一组对应的运算。计算完成后,通过观察输出设备(就是一些灯泡)的亮(1)和灭(0),再进行一层转化,就是结果啦。
手工开关要求程序员坐在终端前操作,非常不方便。美国人赫尔曼·霍尔瑞斯(Herman Hollerith)在1880年进行人口普查工作时,发明了基础的利用穿孔卡片收集和整理数据的系统。
其实早在18世纪20年代,法国纺织工人鲁修(Basile Bouchon)使用了一套计算机器能读出的穿孔卡片。1835年,一位名叫查尔斯·巴贝奇(Charles Babbage)的英国人发明了他称作“分析机”(Analytical Engine)的工具,这种“分析机”运行的原理和现代数字计算机是一样的。巴贝奇设想用分析机进行任何可以储存在穿孔卡上指令进行数学运算。分析机会有一定内存,用来存储数据。不幸的是,这样的分析机的大小和火车头差不多,而巴贝奇从未能够从英国政府得到足够的财政支持来制造这样的机器。
将开关需要的状态提前在一张卡纸上描述出来,卡被穿孔或不穿孔就对应开关的开或关状态。
然后用一个机器读取卡纸的指令,再送到计算机。之后还有输出也通过穿孔打卡,程序员拿到输出的卡纸,再进行翻译。这时候的编程虽然已经方便了很多,仍然很繁琐。程序员需要自己做二进制翻译,才能完成跟计算机的对话。
早期的程序员主要是女性,暂且认为这事儿太需要精细操作,五大三粗的男性干不来。而这世上从来不缺伟大的女性!
Grace Hopper姐姐被安排为美国的第一台通用计算机马克一号(Mark I)做程序设计,并在二战后加入UNIVAC开发团队。这位姐姐觉得每天去读写机器码太无聊,她开始研究使用接近英文写作的方式来编写程序,并四处寻求经费,终于发明了第一个编译器A-0。编译器本身就是一个用机器语言编写的软件系统,它能够把英文程序翻译成二进制机器代码,这样完美替代了程序员最不爱做的低级部分。
从此以后,编程语言从低级向高级发展的脚步越来越快。随着计算机硬件的飞速发展,一代又一代充满智慧不断追求高效的计算机科学家们开发出各种高级语言,将更为底层的操作标准化封装起来。编程开始普及,因为高级语言非常接近人类的自然语言,甚至不需要了解计算机的底层原理就可以去完成自己想要的程序。于是乎,还出现了各种图形化编程,比如Scratch和AppInventor。
不同的编程语言有不同的语法和特性,但它们都是图灵完备的。通俗地说就是:所有的编程语言都可以用来实现任意一种算法。
任何语言都是各种语言特征的集合。例如,编程语言就像一台计算机。其品牌可能是IBM、戴尔或苹果。但是,你能说苹果的电脑就一定比IBM好吗?不能。首先你必须了解计算机的配置,例如处理器型号、内核数量、CPU的时钟频率、一级缓存、二级缓存……,内存和硬盘,显示分辨率,还有显卡、网卡等等。有时你还需了解每个硬件的兼容性。
几乎所有的编程语言都包含了几类元素,它们都与“抽象”有关:
编程语言有很多公共特性,因此,我们能够学会所有编程语言的主要原因是:编程语言的概念其实是很有限的。常用的编程语言概念不会超过 15 个:
编程语言的概念基本上是不怎么变的,就像设计原则一样。
编程语言的作者们相互借鉴想法,只是实现不一样罢了。有时候,我们可以说语言 C 是语言 A 和 B 的儿子,那么整个编程语言的家谱可能像这样:
早期的C语言编译器采取了一个取巧的办法:先用汇编语言编写一个C语言的一个子集的编译器,再通过这个子集去递推完成完整的C语言编译器。
到现在,有着无数的编程语言,当然上文所介绍的这款语言,应该是作者理想中的完美语言。
每一门编程语言仍然还是有自己的优点和不足。适合用来处理所有任务的编程语言是不存在的。不过这款工具在实际生产和应用中,或许也是一个不错的选择。
-END-
免责声明:整理文章为传播相关技术,版权归原作者所有,如有侵权,请联系删除
免责声明:本文内容由21ic获得授权后发布,版权归原作者所有,本平台仅提供信息存储服务。文章仅代表作者个人观点,不代表本平台立场,如有问题,请联系我们,谢谢!