编程语言可以有自己的调用约定吗?

Sou*_*a B 3 assembly x86-64 calling-convention

Windows 和 Unix 有自己的x86-64 调用约定。但是,如果一种语言需要/从中受益,它可以有自己的调用约定供内部使用吗?例如,Swift / Python(已编译)可能会受益于拥有多个寄存器来从函数返回多个结果(因为这些语言支持这一点)。因此,保留 3 个寄存器 ( raxrcxrdx),用于其语言调用约定中的返回值,这会破坏任何内容吗?导致任何未被注意到的错误,或者在任何情况下导致未定义的行为?

另外,如果不需要遵循该约定,那么为什么他们要为用户空间定义调用约定?

zx4*_*485 5

当然,他们可以。剩下的问题是与 API/操作系统的交互,你必须遵守操作系统的做事方式。

总的来说,重点可能是成本/收益关系。

但对于特殊目的,这是可能的,甚至可能更好(不然你为什么要这样做呢?)。另外,请考虑对特定于操作系统的事物(例如red-zone )
可能产生的副作用。