自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(13)
  • 问答 (2)
  • 收藏
  • 关注

原创 【TAPL学习笔记 5】Typed Arithmetic Expressions

本章我们使用静态类型来增广第三章的简单语言。

2024-07-05 21:25:25 268

原创 【TAPL学习笔记 4】Nameless Representation of Terms

这里解释一下下面的情况:这里对于x (y z) 来说因为都是自由变量,所以可以直接编码。而对于lambda w. y w 来说,因为有一个lambda,这意味着我们需要将自然变量的编号进行偏移,这里直接将y对应的编号偏移为4=3+1.让变量的出现位置直接与它们的binders联系在一起,例如lambda x.x -> lambda .0;lambda x. lambda y. x ( y x ) -> lambda . lambda . 1 (0 1).在实现语言时,我们必须确定变量的出现是如何被表示的。

2024-07-05 20:42:30 175

原创 【TAPL学习笔记 3】The Untyped Lambda-Calculus

在lambda 演算中,所有的计算都可以归结为函数定义和应用,它在语言功能的规约、语言设计与实现以及类型系统的研究中有广泛应用。它的重要性来自于既可以视作简单的程序语言,又可以看作一个能够严格证明的数学对象。lambda演算仅仅是core calculi中的一个,除此之外pi-caculus可以用来定义基于消息的并发语言语义;object calculus蒸馏了OO语言的核心功能。lambda calculus可以通过不同方式来进行扩充。

2024-07-05 19:34:35 1001

原创 【TAPL学习笔记 2】An ML Implementation of Arithmetic Expressions

我们在这章主要使用OCaml来进行代码实现。

2024-07-05 16:22:27 265

原创 【TAPL学习笔记 1】Untyped Arithmetic Expressions

为了严格讨论类型系统以及它们的性质,我们需要从形式化地处理一些程序语言更基础的方面来开始。特别的,我们需要清晰的,精确的以及数学意义上容易处理的工具来表达和推理程序的语法【syntax】以及语义【semantic】。本章和下一章主要针对包含数字以及布尔值的简单语言来开发所要求的工具。这个语言很平凡,但可以作为引入一些基础概念的载体–抽象语法、归纳定义以及证明、求值、运行时错误的模型。第5章到第7章针对更强大的语言–无类型lambda 演算,详细阐述了相同的事情,我们必须处理名称绑定以及替换的问题。

2024-07-05 15:06:21 748

原创 [PFPL] Ch 6. 学习

大多数语言都是安全的(或者说是类型安全/强类型的)。非形式化地说,这意味着某些mismatch在执行时不会出现。例如,对E来说,类型安全是指将不会出现一个数字与一个字符串想加,或者两个数字做连接,这两种情况都没有意义。通常来说,类型安全表达了statics和dynamics的内在一致性。Statics可以理解为预测一个表达式的值将具有特定形式,以至于dynamics是良定义的。因此,求值不会陷入“stuck”的状态,对应到实现部分即在执行时不会出现非法指令的错误。

2024-07-04 20:15:17 285

原创 C++Asio库学习 Timer.4~5

先前4个示例避免了handler的同步问题,通过只在一个线程中调用io_context::run()函数。strand 类模板是一个执行器适配器,可以保证通过它分派的handler,在下一个handler启动之前,一个正在执行的handler将被允许完成。这个asio::bind_executor()函数返回一个新的handler,它可以通过strand对象自动分发它所包含的handler。主函数现在在两个线程中触发io_context::run()函数,一个在主函数中,另一个在额外的线程中。

2024-02-01 18:15:31 1122 1

原创 C++Asio库学习 Timer.1~3

直接解压源码,例如从官网https://sourceforge.net/projects/asio/files/asio/1.28.0%20%28Stable%29/ 下载。之后,使用如下命令编译程序,其中path-to-asio为asio文件所在路径。

2024-01-31 22:34:55 1477 1

原创 并行计算学习笔记 1

先看一个实例程序,使用泰勒展开计算sin(x),对于N个浮点数数组的每个元素如果使用超标量处理器(假设每个clock可以译码并执行两条指令);但是这个例子由于发生数据竞争,并没有指令并行(ILP)的空间。更多晶体管 -> 更小晶体管 -> 更高的时钟频率使用pthread优化,数据并行原始的程序主要使用标量处理,每个指令只处理一个数据。可以同时处理8个数据元素,使用了256bit的寄存器;注意如果存在条件执行,并非所有的alu都能执行有用的工作。总结:现代处理器中的一些并行执行形式。

2024-01-28 12:22:13 1066 1

原创 C++学习笔记:5.1 堆与栈

new/new[] 和 delete/delete[]是c++关键字,可以执行动态内存分配以及释放,并且运行时对象创建和析构。程序请求os分配的内存,os分配的内存是以虚拟页为粒度的,例如linux上为4KB。这意味着越界访问并不总是导致段错误,最坏的情况是带有UB的执行过程。new操作允许非抛出分配,通过传入std::nothrow对象。注意非平凡对象的放置分配需要在运行时显式调用对象的析构函数,因为不能检测到何时对象超出作用域。栈内存的组织可以获得更高的性能,但是它也是有限的。

2024-01-14 22:51:23 382

原创 MIT 6.s081 Lab1 素数筛

使用管道写一个并发版本的素数筛。

2023-03-07 18:32:12 137

原创 Leetcode 434 字符串中的单词数

字符串中的单词数问题描述算法实现问题描述统计字符串中的单词个数,这里的单词指的是连续的不是空格的字符。请注意,你可以假定字符串里不包括任何不可打印的字符。示例:输入: "Hello, my name is John"输出: 5解释: 这里的单词是指连续的不是空格的字符,所以 "Hello," 算作 1 个单词。算法实现class Solution {public: int countSegments(string s) { int num = 0; bool flag

2021-10-07 16:14:19 83

原创 整数因子分解

整数因子分解算法问题描述解决思路简述算法实现(c++)问题描述对于大于1的正整数n,可以分解为n=x1*x2*…*xm,其中xi≥2。例如,n=12时有8种不同的分解式:12=12,12=6*2,12=4*3,12=3*4,12=3*2*2,12=2*6,12=2*3*2,12=2*2*3,设计一个算法求n的不同分解式个数。解决思路简述对于给定的数字n,初始分解式个数为1,从2到n-1开始遍历,如果n能够整除,则分解式的个数需要加上商的分解式个数,依次进行下去。算法实现(c++)int divi

2021-10-07 15:44:38 403

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除