【问题标题】:What is the difference between module and distribution on CPAN?CPAN 上的模块和分发有什么区别?
【发布时间】:2012-04-28 05:23:18
【问题描述】:

我只是比较不同“存档网络”的数字,例如 CPAN、CTAN、rubygems.org 等。CPAN 显示两个非常不同的数字:

  • 105,774 个模块
  • 24,657 个分布

由于我不是 Perl 程序员(我只是在准备大学演讲),所以我不熟悉 Perl 的措辞。我试图查找它们,只发现“模块”是由 Perl 本身定义的。据我了解,模块是具有命名空间的任何文件。

但是,我找不到任何关于什么是分发的声明。甚至 CPAN 也只显示模块列表,或者它们一起使用这两个词(作为“模块分布”)。谁能解开我的心?

【问题讨论】:

    标签: perl cpan


    【解决方案1】:

    一个发行版将包含一个或多个模块、文档、构建脚本,通常还包含一个测试套件、一个文件清单、自述文件、更改日志和许可信息。在一个发行版中捆绑在一起的模块通常是完整类库的一部分,或者至少是所有相关工具都分为直观命名的包。

    IO核心发行版为例,你可以看到它包含以下模块:

    • IO - 加载各种 IO 模块
    • IO::Dir - 为目录句柄提供对象方法
    • IO::File - 为文件句柄提供对象方法
    • IO::Handle - 为 I/O 句柄提供对象方法
    • IO::Pipe - 为管道提供对象方法
    • IO::Poll - 系统轮询调用的对象接口
    • IO::Seekable - 为 I/O 对象提供基于搜索的方法
    • IO::Select - select 系统调用的 OO 接口
    • IO::Socket - 套接字通信的对象接口
    • IO::Socket::INET - AF_INET 域套接字的对象接口
    • IO::Socket::UNIX - AF_UNIX 域套接字的对象接口

    【讨论】:

    • 您从 CPAN 下载并构建一个发行版,它将安装一个或多个模块。
    • 谢谢理查德。因此,为了比较归档网络,我应该使用发行版的数量,因为它们接近 gem(Ruby)或包(Python、Haskell 等)的含义——对吗?并且只是为了确认这个事实:我是否正确理解了模块的概念(具有命名空间的文件,例如 IO::Dir 后面的文件)?
    • 我看不出您如何比较并获得任何有意义的数字。您无法计算分布(例如,IO 中的所有模块都可能有自己的分布)并且您无法计算模块(例如,日期时间库可以将所有时区信息存储在一个模块中,或者可以存储每次区域在不同的模块中)。然后是使用了多少模块、可用模块、冗余模块等问题。
    • @ikegami 我想我可以比较它们,因为所有存档网络都遇到同样的问题。我只需要知道哪种含义接近大多数语言使用的“包装”的含义。例如,“activerecord”是 ruby​​gems.org 上的一个 gem,尽管它带有大量的文件和功能。另一方面,有许多 gem 可以将“activerecord”连接到各种数据库,例如“activerecord-jdbc-适配器”。所以问题到处都是一样的,因此如果用一桶盐消化,我可以比较这些数字。
    • @Florian Pilz,遭受同样的问题并不能使它们具有可比性,因为它们的问题可能会使数字在一个网络上大 10 倍,而在另一个网络上小 10 倍。因此,除非您认为 10,000 等于 100,否则如果没有 很多 额外分析,这些数字将毫无意义
    猜你喜欢
    • 2016-11-10
    • 1970-01-01
    • 2011-04-10
    • 2013-01-11
    • 2015-11-25
    • 2023-03-28
    • 2019-01-16
    • 2011-06-13
    相关资源
    最近更新 更多