为何Ada语言子程序声明用分号分隔参数?能否修改规范?
Ada子程序声明用分号、调用用逗号的原因及修改标准的可行性
为什么声明用分号,调用用逗号?
Ada的这个设计核心是为了语法一致性:
- 子程序的参数声明本质是一组独立的规格说明,每个参数的模式(
in/out)、类型都是完整的语法单元,这和你在代码块里声明变量的逻辑完全统一——比如写X : Integer; Y : String;时用分号分隔变量,参数声明用分号就是沿用这套规则,让整个语言的语法逻辑保持连贯。 - 而子程序调用时,你传入的是表达式或变量引用,属于"值传递的序列",用逗号分隔是多数编程语言的通用惯例,也符合阅读直觉——毕竟调用时不需要重复声明参数的模式和类型,只是传递值而已。
你贴的代码能直观体现这个差异:
-- 子程序声明:每个参数是完整的规格项,用分号分隔 procedure Initialize_Some_Things ( Result : out Integer ; Asset : in Integer ; Option: in Integer ) is begin null; end Initialize_Some_Things; -- 子程序调用:传入的是值/变量,用逗号分隔 Instance : Integer := 0; Initialize_Some_Things (Instance, 9, 5);
能不能提交请求修改语言标准?
理论上可以向Ada标准的维护机构提交提案,但实际完全不可能被采纳,原因有三个:
- Ada极度重视向后兼容性,现有所有Ada代码都依赖这个语法规则,改动会导致全球范围内的代码直接失效,这是标准委员会绝对不会接受的。
- 这个语法设计是Ada最初的核心决策之一,不是设计缺陷,而是为了语法一致性刻意选择的,不存在"修复"的必要性。
- Ada标准的修改流程非常严格,只有修复严重安全漏洞、填补关键功能空白的提案才会被考虑,这种纯语法偏好的改动没有任何优先级。
内容的提问来源于stack exchange,提问作者Semi Dev_
相关产品推荐
相关产品推荐

