Promise 核心实现原理
在传统的基于 闭包 的异步编程中,经常会出现 地狱嵌套 的问题,这使得高度异步的代码几乎无法阅读。Promise 则是解决这个问题的众多方案之一。
在传统的基于 闭包 的异步编程中,经常会出现 地狱嵌套 的问题,这使得高度异步的代码几乎无法阅读。Promise 则是解决这个问题的众多方案之一。
通过第 1 章至第 6 章,我们实现了一门简单的函数式编程语言。在这个过程中,我们学习了解析器相关的技术,如何构建并表示 AST,如何构建 LLVM IR,如何对生成代码进行优化,如何使用 JIT 进行编译等等。
目前为止,Kaleidoscope 已经是一门功能齐全且有用的编程语言了。但是,它仍然存在一个很大的问题。当前的 Kaleidoscope 缺少很多有用的运算符,比如:取反、比较等。
在前 4 章中,我们介绍了 Kaleidoscope 语言的实现,包括支持 LLVM IR
代码生成、优化器、JIT 编译器等。然而,目前我们设计的 Kaleidoscope
的功能非常简单,除了函数调用和返回外,甚至不包含控制流的能力。这意味着我们在代码中无法使用条件分支,因此极大地限制了编程语言的能力。本章,我们将对
Kaleidoscope 进行扩展,使其支持 if/then/else 语句和
for 语句。
本章,我们将基于词法分析器,为 Kaleidoscope 构建一个完整的解析器(Parser)。通过解析器,我们可以定义并构造抽象语法树(Abstract Syntax Tree,AST)。
本教程我们将从零开始设计一门玩具版编程语言——Kaleidoscope。Kaleidoscope
支持函数定义、条件语句、数学运算等。在教程的各个章节中,我们将对
Kaleidoscope 的语言特性进行扩展,支持 if/then/else
语句、for 循环、自定义操作符、JIT 编译、调试信息等。
前一篇文章我们介绍了词法分析器生成器 lex,本文我们来介绍语法/语义分析器生成器 yacc。
在编译过程中,词法分析器的主要作用是将代码文件的文本内容 token 化(又称扫描),token 化后再通过语法分析器进行语法分析,构造语法树,从而完成后续的一系列操作。
作为程序员的你是否有过疑问:为什么命令行工具用法都差不多?事实上,这是因为早期基于
C/C++ 开发的命令行工具都使用了 getopt
工具来进行选项和参数的解析。
CocoaPods-Core 主要包括三部分功能,分别是:Podfile 解析、Podspec 解析、Source 管理,前两个功能我们在之前的文章中已经分别进行了介绍,本文我们再来介绍一下最后一个功能——CocoaPods Source 管理机制。
在 CocoaPods 中,podspec 文件主要用于描述一个 pod 库的基本信息,包括:名称、版本、源、依赖等等。本文,我们来介绍一下 CocoaPods-Core 中另一个重要的部分——podspec。