The Go Blog
Go: один год назад сегодня
10 ноября 2009 года мы запустили проект Go: открытый язык программирования, ориентированный на простоту и эффективность. Прошедший год принес множество изменений как в самом проекте Go, так и в его сообществе.
Мы стремились создать язык для системного программирования — виды программ, которые обычно пишут на C или C++ — и были удивлены полезностью Go как универсального языка. Мы предполагали интерес со стороны программистов C, C++ и Java, но внезапный интерес пользователей динамически типизированных языков, таких как Python и JavaScript, был неожиданным. Сочетание нативной компиляции, статической типизации, управления памятью и лёгкого синтаксиса Go, казалось, нашло отклик у широкого круга программистов.
Этот круг программистов вырос до того, что стал преданным сообществом энтузиастов Go. Наша рассылка насчитывает более 3800 участников, приблизительно 1500 сообщений в месяц. Проект имеет более 130 участников (людей, которые отправляли код или документацию), и около одной трети всех коммитов с момента запуска были сделаны программистами вне основной команды. Чтобы привести весь этот код в порядок, было обменяно почти 14000 писем на нашей разработческой рассылке.
Эти цифры отражают труд, результаты которого видны в кодовой базе проекта. Компиляторы значительно улучшились, с более быстрой и эффективной генерацией кода, исправлено более ста сообщенных ошибок, и добавлена поддержка растущего числа операционных систем и архитектур. Порт для Windows приближается к завершению благодаря упорному вкладу группы участников (один из которых стал первым негугловым коммитером в проект). Порт для ARM также достиг значительного прогресса, недавно достигнув этапа прохождения всех тестов.
Набор инструментов Go был расширен и улучшен. Инструмент документации Go, godoc, теперь поддерживает документацию других исходных деревьев (вы можете просматривать и искать ваш собственный код) и предоставляет интерфейс «code walk» для представления учебных материалов (и ещё множество других улучшений). Goinstall, новый инструмент управления пакетами, позволяет пользователям устанавливать и обновлять внешние пакеты одной командой. Gofmt, pretty-принтер Go, теперь делает синтаксические упрощения, где это возможно. Goplay, веб-инструмент «компиляция по мере ввода», удобный способ экспериментировать с Go в те моменты, когда нет доступа к Go Playground.
Стандартная библиотека выросла более чем на 42 000 строк кода и включает 20 новых пакетов. Среди добавлений — пакеты jpeg, jsonrpc, mime, netchan, и smtp, а также целый ряд новых пакетов криптографии. В целом, стандартная библиотека непрерывно совершенствовалась и перерабатывалась по мере углубления нашего понимания идиом Go.
Система отладки также улучшилась. Недавние улучшения вывода DWARF компиляторами gc делают GNU debugger (GDB) полезным для отладки исполняемых файлов на Go, и мы активно работаем над тем, чтобы эта информация для отладки была более полной. (См. недавний блог-пост для подробностей.)
Теперь гораздо проще связываться с существующими библиотеками, написанными на языках, отличных от Go. Поддержка Go входит в последний выпуск SWIG, версии 2.0.1, что облегчает связывание с кодом на C и C++, а наш инструмент cgo получил множество исправлений и улучшений.
Gccgo, фронтенд для языка Go в GNU C Compiler, развивался параллельно с компилятором gc как альтернативная реализация Go. Он теперь имеет рабочий сборщик мусора и был принят в ядро GCC. В настоящее время мы работаем над тем, чтобы сделать gofrontend доступным как фронтенд компилятора Go с лицензией BSD, полностью независимый от GCC.
За пределами самого проекта Go он начинает использоваться для создания реального ПО. На нашей панели проектов перечислено более 200 программ и библиотек на Go, а сотни других можно найти на Google Code и GitHub. В нашем списке рассылки и IRC-канале можно найти программистов со всего мира, которые используют Go для своих проектов. (См. наш гостевой блог-пост от прошлого месяца для примера из реальной жизни.) Внутри Google несколько команд выбирают Go для разработки производственного ПО, и мы получали сообщения от других компаний, которые разрабатывают масштабные системы на Go. Мы также общались с несколькими преподавателями, которые используют Go как язык для обучения.
Сам язык также вырос и стал зрелым. В прошлом году мы получили множество запросов на новые функции. Но Go — это маленький язык, и мы старались убедиться, что любая новая функция находит правильный баланс между простотой и полезностью. С момента запуска мы внесли несколько изменений в язык, многие из которых были внесены по обратной связи от сообщества.
- Точка с запятой теперь не обязательна почти во всех случаях. спецификация
- Новые встроенные функции
copyиappendделают работу со срезами более эффективной и простой. спецификация - Верхняя и нижняя границы могут быть опущены при создании подсреза.
Это означает, что
s[:]является сокращением дляs[0:len(s)]. спецификация - Новая встроенная функция
recoverдополняетpanicиdeferкак механизм обработки ошибок. блог, спецификация - Новые типы комплексных чисел (
complex,complex64иcomplex128) упрощают некоторые математические операции. спецификация, спецификация - Синтаксис составного литерала позволяет опускать избыточную информацию о типе (например, при указании двумерных массивов). релиз.2010-10-27, спецификация
- Общий синтаксис для аргументов переменной длины функции (
...T) и их распространения (v...) теперь задан. спецификация, спецификация, релиз.2010-09-29
Go действительно готов к использованию в продакшене, но всё ещё есть место для улучшений. Наша цель на ближайшее будущее — сделать программы на Go быстрее и более эффективными в контексте высокопроизводительных систем. Это означает улучшение сборщика мусора, оптимизацию генерируемого кода и улучшение основных библиотек. Мы также исследуем некоторые дополнительные возможности системы типов, чтобы сделать программирование с дженериками более простым. Прошло многое за этот год; это было захватывающе и удовлетворительно. Надеемся, что следующий год будет ещё более плодотворным, чем предыдущий.
Если вы хотели вернуться к Go или начать с ним, теперь отличное время для этого! Ознакомьтесь с Документацией и страницей «Приступая к работе» для получения дополнительной информации, или просто попробуйте в Go Playground.
Следующая статья: Go Slices: usage and internals
Предыдущая статья: Debugging Go code (a status report)
Индекс блога