- 博客(286)
- 收藏
- 关注
原创 v8世界探险(2) - 词法和语法分析
上节我们学习了API的概况,这节开始我们就循着API来分析实现。 对于解释器或者编译器来说,我们第一个感兴趣的当然是编译的过程。
2016-11-09 21:09:07 2014
原创 V8世界探险 (1) - v8 API概览
V8世界探险 (1) - v8 API概览v8是Google开发的JavaScript引擎,自推出后就对js生态产生了巨大的影响。比如产生了运行在服务端的Node.js的巨大生态。这么好玩的东西,我们当然要冲起去看看它的内部是如何实现的了。Hello,v8 World!首先好玩的一点是,v8可以作为一个库来嵌入到其它的应用中。我们废话不多说,直接上代码.这是Google官方的调用在代码中嵌入一个v8
2016-11-04 14:58:56 3732 2
原创 Android Studio直接运行影响启动性能
eclipse时代,测试空应用启动性能时,都是直接在IDE中启动,这样修改起来方便。 到了Android Studio时代,这个习惯被我保持下来了。 结果就被Instant Run功能给小小坑了一下。
2016-10-28 23:18:08 884
原创 C++11时代的标准库快餐教程(4) - 排序算法的应用
二分法是针对一个排序后的容器的用法,如果是多个有序容器,我们就可以快速地在其基础上进行集合的求子集,交集,并集与差集等运算。
2016-10-22 19:17:34 1278
原创 C++11时代的标准库快餐教程(2) - STL概览
第二讲我们迅速地为STL画一张大图,把13种基本容器的简单用法,迭代器和算法的概念快速地过一下。有兴趣的同学就可以对照着手册去使用它们了。当然,细节问题还很多,我们还要花不小的篇幅的讲各种细节。
2016-10-12 21:51:17 680
原创 C++11时代的标准库快餐教程(1) - 不同类型值组成的简单列表
std::pair是C++98就有的功能,std::tuple是TR1新增的。C++11的两个特性为pair和tuple带来很大帮助,一个是auto的类型推断可以帮助我们少写代码,二是C++11支持变参数的模板,使得理论上可以支持任意多个数量的参数。tuple来自boost库,但是没有C++11支持的boost::tuple和TR1的std::tuple支持的参数个数是受限的。
2016-10-10 19:37:17 966
原创 ART世界探险(19) - 优化编译器的编译流程
前面,我们对于快速编译器的知识有了一点了解,对于CompilerDriver,MIRGraph等都有了初步的印象。 下面,我们回头看一下优化编译器的编译过程。
2016-09-21 11:12:46 2146
原创 mac党如何解析bootchart
关于bootchart,网上已经有很丰富的文章介绍了。但是,这些文章都是讲在Linux下如何使用。 做为开发Android的mac用户,还要使用Linux机器做中转,实在是太麻烦了。尤其是Ubuntu 12.04上默认的bootchart工具还有问题,需要更新python脚本。事实可以更简单,我们直接在mac上build一个bootchart工具就好了么。
2016-09-20 16:39:47 970
原创 ART世界探险(15) - CompilerDriver,ClassLinker,Runtime三大组件
CompilerDriver,ClassLinker,Runtime三大组件
2016-09-06 20:29:36 2316
原创 ART世界探险(14) - 快速编译器和优化编译器
ART的编译器为两种,一种是QuickCompiler,快速编译器;另一种是OptimizingCompiler,优化编译器。
2016-09-06 13:41:38 1534
原创 ART世界探险(13) - 初入dex2oat
对于大多数人来讲,dex2oat一直是个黑盒子。那么,这个盒子中到底是些什么东西呢,我们有了前面的java,指令集,还有一点点的编译原理的知识储备,终于可以打个开看个究竟了。
2016-09-05 13:33:35 5318 2
原创 基于LLVM的编译原理简明教程 (1) - 写编译器越来越容易了
跟学院派的厚书给大家的印象不同,其实用LLVM写个简单的编译器是件容易的事情,因为大部分事情LLVM都替我们做了。
2016-09-02 19:28:51 10674 1
原创 Android应用生死轮回的那些事儿(7) - PackageManager的不公开API
前面,我们花了相当多的篇幅把PackageManager的公开API分门别类,并按版本顺序讲解了发展的过程。有的同学问了,既然installer相关的API在Android 5.0才引入,那么Android 4.4及之前的应用安装的程序是怎么写出来的呢? 答案是,还有未公开的内部API啊。
2016-08-17 19:59:16 2309
原创 Android应用生死轮回的那些事儿(6) - 武器库完结篇
PackageManager武器库的完结篇,让我们梳理一下从Android 1.0到Android 7.0的发展过程吧。
2016-08-17 12:13:29 2492
原创 Android应用生死轮回的那些事儿(5) - 武器库(3)- Installer相关工具
Install相关的API,在Android 1.0时一个也没有。全是后续陆续增加进来的。 我们发现,除了4.2的是补充4.0的以外,基本上全是逢大版本才有更新:2.0,3.0,4.0,5.0都有更新。
2016-08-16 18:33:28 2229
原创 Android应用生死轮回的那些事儿(4) - 武器库(2)-应用组件查询相关API
这一节我们将学习:如何查询系统中安装了哪些应用如何获取一个包的信息如何获取一个Application的信息如何获取系统中安装的所有的ContentProvider的信息如何获取一个uid中运行的所有的包如何查询一个uid的进程名如何通过一个广播Intent查询接受这个广播所有的BroadcastRece
2016-08-15 15:04:31 3277 1
原创 Android应用生死轮回的那些事儿(3) - 武器库(1)-权限管理相关API
APIPackageManager中提供的武器,可以用“既多又杂,版本变化大”来形容。 不过,我们通过分类和排序的方法将它们组织起来,让开发者同学们可以学会使用这些强大的武器!这一节我们将学习: * 如何查询系统中都有哪些权限组 * 每个权限组都有些什么权限 * 如何查询是否被授予某一权限 * 如何查询都有哪些应用申请了某一项权限
2016-08-11 17:58:48 2397
原创 Android应用生死轮回的那些事儿(2) - PackageManager
PackageManager, ApplicationPackageManager和PackageManagerService的关系
2016-08-10 21:16:10 2306
原创 Android应用生死轮回的那些事儿(1) - installd初探
前面我们讨论过dex2oat的过程,下面我们开始探索系统中的重要工具进程,installd守护进程。我们有PackageManageService这么大的组件了,为什么还需要installd这个守护进程呢? 一句话,是因为权限的问题,PMS只有system权限。installd的作用就是处理需要root权限的操作。
2016-08-09 21:47:15 2212
原创 ART世界探险(11) - OAT文件格式分析
既然是要探险,咱们就保持一定的深度,起码将来可以做个基于ART的黑客之类的。 所以我们针对细节多下一些工夫,先仔细分析一下OAT文件的格式。
2016-08-03 18:23:25 2502
原创 用Go写Android程序(3) - Go语言速成
下面我们将Go与C/C++/Java的一些比较不同的地方提炼一下,让大家可以快速上手。然后在实践中继续学习。
2016-07-30 18:40:25 3003
原创 ART世界探险(10) - 异常处理
对于编译Java的话,有一个问题不能不考虑,就是异常处理的问题。异常处理是基于Java的语句块的,翻译成本地代码的话,需要针对这些指令的地址进行一下重排。 我们来看下ART是如何实现异常处理的。
2016-07-28 18:20:33 1866 3
原创 ART世界探险(9) - 同步锁
Java是一种把同步锁写进语言和指令集的语言。 从语言层面,Java提供了synchronized关键字。 从指令集层面,Java提供了monitorenter和monitorexit两条指令。下面我们就看看它们是如何实现的吧。
2016-07-26 21:48:42 1167
原创 ART世界探险(8) - 面向对象编程
Java字节码是支持面向对象编程的,比如new和instanceof都是一条指令。它们被编成OAT之后变成了什么样子呢?另外,从这章开始,我们开始跟ART的源代码结合了
2016-07-26 17:01:47 1711
原创 ART世界探险(7) - 数组
Java中有专门处理数组相关的指令,并且有对越界检查等操作。这样,OAT编译出来的数组相关的代码,与本地C++写出的类似代码之间,就有了很大的不同。
2016-07-25 21:13:05 1320
原创 ART世界探险(5) - 计算指令
我们分析一下ARM, ARM v7a, ARM64 v8a, x86, x86_64, mips, mips64和Java字节码的整数和浮点运算。
2016-07-24 22:19:18 2855
原创 ART世界探险(4) - 数据传送指令和桶型移位器
指令系统的第一讲,我们将学习桶形移位器,这是个可以在ALU运算前对第二个操作数进行操作的神奇器件。同时也学习MOV, MVN和几个可以单独使用的移位指令,以及他们对应的java指令
2016-07-22 20:43:17 2064
原创 ART世界探险(3) - ARM 64位CPU的架构快餐教程
前面我们说过,Dalvik如果没有JIT的话,可以做到架构无关,让Dalvik指令都解释执行。但是ART是AOT,要编译成针对芯片具体的机器指令。 所以,研究Dalvik的时候可以不用太关心目标指令,而我们研究ART必须对目前最流行的微处理器的架构有个基本的了解。
2016-07-22 16:48:46 3054
原创 ART世界探险(2) - 从java byte code说起
我们从简单指令开始,从java字节码,到dalvik字节码,到最前沿的Arm64 v8a指令集,一层一层构建ART的世界观〜
2016-07-21 21:46:10 2798
原创 ECMAScript中的真值和假值
ECMAScript中的真值和假值看了下很多书上和网上文章中介绍ECMAScript中的布尔值,都是干巴巴地一句话:如果值是null, undefined, 0, 空字符串和false,则值为false,其他值都是true.说得当然是没错,不过不利于初学的同学理解。 其实,借着学习真假值的时候,正好是可以将很多知识串在一起的时候。
2016-07-21 02:15:26 973
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人