痛苦的版本对齐(外篇) 是否能够避免版本对齐

痛苦的版本对齐(外篇) 关联因素图 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的场景。

这大部分都是用于后续演进保留的。

posted @ 2014-02-15 23:16  yvivid  阅读(968)  评论(0编辑  收藏  举报