физико-математические науки
УДК 581.1 Ю.В. Адаменко
Курганский государственный университет
особенности языка программирования go
Аннотация. В статье рассматривается краткая история возникновения языка программирования Go, приводится краткий сравнительный анализ языка Go с другими популярными языками программирования, описываются основные возможности языка программирования Go.
Ключевые слова: язык программирования, типы данных.
Y.V. Adamenko Kurgan State University
features of the programming language go
Annotation. The article deals with a brief history of the Go programming language, brief comparative analysis of Go language with other popular programming languages, describes the main features of the Go programming language.
Keywords: programming language data types.
Введение
Go - один из современных и быстроразвиваю-щихся языков программирования, появившихся за последние 20 лет. Язык программирования Go на-
целен на программистов и компьютеры XXI века. Благодаря эффективному масштабированию Go можно использовать для разработки очень больших приложений и их компиляции за секунды на единственном компьютере. Язык Go создавался как высокоэффективное средство для легкого и простого написания надежных высокоинтеллектуальных программ. Go - практичный язык, в основу которого положены эффективность программ и удобство программиста.
1 История возникновения языка программирования Go
Разработчиками языка программирования Go были Роберт Грисемер (Robert Griesemer), Роб Пайк (Rob Pike) и Кен Томпсон (Ken Thompson) из Google. Это проект с открытым исходным кодом, так что исходные тексты его библиотек и инструментов, включая компилятор, находятся в открытом доступе.
Go заимствует и приспосабливает для своих нужд хорошие идеи из многих других языков, избегая возможностей, которые могут привести к созданию сложного и ненадежного кода. Как и все современные языки, Go обладает эффективным механизмом сбора мусора, хорошо подходит для построения инструментария и систем для работы других программистов.
Go, работает на большом количестве Unix-подобных систем (Linux, FreeBSD, OpenBSD, Mac OS X), а также на Plan 9 и Microsoft Windows; при этом программы, написанные для одной из этих сред, легко можно перенести на другие.
На дизайн Go оказали влияние следующие языки программирования (рисунок 1).
(Грисемер, Пайк, Томпсон, 2009} Рисунок 1 - Иерархия языков, оказавших влияние на дизайн Go
64
Вестник КГУ, 2016. № 4
Go унаследовал от:
- языка С: синтаксис выражений, конструкции управления потоком, базовые типы данных, передачу параметров в функции по значению, понятие указателей; направленность на получение при компиляции эффективного машинного кода, естественное взаимодействие с абстракциями современных операционных систем;
- Modula-2 привнесла концепцию пакетов;
- Oberon использует один файл для определения модуля и его реализации;
- Oberon-2 явился источником синтаксиса пакетов, импорта и объявлений (прежде всего, объявлений методов), которые он, в свою очередь, унаследовал от языка Object Oberon;
- CSP (формальный язык описания фундаментальных концепций параллелизма) основан на концепции взаимодействующих последовательных процессов. CSP программа представляет собой параллельное объединение процессов, не имеющих общего состояния; процессы взаимодействуют и синхронизируются с помощью каналов;
- фактический язык программирования «Squeak» («язык для общения с мышью»), который являлся языком для обработки событий мыши и клавиатуры со статически созданными каналами;
- функциональный язык Newsqueak: в котором С-образные инструкции и синтаксис выражений сочетались с записью типов в стиле Pascal, сборка мусора, направлен на управление клавиатурой, мышью и оконными событиями, каналы динамически создаваемы и хранимы в переменных.
Go часто описывают как «C-подобный язык» или «язык Си XXI века - это компактный и эффективный язык программирования с низкоуровневыми возможностями (указатели). Go обладает особенностями, характерными для высокоуровневых языков (поддержка строк Юникода, высокоуровневые структуры данных, динамическая типизация, автоматическая сборка мусора и высокоуровневая поддержка взаимодействий, основанных на обмен сообщениями, а не на блокировках и разделяемых данных, обширная и всесторонняя стандартная библиотека).
2 сравнение языков программирования Go, C++ и Java
Высокая скорость компиляции обеспечивается, с одной стороны, простотой синтаксического анализа программ на языке Go, с другой, особенностями управления зависимостями. Появляется возможность использования языка Go вместо языков сценариев, благодаря высокой скорости компиляции программ написанные на языке Go. Еще одно направление использования языка Go - это создание веб-приложений с применением Google App Engine.
Проведем сравнительный анализ языков Go, С (C++) и Java (таблица 1). СЕРИЯ «ЕСТЕСТВЕННЫЕ НАУКИ», ВЫПУСК 9
Таблица 1- Сравнение языков Go, C (C++) и Java
Go С (C++) Java
Сложность конструкций языка
простой и понятный синтаксис сложные и замысловатые конструкции
Типизация
строгая статическая, поддержка синтаксиса объявления переменных одновременно с их инициализацией, наличие мощного и удобного механизма динамической типизации строгая статическая
Управление памятью
механизм сборки мусора; сложности, связанные с учетом ресурсов, берут на себя компилятор и среда выполнения «интеллектуальные» указатели (поддержка многопоточной модели выполнения включена в стандартную библиотеку) библиотека поддержки многопоточной модели выполнения, механизм сборки мусора
необходимость в обеспечении своевременного приобретения и освобождения ресурсов
Параллелизм
механизм взаимодействующих последовательных процессов потоки выполнения
go-подпрограммы
легковесные процессы, выполнение которых автоматически будет распределяться по доступным процессорам и ядрам нет нет
Парадигмы программирования
процедурный язык, поддержка объектно-ориентированного стиля программирования процедурное про-граммиро-вание объектно-ориентированный стиль про-граммирова-ния
Генерики (generics)
нет шаблоны обобщения
3 Особенности языка программирования
Go
Первоначальная нацеленность языка Go на системное программирование с высокой скоростью компиляции позволяет разрабатывать программы, которые могут использовать многие преимущества распределенных систем и многоядерных компьютеров. Язык Go используется в тех областях, где требуется применение высокопроизводительных языков программирования общего назначения.
Проект Go родился из разочарования программистов компании Google некоторыми программными системами, страдающими от «взрыва сложности»: устранение проблемы путем усложнения одной части системы, добавляет сложность в другие части.
Проект Go включает в себя сам язык, его инструментарий, стандартные библиотеки и культуру радикальной простоты. В Go имеются сборка мусора, система пакетов, полноценные функции, лексическая область видимости, интерфейс системных вызовов и неизменяемые строки, текст в которых кодируется с использованием кодировки UTF-8.
Однако язык программирования Go имеет сравнительно немного возможностей (отсутствуют неявные числовые преобразования, конструкторы и деструкторы, перегрузка операторов, значения параметров по умолчанию, наследование, обобщенные типы, исключения, макросы, аннотации функций и локальная память потока).
Язык программирования Go гарантирует обратную совместимость: старые программы на Go можно компилировать и запускать с помощью новых версий компиляторов и стандартных библиотек.
Go имеет достаточную систему типов, но она гораздо более ограниченная, чем в других строго типизированных языках программирования, так что программисты на Go не прибегают к длинным конструкциям.
На практике Go дает программистам преимущества безопасности и производительности времени выполнения относительно строгой системы типов без излишней сложности.
Go поощряет понимание дизайна современных компьютерных систем, в частности - важность локализации. Его встроенные типы данных и большинство библиотечных структур данных созданы для естественной работы без явной инициализации или неявных конструкторов, так что в коде скрывается относительно мало распределений и записей памяти.
Составные типы Go (структуры и массивы) хранят свои элементы непосредственно, требуя меньшего количества памяти и ее распределений, а также меньшего количества косвенных обращений с помощью указателей по сравнению с языками, использующими косвенные поля. А поскольку современные компьютеры являются па-66
раллельными вычислительными машинами, Go обладает возможностями параллельности. Стеки переменного размера легких потоков (или go-подпрограммы (goroutines)) Go изначально достаточно малы.
Стандартная библиотека Go предоставляет строительные блоки и API для ввода-вывода, работы с текстом и графикой, криптографические функции, функции для работы с сетью и для создания распределенных приложений. Библиотека поддерживает множество стандартных форматов файлов и протоколов.
Библиотеки и инструменты интенсивно используют соглашения по снижению потребностей в настройке, упрощая тем самым логику программ; таким образом, различные программы Go становятся более похожими одна на другую и более простыми в изучении.
Обсуждение результатов
По результатам обзора возможностей языка программирования Go можно сделать вывод, что:
- Go - компилируемый многопоточный язык программирования, разработанный компанией Google;
- Go - язык со строгой статической типизацией;
- Поддержка указателей;
- Встроенная поддержка юникода.
- Использование динамических массивов, хэш-таблиц, срезов (слайсов), вариант цикла для обхода коллекции;
- Средства функционального программирования;
- Средства объектно-ориентированного программирования без поддержки наследования реализации;
-Средствапараллельногопрограммирования;
- Достаточно простой синтаксис, основанный на Си.
Список литературы
1 Саммерфилд М. Программирование на Go. Разработка приложений XXI века /пер. с англ. А. Н. Киселёв. М. : ДМК Пресс, 2013. 580 с.
2 Донован, Алан А. А., Керниган, Брайан, У. Язык программирования Go / пер. с англ. М.: ООО «И.Д. Вильямс», 2016. 432 с.
Вестник КГУ, 2016. № 4