当前位置: 首页 > news >正文

Spectre:支持编译时契约评估,可转换 C 代码的安全底层编程语言!

跳过至内容[Spectre 文档](/)主菜单 [主页](/)[](https://github.com/spectrelang/spectre)外观[](https://github.com/spectrelang/spectre)菜单返回顶部侧边栏导航元信息- [安装](/installation.html)- [关于](/about.html)基础知识- [变量](/vars.html)- [类型](/types.html)- [函数](/functions.html)- [控制流](/control-flow.html)- [模式匹配](/pattern-matching.html)- [模块与导入](/modules-and-imports.html)- [错误处理](/error-handling.html)- [接口/规范](/specifications.html)- [泛型](/generics.html)- [类型参数约束](/type-argument-constraints.html)- [标签联合](/tagged-unions.html)契约式设计概念- [前置条件](/preconditions.html)- [后置条件](/postconditions.html)- [不变式](/invariants.html)- [断言](/assertions.html)- [信任传播](/trust-propagation.html)内置函数- [fmt](/fmt.html)- [len](/len.html)- [addr](/addr.html)- [deref](/deref.html)- [alloc](/alloc.html)- [free](/free.html)- [memcpy](/memcpy.html)- [memset](/memset.html)- [memmove](/memmove.html)- [puts](/puts.html)- [print](/print.html)- [zeroed](/zeroed.html)- [args](/args.html)- [bitcast](/bitcast.html)- [load](/load.html)- [load8](/load8.html)- [call](/call.html)- [snprintf](/snprintf.html)- [dprintf](/dprintf.html)- [reserve](/reserve.html)- [get](/get.html)- [insert](/insert.html)- [capacity](/capacity.html)- [ptradd](/ptradd.html)- [store](/store.html)- [store8](/store8.html)- [staticerror](/staticerror.html)- [flush](/flush.html)- [stdin](/stdin.html)- [stdout](/stdout.html)- [fgets](/fgets.html)- [atoi](/atoi.html)- [itoa](/itoa.html)本页内容# SpectreSpectre 是一种专为安全的、基于契约的底层系统编程而设计的编程语言。它支持类型级别的不变式以及函数级别的前置条件和后置条件并且默认通过不可变性来确保安全性。本文档旨在作为 Spectre 编程语言的用户指南。设计初衷目前缺乏能在底层强制保证正确性的基于契约的编程语言。Spectre 的设计理念是默认支持正确性、合理的数据流和不可变性从而使底层编程更安全同时又不影响语言及其工具链的便利性和开发体验。只要可能契约都会在编译时进行评估。不过为避免类似 Z3SMT 求解器等系统的复杂性以及编译器无法证明某些条件为真带来的不便那些无法在编译时评估的检查会自动在运行时执行。不过发布版本中运行时检查是否保留取决于是否使用了受保护的构造。为了保留底层控制权内存采用手动管理通常会使用标准库分配器如 Arena、Stack或自定义分配器。该语言可将高级代码编译为 QBE 中间表示IR然后进一步转换为特定平台的汇编代码。此外还有实验性的 LLVM 和 C99 后端。值得一提的是它有一个 –translate-c 特性能将 C 代码转换为等效的 Spectre 代码这对现有项目迁移到 Spectre 很有帮助。快速上手通过以下代码可以实现简单的 “Hello, world” 程序val std use(std)pub fn main() i32 {trust std.stdio.print(Hello, world: {d}., {10})return 0}你会注意到代码中使用了 trust 关键字。任何有底层不安全机制的操作如 IO 操作像 std.stdio.print 使用的 print 内置函数都必须显式使用 trust因为这些操作本质上是不纯的。不过如果你使用围绕这些函数的安全包装器使用前置条件、不变式等或者使用更简单的函数就无需这样做。例如对于简单的 puts 函数除非出现严重的内存不足OOM错误否则它不会失败所以在标准库中它被标记为安全的无需使用 trust。前言本文档可能会过时不保证能反映最新的 Spectre API。分页导航[下一页安装](/installation.html)
http://www.gsyq.cn/news/1297511.html

相关文章:

  • Promises/A+完全指南:深入理解JavaScript异步编程标准规范
  • 终极指南:如何让苹果触控板在Windows上获得专业级体验
  • ISG系统三大电机结构深度解析:永磁同步、感应与开关磁阻电机对比
  • 手机的智能体AI,正在因为天玑全面跃升
  • TestableMock与Kotlin完美结合:解决协程和扩展函数Mock难题终极指南
  • 海底生物检测-目标检测数据集(包括VOC格式、YOLO格式)
  • 今起,老年旅客12306购票有打折优惠服务!
  • 超越点灯:用JTAG调试XCZU3EG MPSOC时,你可能会忽略的3个硬件细节与1个Vivado设置
  • 基于RK3568核心板的智能家居控制器:从芯片选型到量产实战
  • RT-Thread Smart在QEMU RISC-V虚拟机上的开发环境搭建与调试实践
  • Raiden Network API开发教程:构建去中心化应用的完整指南
  • React Native Picker Select 自定义扩展教程:创建专属选择器组件的3种方法
  • TIDoS-Framework核心架构解析:理解5个阶段的设计原理
  • 为什么选择Lacinia?5大优势带你了解这个强大的GraphQL解决方案
  • 响应式的几种解决方案——媒体查询、flex、grid、多列布局、瀑布流和数据可视化屏幕的缩放处理
  • demo-magic实用技巧:模拟网络连接和隐藏后台操作的完整方案
  • 深入nRF5340 Audio的音频数据流:从USB采集到I2S播放的代码逐行分析
  • Django 表单(Forms)与数据验证:处理用户提交与防止常见攻击
  • Claude反复催用户睡觉,AI“性格病”不止这一种!
  • 从Inkscape到PDF:深入理解LaTeX(TeX Live 2023)处理SVG图像的完整工作流与原理
  • Left的自动补全与智能提示:如何利用AI辅助提升写作效率
  • GREAT-UPD 开源软件实战:从数据准备到UPD产品生成全流程解析
  • TestableMock与Spring Boot集成:打造高效微服务测试的终极指南
  • 刻划光栅与全息光栅:原理、性能对比与工程选型指南
  • PyVista
  • Element UI 表格只展开一项怎么搞?用 `expand-change` 和 `toggleRowExpansion` 实现手风琴效果
  • Go语言设计模式:结构型模式
  • C++高效神器 boost::circular_buffer 深度解析与实战
  • 沁恒CH582实战:从模拟SPI到硬件SPI的SD卡性能跃迁与功耗优化全解析
  • KubeDiagrams在监控系统中的应用:Kube Prometheus Stack完整解析