Почему компилятор go "gc" использует другое соглашение о вызовах, чем C?
C использует cdecl, который я изучил и вызвал из сборки. Чувствуется достаточно хорошо, так зачем ломать совместимость? Зачем нужен был еще один съезд?
1 ответ
Решение
Потому что нет преимущества в том же соглашении о вызовах. Код Go и код C не могут вызывать друг друга напрямую, даже если соглашение о вызовах будет одинаковым, потому что Go использует разделенные стеки.
OTOH, это имеет смысл в gccgo, так как gcc поддерживает C-стеки для некоторых архитектур. И, IIRC, там соглашение о вызове из-за этого совместимо. (Подробнее здесь.)
Отказ от ответственности: я никогда не использовал gccgo.