跨生态系统包作为多语言:普遍性、架构与健康
Cross-Ecosystem Packages As Multilingual: Prevalence, Architecture, and Health
浏览论文内容
中文总结 AI 辅助
本研究对六个主要生态系统的六百万余包进行实证分析,发现跨生态系统包虽占少数但增长重要,识别出五种架构模式,其中代码生成和语言绑定与更高的社区活跃度相关,并为采用者、维护者和研究者提供启示。
中文摘要 AI 辅助
现代软件开发日益依赖于使用多种编程语言。一些软件包被发布到多个包生态系统,例如用于JavaScript的NPM和用于Python的PyPI。关于跨生态系统包,尤其是它们的结构方式,人们知之甚少。在本文中,我们对跨越六个主要生态系统的超过六百万个包进行了大规模实证研究,以了解1)跨生态系统包在所有包中的普遍程度,2)跨生态系统包是否使用不同的源代码架构模式,以及3)架构模式与来自GitHub的项目健康指标之间是否存在相关性。结果表明,跨生态系统包构成了包的一小部分但重要且不断增长的比例。我们识别出五种不同的架构模式。例如,从共享源文件实现代码生成或使用语言绑定的包与显著更高的社区可见性和开发活动相关联。基于我们的发现,我们为包采用者、维护者和研究人员提供了启示。我们设想我们的分类法将用于未来对软件开发多个方面的调查,例如专注于一种语言与使用绑定、模板和包装器翻译成其他语言之间的权衡,以及使用原生代码和原生函数来支持额外语言。
英文摘要
Modern software development increasingly relies on using multiple programming languages. Some software packages are published to multiple package ecosystems such as NPM for JavaScript and PyPI for Python. Little is known about cross-ecosystem packages, especially regarding how they are structured. In this paper, we conduct a large-scale empirical study of over six million packages across six major ecosystems to understand 1) how prevalent cross-ecosystem packages are among all packages, 2) whether there are distinct source code architectural patterns that cross-ecosystem packages use, and 3) whether there are correlations between architectural patterns and project health metrics from GitHub. Results indicate that cross-ecosystem packages constitute a small but important, growing fraction of packages. We identify five distinct architectural patterns. For example, packages that implement code generation from a shared source file or use language bindings are associated with significantly higher community visibility and development activity. Based on our findings, we provide implications for package adopters, maintainers, and researchers. We envision our taxonomy being used for future investigations into several aspects of software development, such as the trade-offs between focusing on one language and translating to other languages using bindings, templating, and wrappers, versus using native code and native functions to support additional languages.