《程序员的自我修养-链接、装载和库》序

《程序员的自我修养-链接、装载和库》序

 

两年前,甲子跟我提起,他在考虑写一本讲述计算机程序基本工作原理的书,由于代码背后的许多细节现在难以找到完整而又实用的资料,因此,系统性地讲述这些技术要素一定非常有意义。这是我非常感兴趣的话题,因为最近几年来,我每次给学生讲课或者作技术报告时,经常会提到程序背后的一些细节知识,而当有人请我推荐一些参考资料时,我很难想得出有什么恰当的参考书可供学习。我自己也曾想过要写一点这方面的书,只是一直下不了决心做这件事情。甲子的提议让我意识到,写这样一本书的机会来了。于是,我们认真规划了书的选题。按我的建议,这应该是三卷本的书,每卷独立,合起来成一体系。第一卷是基础篇,介绍程序的基本运行过程,即是您现在看到的这本书。其他两卷还需要时日和机缘。

 

在过去两年中,我曾经以“Inside Windows Programs”为题在多所高校做过报告,旨在介绍Windows程序背后的一些支撑技术。对于正在学习计算机或软件专业的学生,或者正在从事软件开发的工程师们,我认为理解这些支撑技术是很有必要的,试想,即使一个简单的“Hello World!”程序,也依赖于背后的输入输出库(或流库)以及系统提供的模块,这种依赖性已经成为现代软件在操作系统环境下运行的一个必要条件。然而,有关这些支撑技术的系统性资料却少而又少,虽然Internet上并不缺乏任何一方面的细节信息,但是,能将程序的编译和运行过程所涉及的各种技术全面地串连起来介绍的,却尚未有先例。

 

甲子曾经在2006年夏天跟我实习过两个月,他帮我搭建了一个在Windows已有体系结构下将交换空间重定向到远程机器物理内存的原型系统。完成这一系统并非易事,而且甲子事前并无Windows内核编程经验,但是,他凭借扎实的计算机系统软件功底,成功地打通了从页面错误(page fault)异常例程到远程机器内存管理器之间的数据通路。在这一段实习经历中,我不仅看到了他驾驭代码和系统的能力,也感受到他做事认真负责的态度。因此,当他提出要写一本介绍程序基础的书时,我认为他是非常合适的人选。考虑到写书的艰巨性,他推荐石凡同学加入进来,这才有了我们三个人的组合。我原先担心写作的进度,毕竟写这样一本书需要大量的时间投入。幸运的是,在甲子和石凡的不懈努力下,这本书终于面市了。

 

本书讲解的内容,涉及到在WindowsLinux两个系统平台上,一个应用程序在编译、链接和运行时刻所发生的各种事项,包括:代码指令是如何保存的,库文件如何与应用程序代码静态链接,应用程序如何被装载到内存中并开始运行,动态链接如何实现,C/C++运行库的工作原理,以及操作系统提供的系统服务是如何被调用的。每个技术专题都配备了大量图示和代码实例,力求将复杂的机制以简洁的形式表达出来。本书最后还提供了一个小巧且跨平台的C/C++运行库MiniCRT,综合展示了与运行库相关的各种技术。

 

关于这本书的功劳,我不敢掠美。在创作之初,包括拟定提纲以及讲述内容方面,我跟甲子有过认真而细致的讨论;在写作过程中,我对甲子和石凡的初稿提出过一些建议,尤其在表述方面,同时我也协助他们与编辑沟通和交流。对于正文稿的内容,我并无实质性的贡献,但基于我对甲子和石凡两位年轻同学的了解,我相信他们自身的技术实践功底,以及足够的技术阐释能力。我期待这本书能够真正地提升程序员的自我修养,让程序员总是生活在“知其然,更知其所以然”的代码曼妙中。

 

最后,我要感谢这本书的三位编辑,他们是方舟、刘铁锋和陈元玉,谢谢他们为这本书付出的努力。还要感谢博文视点团队的负责人周筠女士,谢谢她给予两位年轻作者的扶持和关爱。

 

潘爱民

20092

  • 0
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 30
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 30
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值