新闻详情

新闻详情

首页 / 资讯中心 / 详情

Erlang/OTP 27 弃用功能迁移指南:Archives 打包与 erl 启动参数的变化

发布时间:2026/9/25 13:59:13来源:尧图网络
Erlang/OTP 27 弃用功能迁移指南:Archives 打包与 erl 启动参数的变化
编程语言语言运行时标准库编译器并发编程【免费下载链接】otpErlang/OTP项目地址https://gitcode.com/gh_mirrors/ot/otp点击查看免费下载本篇指南基于 deprecations_27.md 梳理 Erlang/OTP 27 引入的弃用deprecated功能代码路径中的归档文件archive机制以及两个erl命令行参数。读完本文你将明确哪些用法即将失效、官方推荐的替代方案是什么并能直接迁移到 kernel 应用参数的新配置方式避免在 OTP 28 移除这些功能后破坏现有启动脚本与发布打包流程。OTP 27 弃用总览OTP 27 的弃用清单集中在两处一是**归档文件archive**相关功能二是erl 启动参数中的两个 flag。前者涉及代码加载机制后者涉及分布式节点启动时的 EPMD 通信配置。两类弃用都有明确的替代方案属于提前一个版本发出警告、在 OTP 28 中移除的常规节奏。例如 init.erl 中明确标注-code_path_choice从 OTP 27 起默认值为strict并计划在 OTP 28 移除。Archives 相关弃用弃用内容以下三种与 archive 相关的功能在 OTP 27 被标记为弃用使用 archive 文件打包单个应用或单个应用的一部分并将其放入代码路径——即把 BEAM 文件与其他数据文件压缩进一个归档文件再将该归档文件作为代码路径中的一个条目加载erl_prim_loader模块中处理 archive 的所有功能——erl_prim_loader是预加载的原始文件加载器此前承担了从 archive 中读取模块、目录列表与文件信息的能力相关实现可见 erl_prim_loader.erl其中包含set_primary_archive/4、purge_archive_cache/0以及大量archive_*内部函数erl的-code_path_choiceflag——该 flag 用于控制代码路径中每个目录的解析方式。-code_path_choice的语义与替代从 init.erl 的说明看-code_path_choice接受strict或relaxed两个取值strict严格按照 boot script 中出现的目录解释代码路径不尝试任何变通relaxed当可以在普通ebin目录与归档文件中的ebin目录之间选择时init会更宽松地寻找合适的目录。该选项默认值自 OTP 27 起即为strict并且整个选项已被列入移除计划OTP 28 移除。init内部通过code_path_choice/0读取启动参数并据此决定代码路径加载行为见 init.erl 及第 1210 行附近对PathChoice的使用。Escript 中的 archive 不受影响需要特别强调的是使用单个 archive 文件在 Escript 中承载 BEAM 文件和其他数据文件并不在弃用之列。Escript 本身就是一种将脚本与代码打包成单个可执行归档的标准分发方式这一用法会继续保留。不过有一个行为变化需要注意此前可以通过代码路径机制直接访问 archive 内的文件而现在访问 archive 中的文件必须显式调用escript:extract/2。该函数解析 Escript 文件的各个 sectionshebang、comment、emu_args、archive是escript:create/2的逆操作。其典型用法见 escript.erl escript:create(demo.escript, [shebang, {archive, [{demo.erl, SourceCode}, {demo.beam, BeamCode}], []}]). ok {ok, [{shebang,default}, {comment,undefined}, {emu_args,undefined}, {archive, ArchiveBin}]} escript:extract(demo.escript, []). {ok,[{{archive,80,75,3,4,20,0,0,0,8,0,118,7,98,60,105, 152,61,93,107,0,0,0,118,0,...} {emu_args,undefined}]}extract/2的返回结果中不存在的 section 对应值为undefined与默认值相同的 section 对应值为default若 Escript 内含源码source还可通过compile_source选项让其在提取时自动编译为 BEAM 代码。迁移建议如果你目前依赖将单个应用的归档文件放入代码路径来分发应用应当改为常规发布包直接使用目录形式的ebin代码路径这也是strict模式下的标准行为Escript 脚本继续使用 archive 打包但读取其中数据文件时改用escript:extract/2移除启动命令中的-code_path_choice参数接受 OTP 27 起的默认值strict为 OTP 28 的正式移除做准备。erl flags 弃用迁移到 kernel 应用参数OTP 27 弃用了两个与分布式节点 / EPMD 相关的 erl 启动参数替代方案统一收敛到kernel应用的系统配置参数中。这两个参数在 kernel_app.md 中有完整文档说明。-epmd_module Module→kernel应用参数epmd_module原命令行参数-epmd_module Module用于指定与 EPMD 通信的模块。OTP 27 起应改用 kernel 应用配置参数epmd_module%% sys.config 示例 [{kernel, [{epmd_module, my_epmd_module}]}].参数语义见 kernel_app.md类型为module()即一个实现了 EPMD 通信接口的模块名未配置时默认值为erl_epmd即 erl_epmd.erl 中实现的默认模块当配置参数与命令行参数同时存在时配置参数优先会覆盖命令行参数。-erl_epmd_port Port→kernel应用参数erl_epmd_node_listen_port原命令行参数-erl_epmd_port Port用于指定节点监听/连接其他节点的端口。OTP 27 起应改用 kernel 应用配置参数erl_epmd_node_listen_port[{kernel, [{erl_epmd_node_listen_port, 12345}]}].参数语义见 kernel_app.md类型为integer()配置erl_epmd用于监听连接并连接其他节点的端口设置了该端口后即使 EPMD 不可用Erlang VM 也会以分布式模式启动未设置时端口自动选择等价于端口0同样地配置参数存在时会覆盖命令行参数。源码层面的双通道读取逻辑在 erl_epmd.erl 的erl_epmd_node_listen_port/0函数中可以清晰看到新旧两种配置方式的共存与优先级处理首先读取 kernel 应用参数erl_epmd_node_listen_port若为不小于 0 的整数则采用若值非法会抛出{invalid_parameter_value, erl_epmd_node_listen_port, Invalid}其次通过init:get_argument(erl_epmd_port)读取旧的命令行参数-erl_epmd_port两者合并规则为仅配置参数 → 用配置参数仅命令行参数 → 用命令行参数两者同时指定则直接报错{invalid_configuration, either -erl_epmd_port or kernel erl_epmd_node_listen_port should be specified, not both}。这意味着迁移期间新旧方式可以并存但同一套配置中不要同时给出两者否则节点启动会失败。迁移建议将启动脚本如erl -epmd_module X、erl -erl_epmd_port P中的参数迁移到sys.config或application:set_env(kernel, ...)的对应 kernel 参数检查运维脚本与 CI 配置确保不存在命令行参数 配置参数同时指定epmd_module或erl_epmd_node_listen_port的情况若使用自定义 EPMD 兼容模块如inet_epmd_dist、inet_tcp_dist等分布式协议相关模块确认其配置方式已同步迁移到 kernel 应用参数。总结与版本时间线弃用项替代方案备注代码路径中的单应用 archive 打包常规ebin目录代码路径Escript 的 archive 用法保留erl_prim_loader中的 archive 功能不再提供Escript 场景改用escript:extract/2erl -code_path_choice无采用默认strictOTP 27 起默认strictOTP 28 移除erl -epmd_module Modulekernel 参数epmd_module配置参数优先于命令行参数erl -erl_epmd_port Portkernel 参数erl_epmd_node_listen_port两者同时指定会启动报错OTP 27 的这两组弃用体现了 Erlang/OTP 的两条演进主线一是收敛在代码路径中直接加载归档文件这一实验性机制init模块文档中即注明该支持是实验性的见 init.erl二是把分散在 erl 命令行的启动选项统一收编为kernel应用的可配置参数使节点启动行为可以集中声明、便于版本管理与自动化部署。升级到 OTP 27 及以上版本时按本文清单逐一核对启动命令与打包流程即可平滑过渡。赞分享编程语言语言运行时标准库编译器并发编程【免费下载链接】otpErlang/OTP项目地址https://gitcode.com/gh_mirrors/ot/otp点击查看免费下载相关推荐Erlang/OTP 的 erl 命令完全指南从启动参数、Emulator Flags 到运行环境配置Erlang/OTP 的 erl 命令完全指南从启动参数、Emulator Flags 到运行环境配置 erl 是 Erlang/OTP 运行时系统的启动入口编程语言语言运行时标准库编译器并发编程OpenCore Legacy Patcher 指南2008年的 Mac 也能装 macOS 15 的四步流程OpenCore Legacy Patcher 指南2008年的 Mac 也能装 macOS 15 的四步流程 你的 Mac 已经十年系统更新页面写着此编程语言语言运行时标准库编译器并发编程一个浏览器出一个 PDFOverleaf 在线 LaTeX 编辑器完整实操教程一个浏览器出一个 PDFOverleaf 在线 LaTeX 编辑器完整实操教程 Overleaf 是一个开源的、实时协作的在线 LaTeX 编辑器不用在本地编程语言语言运行时标准库编译器并发编程上一篇如何永久保存微信聊天记录3种格式导出完整指南下一篇Palworld存档转换终极指南轻松备份、修复和管理你的游戏数据创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

BentoML 部署打包指南:从定义运行时环境到构建 Bento 与容器化发布 2026/9/25 14:36:12

BentoML 部署打包指南:从定义运行时环境到构建 Bento 与容器化发布

模型推理服务人工智能后端大模型MLOpsLLMOps 【免费下载链接】BentoML The easiest way to serve AI apps and models - Build Model Inference APIs, Job queues, LLM apps, Multi-model pipelines, and more! 项目地址: https://gitcode.com/gh_mirrors/be/BentoM…

阅读更多 →
Wireless_Toolkit:用浏览器操控 Kali 无线安全测试工具(Wi-Fi + 蓝牙) 2026/9/25 14:36:06

Wireless_Toolkit:用浏览器操控 Kali 无线安全测试工具(Wi-Fi + 蓝牙)

目录1. 整体架构2. 硬件与任务槽3. 安全约束3.1 绝不碰 wlan03.2 提权白名单3.3 子进程安全4. 硬件检测页5. Wi-Fi 功能5.1 扫描5.2 抓握手5.3 抓 PMKID最近把平时做无线安全测试用的那堆命令行工具,整合成了一个浏览器可操控的控制台,叫 Wireless_Toolk…

阅读更多 →
Atlas 300V 24G推理卡实战:从ONNX到OM跑通YOLOv5/YOLOv8 2026/9/25 14:35:39

Atlas 300V 24G推理卡实战:从ONNX到OM跑通YOLOv5/YOLOv8

先说个最近的真实场景。手里有一个YOLO检测项目要上线,常规思路是直接买GPU,结果一看价格和功耗,人直接麻了。后来同事问了一句:“Atlas 300V 24G那张卡能不能跑YOLO?”我查了一圈资料、拿卡实测了几周,发现…

阅读更多 →
AI与机器学习如何辅助硬件设计:从器件选型到PCB布局的实战指南 2026/9/25 14:35:33

AI与机器学习如何辅助硬件设计:从器件选型到PCB布局的实战指南

1. 硬件设计为什么需要AI和机器学习介入干了十几年硬件设计,从最早的51单片机最小系统,到后来DDR4的布线、ESP32-C6-WROOM-1的射频接口设计,我最大的感受就是:硬件设计本质上是一个“在约束条件里找最优解”的过程,而人…

阅读更多 →
Themida/WinLicense 1.8-2.x 脱壳与调试辅助:从识别版本到拿到原始 OEP 2026/9/25 14:35:26

Themida/WinLicense 1.8-2.x 脱壳与调试辅助:从识别版本到拿到原始 OEP

简介:这是一套面向逆向分析人员的Themida WinLicense脱壳与调试辅助工具集,覆盖1.8.X至2.X版本保护程序,适合具备一定Windows逆向基础、需要开展加壳识别、特征提取与脱壳流程验证的从业者。包内共292个文件,约2.23MB,…

阅读更多 →
工业Agent与实时控制:概念辨析、落地层次与工程实践 2026/9/25 14:35:26

工业Agent与实时控制:概念辨析、落地层次与工程实践

1. 先搞清楚“工业Agent”和“实时控制”到底在说什么1.1 两个被混为一谈的概念“工业Agent”这个词最近两年被炒得很热,但很多人把它和“实时控制”绑在一起讲,其实这俩压根不是一回事。我先把定义掰开揉碎说清楚。工业Agent,通常指部署在工…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉