首先要聊聊我为什么想要写一篇编译原理的入门课。熟悉我的人可能会知道,我喜欢把复杂难懂的东西拆解成简单易理解的东西,无论是在代码的设计上,还是在知识的分享上。另外我也是个实用主义者,写出来的代码光好看没有什么卵用,必须要有实际的用途,它才是有价值的代码。所以写这样一个系列的博客,主要有两个目的:
- 拆解编译原理里一部分入门级别的基础知识,用最少的篇幅讲解编译器前端的大致工作原理
- 实现一个可以解析并计算简单数学表达式的库,让需要的人可以使用它完成一些计算功能
首先要聊聊我为什么想要写一篇编译原理的入门课。熟悉我的人可能会知道,我喜欢把复杂难懂的东西拆解成简单易理解的东西,无论是在代码的设计上,还是在知识的分享上。另外我也是个实用主义者,写出来的代码光好看没有什么卵用,必须要有实际的用途,它才是有价值的代码。所以写这样一个系列的博客,主要有两个目的:
相信研究过怎么在 ObjC 中进行版本字符串比对的朋友,大多都看过这一篇 StackOverflow 的问答:
Compare version numbers in Objective-C
里面提到的 [versionStrA compare:versionStrB options:NSNumericSearch]
的方案应该是最优雅的方案了。
但是不理解这个 NSNumericSearch 的具体工作原理就去盲目使用是危险的,今天我就来研究下它的具体工作原理。
美团开源了船新的响应式框架 EasyReact,GayHub地址:https://github.com/meituan/EasyReact
作为热爱响应式的程序猿,一定是要试用评测一下这传说中又快又好用的新框架的,事不宜迟我们开始。(虽然这框架已经开源一个月了🙄)
YAML 全名 YAML Ain’t Markup Language,主要设计目标是对人类可读性高。YAML 1.2 是 JSON 的超集,也就是说合法的 JSON 扔给 YAML 1.2 解析器是可以被完美解析的。YAML 集 JSON 和 XML 等各种标记语言之长,进行了扩展强化,功能全面也很易读,很多的系统采用它作为配置文件的格式。
嗯,昨天给自己挖了个坑,还是早填坑早完事儿,所以今天有了这篇:
朋友,ObjC 的 BOOL 类型了解一下?
可能有人告诉你 BOOL 是 signed char
类型的。放在以前,这个答案是对的,但是放在现在就不完全对了。接下来我来给大家一点点解释其中的细节。
参考 Apple Developer 官方文档:Type Encodings,Objective-C Runtime
我们在 JSON <-> Dictionary <-> Model 中面临的一个很大的问题就是判断数据需要转换成什么样的类型。好在 ObjC 作为一款动态语言,利用 runtime 可以轻松解决这个问题。再配合转换器和 KVC,就可以轻松把我们解析好的值放进对应 Model 里。今天要给大家介绍的就是这个类型编码(Type Encodings)的具体细节。
最近准备给 VirtualView-iOS 的文本元素新增一个 lineHeight 属性,以便和 VirtualView-Android 配合时能更精确的保证双平台的一致性。面向 Google 以及 Stack Overflow 编程了一会后发现,能查到的资料大部分是介绍如何实现 lineSpacing 属性,而不是 lineHeight。但是我就是因为 iOS 和 Android 的默认 lineSpacing 不一致所以才想实现个 lineHeight 啊!还是需要自己动手丰衣足食,顺带整理成文章造福后人。
本文主旨是浅显易懂的讲解下冷热信号的区别和常见的使用误区,所以篇幅所限不会介绍些内部细节。
如果想要了解的更深入,可以参照William Zang的博文:细说ReactiveCocoa的冷信号与热信号。
文中部分内容参考RAC 4.x的文档:设计指南、框架概览,但是文章本身是介绍ObjC的RAC 2.5。
另外和前一篇博文一样,我称呼一组信号叫做信号流,单次发送的信号值为信号。
信号流 - 即RACSignal,一组next
/ error
/ completed
信号组成,本文称之为信号流。
发送信号 - sendNext
/ sendError
/ sendCompleted
,统称为发送信号。
主流程信号流 - execute:
成功执行一次指令产生的指令流程信号流。
因为将RACSignal也称为信号,容易引起理解的困难,而其通常就是一组信号组成,所以在这里称之为信号流。