背景
在这个计算机发展越来越快速的时代,编程语言、操作系统的重要性不言而喻;而自从计算机普及以后,C语言就一直占据着编程语言的大半边天,这是因为,各大操作系统平台几乎都是c语言及其衍生的语言开发的,Linux:主要使用GNU C语言开发;windows:主要使用c++;macOS:主要使用苹果自家的objc。因此,想要让应用程序运行在主流的操作系统上,就必须以C语言为基础,任何高级语言都不例外;java、python都是用c++写的。自然而然,大多数学习编程的人都会使用C语言。因此,甚至很多的库都是C语言写的。
但是,C语言也正是由于历史原因,它很大、很复杂、甚至很混乱,就连C语言(c++)的编译器也是一只手数不过来:msvc、gcc、clang、turboc、intel c、amd c…….(虽然intel amd的编译器基本没人用,但是人家自家优化肯定比gcc等开源组织的好,在他们自家的驱动等的上面用得很广泛)。由此,c语言的复杂性可见一斑。
因此Hare诞生了,DeVault 透露,Hare 比 C 简单,也与 C 最为相似,几乎所有用 C 编写的程序也可以用 Hare 编写。简介
Hare 也遵循了四大设计原则:
- 相信程序员。
- 当程序员不相信自己时,提供他们可以使用的工具。
- 倾向于显式行为而非隐式行为。
- 一个好的程序必须既正确又简单。
另外需要声明的是,虽然将 Hare 的定位对准 C 语言,但 Drew DeVault 坦言,”我们并不像其他许多语言设计者那样对 C 语言感到不满”,反而是,”Hare 是对 C 语言基本设计思想的一套保守式的改进,其目标是在自身完全构建好之后能够如同 C 语言所能实现的任何功能一样。”
据官方介绍,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 许可要严格得多。该许可证允许自由地重新分发该文件,但完全禁止衍生作品。其目的是为了防止供应商对语言本身的扩展泛滥。然而,这些条款只适用于说明书本身。