为什么 Swift 的实现需要 SIL

背景

Swift 语言的实现借助了 LLVM,Swift 和 LLVM 的发明人 Chris Lattner,曾说过,Swift 语言就是 LLVM 的巨大语法糖。LLVM 定义了一种中间语言。所有经过前端编译的语言,在经过词法分析、语法分析、语义分析之后,LLVM 会帮助其生成对应的 LLVM 中间语言,然后这些中间语言表示的程序就可以进行各种优化处理,然后转换成不同平台的汇编语言。 LLVM 的出现可以说让发明一门语言的难度大幅减少了。关于 LLVM 更多介绍可以查看 Chris 自己的文章 ,见引用1。

Swift 语言在编译的时候会转换成 Swift 中间语言(Swift Intermediate Language,简称 SIL)。那么在已经有 LLVM IR (中间语言)的情况下,为什么不是直接转换成 LLVM 中间语言呢?而是多了一步先是转换成 SIL 然后才转换到 LLVM IR?

前言

具体内容可以查看 Youtube LLVM 官方视频的介绍(见引用2),以下内容是对该视频内容前半部分的总结,同时包含了一些作者自己的理解。(视频的后半部分是 Chris 举了几个例子来描述 SIL 是如何工作的。对于编译感兴趣的可以看看,能学到很多)

为什么需要 SIL

从 clang 中吸取的教训

类 c 语言的编译过程如下:


image.png

但是在实际编译的代码实现中是这样的:

image.png

很容易就能看出来这两张图想要表达的意思,在第二张图中,语法分析和语义分析之间很乱,然后语义分析生成 的 AST‘ 在转换成 IR 的时候也是相当的曲折,同时 AST‘ 也承担了支持代码的静态分析的前置责任。在静态分析和生成 IR 这两者之间其实有很多重复的逻辑。

总结一下:

  1. 源代码和 LLVM IR 之间有一个巨大的抽象层(但是这个抽象层在 clang 里面实现的并不完美)
  2. IR 对于源代码级别的静态分析不够友好
  3. clang 的静态分析实现(CFG)不够好同时,和 IR 有很多重复。

Swift 的特点

Swift 是一门高级的语言,很多语言的特性是靠语言自身实现的(比如 Swift 的 Int 这些就是 Swift 语言实现的),并且 Swift 的范型基于 Protocol。Swift 也是一门安全的语言,很多不安全的操作,比如未初始化的变量,死代码等等需要在尽早的阶段就能发现(意味则代码的静态分析很重要)。

以下是 Swift 的编译过程:

image.png

可以看到,SIL 将原本在 clang 中独立的静态分析和 IR 生成阶段整合了起来。

(通俗的说就是,clang 在实现的时候开发者们发现很多阶段是交织在一起,没有很好的独立开来,导致代码耦合度高,现在加入了一个中间层,来解决这种情况)

SIL 的特点

  1. 能够完整的表达程序的语义。
  2. 被设计用于代码生成和静态分析
  3. 处于编译的流水线中,而不是独立与之外
  4. 在源代码和 LLVM 之间架起了抽象的桥梁

引用

  1. LLVM 介绍
  2. Swift's High-Level IR: A Case Study
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,126评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,254评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,445评论 0 341
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,185评论 1 278
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,178评论 5 371
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,970评论 1 284
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,276评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,927评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,400评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,883评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,997评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,646评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,213评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,204评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,423评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,423评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,722评论 2 345

推荐阅读更多精彩内容