引言
有一门新的程序设计语言叫做Zig,这是一款新式语言,其目标是简化系统开发。Zig语言以高效和功能丰富在圈内流行,被称为C语言的现代化继承者。
而这门编程语言是由程序员安德鲁·凯利(Andrew Kelley)所开发,目标为克服在C语言编程中常见的困难和风险,特别是内存指针和代码安全等方面。
Zig语言力求为程序员提供一种可靠又现代的编程方法,同时又不牺牲开发者对底层硬件的控制又要保持高性能的较高期望。
大家知道,C语言出现的几十年来,一直是系统级编程的基石,有不少后来的编程语言都想“颠覆”它,但都没有成功。但是,自从Zig语言推出后,以它独有的简洁性、高效性以及易用性,赢得了不少开发经验丰富的程序员的青睐,还引来萌新的小白来学习或开发新项目。
接下来,我就来讲述凯利和他的Zig的故事。
早年经历
安德鲁·凯利在少年期间就开始接触编程。
他曾在洛克希德马丁公司(Lockheed Martin)实习,期间对 Stack Overflow 的推出表现出极大的热情,并积极参与内容产生和技术贡献。
音乐工作室项目
安德鲁·凯利先在一家在线交友网站 OkCupid 从事后端开发工作,他负责维护一个庞大的 C++ 代码库。这个代码库完全可以一坨来形容,极其混乱,他在里面费力的阅读,一边抽丝剥茧般梳理里面的逻辑,然后小心翼翼的修改代码。
除了网站项目,他后来又参与了一个名叫"创世纪数字音频工作站(Genesis Digital Audio Workstation)" 的音频处理项目,用来录制、编辑和制作数字音频,比如音乐创作、播客等内容,是现今也流行的音乐创作系统。
安德鲁努力推进着项目,也从中体会到了发明创造的价值。同事们总是劝他“别搞什么发明创造,改改能用就行了”。但他觉得发明创造才是正确的选择,他说如果你真的想要有控制力,就必须自己去做。
从那时起,他开始真正地从零开始用C或C++编写程序。
从此,安德鲁·凯利愈发地斗志昂扬。他发现实时音频处理很有意思。这个项目也是采用 C++语言编写,他结合两个项目的痛点,诸如构建系统复杂、交叉编译困难、内存管理缺乏、内置无安全保障以及代码混乱难以维护等C++语言的优点与局限性。
这些棘手问题或Bug在他手里一个个迎刃而解,问题的答案和经验积累。
分手的激励
很多人在接手其他人的项目后,或多或少都有想重写的念头。安德鲁也是如此,他坚持开发维护音频播放器项目很长一段时间,也不只一次想重写项目。
在这个阶段里,他经历了一段艰难的人生时期。
当时,女朋友和他正式分手,为了排解痛苦,安德鲁告诉自己:“我知道你一直很自律,坚持做同一个项目很久了,去享受一下吧,开始一个新项目,学习一门编程语言。这对你会有好处。”
安德鲁仍然觉得痛苦。有一天早上醒来他自言自语道,既然情感上的自然发展过程已经结束了,那么搞一个能分散注意力的玩具项目也不错。
安德鲁还很喜欢比玩马里奥赛车之类的游戏,一玩就四五个小时。
他心里想,我要做点正事。于是,他将赛车游戏抛到脑后,开始了他的计划,就再也没有回头。
酝酿编写新语言
安德鲁在上班时,每次听音乐的时候,总是在想,如果自己尝试创作一首这样的歌会是什么感觉?
他在大学的时候上过一门课叫《编译原理》,还开发了一个编译器,感觉超级棒。后来他还研究过一个 CoffeeScript 的代码分支,虽然带着玩的想法鼓捣,但安德鲁从中获得了不同的东西。
为了忘记失恋的痛,安德鲁跑了人生中的第一个马拉松,但他感觉自己好像没跑完。最后四英里走了起来,但感觉像是撞墙了。他看到大多数人都这样,结果他在年龄组里排名前50%。他感觉就像没跑完一样。有一些缺失感,还是什么,他心里也说不清楚。
安德鲁对自己写的编译器一直都有这种感觉,他以前只是改的 CoffeeScript 那样的编译器,实际上输出的是 JavaScript,而实际上应该输出的应该是机器二进制码。他想:“不,我要让它真正生成二进制,让它完成所有步骤。我不想再偷工减料。”
虽然他学过编译器,也研究过编译器。但他觉得自己并没吃透,并且好像错过了一些有趣的部分,他要亲自去体验。
从此,安德鲁在下班后的晚上和周末时间开始研究编写新语言,他努力避免C++里出现的各种问题,同时以C++的编译器架构作为参考。
作者:洛逸
本篇文章为 @ 行动的大雄 创作并授权 21CTO 发布,未经许可,请勿转载。
内容授权事宜请您联系 webmaster@21cto.com或关注 21CTO 公众号。
该文观点仅代表作者本人,21CTO 平台仅提供信息存储空间服务。
请扫描二维码,使用微信支付哦。