Fork me on GitHub
楚权的世界

Seek the wonder of life.


  • 首页

  • 相册

  • 分类

  • 关于

  • 归档

  • 标签

  • 公益

  • 搜索

浅谈 Actor 模型

发表于 2023-01-15 | 更新于 2023-01-15 | 分类于 异步与并发
自分布式计算出现以来,业界已经开始广泛研究基于消息传递编程模型的解决方案。关于消息传递,Wikipedia 描述其广泛定义主要包括:远程过程调用(Remote Procedure Calls, RPC) 和 消息传递接口(Message Passing Interface, MPI)。但是,如今我们 ...
阅读全文 »

2022 年度总结

发表于 2022-12-31 | 更新于 2023-01-15 | 分类于 生活

阅读全文 »

Future 和 Promise

发表于 2022-12-05 | 更新于 2022-12-25 | 分类于 异步与并发
从异步与并发编程兴起以来,学术界与工业界提出了非常多的解决方案,本文将要介绍的 Future 和 Promise 正是其中的两种解决方案。Future 和 Promise 的实现理念非常相似,两者在发展过程中相互借鉴,相互融合。目前,很多流行的语言和框架都引入了 Future 和 Promise 的 ...
阅读全文 »

深入理解 Aspects 设计原理

发表于 2022-11-13 | 更新于 2022-11-14 | 分类于 iOS
最近希望在业务中实现一套基于 AOP 的埋点方案,调研过程中,我花了些时间阅读了一下 Aspects 的源码,对于 Aspects 设计有了一些更深入的理解。因此,通过本文记录我在阅读源码后的一些收获和思考,以供后续进行回顾。 概述Aspects 是一款轻量且简易的面向切面编程的框架,其基于 Obj ...
阅读全文 »

源码解读——PromiseKit

发表于 2022-10-29 | 更新于 2022-11-27 | 分类于 异步与并发

阅读全文 »

Promise 核心实现原理

发表于 2022-10-16 | 更新于 2022-11-27 | 分类于 异步与并发
在传统的基于 闭包 的异步编程中,经常会出现 地狱嵌套 的问题,这使得高度异步的代码几乎无法阅读。Promise 则是解决这个问题的众多方案之一。 Promise 的核心思想是:实现一个容器,对内管理异步任务的执行状态,对外提供同步编程的代码结构,从而具备更好的可读性。本文,我们将通过分析 Prom ...
阅读全文 »

基于 LLVM 自制编译器(10)——总结

发表于 2022-09-17 | 更新于 2023-01-14 | 分类于 LLVM
展望本章是本系列教程的最后一章。通过本教程,我们实现并扩展 Kaleidoscope 编程语言,使其语言的特性和功能不断增强。 在这个过程中,我们构建了词法分析器、解析器、AST、代码生成器、REPL、JIT,并为可执行文件支持了调试信息。所有的功能仅仅用了 1000 行左右代码就实现了。 我们的语 ...
阅读全文 »

基于 LLVM 自制编译器(9)——调试信息

发表于 2022-09-17 | 更新于 2023-01-14 | 分类于 LLVM
概述通过 8 章的教程,我们实现了一门支持函数和变量的编程语言。那么,如果代码运行或编译出错时,我们该如何调试程序呢? 本质上,源码调试是基于 格式化数据 实现的,格式化数据可以辅助调试器实现二进制和机器状态转换至程序员编写的源码。在 LLVM 中,我们通常使用一种称为 DWARF 的格式。DWAR ...
阅读全文 »

基于 LLVM 自制编译器(8)——目标文件编译

发表于 2022-09-11 | 更新于 2023-01-14 | 分类于 LLVM
概述本章,我们将使用自制的编译器将 Kaleidoscope 代码编译成目标文件,并结合 C++ 代码进行混编。 目标选择LLVM 支持交叉编译,因此可以将源代码编译成任意目标架构的可执行文件。本章,我们将本机架构作为目标架构,编译可执行文件。 那么,如何获取本机架构的信息呢?我们使用一个字符串来表 ...
阅读全文 »

基于 LLVM 自制编译器(7)——语言扩展:可变变量

发表于 2022-09-04 | 更新于 2023-01-14 | 分类于 LLVM
概述通过第 1 章至第 6 章,我们实现了一门简单的函数式编程语言。在这个过程中,我们学习了解析器相关的技术,如何构建并表示 AST,如何构建 LLVM IR,如何对生成代码进行优化,如何使用 JIT 进行编译等等。 Kaleidoscope 是一门函数式编程语言,函数式的特点之一是变量不可重复赋值 ...
阅读全文 »

基于 LLVM 自制编译器(6)——语言扩展:自定义运算符

发表于 2022-08-28 | 更新于 2023-01-14 | 分类于 LLVM
概述目前为止,Kaleidoscope 已经是一门功能齐全且有用的编程语言了。但是,它仍然存在一个很大的问题。当前的 Kaleidoscope 缺少很多有用的运算符,比如:取反、比较等。 本章,我们将为 Kaleidoscope 支持自定义运算符,从而让 Kaleidoscope 具备更强大的编程能 ...
阅读全文 »

基于 LLVM 自制编译器(5)——语言扩展:控制流

发表于 2022-08-21 | 更新于 2023-01-14 | 分类于 LLVM
概述在前 4 章中,我们介绍了 Kaleidoscope 语言的实现,包括支持 LLVM IR 代码生成、优化器、JIT 编译器等。然而,目前我们设计的 Kaleidoscope 的功能非常简单,除了函数调用和返回外,甚至不包含控制流的能力。这意味着我们在代码中无法使用条件分支,因此极大地限制了编程 ...
阅读全文 »

基于 LLVM 自制编译器(4)——代码优化器、JIT 编译器

发表于 2022-08-14 | 更新于 2023-01-14 | 分类于 LLVM
概述前面几章我们介绍了如何实现一门简单的编程语言,同时支持了 LLVM IR 代码生成。本文,我们将介绍并实现两类技术: 代码优化器 JIT 编译器 常量合并优化在第 3 章中,我们实现了 LLVM IR 代码生成的能力。不过,生成的代码仍然具有很大的优化空间。当然,我们所使用的 IRBuide ...
阅读全文 »

基于 LLVM 自制编译器(3)——LLVM IR 代码生成

发表于 2022-08-07 | 更新于 2023-01-14 | 分类于 LLVM
概述在上一章中,我们介绍了如何构建抽象语法树 AST。这一章,我们进一步将抽象语法树转换成 LLVM IR。此外,我们会简单介绍 LLVM 的工作原理和使用方法。 注意:本章源码要求 LLVM 版本大于等于 3.7。 初始化设置为了支持 LLVM IR 代码生成,我们需要实现相关的初始化设置。 ...
阅读全文 »

基于 LLVM 自制编译器(2)——解析器、抽象语法树

发表于 2022-07-31 | 更新于 2023-01-14 | 分类于 LLVM
概述本章,我们将基于词法分析器,为 Kaleidoscope 构建一个完整的解析器(Parser)。通过解析器,我们可以定义并构造抽象语法树(Abstract Syntax Tree,AST)。 我们构造的解析器使用两种方法进行语法分析: 递归下降分析法(Recursive Descent Par ...
阅读全文 »

基于 LLVM 自制编译器(1)——Kaleidoscope、词法分析器

发表于 2022-07-24 | 更新于 2023-01-14 | 分类于 LLVM
Kaleidoscope本教程我们将从零开始设计一门玩具版编程语言——Kaleidoscope。Kaleidoscope 支持函数定义、条件语句、数学运算等。在教程的各个章节中,我们将对 Kaleidoscope 的语言特性进行扩展,支持 if/then/else 语句、for 循环、自定义操作符、 ...
阅读全文 »

基于 LLVM 自制编译器——序

发表于 2022-07-17 | 更新于 2023-01-14 | 分类于 LLVM
前言最近一直在学习编译原理,为了加深对于理论的理解,期间参考 LLVM 官方的相关教程进行实践,设计并实现一款简易的编译器。 一开始,我使用 LLVM 官方的 《How to write your own compiler》 教程来进行尝试,该教程使用 JFlex 作为 词法分析器生成器(Lexic ...
阅读全文 »

编译原理工具系列(2)——yacc

发表于 2022-07-10 | 更新于 2022-07-22 | 分类于 Compiler
前一篇文章我们介绍了词法分析器生成器 lex,本文我们来介绍语法/语义分析器生成器 yacc。 在编译流程中,词法分析器会扫描代码文件,并将其 token 化。语法/语义分析器则会扫描 token 化后的内容,从而建立语法树,生成语义信息。 下面,我们简单介绍一下 yacc 的工作原理和基本用法。 ...
阅读全文 »

编译原理工具系列(1)——lex

发表于 2022-06-22 | 更新于 2022-07-22 | 分类于 Compiler
在编译过程中,词法分析器的主要作用是将代码文件的文本内容 token 化(又称扫描),token 化后再通过语法分析器进行语法分析,构造语法树,从而完成后续的一系列操作。 宏观层面,词法分析器基于一系列正则表达式识别并构造不同的 token。原理层面,正则表达式是通过确定性有穷自动机(Determi ...
阅读全文 »

深入理解 Git 底层实现原理

发表于 2022-05-21 | 更新于 2022-06-19 | 分类于 Git

阅读全文 »
12…7
Bao Chuquan

Bao Chuquan

积累,沉淀,吸收,转换

123 日志
27 分类
260 标签
RSS
GitHub 微博 Facebook Instagram
© 2018 - 2023 Bao Chuquan
由 Hexo 强力驱动
主题 - NexT.Pisces
浙ICP备16031766号-1
本站总访客 人次 本站总访问量 次