TLA+学习记录1——hello world
0x01 TLA+是个好工具
编程人员一个好习惯是凡事都想偷懒,当然是指要科学地偷懒,而不是真的偷懒。一直想找到一种能检验写出的代码,做出的设计是否真的完全正确,而不是靠经验检视、代码Review、反复测试去检验。因为上述方法不管怎么努力都有可能受限于各种条件而无法给出可靠的结论,而且还要花费大量精力。想来想去可行的方式就是用一种高层次的抽象模型去描述、模拟整个系统,这样就能以较低的成本达成这样的效果。个人水平有限,还没想出这种语言应该是什么样子的。直到看到了TLA+。
初步学习了下,发现这正是我想找的工具。 对编码和设计来说,”偷懒到起点提前做正确性评估“。
TLA+是每个做分布式或并发系统开发人员都应该学习的工具。它由牛人Leslie Lamport(Paxos算法的作者)开发的,专门用于分布式算法验证的工具。对于软件开发者来说,它就是所有工具中的”终极武器“。
但不是每个人都必须学的。它确实对使用者有要求。
- 系统抽象能力。最终模型的好坏取决于使用者对系统的抽象质量,开发经验少的人可能不太适合。
- 数学基础。TLA+出的模型就是一页页的数学公式,数学基础不好看见公式就头疼的人可能也不太适合,当然可以使用 PlusCal语言减小这一个要求,但想发挥TLA+全部能力,还是建议直接使用TLA+。
AWS用它检验关键服务、分布式算法的正确性,发现了许多常规手段无法发现的疑难BUG,包含可能导致用户数据丢失的严重问题。开源社区用它检查分布式算法,比如ZooKeeper社区也使用它,检查FLE、ZAB协议。甚至有人能用它检查一段有隐晦BUG的Go代码。阿里云也在用它,检查关键算法的正确性。
详细介绍可以见参考章节首页链接。
0x02 Hello World
一个合法的Hello Word PlusCal算法如下。
------------------------------ MODULE Session2 ------------------------------
EXTENDS TLC
(* --algorithm Basic1variables x = 1;begin
print "hello world";
end algorithm; *)
====
------- MODULE Session2 -------行是Spec的命名,必须要有,新建Spec时自动生成的。EXTENDS TLC是引入TLC组件,因为print语句在其中定义。(* *)是注释块,包含了CalPlus算法,--algorithm Basic1是算法的开始,CalPlus以注释寄存在TLA+的Spec中。Basic1是算法名称,可以是合法的TLA+名称字符。- variables 为声明变量行。这里不是必须的,因为我们没用到。
begin必须要有,是声明具体语句的开始。print x打印x的内容。end algorithm;表示算法结束。====必须有,是声明与TLA+的分割。
按Ctrl-T转换为TLA+后,即新建 Model后,运行,就可以在User Output框中看到输出了。

0x04 学习方式
通过PlusCal还是直接上手TLA+,看个人吧。数学基础好一点可以考虑直接上手TLA+,但如果是考虑在团队中推广,则从PlusCal比较好,可以照顾到团队中的大多数人。
0x05 参考
- TLA+主页 https://lamport.azurewebsites.net/tla/tla.html
欢迎关注订阅号
相关文章:
TLA+学习记录1——hello world
0x01 TLA是个好工具 编程人员一个好习惯是凡事都想偷懒,当然是指要科学地偷懒,而不是真的偷懒。一直想找到一种能检验写出的代码,做出的设计是否真的完全正确,而不是靠经验检视、代码Review、反复测试去检验。因为上述方法不管怎…...
基于QWebEngine实现无头浏览器
无头浏览器 无头浏览器(Headless Browser)是一种没有图形用户界面(GUI)的浏览器。它通过在内存中渲染页面,然后将结果发送回请求它的用户或程序来实现对网页的访问,而不会在屏幕上显示网页。这种方式使得无…...
编译Micropython固件For树莓派Raspberry Pi Pico
1. 前言 由于想把自己编写的py文件打包的固件中,所以记录下如何编译micropython固件和打包。 2. 编译 最简单的方式就是在你的树莓派上进行,我用的是RP Pi2 下载所需文件: $ cd ~/ $ mkdir pico $ cd pico $ git clone -b pico https://gi…...
基于googlenet网络的动物种类识别算法matlab仿真
目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 5.算法完整程序工程 1.算法运行效果图预览 2.算法运行软件版本 matlab2022a 3.部分核心程序 ................................................................. % 获取输入层的尺寸 Inp…...
如何用Jmeter编写脚本压测?
随着商业业务不断扩张,调用adsearch服务频率越来越高,所以这次想做个压测,了解目前多少并发量可以到达adsearch服务的界值。 这次选用的jmeter压测工具,压测思路如图: 一、日志入参 日志选取的adsearch 的 getads部分…...
SpingMVC之拦截器使用详解
拦截器概述 SpringMVC的处理器拦截器,类似于Servlet开发中的过滤器Filter,用于对处理器进行预处理和后处理。 过滤器和拦截器区别 过滤器:依赖于servlet容器。在实现上基于函数回调,可以对几乎所有请求进行过滤,但是缺点是一个过…...
motionface respeak新的aigc视频与音频对口型数字人
在当今的数字化时代,人工智能(AI)正在逐渐渗透到我们生活的方方面面。其中,AI技术在视频制作和处理领域的应用也日益广泛。本文将探讨如何利用AI技术实现视频中人脸与音频同步对口型的方法,旨在进一步丰富视频制作的效…...
【计算机网络】 静态库与动态库
文章目录 静态库实践使用方法总结 动态库实践使用方法总结 静态库与动态库的优缺点静态库优点缺点 动态库缺点优点 库有两种:静态库(.a、.lib)和动态库(.so、.dll)。所谓静态、动态是指链接。静态库是将整个库文件都拷…...
web端调用本地摄像头麦克风+WebRTC腾讯云,实现直播功能
目录 关于直播直播流程直播视频格式封装推流和拉流 获取摄像头和麦克风权限navigator.getUserMedia()MediaDevices.getUserMedia() WebRTC腾讯云快直播 关于直播 视频直播技术大全、直播架构、技术原理和实现思路方案整理 直播流程 视频采集端: 1、视频采集&#…...
React笔记(八)Redux
一、安装和配置 React 官方并没有提供对应的状态机插件,因此,我们需要下载第三方的状态机插件 —— Redux。 1、下载Redux 在终端中定位到项目根目录,然后执行以下命令下载 Redux npm i redux 2、创建配置文件 在 React 中,…...
数据库 | 数据库概述、关系型数据库、非关系型数据库
目录: 1.数据库:1.1 数据库的含义1.2 数据库的特点 2.数据表3.数据库管理系统4.数据库系统5.关系型数据库 和 非关系型数据库:5.1 关系型数据库5.2 关系型数据库“优势”5.3 非关系型数据库 6.关系型数据库 和 非关系型数据库 的“区别” 1.数…...
【备战csp-j】 csp常考题目详解(4)
四.数值转换与编码 1. 十进制数 11/128 可用二进制数码序列表示为( ) 。 A.1011/1000000 B.1011/100000000 C.0.001011 D.0.0001011 答案:D 解析:暂时未找到解决方法,以后会解决。 2. 算式(2047)10 - (3FF)16 + …...
linux中常见服务端安装
linux安装服务脚本 1、yum安装 # 通过apt安装yum apt install yum # yum安装软件 yum install pam-devel # yum 卸载 yum remove pam-devel2、rpm安装 # 安装 rpm -i example.rpm #安装 example.rpm 包; rpm -iv example.rpm #安装 example.rpm 包并在安装过程…...
L1-058 6翻了(Python实现) 测试点全过
前言: {\color{Blue}前言:} 前言: 本系列题使用的是,“PTA中的团体程序设计天梯赛——练习集”的题库,难度有L1、L2、L3三个等级,分别对应团体程序设计天梯赛的三个难度。更新取决于题目的难度,…...
初学Python记
Python这个编程语言的大名当然听说过了呀,这几年特别火,火的一塌涂地。大家可以回忆一下:朋友圈推荐的广告里经常可以看见python的网课广告。 本学期,学校开设了python课程,这几天学习了一下入了一下门,感…...
计算机竞赛 基于深度学习的目标检测算法
文章目录 1 简介2 目标检测概念3 目标分类、定位、检测示例4 传统目标检测5 两类目标检测算法5.1 相关研究5.1.1 选择性搜索5.1.2 OverFeat 5.2 基于区域提名的方法5.2.1 R-CNN5.2.2 SPP-net5.2.3 Fast R-CNN 5.3 端到端的方法YOLOSSD 6 人体检测结果7 最后 1 简介 ǵ…...
sentinel-core
引入依赖<dependencies><dependency><groupId>com.alibaba.csp</groupId><artifactId>sentinel-core</artifactId></dependency><dependency><groupId>com.alibaba.csp</groupId><artifactId>sentinel-anno…...
【美团3.18校招真题1】
大厂笔试真题网址:https://codefun2000.com/ 塔子哥刷题网站博客:https://blog.codefun2000.com/ 小美剪彩带 提交网址:https://codefun2000.com/p/P1088 题意:找出区间内不超过k种数字子数组的最大长度 使用双指针的方式&…...
Springboot 实践(14)spring config 配置与运用--手动刷新
前文讲解Spring Cloud zuul 实现了SpringbootAction-One和SpringbootAction-two两个项目的路由切换,正确访问到项目中的资源。这两个项目各自拥有一份application.yml项目配置文件,配置文件中有一部分相同的配置参数,如果涉及到修改…...
MyBatisPlus枚举类最佳实践(非常典型和高效的枚举类写法)
目录 1、MyBatisPlus枚举类最佳实践 2、枚举类的作用及问题 3、MyBatisPlus注解实现枚举最佳实践 4、简单来说 5、下面我们看一个使用上述注解的完整枚举类示例: (1)枚举类: (2)DTO类: 6、根据上面…...
MoveIt新手避坑:Gazebo仿真时遇到‘Unable to identify controllers‘报错,检查这个launch文件就对了
MoveIt新手避坑:Gazebo仿真时遇到Unable to identify controllers报错解决方案 当你第一次尝试在Gazebo中运行MoveIt控制机械臂时,看到终端弹出鲜红的报错信息"Unable to identify any set of controllers that can actuate the specified joints&q…...
Docker vs Pip:MinerU本地部署全攻略,哪种方式更适合你的PDF解析需求?
Docker与Pip部署MinerU深度对比:如何为PDF解析选择最佳方案 在文档自动化处理领域,PDF解析工具的选择往往直接影响工作效率。MinerU作为一款开源的PDF解析工具,因其对复杂排版的良好支持而受到开发者青睐。但面对Pip和Docker两种主流部署方式…...
还在为Apex Legends的后坐力烦恼吗?这款智能压枪宏让你轻松掌握精准射击
还在为Apex Legends的后坐力烦恼吗?这款智能压枪宏让你轻松掌握精准射击 【免费下载链接】Apex-NoRecoil-2021 Scripts to reduce recoil for Apex Legends. (auto weapon detection, support multiple resolutions) 项目地址: https://gitcode.com/gh_mirrors/ap…...
VMWare 虚拟机中运行 Android-x86 的完整指南(新手友好版)
1. 为什么要在VMWare里跑Android-x86? 很多朋友可能好奇,明明手机就能跑安卓系统,为什么还要在电脑上折腾虚拟机?其实这个需求在开发者和极客圈里特别常见。我最早接触Android-x86是因为要测试一个APP在不同分辨率设备上的表现&a…...
如何让电子书阅读效率提升200%?这款开源神器彻底解决格式兼容与跨设备难题
如何让电子书阅读效率提升200%?这款开源神器彻底解决格式兼容与跨设备难题 【免费下载链接】koreader An ebook reader application supporting PDF, DjVu, EPUB, FB2 and many more formats, running on Cervantes, Kindle, Kobo, PocketBook and Android devices …...
计算机毕设 java 基于 HTML5 的酒店预订管理系统 java 基于 HTML5 的智能酒店预订系统 java 基于 HTML5 的酒店在线预订管理平台
计算机毕设 java 基于 HTML5 的酒店预订管理系统 4u2r79(配套有源码 程序 mysql 数据库 论文)本套源码可以先看具体功能演示视频领取,文末有联 xi 可分享在互联网和移动互联网飞速发展的当下,线上预订已成为酒店行业的主流消费模式…...
ESXI系统安装全攻略:从U盘启动到网络配置
1. ESXI系统安装前的准备工作 第一次接触ESXI系统的朋友可能会觉得有点懵,其实它就是一个专门用于虚拟化的操作系统。简单来说,它能让一台物理服务器变成多台虚拟服务器,特别适合用来搭建测试环境或者部署云服务。我自己在数据中心工作时&…...
YOLO12与Qt结合:跨平台目标检测应用开发
YOLO12与Qt结合:跨平台目标检测应用开发 1. 引言 想象一下,你开发了一个优秀的目标检测模型,能够在各种场景下准确识别物体。但当你想要把它部署到不同设备上时,却遇到了麻烦:Windows、macOS、Linux各有各的兼容性问…...
Granite TimeSeries FlowState R1 模型效果深度评测:与传统统计方法的对比
Granite TimeSeries FlowState R1 模型效果深度评测:与传统统计方法的对比 时间序列预测这事儿,听起来挺专业,其实离我们生活很近。比如,电商平台要预测下个月的销售额,电力公司要预估明天的用电负荷,甚至…...
FLUX.1-dev-fp8-dit文生图GPU高性能部署:FP8+Triton内核优化推理延迟实测
FLUX.1-dev-fp8-dit文生图GPU高性能部署:FP8Triton内核优化推理延迟实测 最近在折腾AI图像生成,发现了一个性能怪兽——FLUX.1-dev-fp8-dit模型。这名字听起来有点复杂,简单说,它是一个专门为GPU优化过的文生图模型,主…...
