撰稿丨千山
在AI 领域,Python/ target=_blank class=infotextkey>Python无疑是最流行的编程语言。而且从近年的TIOBE排行榜来看,这种地位一时还很难撼动。不过在编程语言界,后浪总是层出不穷,不停地向前浪发起冲击。
最近,一家初创公司Modular AI推出了一种名为Mojo的编程语言,声称结合了Python的易用性和C语言的性能,旨在成为Python的超集。一些基准测试显示,Mojo比Python快 35000 倍。
这种语言是专门为在 GPU 等 AI 硬件上编程、运行 CUDA 和其他加速器而设计的。通过内置的自动调优,Mojo针对目标硬件优化代码,提升性能。“解锁AI 硬件无与伦比的可编程性和 AI 模型的可扩展性”是开发团队对于Mojo的发展期待。
图源:推特
值得一提的是,这家公司的首席执行官Chris Lattner也是个神人。这位大神是Swift编程语言的作者,参与了LLVM编译器工具链的共同开发,而且和苹果、谷歌、特斯拉都渊源颇深。
那么Mojo到是否值得期待?新语言到底能否对老牌语言形成冲击?那些小众语言发展现状如何?下文将逐一道来。
有很多正在进行的项目可以使Python更快,比如在机器学习领域崭露头角的Jax,还有出现不久的Python高性能编译器Codon。
与这些相区别的是,Mojo的开发团队指出,他们想要的是一个创新的可扩展的编程模型,并且可以支持加速器和其他机器学习中普遍存在的异构系统。
通过利用多层级通用编译器MLIR,Mojo代码可以访问各种AI调优的硬件功能,例如TensorCore和AMX扩展。因此,对于某些类型的算法,它比 Python 快得多。
同样是在 AWS r0iz.metal-03xl 上运行Mandelbrot算法,Python3需要17分钟,而Mojo只要0.03秒。
目前Mojo仍在开发中,开发者现在可以率先在 Modular AI 基于 JupyterHub 的 Playground 中试用。
关于Mojo的定位和特性,有必要了解以下几点:
1、Python的超集:Mojo是Python的超集,这意味着你不需要学习一门全新的语言来利用它的好处。如果你已经精通Python,你可以很容易地过渡到Mojo Lang。
2、强类型检查:该语言添加了强大的类型检查,这对于优化性能和内存管理的错误检查至关重要。此功能允许开发人员编写更安全、更高效的代码。
3、所有权系统和借用检查器:Mojo包括一个所有权系统和类似于 Rust 的借用检查器,以及支持带有C++等指针的手动内存管理。这为开发人员提供了对内存使用情况的更多控制,从而优化了代码。
4、未来的开源版本:虽然Mojo Lang目前不向公众开放,但它将来会开源。这将使开发人员能够为语言的发展做出贡献,并从社区的集体知识中受益。
Fast.ai 联合创始人、数据科学家杰里米·霍华德表示:“Mojo可能是几十年来最大的编程语言进步。”虽然“Mojo还没有完成”,而且它是由“一个非常小的团队在很短的时间内创建的”,但是发起者Lattner有LLVM和Swift的开发经验,当下的进展“已经很让人振奋”。
有人表示期待,自然也有人表示质疑。
首先,炮火就集中在了那个惊人的“比Python快35000倍”上。有网友认为这就是个噱头,而且在形形色色的编程语言中Python的性能基本都处于末流,就像“跟班上常年垫底的人作比较,没有太大意义”。
再者,这个语言的前景再牛,等到成熟的时候少说还需要十几年沉淀,变数太多。而且早年也曾有Julia会替代Python的说法,结果就是打脸。
不止于Python,这些年试图向C++、JAVA等语言挑战的新生代层出不穷,无一例外均是中途折戟。在编程语言界,“长江后浪推前浪”很罕见,“你爸爸永远是你爸爸”却似乎是常态。
上述结论在Tiobe发布的五月编程语言排行榜又得到了力证。
纵览排行榜,前四的语言并没有太多意外。Python占据榜首,紧随其后的是C和Java。C++虽然屈居第四,但其3.13%的增幅依然领先于其他语言,展现出了不容忽视的姿态。
正如TIOBE Software 首席执行官Paul Jansen所说,“编程语言的流行是相当稳定的”。在榜的前10种编程语言,最年轻的是C#,而C# 始于 2000 年,那也已经是23年前了。
新的编程语言如过江之鲫,但几乎没有一种能进入前100名。
在目前的前100名中,诞生不足十年的语言只有8种:Swift(#14),Rust(#17),Crystal(#48),Solidity(#59),Pony(#71),Raku(#72),Zig(#88)和Hack(#92)。而且这些新生代“佼佼者”的发展时间均不低于5年。
另外,值得一提的是排名第19位的Fortran。作为一门上世纪的科学计算语言,Fortran早已不在主流之列,甚至有很多人都没怎么接触过。但由于近来对数值计算能力的需求不断增长,Fortran又有了回暖之势。如今这个“古董”再次于跻身榜单前二十,不啻于焕发新生。
图源:Tiobe
在编程语言的流行度评测中,新生代难挑大梁的现象并非偶然。
不久前,技术面试和评估平台CodeSignal进行了一项调查 —— 2023 State of Engineer Hiring Survey,以期对对当今技术招聘的全行业趋势进行统筹分析。调查面向的开发者包括前端、后端、全栈、数据科学家、数据工程师。
在2696名受访者中,有78%的受访者将 Python 3 列为他们经常使用的编程语言之一,这也与 TIOBE 榜单的排名保持了一致。在所有岗位中,除了前端最常用的编程语言是 JavaScript/NodeJS(82.9%),其余的职位都将 Python 3 列为最主要使用的编程语言。
而且除了 Python 3,开发者青睐的常用语言普遍都是耳熟能详的老牌编程语言,诸如TypeScript这样的后起之秀尽管有微软这个亲爸爸的加持,存在感还是相对薄弱。
图源:CodeSignal
不过在薪酬表现上,收入最高的编程语言却并不一定是最受欢迎的那一拨。按年薪中位数来看,第一梯队里既有 Python 3,也有流行度不那么高的TypeScript、React 和 Bash。
图源:CodeSignal
从上述统计来看,相较于掌握Java、C、C++ 等老牌编程语言的开发者,使用TypeScript 、React 等新兴编程语言的开发者收入更高。
由此可见,新兴语言在生态上肯定无法与老牌语言抗衡,但在一些特定需求中,反而会因为“奇货可居”而获得更高回报。
新语言成长起来前,注定会作为小众群体进入大众视野,也不怪Mojo的报道下面有不少人都在期待之余保持了冷静——“可能有点东西,但还是过十年再说吧”,前景如何说到底还是要耐心等待。
不过,语言界的新生一辈中也不乏令人惊艳的“天选之子”,我们可以梳理出几个典型。
Swift是一种由苹果公司开发的编程语言,最早于2014年苹果全球开发者大会(WWDC)上亮相。它主要用于开发IOS、macOS、watchOS和tvOS应用程序。2020年,这门兼顾简洁、性能和优美的语言就在TIOBE 编程语言排行榜上闯入前十之列,收获了远超预期的欢迎。
Swift 能如此快地普及,除了有苹果公司的背书外,也在于它借鉴了很多其他优秀编程语言的特性,其现代化的语法和强大的类型系统,可以提高代码的可读性和可维护性。此外,Swift 对于苹果应用的开发者而言同样意义重大。Swift出现后,开发者在 Objective-C 之外,终于有了第二种选择。
Swift 的作者,也就是我们前文提到的Lattner,考虑到Objective-C 毕竟是一门脱胎于 C 的老牌编程语言,无论怎么优化,它身上总是有 C 语言自身的缺陷,语法上也不够现代。不如另辟炉灶,开发一门新的易学易用的语言,如今看来,Swift 虽然没有做到完美,但随着它日趋成熟,在编程语言界也占据了不可小觑的一席之地。
在本月的TIOBE排行榜中,Rust位列17,较上月又上升了两个位次,可以说是稳步发展中。Rust 最早是由Mozilla 员工 Graydon Hoare 在 2006 年创建的一个业余项目。2015 年,Mozilla 发布了 Rust 的首个稳定版本 v1.0 ,才让Rust引起了业内的广泛关注,尤其令人印象深刻的是其内存安全性。
2021年,Mozilla 联合微软、谷歌、AWS、华为四大技术厂商创立 Rust 基金会的消息成为社区热门话题,也让 Rust热持续升温。有了这么多好爸爸,“中途夭折”这种命运估计也不会落到Rust头上了。
作为一门系统编程语言,Rust相较C++来说,更安全也更快速。因为能在编译时检查出几乎所有安全问题,比如内存泄漏、分段错误、二次释放等;性能上也优于C++,接近于 C 的性能。不过Rust的缺点也很鲜明,比如编译器检查更为严格,学习曲线更为陡峭。
最近Rust的新闻不少,微软正在用 Rust 编程语言重写核心 windows 库,这也是微软近年来探索使用 Rust 作为 C、C++ 替代方案的举措之一。另外在 AWS的资金支持下,sudo 和 su 命令正在用 Rust 重写,以提高这些广泛依赖的软件的内存安全。
不过一切向好的发展大势下依旧存有隐忧,更广的市场渗透率、更好的平台支持、更高的生产力才是用户的追求,而目前来看,Rust 要做到这些尚需时日。
诞生于 2016 年的Zig被视为C语言的有力竞争者,在5月的Tiobe编程语言排行榜上名列第88位。但在上个月的榜单中,Zig曾一下蹿升到第46位。起起落落间,已经有了点出其不意的黑马之姿。
Zig出现后就处在了C语言的挑战位,也有人认为其有望成为C语言的替代品。它保有C语言的部分功能特性,同时也舍去了其中不太理想的一些功能设计。
Zig和C语言一样是通过手动管理内存的;Zig兼容C语言,可以导入 .h 头文件并直接使用 C 语言的类型、变量和函数,但是减少了很多冗余,增加了泛型数据结构和函数;Zig通过协程实现并发,相比C语言的多进程和多线程更加高效。
在语法上,Zig最大的创新是编译期值和编译期函数。简言之,你可以写一些函数是在编译期运行的,这些函数能够通过编译器反射获取很多元信息,然后通过这些元信息生成真正的运行函数或者类型。
曾有人对Zig语言的设计者Andrew Kelley 表示,在编译时运行代码是个蠢主意。不过Kelley 还是坚持了这一想法,多年以后,这个看着不怎么聪明的点子成为了 Zig 最鲜明的招牌。Zig 可以在编译时运行代码的能力让开发者们可以在不明确任何泛型或模板支撑的情况下,编写通用代码或是进行元编程。
此外,Zig另外一个重要的特色就是对嵌入式领域和系统级编程的支持,这也是其将自己定位成C语言竞争者的原因之一。Zig的交叉编译工具做得非常极致,在非常小的编译器工具中内置了非常多系统的交叉编译支持。目前来看,Zig要取代C语言还太过稚嫩,但至少它提供了一种让人耳目一新的可能。
编程语言无论是大众还是小众,并没有绝对的优劣之分。无论使用哪种或哪些编程语言,真正的关键从不在于语言的种类,而在于编码的技能水平。就像Pony语言的创建者Sylvan Clebsch所说,“一门编程语言只是另一种工具。与语法无关,与表达性无关,与范式或模型无关,仅与解决难题有关。”
https://www.tiobe.com/tiobe-index/
https://codesignal.com/2023-state-of-engineer-hiring/
www.modular.com/mojo
https://medium.com/@napsaga/mojo-lang-a-fast-futuristic-python-alternative-cf090e6db344