Особенности языка программирования gо

физико-математические науки

УДК 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-подпрограммы

легковесные процессы, выполнение которых автоматически будет распределяться по доступным процессорам и ядрам нет нет

Парадигмы программирования

процедурный язык, поддержка объектно-ориентированного стиля программирования процедурное про-граммиро-вание объектно-ориентированный стиль про-граммирова-ния

Генерики

нет шаблоны обобщения

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