Это сайт — моя персональная записная книжка. Интересна мне, по большей части, история, своя жизнь и немного программирование.

Сколько занимает программа на «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 бита).

9 комментариев
Студентота 2011

Курсовик на Go: 2.5к строк -> 1.2 Мб.

Евгений Степанищев (bolknote.ru) 2011

Комментарий для Студентота:

Ого, а что писалось такое большое? Что было самым сложным? Использовался ли cgo (я как раз его сейчас осваиваю).

Школота 2011

Просто писалось студентом, поэтому 2.5к строк :)

Студентота 2011

Комментарий для Евгения Степанищева:

Оно еще пишется. Пока эти 2.5к включают лексер, парсер, семантику и зачатки интерпретатора небольшого подмножества Паскаля.
Самым сложным было попытаться конвертировать образ мысли плюс-плюс-программиста и разместиться в этих ошметках ООПа, что есть в Go.
В итоге (плюс нехватка времени, как обычно) семантический анализ (который писался после начального порыва следовать канонам языка, но до окончательного привыкания) превратился в изрядный говнокод, этакий сишный код образца первого курса. Стыдно :)

Писалось все на чистом Go, благо особых изысков не нужно.

Ну и, конечно, малость напрягает, что язык «плывет». Обновишься, бывало, и вот уже будь добр править все, что поломалось.

Евгений Степанищев (bolknote.ru) 2011

Комментарий для Студентота:

Даже если говнокод, всё равно, интерпретатор «Паскаля» на «Гоу» — это звучит солидно :)

rodem 2011

I/O BootCamp 2011: Real World Go
http://www.youtube.com/watch?v=7QDVRowyUQA

Эволюция Go: what is it good for?
http://db.tt/McSeFgv

Евгений Степанищев (bolknote.ru) 2011

Комментарий для rodem:

Спасибо!

Евгений Степанищев (bolknote.ru) 2011

Комментарий для Студентота:

У меня уже 1274 строки и занимает 1,6МБ, но у меня теперь вкомпиленный GD вовнутрь.

Евгений Степанищев (bolknote.ru) 2011

Утилита strip помогла сэкономить 11КБ в программе hello на «Гоу».