在解释性语言中是否可以谈论“可复现构建”

38次阅读
没有评论

问题描述

想知道在使用解释性语言(如PHP、JavaScript、Python)时,是否可以谈论“可复现构建”,以及是否存在与之等效的概念。用户认为这只是提供一个受控环境的问题,是否应该谈论“可复现构建”?

解决方案

请注意以下操作注意版本差异及修改前做好备份。

解释性语言中的“可复现构建”

在解释性语言中,构建不一定是一个编译步骤。在这个上下文中,“构建”的含义类似于其他领域。也就是说,构建是指构建某个具有可观察和可感知结果的东西。更重要的是,你可以在其他上下文中重用构建结果来构建新的东西。因此,在PHP和JavaScript中,你也可以生成一些打包的工件,例如zip文件或与依赖管理器(如JavaScript中的NPM和PHP中的Composer)相关的特定于语言的存档。

CI/CD流水线中的“可复现构建”

在CI/CD流水线的上下文中,构建可以是任何形式的验证(例如静态分析、代码检查或任何类型的代码检查),可能只产生通过/失败结果,并配置在CI/CD流水线中执行。以可靠可复现的方式执行此类验证的能力(在这种情况下,我认为这就是“可复现构建”的翻译)对于CI/CD流水线的功能和性能非常重要。

提供受控环境

从另一个角度来看,当解释性语言(如PHP)在解释时,它确实需要一个受控环境来产生相同的字节码。因此,做一个可复现的构建只是提供一个受控环境,以便在解释时产生相同的字节码。换句话说,你控制编译器、库等。需要注意的是,PHP应用程序在构建时不会产生二进制文件,但在解释时仍然需要一个受控环境来为CPU产生相同的字节码。

总结来说,无论是解释性语言还是编译型语言,构建的目标都是提供一个受控环境,以确保在不同的主机或不同的时间构建软件时,能够产生相同的结果。对于解释性语言,这意味着提供一个受控环境来产生相同的字节码。

以上是关于在解释性语言中是否可以谈论“可复现构建”的解决方案。希望对你有所帮助!

正文完