IR和ByteCode有什么区别?
Bytecode(字节码)是一种IR(中间表示)的形式。
[转载] 编译到底是什么?
因为工作原因,最近要做包管理工具方面的开发,需要对 Compiler 有一些最基本的理解,写这篇文章的目的有两个:
废话不多说,我们一起看看内容吧!
[转载] 编译系统(Compilation-System)和编译流程(Compilation-Pipeline)到底是什么
在编译到底是什么一文中,我们了解了编译在计算机编程中扮演的角色和作用,这次我们将探讨编译系统是由哪些角色组成的!
[转载] 从预编译的角度理解Swift与Objective-C及混编机制
本文从预编译的基础知识入手,由浅至深的介绍了 Objective-C 和 Swift 的工作机制,并通过这些机制来解释混编项目中使用到的技术和各种参数的作用,由此来指导开发者如何进行混编。
写在前面
本文涉及面广,篇幅较长,阅读完需要耗费一定的时间与精力。如果你带有较为明确的阅读目的,可以参考以下建议进行阅读:
如果你对预编译的理论知识已经了解,可以直接从【原来它是这样的】的章节开始进行阅读,这会让你对预编译有一个更直观的了解。
如果你对 Search Path 的工作机制感兴趣,可以直接从【关于第一个问题】的章节阅读,这会让你更深刻,更全面的了解到它们的运作机制,
如果您对 Xcode Phases 里的 Header 的设置感到迷惑,可以直接从【揭开 Public、Private、Project 的真实面目】的章节开始阅读,这会让你理解为什么说 Private 并不是真正的私有头文件
如果你想了解如何通过 hmap 技术提升编译速度,可以从【基于 hmap 优化 Search Path 的策略】的章节开始阅读,这会给你提供一种新的编译加速思路。
如果你想了解如何通过 VFS 技术进行 Swift 产物的构建,可以从 【关于第二个问题】章节开始阅读,这会让你理解如何用另外一种提升构建 Swift 产物的效率。
如果你想了解 Swift 和 Objective-C 是如何找寻方法声明的,可以从 【Swift 来了】的章节阅读,这会让你从原理上理解混编的核心思路和解决方案。
[转载] 一款可让大型iOS工程编译速度提升50%的工具
本文介绍了美团平台自研的一款 cocoapods 插件,该插件可以大幅提升 iOS 工程代码的编译速度。文章前半部分主要介绍相关的原理,后面主要阐述在工程层面的实践,希望能给从事相关开发的同学带来一些帮助或者启发。
cocoapods-hmap-prebuilt 是美团平台迭代组自研的一款 cocoapods 插件,以
Header Map 技术 为基础,进一步提升代码的编译速度,完善头文件的搜索机制。
[转载] 快手主播稳定性 - Mach Port 超限问题治理
本文介绍了快手客户端团队处理的 Mach Port 超限导致异常退出的问题。介绍了从发现到解决的全过程,并且给出了监控和防劣化方案。这个问题对快手稳定性尤其是电商主播稳定性影响很大且难以察觉,同时可能在业界广泛出现。
5分钟看懂的WebAssembly入门指南
本文是一篇WebAssembly的入门文章,从理论介绍到实战方面有全面的讲述。
由于 javascript 的动态类型特性,AOT 并不能为它做出优化,只能选择 JIT 来优化。
而为了让 JIT 效率提高,Mozilla 推出了 asm.js。它和 Typescript 比较相似的是它也是一个强类型语言,不过它的语法是 js 的子集,它专为 JIT 效率提高而打造。
在 Mozilla 推出 asm.js 之后,一些公司都觉得这个思路不错,于是联合起来推出了 WebAssembly。
WebAssembly 是一套指令集(字节码)标准,不过它并不是可以被 CPU 直接执行的原生指令集,所以它目前还需要配套一个虚拟机(low-level)来执行。
[转载] Objective-C & Swift 最轻量级 Hook 方案
本文从一个 iOS 日常开发的
hook
案例入手,首先简要介绍了 Objective-C 的动态特性以及传统hook
方式常见的命名冲突、操作繁琐、hook
链意外断裂、hook
作用范围不可控制等缺陷,然后详细介绍了一套基于消息转发机制的 instance 粒度的轻量级hook
方案:**SDMagicHook**。
[转载] 抖音研发实践:基于二进制文件重排的解决方案 APP启动速度提升超15%
启动是App给用户的第一印象,对用户体验至关重要。抖音的业务迭代迅速,如果放任不管,启动速度会一点点劣化。为此抖音iOS客户端团队做了大量优化工作,除了传统的修改业务代码方式,我们还做了些开拓性的探索,发现修改代码在二进制文件的布局可以提高启动性能,方案落地后在抖音上启动速度提高了约15%。
本文从原理出发,介绍了我们是如何通过静态扫描和运行时trace找到启动时候调用的函数,然后修改编译参数完成二进制文件的重新排布。