编程语言的江湖,纷争不断。Kotlin 的崛起,吸引了大批的 Java 开发者的目光;TypeScript 的出现,对 JavaScript 的使用率带来一定影响;近年来,越来越多的企业使用 Rust 替代 C++。
而在日前,软件开发者 Drew DeVault 宣布了一种名为 Hare(野兔)的系统编程语言,目标直指 C 语言。
Hare 正式发布!
作为一种系统编程语言,Drew DeVault 称 Hare 的开发是由 30 位工程师耗时两年开发而成,旨在成为一种“简单、稳定和健壮”的语言。
在应用场景上,Hare 使用静态类型系统、手动内存管理和最小运行时,由此它非常适合编写操作系统、系统工具、编译器、网络软件和其他低级高性能任务。
据外媒 The Register 报道,Hare 的标准库中还融合了 Google 的 Go 编程语言思想,特别是在标准库以及“电池”中内置了许多功能,以此避免需要导入外部的依赖项。这样做,能避免程序员去寻找依赖项,同时也有一个可管控的范围。
接下来我们不妨通过简单的 Hello World 程序提前感受一下这门新语言的魅力所在:
use fmt;
export fn main() void = {
fmt::println("Hello world!")!;
};
Hare 和 C 语言的区别
面对新语言的兴起,所谓存在即合理,不过往往也有一个通用性的原因,那就是越来越多的开发者认为在某些应用场景中,老牌语言太过复杂,甚至有人还发布了《C 不再是一门编程语言》等批判性文章。
Hare 之所以存在,DeVault 透露,Hare 比 C 简单,也与 C 最为相似,几乎所有用 C 编写的程序也可以用 Hare 编写。
对此,Drew DeVault 官方通过一个“计算 SHA-256 算法”的示例,来体现 Hare 的简单性:
use crypto::sha256;
use encoding::hex;
use fmt;
use hash;
use io;
use os;
export fn main() void = {
const hash = sha256::sha256();
const file = os::open("main.ha")!;
defer io::close(file)!;
io::copy(&hash, file)!;
let sum: [sha256::SIZE]u8 = [0...];
hash::sum(&hash, sum);
hex::encode(os::stdout, sum)!;
fmt::println()!;
};
Hare 也遵循了四大设计原则:
相信程序员。
当程序员不相信自己时,提供他们可以使用的工具。
倾向于显式行为而非隐式行为。
一个好的程序必须既正确又简单。
另外需要声明的是,虽然将 Hare 的定位对准 C 语言,但 Drew DeVault 坦言,"我们并不像其他许多语言设计者那样对 C 语言感到不满",反而是,"Hare 是对 C 语言基本设计思想的一套保守式的改进,其目标是在自身完全构建好之后能够如同 C 语言所能实现的任何功能一样。"
Hare 编程语言的功能特性
据官方介绍,Hare 基于 qbe 编译器后端,它在占用空间小的情况下提供了良好的性能。
Hare 的标准库拥有适量的“自带的电池”,自然地提供了广泛的功能,包括:
密码学套件;
网络支持;
日期/时间操作;
I/O 和文件系统抽象;
Unix 原语,如 poll、fnmatch 和 glob;
POSIX 扩展正则表达式;
解析器和类型检查器;
以及参考文档(https://docs.harelang.org/)。
此外,DeVault 称,Hare 默认不链接到 libc,即 C 语言标准库。作为系统编程的一个新起点,Hare 标准库脱离了 POSIX 和 libc 遗留问题。
除了对标 C 语言,Hare 也被认为是 Zig 语言的一个简化版本。Zig 是一种通用的编程语言和工具链,用于维护健壮、最优和可重用的软件,也是一种具有手动内存管理的低级系统语言,不过,它没有 Rust 那么复杂。
根据 DeVault 的解释,其将 Hare 描述为一种避免 C 语言陷阱的方式,并表示道,“许多旨在和 C 语言竞争的语言实则相差太远了。Hare 是一种保守的语言,旨在将过去 30 年的经验教训提炼成一种小型的、简单的、稳健的语言,可以在未来 30 年内让程序员依赖。我们并不关注大胆的创新,而是关注精心的工程设计。”
因此,根据 Hare 的设计路线图显示,在语言设计方面,Hare 欲在未来实现:
针对标记联合体的指针进行匹配;
匹配和转换的穷举法
对常量改进
出现错误时推迟执行(例如释放过时的对象)。
针对 OOM 情况的更强大的错误处理
在扩展库层面,将支持:
图形(图像支持、像素格式转换、矢量绘图)
邮件支持(信封解析器、net::smtp等等)
SQL(通用接口+方言驱动)
net::http
在工具层面,将实现:
构建驱动重写
更好的 +libc 支持,hare.ini
一个更好的测试驱动
交叉编译
在规格、说明书(Specification)上,将包含以下内容:
需要审查、编辑和共识
8 位和 16 位子目录
ABI 规范
此外,Hare 目前支持三种 CPU 指令集架构,分别是 x86_64、Arm 的 arch64 和 riscv64,以及 Linux 和 FreeBSD 两种操作系统。在进一步开发之后,Hare 官方也有望添加 32 位平台如 i486 系列、32 位 ARM、riscv32 的支持。
不过,DeVault 也表示目前并没有计划支持 macOS、Windows 等非自由平台,后续如果开发者有需求,可以开发第三方或者分支实现对 Windows、macOS 的支持。
未来计划
Hare 虽然已经初步对开发者开放,但是很多功能仍在开发中。据 DeVault 透露,当前 Hare 的重点主要聚焦 1.0 版本的稳定性和标准库增强功能,如 TLS 和原始 IP Socket 的支持。
“我预计在早期,大部分开发将继续专注于语言本身,”DeVault 指出,“但它已经对......命令行实用程序等系统工具、cron、init 系统等守护进程起作用。”
据 The Register 报道,DeVault 解释说他正在使用 Hare 编写密码管理器和内核——该语言非常适合的项目。“我认为,一旦我们获得 TLS 支持,许多其他用例将会实现。”此外,Hare 目前依赖 BDFL(终身仁慈的独裁者)治理模式。“该语言旨在稳定并基本保持不变,因此不一定需要进行如此多的治理。”
在使用上,相较于目前主流的编程语言,Hare 所遵循的许可证要更为复杂和严苛一些。
其中,Hare 标准库是根据 Mozilla 公共许可证(MPL)的条款提供的,开发者可以与任何许可证下发布的软件进行链接,但如果你修改了标准库,则必须在 MPL 下发布衍生作品。
构建驱动、hare 和编译器、harec 等可执行文件时,在 GPL3.0 下可用(但不是任何更高的版本)。这允许开发者自由使用和再分发,但对它的任何修改都要求你根据 GPL 的条款分享衍生作品。它比 MPL 更严格,如果你从第三方程序链接到编译器或构建驱动代码,它将要求你也发布第三方的代码。
简而言之,开发者可以在 Hare 中编写使用标准库的程序,也能够发布这些程序。然而,如果你修改了 Hare 本身,则也必须要分享你所做的修改。
除此之外,针对 Hare 的 Specification(说明书),用其官方的话来描述,它遵循的 CC-BY-ND 许可要严格得多。该许可证允许自由地重新分发该文件,但完全禁止衍生作品。其目的是为了防止供应商对语言本身的扩展泛滥。然而,这些条款只适用于说明书本身。
如何评价 Hare 这门编程语言?
随着 Hare 这门新语言的正式发布,如果想要尝鲜的开发者,不妨可以通过官网(https://harelang.org/)了解一番。不过对 Hare 语言本身,不少开发者也产生了争议。
@ninjin:
很高兴看到 "这个秘密语言 "出现在公众视野!我一直在关注着它的发展,并且非常喜欢这种 "简单 "的语言。简而言之,Hare 似乎是一种我真的应该喜欢的语言。
但我觉得有点困惑的是许可问题。我属于 "BSD派",但至少可以声称我理解(并尊重)GNU 对事物的看法。看了看 Hare 的许可证,我有些困惑,传统的思维模式似乎在这里不再适用了,是什么威胁并导致了 Hare 要用如此复杂的许可?是一个商业分叉版本?社区分叉版本?专有的驱动程序?这些威胁是否真的足够现实,以至于 Hare 需要这种级别的复杂许可。还是因为我太笨了,以至于无法理解 README 中关于许可的解释?
@jpe90:
就我个人而言,我很喜欢它。我认为清理 C 的一些粗糙的边缘功能并提供适当的“电池”,同时保持语言本身非常简单、清晰,这一点尤为引人注目。我也很感激它似乎并没有在不需要的地方过于固执己见。
但没有支持 macOS 有点令人遗憾,所以我必须通过 SSH 连接到我的 Linux 机器上才能使用它。我希望该语言在发展中能实现对其他平台的支持。
祝贺所有为此工作的人。
参考:
https://www.theregister.com/2022/04/26/hare_c_software/
https://harelang.org/blog/2022-04-25-announcing-hare/
https://sr.ht/~sircmpwn/hare/
END
— 推荐阅读 —
—点这里↓↓↓记得关注标星哦~—
一键三连 「分享」「点赞」「在看」
成就一亿技术人