戴铭的博客 - 星光社

这次swift大会分享准备的幻灯片和 demo
第三届在北京举办的@swift大会,我分享了用 swift 写解释器的思路,这个解释器 demo 我放在了 github 上,地址在 https://github.com/ming1016/HTN/tree/master/Sources/Core/OC 。demo 支持简单的几个 OC 语法,按照这个架子和思路大家可以当作一个去支持一个语言,和设计自己特定语法的雏形来练手。当年前端人人都在用的 babel 转义器的作者也写过一个雏型例子,看完这个雏型就大致了解了 babel 这个工程整个解析的思路,工程代码看起来轻松不少,从里面也能很快的学到了很多自己需要的知识。大会上我还提到了一个 d...
深入剖析 JavaScriptCore
前言最近开始涉及 JS 的解析和处理工作,所以专门研究了下这块。特别是动态类型的处理以及不同引擎对于平台无关的字节码的设计和处理会有很大的帮助。 JavaScriptCore 介绍JavaScriptCore 是 JavaScript 引擎,通常会被叫做虚拟机,专门设计来解释和执行 JavaScript 代码。最开始的 JavaScriptCore 是从 KJS(KDE 的 JavaScript 引擎)以及 PCRE 正则表达式的基础上开发的,是基于抽象语法树的解释器。2008 年重写了,叫做 SquirrelFish,后来是 SquirrelFish Extreme,又叫 Nitro...
读 SnapKit 和 Masonry 自动布局框架源码
前言一直觉得 SnapKit 和 Masonry 这两个框架设计和封装的很好,用起来的体验也是一致的,翻了下它们的源码,对其设计方式和涉及的技术做了下记录。文章打算围绕,给谁做约束?如何设置约束?设置完后如何处理?这三个问题看看 SnapKit 和 Masnory 分别是怎么做的,正好也能够窥探下作者是如何利用 Swift 和 Objective-C 两个不同语言的不同特性做到一致的使用体验的。 如果还不了解这两个框架的使用的话可以参看它们项目 GitHub 说明:GitHub - SnapKit/SnapKit: A Swift Autolayout DSL for iOS &...
Swift 项目中涉及到 JSONDecoder,网络请求,泛型协议式编程的一些记录和想法
前言最近项目开发一直在使用 swift,因为 HTN 项目最近会有另外一位同事加入,所以打算对最近涉及到的一些技术和自己的一些想法做个记录,同时也能够方便同事熟悉代码。 JSON 数据的处理做项目只要是涉及到服务器端接口都没法避免和 JSON 数据打交道。对于来自网络的 JSON 结构化数据的处理,可以使用 JSONDecoder 这个苹果自己提供的字符串转模型类,这个类是在 Swift 4 的 Fundation 模块里提供的,可以在Swift 源码目录 swift/stdlib/public/SDK/Fundation/JSONEncoder.swift 看到苹果对这个类实现。 其它...
Why Swift? Generics(泛型), Collection(集合类型), POP(协议式编程), Memory Management(内存管理)
前言写这篇文章主要是为了给组内要做的分享准备内容。这段时间几个项目都用到 Swift,在上次 GIAC 大会上就被问到为什么要用 Swift,正好这个主题可以聊聊 Swift 的哪些特性吸引了我。 泛型先来个例子看下泛型是解决什么问题的。123456let nations = ["中国", "美国", "日本"]func showNations(arr : [String]) { arr.map { str in print("\(str)") }} 我们先定一个字符串数组,然后把里面的字符串打印出来。这里的 map 写法...
花野
早上七点半闹钟响起,我皱眉闭眼伸手去把床头柜上的闹钟关掉。昨晚睡前看电视剧看多了,我决定再眯一会,意识模糊的又呼呼过去,怎的刚才梦里那蛇又追过来了,眼看要一口要咬到我的大腿了,我居然给吓醒了,呼!算了,反正再睡又要被蛇咬,看看时间,呀,八点了,还有半个小时就要出门上班了,我赶紧起身双脚插上拖鞋双手抓住后面头发扎起辫子,挽起双手袖子赶着弄早点吃,来到厨房发现垃圾老公又忘带出去,都说处女座心细,我怎么瞧不出。 穿上我的小西装直奔到我们小区门口亿达房产售楼处。 “小琴,今儿又是掐着点到呢,真羡慕你们住的近的”我隔壁同事王潘凑过来说道。 “我三十三,你二十四,以后别叫我小琴小琴的了。” “秦琴...
白芈
“你过线了!”我说。 “过了怎么了!” “你这个猪,占这么大的位置!” “你个猴,瘦不拉几的,要那么大位置干嘛!” 类似这样的对话几乎每天都会有,这天更是一发不可收拾。同桌余敏推了我一下,我耐不住心中的烦闷,接着就是一脚朝她肚子那里踢过去。她连同着椅子一起滑倒到侧对面一排桌子里,结果,她哭了。 在办公室。 “西陵,你是男生,跟女生打架算什么本事。”老师说。 “是她先推我的。” “她说是你骂她猪,哪有这样侮辱同学的,待会去跟她道歉,听到没?” “西陵,你在看什么,我问你话你听到没。” 我看着窗外,窗外树枝在风中吱吱的响着,我讨厌老师,讨厌她把我调到后面跟余敏同桌。窗外传来课间休息时的喧闹...
在滴滴,我是如何指数级提升开发技术的?
如何提升开发技术的方法很多,比如专注,刻苦,热情,兴趣等,不过我这里不会提这些,下面想说的是我觉得能够指数级提升的窍门和一些自己在求索路上的一些体会,也算是一个阶段性的总结吧。趁着今天是程序员节,给大家做个分享,希望对需要的同学有用。 窍门一,将代码放到 GitHub 上看到这个标题一般人的反应就是觉得自己的代码和那些高大上的开源库比起来相形见绌,有种拿不出手的感觉。但是要想提高技术,是提高自己的技术,只要和自己比就好了。将代码发出来不是献丑而是为了交流,交流就会获得信息,都说信息时代科技进步都是指数级,这个道理在这里也同样适用。 记得以前我特别喜欢 Google 做的 Google R...