Почему компилятор go "gc" использует другое соглашение о вызовах, чем C?

C использует cdecl, который я изучил и вызвал из сборки. Чувствуется достаточно хорошо, так зачем ломать совместимость? Зачем нужен был еще один съезд?

1 ответ

Решение

Потому что нет преимущества в том же соглашении о вызовах. Код Go и код C не могут вызывать друг друга напрямую, даже если соглашение о вызовах будет одинаковым, потому что Go использует разделенные стеки.

OTOH, это имеет смысл в gccgo, так как gcc поддерживает C-стеки для некоторых архитектур. И, IIRC, там соглашение о вызове из-за этого совместимо. (Подробнее здесь.)

Отказ от ответственности: я никогда не использовал gccgo.

Другие вопросы по тегам