TLA+学习记录1——hello world

news2024/11/24 2:21:24

0x01 TLA+是个好工具

编程人员一个好习惯是凡事都想偷懒,当然是指要科学地偷懒,而不是真的偷懒。一直想找到一种能检验写出的代码,做出的设计是否真的完全正确,而不是靠经验检视、代码Review、反复测试去检验。因为上述方法不管怎么努力都有可能受限于各种条件而无法给出可靠的结论,而且还要花费大量精力。想来想去可行的方式就是用一种高层次的抽象模型去描述、模拟整个系统,这样就能以较低的成本达成这样的效果。个人水平有限,还没想出这种语言应该是什么样子的。直到看到了TLA+。

初步学习了下,发现这正是我想找的工具。 对编码和设计来说,”偷懒到起点提前做正确性评估“。

TLA+是每个做分布式或并发系统开发人员都应该学习的工具。它由牛人Leslie Lamport(Paxos算法的作者)开发的,专门用于分布式算法验证的工具。对于软件开发者来说,它就是所有工具中的”终极武器“。

但不是每个人都必须学的。它确实对使用者有要求。

  1. 系统抽象能力。最终模型的好坏取决于使用者对系统的抽象质量,开发经验少的人可能不太适合。
  2. 数学基础。TLA+出的模型就是一页页的数学公式,数学基础不好看见公式就头疼的人可能也不太适合,当然可以使用 PlusCal语言减小这一个要求,但想发挥TLA+全部能力,还是建议直接使用TLA+。

AWS用它检验关键服务、分布式算法的正确性,发现了许多常规手段无法发现的疑难BUG,包含可能导致用户数据丢失的严重问题。开源社区用它检查分布式算法,比如ZooKeeper社区也使用它,检查FLE、ZAB协议。甚至有人能用它检查一段有隐晦BUG的Go代码。阿里云也在用它,检查关键算法的正确性。

详细介绍可以见参考章节首页链接。

0x02 Hello World

一个合法的Hello Word PlusCal算法如下。

------------------------------ MODULE Session2 ------------------------------
EXTENDS TLC
(* --algorithm Basic1

variables x = 1;

begin
print "hello world";
end algorithm; *)
====
  1. ------- MODULE Session2 -------行是Spec的命名,必须要有,新建Spec时自动生成的。
  2. EXTENDS TLC 是引入TLC组件,因为print语句在其中定义。
  3. (* *) 是注释块,包含了CalPlus算法,--algorithm Basic1是算法的开始,CalPlus以注释寄存在TLA+的Spec中。Basic1是算法名称,可以是合法的TLA+名称字符。
  4. variables 为声明变量行。这里不是必须的,因为我们没用到。
  5. begin 必须要有,是声明具体语句的开始。
  6. print x 打印x的内容。
  7. end algorithm; 表示算法结束。
  8. ====必须有,是声明与TLA+的分割。

按Ctrl-T转换为TLA+后,即新建 Model后,运行,就可以在User Output框中看到输出了。

 外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

0x04 学习方式

通过PlusCal还是直接上手TLA+,看个人吧。数学基础好一点可以考虑直接上手TLA+,但如果是考虑在团队中推广,则从PlusCal比较好,可以照顾到团队中的大多数人。

0x05 参考

  1. TLA+主页 https://lamport.azurewebsites.net/tla/tla.html

欢迎关注订阅号![在这里插入图片描述](https://img-blog.csdnimg.cn/1d934d973c96495ca83a21000aea91cc.pn

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/989629.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

MATLAB中M文件编写

简介 所谓M文件就是将处理问题的各种命令融合到一个文件中,该文件以.m为扩展名。然后,由MATLAB系统编译M文件,得出相应的运行结果。M文件具有相当大的可开发性和扩展性。M文件有脚本文件和函数文件两种。脚本文件不需要输入参数,…

【美团3.18校招真题1】

大厂笔试真题网址:https://codefun2000.com/ 塔子哥刷题网站博客:https://blog.codefun2000.com/ 小美剪彩带 提交网址:https://codefun2000.com/p/P1088 题意:找出区间内不超过k种数字子数组的最大长度 使用双指针的方式&…

js使用crypto-js做加密解密

首先安装 crypto-js npm install crypto-js下面是完整代码,首先引入 crypto-js 里的 AES 和 enc,声明加密方法和解密方法进行测试 let { AES, enc } require("crypto-js");// 加密方法 function encryptString(str, key) {// 使用 AES 加密…

Unity Shader 溶解效果

一、效果图 二、原理分析 实现原理就是在片元着色器中&#xff0c;对像素点进行丢弃不显示。借助美术做的噪点图(利用噪点图中rgb中r值来做计算)。比如噪点图r值从0-1。我们从小到大让r值逐渐丢弃&#xff0c;比如刚开始r < 0.1丢弃&#xff0c;然后t < 0.2丢弃...知道t…

TinTin Web3 动态精选:以太坊基金会推出 EELS、Arbitrum Stylus 上线

TinTin 快讯由 TinTinLand 开发者技术社区打造&#xff0c;旨在为开发者提供最新的 Web3 新闻、市场时讯和技术更新。TinTin 快讯将以周为单位&#xff0c; 汇集当周内的行业热点并以快讯的形式排列成文。掌握一手的技术资讯和市场动态&#xff0c;将有助于 TinTinLand 社区的开…

基于SSM的汽车客运站管理系统

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;采用JSP技术开发 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#x…

无涯教程-JavaScript - TODAY函数

描述 TODAY函数返回当前日期的序列号。序列号是Excel用于日期和时间计算的日期时间代码。如果在输入函数之前单元格格式为"常规",Excel会将单元格格式更改为"日期"。如果要查看序列号,必须将单元格格式更改为"常规"或"数字"。 语法 …

应用人脸活体检测技术,保障刷脸支付安全畅通

如今&#xff0c;人脸识别已经走进了我们生活中的方方面面&#xff0c;拿起手机扫脸付账&#xff0c;扫描人脸完成考勤&#xff0c;刷脸入住酒店纷纷便利了我们的生活。而人脸识别里一项必不可少的技术就是人脸活体检测&#xff0c;即AI不但要确定这是“你”&#xff0c;还需要…

揭秘iPhone 15 Pro Max:苹果如何战胜三星

三星Galaxy S23 Ultra在我们的最佳拍照手机排行榜上名列前茅有几个原因&#xff0c;但iPhone 15 Pro Max正在努力夺回榜首——假设它有一个特定的功能。别误会我的意思&#xff0c;苹果一直在追赶三星&#xff0c;因为它的iPhone 14 Pro和14 Pro Max都表现强劲。尽管如此&#…

百度地图3D棱柱鼠标事件

百度地图2D API JavaScript API | 百度地图API SDK 百度地图3D API jspopularGL | 百度地图API SDK 3D棱柱效果如下 一. 渲染地图 var map new BMapGL.Map(container, {style: {styleJson: styleJson2} }) map.centerAndZoom(new BMapGL.Point(116.404, 39.925), 9); map…

《消息队列》专栏介绍

《消息队列》专栏介绍 目录 《消息队列》专栏介绍专栏导言什么是消息队列呢&#xff1f;应用场景&#xff08;作用&#xff09; 为什么要用消息队列呢&#xff1f;异步处理削峰填谷 举个例子 分布式消息队列的优势 应用解耦优点发布订阅优点 分布式消息队列应用场景不同消息队列…

[SSM]MyBatisPlus拓展

五、拓展篇 5.1逻辑删除 在电商网站中&#xff0c;我们会上架很多商品&#xff0c;这些商品下架以后&#xff0c;我们如果将这些商品从数据库中删除&#xff0c;那么在年底统计商品的时候&#xff0c;这个商品要统计的&#xff0c;所以这个商品信息我们是不能删除的。 如果商城…

球谐函数实现环境光照漫反射实践

该文章以及代码主要来自 图形学论文解析与复现&#xff1a;【论文复现】An Efficient Representation for Irradiance Environment Maps 作者&#xff1a;Monica的小甜甜 与原文的不同&#xff1a; 对一些有问题的地方进行了修改添加了注释对有疑问的地方添加了疑问点引入了其…

【笔试强训选择题】Day37.习题(错题)解析

作者简介&#xff1a;大家好&#xff0c;我是未央&#xff1b; 博客首页&#xff1a;未央.303 系列专栏&#xff1a;笔试强训选择题 每日一句&#xff1a;人的一生&#xff0c;可以有所作为的时机只有一次&#xff0c;那就是现在&#xff01;&#xff01; 文章目录 前言一、Day…

camx camera initial

qnx 平台中的camera hal 接口 HAL3Module&#xff1a;chi_hal_override_entry 在android 的中使用Camx 打开com.qti.chi.override.so进行注册hal ops 操作接口 camhal3module.cpp 中的构造函数HAL3Module中 CHIHALOverrideEntry funcCHIHALOverrideEntry reinterpret_cast…

即拼七人拼团系统开发模式的奖励机制都有哪些?

即拼七人拼团是市场上非常火爆的商业模式之一&#xff0c;它通过团购机制、互动社交和抽奖等方式&#xff0c;有效解决了电商平台的复购难题。不仅可以降低商品价格&#xff0c;还能够增加用户的参与感和购物乐趣&#xff0c;提升平台的用户粘性和产品销量。下面就来具体说一下…

驱动轴相机参数设置Web前端界面开发

一、基于Django的Web应用界面的开发&#xff1a; 在Realtimeresults.html上添加一个按钮组件&#xff0c;获取检测到的轴型和车轮信息&#xff0c;点击后可以获取package.json里存放的json数据&#xff0c;效果如下&#xff1a; 实现逻辑&#xff1a;需要从URL设置、视图函数、…

YOLOV8从零搭建一套目标检测系统(修改model结构必看)附一份工业缺陷检测数据集

目录 1.YOLOV8介绍 2.YOLOV8安装 2.1环境配置 3.数据集准备 1.YOLOV8介绍 Yolov8结构图&#xff1a; YoloV8相对于YoloV5的改进点&#xff1a; Replace the C3 module with the C2f module. Replace the first 6x6 Conv with 3x3 Conv in the Backbone. Delete two Convs …

Mysql--事务

事务 开始之前&#xff0c;让我们先想一个场景&#xff0c;有的时候&#xff0c;为了完成某个工作&#xff0c;需要完成多种sql操作 比如转账 再比如下单 第一步 我的账户余额减少 第二步 商品的库存要减少 第三步 订单表中要新增一项 事务的本质&#xff0c;就是为了把多个操…

Excel数学、工程和科学计算插件:FORMULADESK Studio

如果 Excel 是您的武器 - 让我们磨砺您的剑&#xff01;为整天使用 Excel 的人们提供创新的 Excel 加载项&#xff0c;你需要这个 FORMULADESK Studio。。。 Excel 插件为任何使用 Excel 执行数学、工程和科学计算的人提供了必备工具。 * 将公式视为真正的数学方程 * 为您的公…