我为什么选择rust

简介: 本文关键字:allinone编程语言,个人是否真的可能学好多门编程语言

本文关键字:allinone编程语言,个人是否真的可能学好多门编程语言

我们在前面《编程语言选型通史:快速整合产生的断层》提到,我们需要一门"简单,oneforall"显得不那么“断层”的语言来工作和学习,以积累自己的codebase和开发经验而无需推倒重来或切换,---- 这个问题之所以重要和紧迫,如上文所讲,是因为编程语言一直处在开发和学习的中心,占据一个程序员的大部分时间和心智精力,语言选型必须先于其它进行。而现实情况是,技术总在演变,而融合正处在初级阶段,人们在学习和工作中总涉及到使用多门语言的情景,产生的断层和学习成本巨大(见《qtcling - 一种更好的C++和标准库》和《编程语言选型之技法融合,与领域融合的那些套路》)

"程序员总是需要不停学习",。这个时候,我们希望获得一种简单,但allinone的语言和一劳永逸的开发领域研究对象。对于出现的新开发,也可以以自然不虐心的方式融入,共享同一套生态,---- 俗语,用一种语言解决所有问题。这个问题放在10年前是不可能讨论的,但现在可以了。

“任何编程语言都一样麻烦”,软件无银弹,排除这些同质部分。来设想一下,对这种语言最基本的要求,首先是要保证简单,避免CPP那种越做越复杂带来的坑。不要求它有对低阶语言有很好的源码兼容性,但至少要能接上现今二大生态(naitve/web)。语言写法上的限制和自由是一对矛盾,这个时候我们宁愿入门前曲线陡峭,入门后一马平川,除此之外,它还应绝对安全(非必要不写unsafe),是运行期免错的语言。

对于符合上述要求,现今为止能很好作到“allinone”写法的语言和跨embeded/native/web/mobile(甚至web前端)开发的语言。Dlang/go/rust是唯三的选型对象,这其中,rust是最全面的。从语言演变历史中那些坑中综合排查,这点上,因为rust出现得晚,取长补短,rust没有任何包袱。它是最不虐心的。rust源于cyclone的部分概念,虽然说这些cpp的新版本也能做到,但cpp应该改无可改面目全非了,不如一门新语言来得更让人易接受。

具体来看rust的优缺点:

它有:

1,它涵盖toolchain即appdev领域,是真正的通用语言,着眼现在面向未来

它支持跨embeded/native/web/mobile(甚至web前端)开发,而其它不少语言也宣称它们通用,但总是存在大量的坑(比如人们不常用php-cli,仅用php-cgi)。rust没有这些包袱,是真正的通用语言,即又具备动态和脚本语言的写法和效率,而且又以一种自然科学不虐心的方式进行。而且它的微运行时能嵌入browser,着眼未来wasm技术。它也能被很好用于未来的AI,因为安全和效率比py高。

2,它涵盖现在的主要语言体系,聪明地定位于安全的编译型语言。

如在静态语言中谋求动态,如let,又将以前仅运行期能做的。用模板和泛型可以完全弄到编译期,如整套的编译期内省。达到了现在流行的静态/动态/语言脚本语言都能拥有的效果,支持脚本语言的逻辑热更。上面谈到,它是强编译期安全性的,能保证运行期免错(解决了c增强系如CPP的痛点:内存泄漏和数据竞态)。
其实运行期与编译期只有二个期的不同(对导致语言灵活和动态性差别没有本质联系)。不一定语言的动态性就一定要体现在运行期。编译期可以让语言达到足够的动态性,这就是动态编译。

3,它涵盖了所有语言技术,建立了所有语言的多范式超集,具备了流行的开发支持,

见《编程语言选型之技法融合,与领域融合的那些套路》,现在所有的语言,基本不是函数式(这类语言的代表就是lisp,haskell)就是过程和OO式(cpp,java)或者它们的综合(py,js,go,rust),都可归为这二种流派。其实现都是对他们的简化与修正。而rust对这二种流派都有全面吸收和支持。

4,它不复杂,为了融合和发展,它另辟创新,解决了C增强系的痛点,而没有提出过多的新概念,甚至没有GC

拿cpp与rust这些“增强C系语言”对比,我们要忽略cpp对c的源码兼容是c的增强(严格来说,cpp应该向它的祖先cfront靠拢以增强C。)这层极具混淆性的意义来说,把cpp与c看成是一高阶一低阶的不同语言,这样我们就能方便地拿出两者都提出一门高于c的新语言的起点性工作开始对比:它们都保留指针和控制底层的能力,但rust有引用和借用,类型所有权,,极其聪明地(虽然有些强制和面向契约)规避了cpp的坑,同样没有GC,同样用raii却避免了CPP的内存不安全。

与dlang/go这样的“简化C系/cpp语言类”比较,达到同样的效果却而避免给语言增加gc这样的乱入式大部头。一门语言集不集成GC,这是影响到语言本质的问题,比如go集成GC,其运行时会比rust大好几个数量级,rust极小运行时。这对嵌入硬件平台和嵌入WEB浏览器极为关键。它对glibc这样的东西几乎无依赖。。

对语言的学习,从对比它们的类型系统,作用域,支持的高级数据结构,异常,。。。。这些层面,基本一个认真学过几门流行语言的人都可以在10小时之内了解完。(引用,借用,其实并没有给rust新增加多少东西,其它都是向简集成)

5,它兼顾了现在,也能接入既有多种生态和未来扩展方向:

它能生成对c的转译结果(接上了系统实现和系统开发生态),以及对js的转译结果(接上了web前后端生态),而现在转译式开发是很流行的。place rust on top of c and js(比如 c,js作为低阶语言仅具备基本的过程和函数,oo和高级函数语法放在高阶语言rust层),这是很well arranged的。

对于未来,它也有考虑,如wasm,如virtual appliance,见《云APP,virtual appliance:unikernel与微运行时的绝配,统一本地/分布式语言与开发设想》,未来应该是libos,unikernel,Fuchsia os这类可编程可devops可嵌入可物联的内核的天下。

它没有下面这些,但不重要

(一个事物的优点的这个说法,正是它缺点的某些方面,在一定的可讨论范围内,任何选型都是一对矛盾):

它没有对C的源码兼容支持它没有GC。这刚好成全4,5

它没有过于简单的语法。但其实这是个仁者见仁智者见智的问题。(引用,借用,这些是rust最本质的创新)

它没有显式的语言层DSL支持,但它内外部已集成足够可用的东西。见3,5

它没有统一后端,但有 C ABI 二进制兼容对外interoperability能力也好。,也没有类elm的interoperability to js,见5


(此处不设回复,扫码到微信参与留言,或直接点击到原文)

qrcode.png

相关文章
|
3月前
|
Rust 安全 网络协议
Rust 笔记:Rust 语言中的枚举 与 模式匹配
Rust 笔记:Rust 语言中的枚举 与 模式匹配
66 0
|
1天前
|
Rust 安全 编译器
初探 Rust 语言与环境搭建
Rust 是一门始于2006年的系统编程语言,由Mozilla研究员Graydon Hoare发起,旨在确保内存安全而不牺牲性能。通过所有权、借用和生命周期机制,Rust避免了空指针和数据竞争等问题,简化了并发编程。相较于C/C++,Rust在编译时预防内存错误,提供类似C++的语法和更高的安全性。Rust适用于系统编程、WebAssembly、嵌入式系统和工具开发等领域。其生态系统包括Cargo包管理器和活跃社区。学习资源如"The Book"和"Rust by Example"帮助新手入门。安装Rust可通过Rustup进行,支持跨平台操作。
初探 Rust 语言与环境搭建
|
13天前
|
数据采集 Rust 监控
员工监控软件结合 Rust 语言的可能性
在企业管理精细化的趋势下,员工监控软件需求日益增长。Rust 语言以其安全性、高性能与并发能力,成为开发此类软件的理想选择。透过示例代码可见,无论是数据采集、处理或是网络通信,Rust 均能确保软件运行稳定、高效且避免常见的安全漏洞。随着 Rust 生态系统的持续发展,其为构建复杂监控系统提供了强大支持。这不仅提升了软件的整体表现,也更好地满足了企业对员工管理的需求。
16 1
|
12天前
|
Rust JavaScript Java
简单对比Java、Python、Go、Rust等常见语言计算斐波拉契数的性能
简单对比Java、Python、Go、Rust等常见语言计算斐波拉契数的性能
|
30天前
|
Web App开发 存储 Rust
日志存储问题之Dropbox也使用Rust语言如何解决
日志存储问题之Dropbox也使用Rust语言如何解决
|
2月前
|
Rust 安全 开发者
探索Rust语言的内存安全特性
【6月更文挑战第8天】Rust语言针对内存安全问题提供了创新解决方案,包括所有权系统、借用规则和生命周期参数。所有权系统确保值与其所有者绑定,防止内存泄漏;借用规则保证同一时间只有一个可变引用或多个不可变引用,消除数据竞争和野指针;生命周期参数则强化了引用的有效范围,提升安全性。通过这些特性,Rust帮助开发者编写出更健壮、安全的高性能软件,有望成为系统编程领域的领头羊。
|
2月前
|
机器学习/深度学习 Rust 安全
Rust语言:为何备受开发者青睐?
Rust编程语言以其内存安全、高性能、并发编程支持和强大社区获得青睐。作为系统编程语言,Rust的所有权与借用检查机制确保了内存安全,适用于高可靠性系统。它拥有接近C/C++的运行时性能,适合游戏开发和数据分析。Rust的并发特性包括轻量级线程和原子操作,便于构建高性能并发系统。活跃的社区和完善的生态系统,如丰富的库和框架,加速了开发者的学习和项目开发进程。【6月更文挑战第3天】
64 3
|
2月前
|
Rust 安全 开发者
Rust语言的Hello, World! 程序解析
Rust语言的Hello, World! 程序解析
31 0
|
3月前
|
Rust 并行计算 安全
探索Rust语言在并发编程中的应用
探索Rust语言在并发编程中的应用
51 1