Сколько занимает программа на «Go»
Хочу немного развеять тот миф, который я невольно создал — что скомпилированные программы, написанные на языке «Go» занимают очень много. Мой скомпилированный пример с веб-сервером (программа «httphere») занимает почти шесть мегабайт и это не выглядит много для такой программы.
На самом деле, всё не так просто. Простенькая программа на «Go», например, классический «Hello, world!» займёт около 230КБ:
bolk-osx:Hello bolk$ cat <<GO > hello.go
> package main; func main() { println("Hello, world!") }
> GO
bolk-osx:Hello bolk$ 6g hello.go && 6l -o hello hello.6 && du -h hello
232K hello
При увеличении исходного кода размер вырастает незначительно, в моей шестимегабайтной программе большую часть занимает веб-сервер (модуль «http»), если его убрать, то скомпилированная программа «похудеет» примерно на 5,5МБ.
Сейчас я пишу программу где уже 414 строк (в httphere — 132) и подключено 11 стандартных модулей, включая модуль для работы с изображениями («image»), скомпилированная версия занимает 1,5 мегабайта. Хотел бы попробовать сжать файл архиватором UPX, но, к сожалению, он не понимает тип запускаемых файлов моей системы (Mach-O 64 бита).
Курсовик на Go: 2.5к строк -> 1.2 Мб.
Комментарий для Студентота:
Ого, а что писалось такое большое? Что было самым сложным? Использовался ли cgo (я как раз его сейчас осваиваю).
Просто писалось студентом, поэтому 2.5к строк :)
Комментарий для Евгения Степанищева:
Оно еще пишется. Пока эти 2.5к включают лексер, парсер, семантику и зачатки интерпретатора небольшого подмножества Паскаля.
Самым сложным было попытаться конвертировать образ мысли плюс-плюс-программиста и разместиться в этих ошметках ООПа, что есть в Go.
В итоге (плюс нехватка времени, как обычно) семантический анализ (который писался после начального порыва следовать канонам языка, но до окончательного привыкания) превратился в изрядный говнокод, этакий сишный код образца первого курса. Стыдно :)
Писалось все на чистом Go, благо особых изысков не нужно.
Ну и, конечно, малость напрягает, что язык «плывет». Обновишься, бывало, и вот уже будь добр править все, что поломалось.
Комментарий для Студентота:
Даже если говнокод, всё равно, интерпретатор «Паскаля» на «Гоу» — это звучит солидно :)
I/O BootCamp 2011: Real World Go
http://www.youtube.com/watch?v=7QDVRowyUQA
Эволюция Go: what is it good for?
http://db.tt/McSeFgv
Комментарий для rodem:
Спасибо!
Комментарий для Студентота:
У меня уже 1274 строки и занимает 1,6МБ, но у меня теперь вкомпиленный GD вовнутрь.
Утилита strip помогла сэкономить 11КБ в программе hello на «Гоу».