Prusti: deductive verification for Rust (keynote)

Alexander J. Summers
{"title":"Prusti: deductive verification for Rust (keynote)","authors":"Alexander J. Summers","doi":"10.1145/3427761.3432348","DOIUrl":null,"url":null,"abstract":"Producing reliable systems software is a major challenge, plagued by the ubiquitous problems of shared mutable state, pointer aliasing, dynamic memory management, and subtle concurrency issues such as race conditions; even expert programmers struggle to tame the wide variety of reasons why their programs may not behave as they intended. Formal verification offers potential solutions to many of these problems, but typically at a very high price: the mathematical techniques employed are highly-complex, and difficult for even expert researchers to understand and apply. The relatively-new Rust programming language is designed to help with the former problem: a powerful ownership type system requires programmers to specify and restrict their discipline for referencing heap locations, providing in return the strong guarantee (almost; we’ll discuss this..) that code type-checked by this system will be free from dangling pointers, unexpected aliasing, race conditions and the like. While this rules out a number of common errors, the question of whether a program behaves as intended remains. This tutorial provides an introduction to the Prusti project, which leverages Rust’s type system and compiler analyses for formal verification of Rust code. By combining the rich information available about a type-checked Rust program with separate user-specification of intended behaviour, Prusti enables a user to verify functional correctness of their code without interacting with a complex program logic; in particular, specifications and all interactions with our implemented tool are at the level of abstraction of Rust expressions. The tutorial includes live demos with the tool, and audience participation is strongly encouraged!","PeriodicalId":433231,"journal":{"name":"Proceedings of the 22nd ACM SIGPLAN International Workshop on Formal Techniques for Java-Like Programs","volume":"40 1","pages":"0"},"PeriodicalIF":0.0000,"publicationDate":"2020-07-23","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":"0","resultStr":null,"platform":"Semanticscholar","paperid":null,"PeriodicalName":"Proceedings of the 22nd ACM SIGPLAN International Workshop on Formal Techniques for Java-Like Programs","FirstCategoryId":"1085","ListUrlMain":"https://doi.org/10.1145/3427761.3432348","RegionNum":0,"RegionCategory":null,"ArticlePicture":[],"TitleCN":null,"AbstractTextCN":null,"PMCID":null,"EPubDate":"","PubModel":"","JCR":"","JCRName":"","Score":null,"Total":0}
引用次数: 0

Abstract

Producing reliable systems software is a major challenge, plagued by the ubiquitous problems of shared mutable state, pointer aliasing, dynamic memory management, and subtle concurrency issues such as race conditions; even expert programmers struggle to tame the wide variety of reasons why their programs may not behave as they intended. Formal verification offers potential solutions to many of these problems, but typically at a very high price: the mathematical techniques employed are highly-complex, and difficult for even expert researchers to understand and apply. The relatively-new Rust programming language is designed to help with the former problem: a powerful ownership type system requires programmers to specify and restrict their discipline for referencing heap locations, providing in return the strong guarantee (almost; we’ll discuss this..) that code type-checked by this system will be free from dangling pointers, unexpected aliasing, race conditions and the like. While this rules out a number of common errors, the question of whether a program behaves as intended remains. This tutorial provides an introduction to the Prusti project, which leverages Rust’s type system and compiler analyses for formal verification of Rust code. By combining the rich information available about a type-checked Rust program with separate user-specification of intended behaviour, Prusti enables a user to verify functional correctness of their code without interacting with a complex program logic; in particular, specifications and all interactions with our implemented tool are at the level of abstraction of Rust expressions. The tutorial includes live demos with the tool, and audience participation is strongly encouraged!
Rust的演绎验证(主题演讲)
生产可靠的系统软件是一个主要的挑战,它被无处不在的共享可变状态、指针混叠、动态内存管理和微妙的并发问题(如竞态条件)所困扰;即使是专业的程序员也要努力去驯服各种各样的原因,为什么他们的程序可能不像他们预期的那样运行。形式化验证为许多这些问题提供了潜在的解决方案,但通常代价很高:所采用的数学技术非常复杂,即使是专家研究人员也难以理解和应用。相对较新的Rust编程语言旨在帮助解决前一个问题:强大的所有权类型系统要求程序员指定和限制引用堆位置的规则,作为回报,提供强大的保证(几乎;我们将讨论这个…),该系统进行类型检查的代码将没有悬空指针,意外混叠,竞争条件等。虽然这排除了许多常见错误,但程序是否按预期运行的问题仍然存在。本教程介绍了Prusti项目,该项目利用Rust的类型系统和编译器分析对Rust代码进行正式验证。通过将关于类型检查的Rust程序的丰富信息与预期行为的单独用户规范相结合,Prusti使用户能够在不与复杂的程序逻辑交互的情况下验证其代码的功能正确性;特别是,规范和与我们实现的工具的所有交互都处于Rust表达式的抽象级别。本教程包括使用该工具的现场演示,强烈鼓励观众参与!
本文章由计算机程序翻译,如有差异,请以英文原文为准。
求助全文
约1分钟内获得全文 求助全文
来源期刊
自引率
0.00%
发文量
0
×
引用
GB/T 7714-2015
复制
MLA
复制
APA
复制
导出至
BibTeX EndNote RefMan NoteFirst NoteExpress
×
提示
您的信息不完整,为了账户安全,请先补充。
现在去补充
×
提示
您因"违规操作"
具体请查看互助需知
我知道了
×
提示
确定
请完成安全验证×
copy
已复制链接
快去分享给好友吧!
我知道了
右上角分享
点击右上角分享
0
联系我们:info@booksci.cn Book学术提供免费学术资源搜索服务,方便国内外学者检索中英文文献。致力于提供最便捷和优质的服务体验。 Copyright © 2023 布克学术 All rights reserved.
京ICP备2023020795号-1
ghs 京公网安备 11010802042870号
Book学术文献互助
Book学术文献互助群
群 号:481959085
Book学术官方微信