[转载] 编译到底是什么?

原文地址

因为工作原因,最近要做包管理工具方面的开发,需要对 Compiler 有一些最基本的理解,写这篇文章的目的有两个:

  • 为了记录和整理自己的近期的学习内容,方便日后查阅
  • 抛开大段代码和抽象概念,通过通俗易懂的写作方式来加深自己对这些概念的理解

废话不多说,我们一起看看内容吧!

阅读全文 »

[转载] 从预编译的角度理解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-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 是什么

WebAssembly 是一套指令集(字节码)标准,不过它并不是可以被 CPU 直接执行的原生指令集,所以它目前还需要配套一个虚拟机(low-level)来执行。

阅读全文 »

[转载] Objective-C & Swift 最轻量级 Hook 方案

原文地址

本文从一个 iOS 日常开发的 hook 案例入手,首先简要介绍了 Objective-C 的动态特性以及传统 hook 方式常见的命名冲突、操作繁琐、hook 链意外断裂、hook 作用范围不可控制等缺陷,然后详细介绍了一套基于消息转发机制的 instance 粒度的轻量级 hook 方案:**SDMagicHook**。

阅读全文 »

[转载] 抖音研发实践:基于二进制文件重排的解决方案 APP启动速度提升超15%

原文地址

背景

启动是App给用户的第一印象,对用户体验至关重要。抖音的业务迭代迅速,如果放任不管,启动速度会一点点劣化。为此抖音iOS客户端团队做了大量优化工作,除了传统的修改业务代码方式,我们还做了些开拓性的探索,发现修改代码在二进制文件的布局可以提高启动性能,方案落地后在抖音上启动速度提高了约15%。

本文从原理出发,介绍了我们是如何通过静态扫描和运行时trace找到启动时候调用的函数,然后修改编译参数完成二进制文件的重新排布。

阅读全文 »