做开发时间越来越长,知道的越多觉得不知道的更多。有时会去想,我们写的代码是怎么从oc,c,c++等等,这样的高级语言变成可执行文件的?编译,运行的过程中究竟发生了什么?
带着这样的问题,我打算好好静下心来阅读一本书 —— 《程序员的自我修养——链接、装载与库》。
自从从事iOS开发至今,其实绝大部分时间是做业务需求,少部分时间在思考代码结构和程序架构。而对于底层机制的探索知之甚少。
有过 OC(或者别的编译语言)开发经验的开发者,必然会遇到过方法重复定义或者是变量重复定义的问题(duplicate symbols for architecture i386)。
这种错误说的是编译器认为方法和变量被重复定义了,而导致这个错误的原因可能是因为import了一个.m文件,而非.h文件。(真的在一个类中定义了两个同名函数的情况不是没有,只是很容易被发现,而包含.m文件导致的报错,不容易发现)
那么,import了.m文件,为什么会使得编译器认为重复定义了函数和变量呢?而又为什么import .h文件是对的呢?这就需要了解编译器在编译、链接过程中做了些什么。也是我去看这本书的原因。
随着,看书和自己编程时间的慢慢增长,我越来越觉得,所有的编程,链接,运行,等等计算机中出现的这些专有术语,其实和生活中的种种事物和其运行是一样的。只不过用在了计算机上,给了他一个专门的称谓,本质上其实是逻辑思维。为了做一件事儿,我需要某某某条件,有了条件,我还需要组织,有了组织我要知道改如何组织,等等。凡此种种,其实都是基于逻辑思维 和 逻辑完备而生的。
我希望能从底层了解代码,从本源了解世界。