【PL理论】(31) 类型系统:静态分析 (Static Analysis) | 静态类型系统 | 什么是类型?

news2024/11/26 17:22:08

  • 💭 写在前面:本章我们将进入类型系统的讲解,回顾一下之前我们整理的 F- 语言,然后介绍一下静态分析和静态类型系统。讨论程序员该如何处理一些 bug,有没有完美的静态分析器。

目录

0x00 回顾:F- 语言

0x01 静态分析(Static Analysis)

0x02 静态类型系统(Static Type System)

0x03 什么是类型?


0x00 回顾:F- 语言

我们之前定义了简化版 F# 的语法和语义,并将其命名为 F-。

这是没有匿名 / 递归函数的版本:

我们还实现了一个解释器,根据语义定义运行程序,程序的执行意味着对F中的表达式进行求值。

floyd:~/Lab3$ cd FMinus/
floyd:~/Lab3/FMinus$ ls
FMinus.fsproj src testcase
floyd:~/Lab3/FMinus$ ls src
AST.fs FMinus.fs Lexer.fsl Main.fs Parser.fsy Types.fs

(let rec evalExp (exp: Exp) (env: Env) : Val =)

请记住,某些在语法上有效的 F 程序未定义其语义。直观地说,这种情况相当于程序错误(漏洞),例如:类型不匹配、使用未绑定变量、除零错误,到目前为止,这些错误是在运行时捕获的(通过引发异常)

在现实世界中的编程语言中,还可能存在各种其他类型的错误(bug),例如:缓冲区溢出、悬空指针、未初始化数据的使用,等等。

有时,即使程序的语义定义是明确的,也可能存在问题,例如:逻辑错误、内存泄漏,等等。

0x01 静态分析(Static Analysis)

每个人都知道漏洞普遍存在且很重要,程序员无法避免犯错,我们应该如何处理这些漏洞?

开发一种能够在运行前检测漏洞的自动化技术怎么样?

  • 自动化:由程序分析,而非人工
  • 运行前:防止其在实际运行中引发严重问题

这种技术(或用于此的工具/程序)被称为静态分析(静态分析器),请记住,在编程语言中,静态表示 "在运行前决定"。

但遗憾的是,完美的静态分析器是不存在的,编写一个完美的程序分析算法被证明是不可能的(不可判定问题),参见自动机理论中的停机问题。

这里,完美是指健全性和完备性:

  • 健全性:有错误的程序总是被拒绝 / 从不遗漏错误 / 如果程序通过检查,保证没有错误
  • 完备性:没有错误的程序总是被接受 / 从不拒绝安全的程序 / 如果被拒绝,必定有错误

我们必须在健全性和完备性之间做出取舍,有时,我们甚至两者都要放弃。

尽管如此,这样的静态分析器(带有近似性)仍然是有用的。

0x02 静态类型系统(Static Type System)

静态类型系统是最原始和最流行的静态分析器形式之一,其目标是在运行前自动检测类型错误,通常作为编译器或解释器的一部分配备。

我们应该选择哪一方面:健全性还是完备性? F# 采用的是健全(但不完备)的类型系统,本专栏我们也将讨论 F- 的健全类型系统。

0x03 什么是类型?

类型是一组值,或者可以将其视为值的抽象。

bool: { 真, 假 }

int: { … , -2, -1, 0, 1, 2, … }

int -> int:接受一个整数并返回一个整数的函数集合:

let incr : int -> int = fun x -> x + 1 

'a -> 'a:接受任意类型 'a 并返回相同类型的函数集合:

let identity : 'a -> 'a = fun x -> x


📌 [ 笔者 ]   王亦优
📃 [ 更新 ]   2024.6.10
❌ [ 勘误 ]   /* 暂无 */
📜 [ 声明 ]   由于作者水平有限,本文有错误和不准确之处在所难免,
              本人也很想知道这些错误,恳望读者批评指正!

📜 参考资料 

Microsoft. MSDN(Microsoft Developer Network)[EB/OL]. []. .

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

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

相关文章

Part 4.4 树形动态规划

树形动态规划,即在树上进行的动态规划。 因为树的递归性质,树形动态规划一般都是递归求解的。 没有上司的舞会 题目描述 某大学有 n n n 个职员,编号为 1 … n 1\ldots n 1…n。 他们之间有从属关系,也就是说他们的关系就像…

Sectigo OV通配符SSL证书多少钱?

在网络安全领域,SSL数字证书起着至关重要的作用,尤其是在保护网站和用户信息方面。而Sectigo OV通配符证书是一种常用的数字证书之一,它能够为同一域名下的多个子域名提供保护,还能够通过企业验证来增强安全性。那么,对…

对input输入框的正则限制

一、0-100的整数 正则&#xff1a; const inputRules ref([{required: false,trigger: "blur",validator: (rule, value, callback) > {const reg /^[0-9]$/; // 只允许整数if ((0 < value && value < 100 && reg.test(value)) ||valu…

如何打开azw/azw3文件?两个步骤解决

要打开AZW或AZW3格式的电子书&#xff0c;遵循以下步骤&#xff0c;无论你是Windows、Mac用户&#xff0c;还是使用移动设备&#xff0c;都可以轻松阅读这些亚马逊Kindle专用格式的电子书&#xff1a; 第一步&#xff1a;安装NeatReader&#xff1a; 访问NeatReader的官方网站或…

MySQl基础入门⑯【操作视图】完结

上一边文章内容 表准备 CREATE TABLE Students (id INT AUTO_INCREMENT PRIMARY KEY,name VARCHAR(100),email VARCHAR(255),major VARCHAR(100),score int,phone_number VARCHAR(20),entry_year INT,salary DECIMAL(10, 2) );数据准备 INSERT INTO Students (id, name, ema…

谷歌可穿戴设备与生成式AI模型PH-LLM:打造个性化健康监测与指导的新纪元

随着移动和可穿戴设备的普及&#xff0c;它们为个人健康监测提供了前所未有的机会&#xff0c;通过收集步数、心率变异性、睡眠持续时间等连续、精细和纵向数据&#xff0c;帮助用户实时跟踪自己的健康状况。这些数据不仅可以用于简单的监测&#xff0c;还可以结合生成式人工智…

什么是模型轻量化?如何自动进行模型轻量化?

轻量化是已经是3D可视化业界人所共知的一个概念&#xff0c;虽然至今没有任何严谨的学术或者理论定义&#xff0c;但是这个概念已经几乎成为了行业的标准。它的大意是说&#xff0c;一个适用用于浏览器端渲染的模型数据&#xff0c;包括几何数据和行业数据&#xff0c;必然可以…

数据库、中台、报表平台之间的关系

我最近在接触报表平台和中台&#xff0c;发现他们跟我平常用的数据库不是一个东西。然后&#xff0c;我开始了摸索他们的过程&#xff0c;终于&#xff0c;我在理清他们的关系以后&#xff0c;简单写一个入门级的区分。 数据库&#xff1a; 定义&#xff1a; 数据库是被长期存…

MySQL 下载及安装教程

MySQL是一款开源的关系数据库管理系统&#xff0c;被广泛应用于各种应用程序和网站的数据管理中。以下是下载和安装MySQL的详细步骤。 1. 访问MySQL官方网站 首先&#xff0c;打开你的浏览器&#xff0c;访问MySQL官方网站&#xff1a; MySQL官方网站: https://www.mysql.com …

同三维T80004EHU 高清HDMI/USB编码器

1路HDMI或1路USB输入&#xff0c;带1路3.5音频输入&#xff0c;高清1080P60 来百度APP畅享高清图片 产品简介&#xff1a; 同三维T80004EHU 高清 HDMI/USB编码器是一款1路HDMI或1路USB高清编码器&#xff0c;。可将 HDMI 或USB视频源编码压缩成网络流&#xff0c;通过有线网络…

springboot 3.x 之 集成rabbitmq实现动态发送消息给不同的队列

背景 实际项目中遇到针对不同类型的消息&#xff0c;发送消息到不同的队列&#xff0c;而且队列可能还不存在&#xff0c;需要动态创建&#xff0c;于是写了如下代码&#xff0c;实践发现没啥问题&#xff0c;这里分享下。 环境 springboot 3.2 JDK 17 rabbitMQ模型介绍 图片…

银河麒麟系统升级openssh至9.7p1

银河麒麟系统升级openssh至9.7p1 升级过程建议参照链接 https://blog.csdn.net/zt19820204/article/details/137877652 当前环境 开始安装 # 1.查看当前服务器的openssh版本 ssh -V# 2.openssh下载地址 https://cdn.openbsd.org/pub/OpenBSD/OpenSSH/portable/# 3.升级opens…

想停,不可能!

转融通出借数量突然暴增&#xff0c;逼得证监会火速出来辟谣&#xff0c;这是坊间这几天传得&#xff08;最&#xff09;火的事。 事情呢&#xff0c;一句话概括就是光6月12号那一天&#xff0c;就新增了1.7亿股&#xff0c;吓得大家都说是转融通疯狂报复来了&#xff01;但官家…

Google 新 AI 为视频生成配乐和对白;Runway 发布 Gen-3 视频生成模型丨 RTE 开发者日报 Vol.226

开发者朋友们大家好&#xff1a; 这里是 「RTE 开发者日报」 &#xff0c;每天和大家一起看新闻、聊八卦。我们的社区编辑团队会整理分享 RTE&#xff08;Real-Time Engagement&#xff09; 领域内「有话题的新闻」、「有态度的观点」、「有意思的数据」、「有思考的文章」、「…

烟雾自动监测识别摄像机

烟雾自动监测识别摄像机是现代城市安全管理的关键装备&#xff0c;其在各类场所的应用日益广泛&#xff0c;尤其在大型建筑、工厂和公共设施中&#xff0c;其重要性更为突出。该类摄像机采用先进的传感技术&#xff0c;能够实时监测环境中的烟雾密度和变化。通过高灵敏度的传感…

批量创建文件夹 就是这么简单 一招创建1000+文件夹

批量创建文件夹 就是这么简单 一招创建1000文件夹 在工作中&#xff0c;或者生活中&#xff0c;我们经常要用到批量创建文件夹&#xff0c;并且根据不同的工作需求&#xff0c;要求是不一样的&#xff0c;比如有些人需要创建上千个不一样名称的文件夹&#xff0c;如果靠手动创…

开发淘宝在线扭蛋机小程序:关键点与实战技巧

引言 在上一篇文章中&#xff0c;我们介绍了开发淘宝在线扭蛋机小程序的基本步骤和前期准备。但在实际开发过程中&#xff0c;还有一些关键点和实战技巧需要特别注意。本文将为您详细阐述这些关键点和技巧。 一、关键点 用户体验&#xff1a; 简洁明了的界面设计&#xff0c…

AI 视频生成工具 Sora 横空出世!一文带你了解 Sora:简介|主要功能|使用场景|平替工具等!

要说最近的头条热搜&#xff0c;非 Sora 莫属&#xff01;Sora 的诞生&#xff0c;再一次引发了人们对 AI 人工智能以及 AIGC 的关注。 对第一次听说 Sora 的人&#xff0c;可能会好奇&#xff0c;大家都在说的 Sora 是什么&#xff1f; Sora 是什么软件&#xff1f; Sora&a…

录制视频软件哪个好?录制视频,4款好软件推荐

随着网络技术的飞速发展和社交媒体的普及&#xff0c;录制视频已经成为人们记录生活、分享知识和展示才华的重要方式。在众多录制视频软件中&#xff0c;如何挑选一款功能强大、操作简便的工具&#xff0c;成为了许多用户的难题。本文将为您推荐4款优秀的录制视频软件&#xff…