我正在编写一个ruby脚本来比较大量的debian软件包'版。我有两种选择,使用debian系统'来自ruby脚本的dpkg --compare-versions
或在Ruby中实现比较例程。
我的问题是哪个会更快?我应该依赖dpkg --compare-versions
还是实施算法?
注意:我假设脚本只能从debian系统运行,但是从非debian系统运行的能力当然会带来额外的好处。
版本比较算法在Ubuntu policy
中描述答案 0 :(得分:3)
Ruby-Debian也可能是另一种选择。根据描述:
dpkg的ruby接口
这个包提供了Debian :: Dpkg和Debian :: DpkgDeb模块和 Debian :: Deb,Debian :: Dsc,Debian :: Archives,Debian :: Sources, Debian :: Packages和Debian :: ruby的状态类
(不幸的是,网页上没有关于如何使用它的示例,所以我猜你最好的选择是安装它并在irb / pry会话中使用它。)
<强>更新强>
根据@Amadan的说明,这是一个完整的示例(我必须使用require 'debian'
代替require 'ruby-debian'
)
安装
apt-get install libapt-pkg-dev
gem install ruby-debian
用法的
require 'debian'
puts Debian::Version.cmp_version("1.2.3", "<", "1.2.11")
答案 1 :(得分:2)
考虑到dpkg主要是用C语言编写的,并且尽可能快地进行了相当多的努力,我相信最好调用命令而不是尝试自己实现比较。即使您设法使算法与dpkg使用的算法一样高效,您仍然可以在C和Ruby之间保持速度差距,这是您无法克服的。
但是,创建多个进程会产生一些开销。由于您要比较数千个版本,您可能想要找出一个数据结构和/或算法,允许您一次进行多次比较(或减少所需的比较次数)。这种可行性取决于您的使用案例。
我首先尝试使用dpkg进行基准测试(因为这不需要太多工作),并且在考虑将工作用于尝试优化之前,看看它的运行时是否足够快以满足您的要求。