查看原文
其他

对标 C 语言,30 位工程师耗时 2 年研发的 Hare 编程语言正式发布!

CSDN 2022-05-12

作者 | 苏宓
出品 | CSDN(ID:CSDNnews)

编程语言的江湖,纷争不断。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 也遵循了四大设计原则:

  1. 相信程序员。

  2. 当程序员不相信自己时,提供他们可以使用的工具。

  3. 倾向于显式行为而非隐式行为。

  4. 一个好的程序必须既正确又简单。

另外需要声明的是,虽然将 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


— 推荐阅读 —
☞腾讯音乐回应网易云音乐诉其不正当竞争;“月薪三千能买什么样的手机”上热搜 投票第一竟是苹果?《计算机世界》停工停业|极客头条
邢山虎:指责加班是特定时期的悖论,历史将予以澄清
☞Safari 重返 Windows 系统?

—点这里↓↓↓记得关注标星哦~— 

一键三连 「分享」「点赞」「在看」

成就一亿技术人


您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存