设计哲学

1 简述

任何一门语言的兴起,都是为了解决一个问题。
自操作系统诞生以来,系统级主流变成语言,从汇编语言到C++, 已经发展了近50年。但仍然存在两个难题:

  • 很难编写内存安全的代码
  • 很难编写线程安全的代码

这两大本质的原因是C/C++属于类型不安全的语言。因此需要一个可以提供高的开发效率、代码容易维护、性能还能与C/C++媲美,同时还得保证安全性的语言。

2 设计哲学

Rust语言遵循三条设计哲学:

  • 内存安全
  • 零成本抽象
  • 实用性

2.1 内存安全(编译器yyds)

类型系统提供的好处:

  • 允许编译器侦测无意义甚至无效的代码,暴露程序中隐含的错误
  • 可以为编译器提供有意义的信息类型,帮助优化代码
  • 可以增强代码的可读性,更直白的阐述开发者的意图
  • 提供了一定程度的高级抽象,提升开发效率

一般来说,一门语言只要保证类型安全,就可以说他是一门安全的语言。简单来说,类型安全是指类型系统可以保证程序的行为是意义明确、不出错的。

Rust想保证内存安全,首先要做的是保证类型安全。
什么是内存安全,简单说就是不会出现内存访问错误。只有当程序访问未定义内存的时候才会产生内存错误,一般来说,一下几种情况就会产生内存错误:

  • 引用空指针
  • 使用未初始化内存
  • 释放后使用
  • 缓冲区溢出
  • 重复释放

为了保证内存安全,Rust语言建立了严格的安全内存管理模型:

  • 所有权系统。 每个被分配的内存都有一个独占其所有权的指针。只有当该指针被销毁时,其对应的内存才能随之被释放
  • 借用和生命周期。每个变量都有生命周期,一旦超出生命周期,变量就会被自动释放。如果是借用,则可以通过标记生命周期参数供编译器检查的方式,防止出现指针释放后再使用的情况

Rust的所有权系统还包括从C++那里借鉴的RAII机制,这是无GC但是可以安全管理内存的基石。

建立安全内存管理模型之后,再用系统类型表达出来即可。 Rust从Haskell的系统类型那里借鉴了以下特性:

  • 没有空指针
  • 默认不可变
  • 表达式
  • 高阶函数
  • 代数数据模型
  • 模式匹配
  • 泛型
  • trait和关联类型
  • 本地类型推导

Rust还具备其他独有的特征:

  • 仿射类型
  • 借用、生命周期

Rust编译器可以在编译器对类型就行检查,看其是否满足安全内存模型,在编译期就能发现内存不安全问题,同时会检测出多线程并发代码中所有的数据竞争问题

2.2 零成本抽象

变成语言做到高效开发,就必须拥有一定的抽象表达能力。对于Ruby这种语言,抽象表达能力是靠性能换来的,Rust不会存在运行时开销,因为这一切都是在编译期完成的。

Rust零成本抽象的基石是泛型和trait。

2.3 实用性

如何评价一门编程语言的实用性,可以从三个方面进行评价:

  • 实践性 首先必须能够应用于开发工业级产品,其次要易于学习和使用
  • 有益性 能够对业界产生积极的效果活影响
  • 稳定性 语言自身稳定。

(注: 本文参考张汉东老师《Rust编程之道》)

Rust语言入门(2)——设计哲学相关推荐

  1. e语言通用进销存源码_Go 语言设计哲学之五:代码风格的唯一标准

    一. gofmt Go 语言设计的目标之一就是解决大型软件系统的大规模开发的问题,解决大型团队的开发问题,Go 核心团队给它起了一个名字叫:规模化(scale). gofmt 是伴随着 Go 语言诞生 ...

  2. Redox随笔(1)-用Rust语言编写的类UNIX操作系统

    Redox是一个用Rust语言编写的类UNIX操作系统 , 它的目标是把Rust语言的创新带入到一个现代的微内核和全系列的应用程序. https://www.redox-os.org/zh/docs/ ...

  3. 想要改变世界的 Rust 语言

    一门编程语言就像一个小宇宙,语言中的各种语法概念就像一颗颗星辰.对于初学者来说,看这些语法概念与看星罗棋布时产生的迷惑是相似的.幸亏编程语言是由人类创造的,编程语言的作者可以被找到,编程语言的源码也可 ...

  4. rust实战入门到进阶(1)

    1.自适应安装 (1)在Unix/Linux下,使用curl https://sh.rustup.rs -sSf | sh在Shell中运行,它自动启动安装过程:首先,下载并运行rustup-init ...

  5. Golang 入门 : Go语言的设计哲学

    前言 设计哲学之于编程语言,就好比一个人的价值观之于这个人的行为. 因为如果你不认同一个人的价值观,那你其实很难与之持续交往下去,即所谓道不同不相为谋.类似的,如果你不认同一门编程语言的设计哲学,那么 ...

  6. 《安富莱嵌入式周报》第283期:全开源逆向“爆破”硬件工具,Linux内核6.1将正式引入RUST语言,I3C培训教程,80款市场成熟的电感式位置传感器设计

    往期周报汇总地址:嵌入式周报 - uCOS & uCGUI & emWin & embOS & TouchGFX & ThreadX - 硬汉嵌入式论坛 - P ...

  7. Rust 语言新人入门指南

    首先,学习 Rust 不能急躁.如果你抱着之前 1 天上手 Python, 2 天入门 Go 的经验和优越感来学习 Rust 的话,你可能会遭遇严重的失败感.如果你来自 Haskell/Ocaml 等 ...

  8. Kotlin语言中的泛型设计哲学

    Kotlin语言的泛型设计很有意思,但并不容易看懂.关于这个部分的官方文档,我反复看了好几次,终于弄明白Kotlin语言泛型设计的背后哲学.这篇文章将讲述Kotlin泛型设计的整个思考过程及其背后的哲 ...

  9. c语言程序第一章编程,c语言程序的设计第一章 C语言编程入门.ppt

    c语言程序的设计第一章 C语言编程入门 第1章 C语言编程入门 本章是本书的入门篇,专为初学者熟悉编程过程.掌握程序结构而准备的. 本章学习目标 ? 1)? 能够通过模仿与改变来构造带有测试函数的C语 ...

最新文章

  1. Django博客系统(详情页面展示)
  2. 20145129 课程总结
  3. oracle大量删除数据之后索引是否需要重建_oracle10g重建XDB
  4. openoffice java在线预览,使用openoffice和kkFileView实现文档在线预览
  5. .Net Core 商城微服务项目系列(十二):使用k8s部署商城服务
  6. 《疯狂Java讲义》(十八)---- JAR文件
  7. 如何在Mac上批量转换和调整图像大小
  8. 【Java】0X002 Hello World
  9. 诺基亚成功转型:引领新一代5G技术 布局物联网
  10. html5中required标签必填项
  11. oracle数据库查询904错误,EXP-00008:遇到ORACLE错误904问题详解
  12. 【流放之路-召唤愤怒狂灵攻略】
  13. python爬大学生就业信息报告_Python语言爬虫——Python 岗位分析报告
  14. Resize operation completed for file#
  15. 挖金矿问题-动态规划- 备忘录算法(最优解)
  16. 会议OA项目---我的审批(审批会议签字)
  17. Recoil 的使用
  18. 图纸管理系统_图纸文档管理软件系统
  19. 计算机休眠移动硬盘不休眠,关闭硬盘盒自动休眠软件
  20. 上海交通大学python实践教程答案_python实践教程答案(求python课后习题答案)

热门文章

  1. 哈夫曼树(Huffman Tree),与哈夫曼编码
  2. vue判断网络是否通畅
  3. 关于迟滞比较器的解释(
  4. 【Verilog基础】锁存器(Latch)知识点总结
  5. vue导出Excel模板设置单元格下拉列表
  6. 跳槽时如何善用猎头资源,职场人了解一下
  7. echarts 饼图调用高亮示例 dispatchAction
  8. QCC51XX---Ellisys Bluetooth Analyzer 抓取步骤
  9. vue关于element日历calendar组件上月、今天、下月、日历块点击事件及模板源码
  10. koroFileHeader快捷键不管用,koroFileHeader不起作用