tsurijin · 21-Сен-24 00:12(1 год 10 месяцев назад, ред. 21-Сен-24 00:24)
Linux и Go. Эффективное низкоуровневое программирование, 2-е изд. Год издания: 2024 Автор: Цилюрик О.И. Издательство: БХВ-Петербург ISBN: 978-5-9775-1979-3 Язык: Русский Формат: PDF Качество: Отсканированные страницы + слой распознанного текста Количество страниц: 381 Описание: Книга содержит вводный курс по языку Go для системного программирования, описывает применение Go для реализации конкурентности и параллелизма, рассказывает об интероперабельности между имеющимся кодом на C с новым кодом на Go, а также исследует возможности внедрения Go для повышения производительности различных дистрибутивов. Второе издание содержит описание языка Go в версии 1.2 и описание реализации TinyGo, дополнительно приведены новые примеры использования языка.
Книга ориентирована на программистов и системных администраторов, работающих с Linux, будет интересна разработчикам ядра Linux и драйверов устройств.
Примеры страниц (скриншоты)
Оглавление
Предисловие ..................................................................................................................... 9
Предназначение и целевая аудитория ................................................................................. 9
Код примеров и замеченные опечатки ................................................................................ 11
Чего нет в этой книге ........................................................................................................ 13
Соглашения и выделения, принятые в тексте ...................................................................... 13
Напоминание .................................................................................................................... 14
Источники информации ..................................................................................................... 15
ЧАСТЬ 1. ИНСТРУМЕНТАРИЙ ЯЗЫКА GO .............................................................................. 17
Глава 1. Предыстория Go .................................................................................................. 19
Отцы-основатели о целях и мотивации ............................................................................... 19
Применимость: беглый взгляд ............................................................................................ 20
Go, С, С++, Java, Python, Rust ............................................................................................ 21
Управление памятью и истоки ненадежности ....................................................................... 28
Источники информации ...................................................................................................... 29
Глава 2. Разворачиваем экосистему Go ................................................................................ 31
Создание среды ................................................................................................................. 31
Стандартная инсталляция ................................................................................................... 31
Версии среды .................................................................................................................... 34
Альтернативы .................................................................................................................... 35
«Самая последняя» версия ................................................................................................. 36
Смена версий .................................................................................................................... 40
Проверяем: простейшая программа ..................................................................................... 42
Простейшее приложение ................................................................................................... .44
Библиотеки статические и динамические ............................................................................ .45
Компиляция или интерпретация? ......................................................................................... 46
Выбор: GoLang или GCC? .................................................................................................... .47
Инфраструктура GoLang ....................................................................................................... 48
Команды go ......................................................................................................................... 48
Переменные окружения ........................................................................................................ 51
Переменная окружения GOPATH ............................................................................................ 55
Переменная окружения GOTOOLDIR ...................................................................................... 56
Переменные окружения GOARCH и GOOS ............................................................................... 57
Платформы, переносимость и кросс-компиляция .................................................................... 58
Стиль кодирования - автоформатирование: fmt ...................................................................... 61
Сборка приложений: build ..................................................................................................... 62
Сценарии на языке Go: run ................................................................................................... 63
Загрузка проектов из сети: get .............................................................................................. 64
Репозиторные системы .......................................................................................................... 64
Установка проектов .............................................................................................................. 67
Утилиты GoLang: too/ ............................................................................................................ 68
Утилиты компиляции ............................................................................................................. 71
Связь с кодом С: cgo ............................................................................................................. 73
Сторонний и дополнительный инструментарий ........................................................................ 76
Онлайн-инструмент для изучения Go ...................................................................................... 77
Графический терминал Geany ................................................................................................ 78
Интерактивный отладчик Delve .............................................................................................. 79
Источники информации .......................................................................................................... 81
Глава 3. Неформально о синтаксисе Go ................................................................................... 82
Типы данных .......................................................................................................................... 87
Переменные ........................................................................................................................... 89
Объявление переменных ......................................................................................................... 90
Повторные декларации и переприсвоения ................................................................................ 92
Константы .............................................................................................................................. 93
Агрегаты данных .................................................................................................................... 95
Массивы и срезы .................................................................................................................... 95
Двумерные массивы и срезы .................................................................................................. 100
Структуры ............................................................................................................................. 101
Таблицы (хеши) ................................................................................................................... 103
Динамическое создание переменных ...................................................................................... 105
Конструкторы и составные литералы ..................................................................................... 106
Операции ............................................................................................................................ 107
Функции .............................................................................................................................. 110
Вариативные функции ......................................................................................................... 115
Стек процедур завершения ................................................................................................. 117
Обобщенные функции ......................................................................................................... 118
Функции высших порядков ................................................................................................. 119
Встроенные функции ........................................................................................................... 121
Объектно-ориентированное программирование ....................................................................... 123
Методы ................................................................................................................................. 124
Множество методов .................................................................................................... 126
Встраивание и агрегирование .................................................................................... 127
Функции как объекты ................................................................................................. 129
Интерфейсы .......................................................................................................................... 130
Именование интерфейсов .......................................................................................... 133
Контроль интерфейса ................................................................................................. 133
Обработка ошибочных ситуаций ................................................................................................ 134
Структура пакетов (библиотек) Go ............................................................................................ 137
Функция init .......................................................................................................................... 142
Импорт для использования побочных эффектов .............................................................. 143
Некоторые полезные и интересные стандартные пакеты ........................................................ 144
Пакет runtime ........................................................................................................................ 144
Форматированный ввод/вывод ........................................................................................... 145
Строки и пакет strings .......................................................................................................... 146
Строчные литералы ............................................................................................................. 156
Большие числа ...................................................................................................................... 157
Автоматизированное тестирование ......................................................................................... 158
Источники информации .............................................................................................................. 159
Глава 4. Новости от последних версий ......................................................................................... 160
Модули ......................................................................................................................................... 160
Дженерики .................................................................................................................................... 162
Источники информации .............................................................................................................. 167
Глава 5. Альтернативы: TinyGo ................................................................................................... 168
Источники информации .............................................................................................................. 176
ЧАСТЬ 11. КОНКУРЕНТНОСТЬ И МНОГОПРОЦЕССОРНОСТЬ .......................................................... 177
Глава 6. Процессоры в Linux .................................................................................................... 179
Процессоры, ядра и гипертрейдинг ........................................................................................... 182
Загадочная нумерация процессоров ........................................................................................... 184
Управление процессорами Linux ................................................................................................ 187
Аффинити маска .................................................................................................................. 187
Как происходит диспетчирование в Linux? ....................................................................... 190
Приоритеты nice .......................................................................................................... 193
Приоритеты реального времени ................................................................................ 194
Источники информации ..................................................................................................... 196
Глава 7. Параллелизм и миогопроцессориость ............................................................ 197
Эволюция модели параллелизма ......................................................................................... 197
Параллельные процессы и fork ........................................................................................... 191
Потоки ядра и pthread _t POSIX .......................................................................................... 200
Потоки С++ ................................................................................................................. 203
Сопрограммы - модель Go ............................................................................................... 206
Параллелизм в Go ....................................................................................................... 207
Сопрограммы - как это выглядит? ........................................................................................... 208
Возврат значений функцией ............................................................................................... 211
Ретроспектива: сопрограммы в С++ .................................................................................. 212
Каналы .......................................................................................................................................... 212
Функциональные замыкания в сопрограммах .......................................................................... 218
Примитивы синхронизации ........................................................................................................ 220
Конкурентность и параллельность ............................................................................................. 226
Источники информации .............................................................................................................. 231
Глава 8. Масштабирование ...................................................................................................... 232
Планирование активности сопрограмм ..................................................................................... 232
Испытательный стенд .................................................................................................................. 234
Одноплатные микрокомпьютеры (Single-Board Computers) ..................................................... 234
Рабочие десктопы ................................................................................................................ 238
Серверы промышленного класса ........................................................................................ 239
Масштабирование в реальном мире ........................................................................................... 240
Первая попытка .................................................................................................................... 241
Второй подход к снаряду .................................................................................................... 247
О числе потоков исполнения ...................................................................................................... 254
Источники информации .............................................................................................................. 258
ЧАСТЬ 111. НЕКОТОРЫЕ ПРИМЕРЫ И СРАВНЕНИЯ .......................................................................... 261
Глава 9. Осваиваемся в технологии Go ........................................................................................... 263
Консольный ввод/вывод ................................................................ .............................................. 263
Утилита echo ................................................................................................................................ 267
Итерационное вычисление вещественного корня .................................................................... 269
Вычисление числа 7t .................................................................................................................... 271
Вычисления неограниченно высокой точности ........................................................................ 274
Случайная последовательность и ее моменты .......................................................................... 275
Расчет параметров выпуклых 2D-многоугольников ................................................................. 278
ТСР клиент-сервер ....................................................................................................................... 283
Тривиальный веб-сервер ............................................................................................................. 288
Порядок итераций для тар: сюрприз ......................................................................................... 289
Консольный калькулятор ............................................................................................................ 290
Источники информации .............................................................................................................. 293
Глава 10. Структуры данных, типы и их методы ........................................................................... 294
Массивы и срезы .......................................................................................................................... 294
Многомерные срезы и массивы .................................................................................................. 299
Функции с множественным возвратом ...................................................................................... 300
Глава 11. Строки, руны и UNICODE .............................................................................................. 303
Символы, байты и руны .............................................................................................................. 303
Изменение содержимого строк ................................................................................................... 305
Палиндромы ................................................................................................................................. 306
Регулярные выражения ............................................................................................................... 311
Источники информации .............................................................................................................. 315
Глава 12. Элементы функционального программирования ............................................................ 316
Функциональные замыкания ...................................................................................................... 316
Карринг ......................................................................................................................................... 324
Рекурсия ....................................................................................................................................... 325
Рекурсия с кешированием ............................................................................................................. 326
Чистые функции ........................................................................................................................... 329
Источники информации .............................................................................................................. 329
Глава 13. Скоростные и другие сравнения языков ..................................................................... 330
Алгоритмические задачи для сравнения .................................................................................... 330
Некоторые известные алгоритмы ............................................................................................... 331
Числа Фибоначчи ................................................................................................................. 332
Пузырьковая сортировка ..................................................................................................... 3 3 5
Ханойская башня ................................................................................................................. 341
Решето Эратосфена ............................................................................................................. 344
Глава 14. Многопроцессорные параллельные вычисления ....................................................... 349
Скорость активации параллельных ветвей ................................................................................ 349
Гонки ..................................................................................................................................... 354
Защита критических данных ................................................................................................... 358
Неблокирующий ввод с клавиатуры .......................................................................................... 362
Многопроцессорный брутфорс .................................................................................................. 366
Каналы в сопрограммах ............................................................................................................ 372
Таймеры .................................................................................................................................. 373
Тикеры .................................................................................................................................... 375
Когда не нужно злоупотреблять мноrопроцессорностью ............................................................... 376
Источники информации ............................................................................................................. 380
Заключение .............................................................................................................................. 381
Об авторе ................................................................................................................................. 382
87622685Низкоуровневое программирование и ГО...какие же извраты порой встречаются.
Ну, вообще-то, Go изначально позиционировался, как язык системного программирования.
Это потом маркетологи Гугла настояли на том, чтобы его "молодёжно" стали соотносить с вебом, бэком и прочей чепухой.
Да и Керниган, в каком-то интервью, на вопрос: "Если бы вы проектировали Си сейчас, то - каким бы он был, с учётом опыта и результатов этих 40 лет его использования?", ответил: "Это был бы Go."
Такшо.....
Второе издание содержит описание языка Go в версии 1.2
Мне кажется, книга устарела еще до ее выхода))
Похоже это издательство лоханулось в аннотации - у них на сайте висят плашки про версию 1.22 (в книге в качестве последней упоминается 1.21*). ... Пробежался по оглавлению и немного смутила используемая автором терминология - где-то видимо академическая, причём вероятно локальная (агрегаты данных), где-то наоборот разговорный транслит (десктопы, аффинити маска), иногда ещё и некорректный (гипертрейдинг это скорее что-то из биржевой торговли). Судя по всему старая школа. Но это всё, конечно, поверхностное, а я зануда. P.S. Забавно в списках источников в книге выглядят ссылки на Рутрекер и Флибусту.
Второе издание содержит описание языка Go в версии 1.2
Мне кажется, книга устарела еще до ее выхода))
Похоже это издательство лоханулось в аннотации - у них на сайте висят плашки про версию 1.22 (в книге в качестве последней упоминается 1.21*). ... Пробежался по оглавлению и немного смутила используемая автором терминология - где-то видимо академическая, причём вероятно локальная (агрегаты данных), где-то наоборот разговорный транслит (десктопы, аффинити маска), иногда ещё и некорректный (гипертрейдинг это скорее что-то из биржевой торговли). Судя по всему старая школа. Но это всё, конечно, поверхностное, а я зануда.
Ну я просто посмотрел в предисловие, увидел там что автор начал писать книгу в 2011, подумал может реально 1.2))
Цитата:
P.S. Забавно в списках источников в книге выглядят ссылки на Рутрекер и Флибусту.
Ну я просто посмотрел в предисловие, увидел там что автор начал писать книгу в 2011, подумал может реально 1.2))
Да, автор давно начал книгу писать. Было много "версий". Он их выкладывал в разных местах Интернета.
Как я понимаю, книга была всегда относительно актуальна. Материал обновлялся.
Но, теперь, к сожалению, уже такого не будет.
Олег Иванович скончался 20 марта 2024-го года.
Поищите, после него довольно много статей, книг и заметок осталось. По разной тематике. Чаще всего он публиковался под ником Olej.