到底什么是系统编程?
作者思考的这个问题,正好也是我疑惑的。
一般来说,系统编程包含两个概念:
- 底层编程,用于处理机器的各种细节
- 系统设计,创建和管理复杂的各种组件
作者回顾从计算机起源对系统编程的定义进行了回顾:
系统编程这个词起源于20世纪70年代,在《系统编程语言》(Bergeron1 et al.1972)中作者说:“系统程序是一组集成的子程序,它们一起构成一个大于其各部分之和的整体,并超过一些大小和/或复杂度的阈值。。。”,该定义的一个关键思想是:倡导将底层语言与系统语言分离。这个阶段认为系统应该是为用户服务。
20世纪90年代中期,随着动态类型脚本语言的兴起,编程语言发生了重大的变化。Perl、Python、Ruby等,于是就有了高级语言和系统编程语言的二分法(Ousterhout 1998),系统编程用于创建组件,脚本用于将它们粘合在一起。也就是这个时候,静态类型和垃圾回收语言也开始兴起,Java和C#,虽然它们被认为不是传统的系统编程语言,但是Ousterhout中提到:“在正在形成的互联网中,Java被用于系统编程”
2010年开始,这个边界变得模糊了起来。Dropbox用Python也构建了大型的可扩展系统,JS也逐渐成为主流,可以构建复杂的UI系统,并且JIT编译器也开始流行,使得脚本语言也可以和传统系统编程语言拼一下性能。Julia、Swift和Go这样的新的编程语言也在推进垃圾回收语言的性能边界。
Bjarne Stroustrup(C ++的创建者),Rob Pike(Go的创建者),Andrei Alexandrescu(D开发人员),和Niko Matsakis(Rust开发人员)。当被问及“2014年什么是系统编程语言”时,他们说(编辑转录):
- Niko Matsakis:具有高延迟需求,高安全性要求,以及服务器端的各种需求。
- Bjarne Stroustrup:系统编程出自你必须处理硬件的领域,然后应用程序变得更加复杂。你需要处理复杂性。如果您遇到任何重大资源限制问题,那么您就处于系统编程领域。如果您需要更精细的控制,那么您也在系统编程领域。决定它是否是系统编程的是约束。你的内存不足吗?你没时间了吗?
- Rob Pike:当我们第一次宣布Go时,我们称它为系统编程语言,我有点遗憾,因为很多人认为它是一种编写操作系统的语言。我们应该称它为服务器端语言,现在我明白我们拥有的是云基础架构语言。系统编程的另一个定义是在云中运行的东西。
- Andrei Alexandrescu:我有一些试金石用于检查某些东西是否是系统编程语言。系统编程语言必须能够允许您在其中编写自己的内存分配器。你应该能够将一个数字伪造成一个指针,因为这就是硬件的工作原理。
那么系统编程是关于高性能的吗?资源限制?硬件控制?云基础架构?从广义上讲,似乎C,C ++,Rust和D类别中的语言在它们与机器的抽象级别方面有所区别。这些语言公开了底层硬件的细节,如内存分配/布局和细粒度资源管理。
Rust语言特点是将好的软件设计和工程性原则应用于底层的编程,这方面极具创新性。
所以到底什么是系统编程语言?
作者认为,系统编程语言应该是特指底层编程语言,因为系统设计的领域太广,它不能有自己的命名,将这两个概念分清楚比较好。
gtk-rs新版本发布
添加了futures和异步处理函数
- gio_futures
- gio_features_await
用Rust写OS内核正在编写第二版
Olin:服务器端WebAssembly平台 -
通过Rust编译为wasm32-unknown-unknown来提供HTTP服务
评论区
写评论还没有评论