痛苦的版本对齐(外篇) 是否能够避免版本对齐
痛苦的版本对齐(外篇) 关联因素图 http://www.cnblogs.com/yvivid/p/3543702.html
======================
版本对齐你是永远都需要面对的,即使所有代码(包括编译工具)都是自己写的。
一、版本对齐常常遇到的困难情况:
1、基于成熟平台构建,这种问题相对较少;尤其是商业软件。
2、基于多个开源平台构建,这种问题就比较多;
例1:软硬件结合项目中,两个核心器件的软件驱动不是基于同一个基础框架构建。
A模块为核内异构多核通信的框架,B模块为主处理器主要外设驱动。如果两软件是基于较大差异的linux版本,整合就是必须的。
例2:关于python 2.x 和 3.x 的迁移困难。
常被吐槽的就是,基于python开发的多个外部模块,需要构建到一起时,发现是基于不同的版本。总是很难拼接。
我看是学习python,主要用到的是python3.x,但发现科学计算方面,主要成果还是基于2.x。linux平台上应用基于python2.x也更多。
二、不是个人或小公司的独有的问题,
各个模块的版本对齐,是技术研发的一项重要工作内容。
即使是成熟公司,在内部也常常需要面对各个技术平台如何整合的问题。
三、如何尽量减少自己代码的版本对齐问题。
最后,说完被外部影响的版本不对齐,再说说,自己在持续的开发中,如何不给自己留版本错位的陷阱。
例如:
自己开发了一个函数, 进行数据排序功能,命名为 int sort(list data),进行从小到大的排序。
但用一段时间后,发现需要 编写另一个需要从大到小的排序。
你有两个选择:
- 重新写一个函数,从大到小排列。但如果都这样,函数会越来越多。
- 对原来函数调整一下功能(毕竟两个排序共同点更多)。
如果你选择在原函数增加功能,就发现一个问题,但是没有保留排序方式传递的就接口。
如果命名为, int sort(list data, byte sorttype) 就更好了。
但你已经调用了很多这个接口函数的代码怎么办?
尤其是对于强类型约束的编程语言(如C),是非常麻烦处理的一件事情。
对于运行时检测的语言,一般可以通过默认设定解决,比如定义时:int sort(list data, byte sorttype = LittleEnd)
【回顾】在使用 Visual Studio、linux开发时,是否常常见到 调用函数传递参数为 NULL的场景。
这大部分都是用于后续演进保留的。