iOS响应式架构

自2014年起,移动端的架构中开始渐渐的融入了响应式的元素。时至今日,融入响应式的架构已经在很多产品的多次迭代中经受住了考验。十年后,再回首现在这一时间点,很可能会被认为是一个新的移动端架构时代的开端。很多文章中都提出了针对自己产品研究出来的一套架构,却鲜有文章单独对架构中的响应式元素进行讨论。笔者就写下了这样一篇关于iOS响应式架构的文章来阐述响应式架构的历史、响应式架构的本质、响应式架构的优点以及如何在现有架构中融入响应式架构这几个值得探讨的问题。

Read More

LSM-Tree与RocksDB

冥冥之中,接触到了不同于关系数据库的NoSQL Key-Value存储引擎RocksDB,懵懵懂懂、充满好奇,google一点,满眼皆是LSM-Tree,头晕眼花、若即若离,便有了这篇文章,一起与大家分享这趟探险之旅。

Read More

计算机体系-垃圾收集器

继上篇讲述了栈和堆以后,程序已经可以“持续”运行了。此篇就来聊聊为了更高效的编写出“持续”运行的程序,要对内存管理进行必要的优化(improve),继续来看看what’s beyond the scene。

Read More

计算机体系-栈与堆

继上篇讲述了虚拟存储器和进程以后,程序终于乖乖“开始”运行了。此篇就来聊聊程序如何“持续”运行,继续来看看what’s beyond the scene。

Read More

计算机体系-进程与虚拟存储器

上篇讲述了程序的编译体系。然而,经过编译体系后,程序离乖乖运行还有很远的路要走,这篇文章继续伴随我们写的程序,来看看what’s beyond the scene。

Read More

Clang Plugin--Sherlock

最近项目正在完善一套代码规范,相比于用管理人的方式去规定必须要怎么做,不如直接用工程化的思想,让编译器帮我们检查,更多关于CleanCode的内容。我们可以从语法分析或静态分析(语义分析)入手,检查代码。对于代码规范,一般是命名、结构、写法上的规定,通过检查语法结构就能搞定,不用结合语境。并且语法分析相比于静态分析,也可以在更早的阶段暴露出问题。

对于静态分析的话,已有OCLint开源方案。对于语法分析的话,通过Clang Plugin就可以做到,Clang Plugin就是一个Clang的编译器前端插件,使用Clang提供的语法分析环境。不得不说,着实佩服滴滴,早在这方面做过探索,相关文章

虽说,代码规范这个东西不可能出现一个万金油开源方案,然后团队直接上手使用,每个团队都要根据自身情况,量身定做团队内的规范。但是,我这里提供一个有高拓展性的代码规范检查基础工具,供任何团队在其上面轻松做定制、拓展。

本篇文章就介绍一下如何做一个Clang Plugin和我提供的面向Objective-C的开源方案Sherlock。对于Swift已有开源方案SwiftLint

Read More

计算机体系-编译体系漫游

要想让代码乖乖运行,自然代码要先经过编译,这篇文章就来聊聊编译体系。

代码的编译过程分为四个阶段,预处理、编译、汇编、链接。而编译阶段是整个过程中最复杂的阶段,编译阶段还可以分为词法分析、语法分析、语义分析。

在一头扎进这四个阶段之间,先聊一下语法、语义。人类之所以能在进化的历史长河中,成为动物中的佼佼者,进化出的复杂的沟通机制—语言功不可没。假如,我说出这句话:你个产品狗还在改需求!那么语法是啥呢?简单说就是构成这句话的顺序,假如顺序错乱意思就不同了。那么语义是啥呢?就是语境,根据我说这句话的情景,才能解释出你指的是谁。语法在编程语言中,表现出来的就是语法结构和结合律。语义表现出来的就是上下文(context)。

Read More

Objective-C与SmallTalk

本文从OC的可变数据和不可变数据作为引子,开始聊聊我眼中的OC和SmallTalk,想到哪儿就聊到哪儿了。本文中的观点都是个人观点,如果大家理解不一样,纯属正常,欢迎讨论。关于可变数据和不可变数据就不多聊了,有很多文章已经聊过了

Read More

编程漫游

有趣的事实(Fun-Fact)

1
2
3
4
5
6
7
8
printf("hello, world\n");              \\C
(display "hello, world") \\Scheme
NSLog(@"hello, world\n"); \\Objective-C
print("hello, world\n") \\Swift
std::cout << "hello, world\n"; \\C++
System.out.println("hello, world\n"); \\Java
print 'hello, world' \\Python
console.log("hello, world"); \\JavaScript

你有没有奇怪过,为什么每学一门编程语言,第一个要写的程序一定是打印hello, world?这实际上得追溯到The C Programming Language这本书,这本书在1978年发行第一版,作为世界上第一本教授编程语言的书。而书上的第一段程序就是打印hello world。这本书很可能是大部分语言的作者看的第一本编程书,没有这本书,也许就没有计算机语言的大家庭。所以,每个程序员为了祈求程序安稳运行,都要在学习语言的第一段程序写下hello,world这样的咒语。

好了,下面进入今天的主题—编程漫游。先来聊一聊编程语言必须具备的三大要素。

Read More

数据结构

本篇文章并不关注数据结构的实现,更加关注数据结构有趣的性质。

线性数据结构表达元素的顺序关系。

树状数据结构表达元素的层级关系。

图状数据结构表达元素之间更广泛的关系。

Read More