【PL理论】(24) C- 语言:有块的作用域 | 更新的语法 | 新的语义域 | 环境 vs. 内存

  • 💭 写在前面:我们将再次扩展之前的C语言,让我们向这种语言引入“作用域”的概念。

目录

0x00 C- 语言:有块的作用域

0x01 C- 语言:更新的语法

0x02 新的语义域

0x03 环境 vs. 内存


0x00 C- 语言:有块的作用域

现在,你必须在使用变量之前先声明它!

同样,你可以拥有一个变量,它是在 if while 语句的块 { } 中局部的。

下面是一个用新的 C- 写的示例程序,请注意,我们有像 var x = 5 这样的声明

var x = 5;
var i = 1;
var s = 0;while (i < 10) {var x = i + i;  // 这个 x 只在循环内部绑定s = s + x;i = i + 1
};
x = x + s   // 'x' 将会变成 5 + 90 = 95

0x01 C- 语言:更新的语法

为简化起见,这次我不会介绍指针的概念给 C-

相反,我们有了变量声明的语句,必须同时声明和初始化。

0x02 新的语义域

值的域与之前相同:

\color{} v\in Val=Z+B

现在程序状态包括环境和内存,语句的执行将改变这个状态:

\color{} \rho \in Env=Var\rightarrow Loc
\color{} M\in Mem=Loc\rightarrow Val

𝑳𝒐𝒄 是一组有效的内存位置 (地址),即 \color{} Loc=\left \{ l_1,l_2,...,l_N \right \},其中 \color{} N 是最大内存大小。

下面,我们来更仔细地看一下环境和内存。

0x03 环境 vs. 内存

在函数式语言中,环境通常直接将一个名称映射到一个值。

在具有内存的命令式语言中,环境通常将一个名称映射到内存位置 (地址) 。

然后,内存将每个位置映射到一个值,在下面的图中,\color{} l_1,l_2,l_2 表示内存位置。

在先前的示例中,当 inner \color{} x 被声明时,这些状态应该如何改变?

var x = 5;
var i = 1;
var s = 0;
while (i < 10) {var x = i + i;...
}

在先前的示例中,当内部 \color{} x 被声明时,这些状态应该如何改变?

  • 名称 x 必须更改为指向新的位置 \color{} l_4
  • 并且必须创建一个新的内存插槽
  • 请注意,\color{} l_1 的内存插槽仍然存在内存中


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

📜 参考资料 

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

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

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

相关文章

RDF 简介

RDF 简介 1. 引言 资源描述框架(Resource Description Framework,简称RDF)是一种用于描述网络资源的标准数据模型。它提供了一种通用的框架,用于表达关于资源的元数据,即数据的数据。RDF是语义网的核心技术之一,旨在使数据不仅能够被计算机处理,还能被计算机理解。在本…

图像去重技术:MD5哈希在自动化中的应用

目录 前言 一、MD5的介绍 二、常见的MD5哈希用途 三、hashlib库介绍 四、实际应用-图片去重 前言 MD5&#xff08;Message Digest Algorithm 5&#xff09;是一种广泛使用的哈希函数&#xff0c;它可以产生一个128位&#xff08;16字节&#xff09;的哈希值&#xff0c;通…

Golang | Leetcode Golang题解之第145题二叉树的后序遍历

题目&#xff1a; 题解&#xff1a; func reverse(a []int) {for i, n : 0, len(a); i < n/2; i {a[i], a[n-1-i] a[n-1-i], a[i]} }func postorderTraversal(root *TreeNode) (res []int) {addPath : func(node *TreeNode) {resSize : len(res)for ; node ! nil; node n…

大语言模型QA

Q:关于 Yi-9B 通过 input/output cosine 来分析模型,可能文档里没有把前提说明白。该指标确实存在你们提到的不同模型大小不可比的问题。所以我们比较的是同一个模型在不同训练阶段,以及 layer 深度相同的dense models 之间的比较。除了发现yi-6B/34B 随着训练 tokens 的增加…

11.NiO多线程优化

场景 单线程配合一个selector选择器管理多个channel上的事件。 问题 1.多核cpu,如果是单线程就会让cpu的力量被浪费。 2.单线程处理多个事件,如果某个事件耗费时间比较久,就会影响其它事件的处理。 例如:redis单线程写的,底层网络用的类似于nio和selector方式编写,所…

Polkadot <> Kusama 桥:打造无信任互操作性的开创性范例

原文&#xff1a;https://www.parity.io/blog/trustless-interoperability 作者&#xff1a;Adrian Catangiu&#xff5c;Rust 区块链核心工程师&#xff0c;Parity Technologies 编译&#xff1a;OneBlock Polkadot <> Kusama 桥是无信任互操作性的开创性范例。本文深…

TCP相关细节

1. 常用TCP参数 1.1 ReceiveBufferSize ReceiveBuffersize指定了操作系统读缓冲区的大小&#xff0c; 默认值是8192(如图5-10 所示)。在第4章的例子中,会有"假设操作系统缓冲区的长度是8" 这样的描述,可通过socket.ReceiveBufferSize 8 实现。当接收端缓冲区满了的时…

C#面:C#构造器Constructor是否可以被继承?是否可以被Override?

C#构造器&#xff08;Constructor&#xff09;不能被继承&#xff0c;也不能被重写&#xff08;Override&#xff09;。 构造器是用于创建和初始化对象的特殊方法。它在对象创建时自动调用&#xff0c;并负责初始化对象的成员变量和执行其他必要的操作。构造器的名称与类名相同…

实用软件下载:XMind 2024最新安装包及详细安装教程

​XMind不仅是一款易用且功能强大的思维导图软件&#xff0c;也是一个开源项目。XMind以构建一个社区向全球提供领先的跨平台思维导图和头脑风暴软件为目标&#xff0c;以帮助用户提升效率。XMind公司是XMind开源项目的主要代码贡献者&#xff0c;与此同时&#xff0c;我们欢迎…

Stable Diffusion本地化部署详细攻略

一、硬件要求 内存&#xff1a;至少16GB 硬盘&#xff1a;至少60GB以上的磁盘空间&#xff0c;推荐SSD固态硬盘 显卡&#xff1a;推荐NVIDIA显卡 显存&#xff1a;至少4GB Stabl Diffusion因为是在本地部署&#xff0c;对显卡的要求比较高&#xff0c;如果经济能力可以的话…

AI大模型爆发,你还不学就晚了!抓住时代机遇,快速入门指南!

AI大模型风起云涌&#xff0c;你准备好乘风破浪了吗&#xff1f; 在一个阳光明媚的午后&#xff0c;小李坐在自己的工位上&#xff0c;眼前的代码如同繁星般繁多。他是一名资深的软件工程师&#xff0c;但在最近的技术浪潮中&#xff0c;他却感到了一丝不安。他的朋友圈里&…

ubuntu20.0.4下安装PyTorch

参考文档 https://datawhalechina.github.io/thorough-pytorch/%E7%AC%AC%E4%B8%80%E7%AB%A0/1.2%20PyTorch%E7%9A%84%E5%AE%89%E8%A3%85.html 1&#xff1a;安装Anaconda 登录Anaconda | Individual Edition&#xff0c;https://www.anaconda.com/download/success &#xff…

RN6752V1 高性能AHD转MIPIDVPBT656BT601芯片方案,目前适用于车载方案居多

RN6752V1描述&#xff1a; RN6752V1是一种模拟高清晰度&#xff08;模拟高清&#xff09;视频解码器IC&#xff0c;专为汽车应用而设计。它集成了所有必要的功能块&#xff1a; AFE&#xff0c;PLL&#xff0c;解码逻辑&#xff0c;MIPI和I2C接口等&#xff0c;在一个小的5mm …

在 Python 中创建具有当前日期和时间的文件名

在 Python 中使用当前日期和时间创建文件名的一种方法是使用 datetime 模块。 要在 Python 中格式化 datetime 对象&#xff0c;我们可以使用 strftime&#xff08;&#xff09; 方法&#xff0c;使用 strftime&#xff08;&#xff09; 方法创建格式化的日期时间字符串。 示…

LLM资料大全:文本多模态大模型、垂直领域微调模型、STF数据集、训练微调部署框架、提示词工程等

前言 自ChatGPT为代表的大语言模型&#xff08;Large Language Model, LLM&#xff09;出现以后&#xff0c;由于其惊人的类通用人工智能&#xff08;AGI&#xff09;的能力&#xff0c;掀起了新一轮[自然语言处理]领域的研究和应用的浪潮。尤其是以ChatGLM、LLaMA等平民玩家都…

【ARM Cache 及 MMU 系列文章 6.5 -- 如何进行 Cache miss 统计?】

请阅读【ARM Cache 及 MMU/MPU 系列文章专栏导读】 及【嵌入式开发学习必备专栏】 文章目录 ARM Cache Miss 统计Cache 多层架构简介Cache 未命中的类型Cache 未命中统计Cache miss 统计代码实现Cache Miss 统计意义ARM Cache Miss 统计 在ARMv8/v9架构中,缓存未命中(Cache …

深度解析服务发布策略之金丝雀发布

目录 什么是金丝雀发布&#xff08;Canary Release&#xff09; 金丝雀发布的原理 金丝雀发布的优点 金丝雀发布的注意事项 金丝雀发布的实现步骤 小结 在软件开发和运维中&#xff0c;发布新版本是一个风险较高的操作。为了降低风险&#xff0c;提高发布的稳定性和可靠性…

人工智能在风险管理中的创新之路

随着科技的飞速发展&#xff0c;人工智能&#xff08;AI&#xff09;已经渗透到我们生活的方方面面&#xff0c;尤其在风险管理领域&#xff0c;其展现出的巨大潜力令人瞩目。风险管理&#xff0c;作为一个涉及广泛领域的复杂系统&#xff0c;正逐渐依赖于AI技术来提升效率和准…

简单了解CPU的工作原理

目录 一、基本结构以及对应功能 &#xff08;1&#xff09;基本结构 &#xff08;2&#xff09;几个重要寄存器的详细介绍 操作码 (Opcode) 操作数 (Operands) 指令表 (Instruction Table) 第一个&#xff1a;程序计数器 (PC) 第二个&#xff1a;指令寄存器 (IR&#x…

【Arthas案例】某应用依赖两个GAV不同但包含两个相同全限定类名StaticLoggerBinder,引起log4j.Level类找不到异常

3分钟内解决问题 两个不同的GAV依赖冲突&#xff0c;包含相同全限定类名&#xff0c;引起ClassNotFoundException Maven依赖的三坐标体系GAV(G-groupId&#xff0c;A-artifactId&#xff0c;V-version) 【案例1】某应用依赖两个GAV不同的jar&#xff0c;但包含两个相同全限定类…