Компоновщик (linker) в цепочке инструментов gc
создает статически связанные бинарные файлы по умолчанию. Все бинарные файлы Go, следовательно, включают Go runtime, наряду с информацией о runtime типах, необходимой для поддержки динамической проверки типов, отражения (reflection) и даже для stack trace'ов времени паники (panic-time).
Простая программа на языке C "hello, world", скомпилированная и статически связанная с использованием gcc в Linux составляет около 750 кБ, включая реализацию printf
. Эквивалентная Go программа с использованием fmt.Printf
весит пару мегабайт, но она включает более мощную поддержку во время выполнения (run-time support), а также информация о типах и отладочную информацию.
Программа на Go, скомпилированная с помощью gc
, может быть связана с флагом -ldflags=-w
для отключения генерации DWARF, удаляя отладочную информацию из бинарного файла, но без других потерь функциональности. Это может существенно уменьшить размер бинарного файла.
Читайте также:
- Go FAQ: Есть ли у Go runtime (среда выполнения)?
- Go FAQ: можно ли связать программы на Go с программами на C/C++?
- Go FAQ: Какие компиляторы используются для создания самих Go компиляторов?
Комментариев нет:
Отправить комментарий