Подробные тексты по интересным деталям компьютеров

Перевод | Автор оригинала: Pascal Hertleif

Кажется, особенно в последнее время я сталкиваюсь с все больше и больше длинных текстов (подумайте: часовые сообщения в блоге; бесплатные книги; серии сообщений). Мне особенно нравятся те, которые раскрывают очень мелкие детали какой-то нишевой темы и, возможно, также немного болтают о совершенно несвязанных, но очень занимательных сторонах. И хотя у меня, вероятно, никогда не будет достаточно времени, чтобы прочитать их все, я решил по крайней мере собрать некоторые из них здесь для использования в будущем. Я сделаю все возможное, чтобы добавить резюме и периодически обновлять этот список.

“Learn Rust With Entirely Too Many Linked Lists” by Alexis Beingessner

(~180 pages; archived)

Предпосылка этой книги состоит в том, что написание связного списка - это упражнение для новичков в C, но довольно сложное для правильного выполнения в Rust. Поэтому он использует это как возможность сделать то, о чем говорится в названии: он учит вас Rust, реализуя тип связанного списка в Rust пятью (по состоянию на апрель 2020 года) различными способами.

Ниши: структуры данных; связанные списки; Rust; умные указатели

Последнее обновление, которое я видел: 2019-03-21

“Programming Algorithms” by Vsevolod Domkin

(~300 pages; archived)

Книга, охватывающая множество различных структур данных и алгоритмов. «Его цель - систематически объяснять, как писать эффективные программы, а также подходы и инструменты для определения того, почему программа недостаточно эффективна».

Ниши: структуры данных; алгоритмы; шепелявить

Последнее обновление, которое я видел: 2020-04-16

“Aspects of Rust” by multiple people

Несколько отдельных сообщений от разных людей, которых объединяет только то, что они освещают приятные аспекты Rust.

Ниши: Rust

  1. Полчаса на изучение Rust (в архиве)

    Вихревой тур по Русту как языку от Амоса Венгера.

  2. Погружение в Rust с помощью интерфейса командной строки (в архиве)

    Небольшое руководство Кевина Кнаппа о том, как написать инструмент для загрузки XKCD на Rust.

  3. Типизированный ключевой шаблон (в архиве)

    Автор Алексей Кладов.

  4. Тайная жизнь коров (в архиве)

    Интеллектуальный указатель «Клонирование при записи». Объяснение.

  5. Шаблон индекса Newtype (в архиве)

    Автор Алексей Кладов.

  6. Как реализовать трейт для &str и &[&str](в архиве)

    Немного размышлений о ваших трэйтах и заимствованиях.

  7. Декларативное управление памятью (в архиве)

    Амос Венгер. Знакомство с сложностями управления памятью и способами, которыми Rust пытается их красиво и окольным образом представить.

  8. Отправка по типу возврата (в архиве)

    С уважением. Указав на более позднем этапе кода, какой тип вы хотите вернуть функцией, компилятор может вернуться и заполнить пробелы.

  9. Работа со строками в Rust (в архиве)

    Амос Венгер. Следуя посту об управлении памятью, мы рассмотрим, насколько строки на самом деле довольно сложны и что с ними делает Rust.

  10. Написание нетривиальных макросов на Rust (в архиве)

    Майкл Ф. Брайан.

«Приложения командной строки в Rust» Паскаль Хертлейф

(~45 pages; archived)

Учебник о том, как писать приложения CLI на Rust, попутно изучая многие аспекты экосистемы.

Последнее обновление, которое я видел: 2020-06-12

«Узнай опасный путь Rust», Клифф Л. Биффл

Объяснение Rust для низкоуровневых разработчиков без опыта работы с CS. Если вы писали прошивки, ядра или игровые движки и хотите погрузиться в Rust, это хорошее начало. Полный указатель серий здесь.

Ниши: Rust; системное программирование; управление памятью

  1. Зачем изучать Rust опасным путем? (в архиве)
  2. Вы не можете писать C на любом старом языке (из архива)
  3. Ссылки доступны по запросу (в архиве)
  4. Измеряйте то, что вы оптимизируете (архив)
  5. Более совершенный союз (из архива)
  6. Изготовление безопасных вещей из небезопасных деталей (из архива)
  7. Пусть компилятор сделает всю работу (из архива)

«Жесткое чтение файлов», Амос Венгер.

Запись файлов кажется решенной проблемой. Но это не значит, что мы не сможем решить эту проблему с нуля.

Ниши: POSIX; файловые системы; системные вызовы

  1. Часть 1 (node.js, C, rust, strace) (в архиве)
  2. Часть 2 (x86 asm, ядро linux) (в архиве)
  3. Часть 3 (ftrace, схемы дисков, ext4) (в архиве)

«Делаем наш собственный пинг», Амос Венгер.

  1. Краткая (и в основном ошибочная) история компьютерных сетей (архив)
  2. Динамические библиотеки Windows, соглашения о вызовах и преобразование (в архиве)
  3. FFI-безопасные типы в Rust, newtypes и MaybeUninit (в архиве)
  4. Разработка и внедрение более безопасного API поверх LoadLibrary (в архиве)
  5. Простая библиотека ping, анализирующая строки в адрес IPv4 (в архиве)
  6. Шаблон компоновщика и макрос, сохраняющий СУХОЙ код FFI (в архиве).
  7. Нахождение сетевого интерфейса по умолчанию через WMI (в архиве)
  8. Связывание C API со структурами переменной длины и UTF-16 (в архиве).
  9. Использование Ethernet-фреймов с помощью nom crate (в архиве)
  10. Улучшение обработки ошибок - паника или правильные ошибки (архив)
  11. Анализ IPv4-пакетов, включая числа меньше байтов (в архиве).
  12. Разбор и сериализация ICMP-пакетов с помощью cookie-factory. (в архиве)
  13. Создание пакетов ARP для поиска MAC-адреса удаленного хоста (в архиве).
  14. Создание ICMP-пакетов IPv4 с помощью bitvec (в архиве)

«Создание нашего собственного исполняемого упаковщика», Амос Венгер.

  1. Что есть в исполняемом файле Linux? (в архиве)
  2. Запуск исполняемого файла без exec (в архиве)
  3. Независимый от позиции код (в архиве)
  4. Перемещения ELF (из архива)
  5. Самая простая разделяемая библиотека (в архиве)
  6. Загрузка нескольких объектов ELF (из архива)
  7. Динамическое разрешение символов (в архиве)
  8. Скорость и корректность динамического компоновщика (в архиве)
  9. Скрипты GDB и косвенные функции (в архиве)
  10. Более безопасные структуры с отображением в память (в архиве)
  11. Больше перемещений ELF (из архива)
  12. Бинарный файл no_std Rust (в архиве)
  13. Локальное хранилище потока (в архиве)

«Парсинг» Алексея Кладова

Не настоящая серия статей, а сборник сообщений человека, чья биография на Github гласит: «Застрявшие парсеры написания».

Ниши: парсеры

  1. Modern Parser Generator (в архиве)
  2. Простой, но мощный анализ Пратта (в архиве)
  3. От Пратта до Дейкстры (из архива)

«JavaScript Allongé» от Рега «raganwald» Брейтуэйта

(~ 530 страниц; в архиве)

Ниши: функциональное программирование; непонятный JavaScript

Последнее обновление, которое я видел: 2019-04-26

«Ремесленные переводчики» Роберта Нистрома

(~ 800 страниц; в архиве)

Последнее обновление, которое я видел: 2020-04-05

«Относительно простой механизм регистрации данных в Rust», Фрэнк МакШерри.

(~ 20 страниц; в архиве)

Создание движка регистрации данных на Rust.

Ниши: каталог данных

«Нелексические жизни» Нико Мацакис

Одна из основных особенностей языка Rust - это концепция владения и времени жизни. Эта серия сообщений Нико Мацакиса, одного из разработчиков языка Rust, посвящена теории и практической реализации обновленного и более полного способа этого в компиляторе Rust. Он начинается в начале 2016 года и продолжается до тех пор, пока они не появятся (конец 2018 года).

  1. Введение (в архиве)
  2. Нелексические времена жизни, основанные на живучести (в архиве)
  3. Добавление отношения outlives (в архиве)
  4. Использование живучести и местоположения (из архива)
  5. Вызов вложенных методов через двухфазное заимствование (в архиве)
  6. Доступны проект RFC и прототип (в архиве)
  7. Формулировка средства проверки займов на основе псевдонима (в архиве)
  8. Обновление статуса проверки заимствования (NLL) на основе MIR (в архиве)
  9. Заимствования на основе MIR почти здесь (из архива)
  10. Межпроцедурные конфликты (в архиве)
  11. Ошибки Polonius и региона (в архиве)
  12. Полоний и случай наследственного предиката гарропа (в архиве)

«Шифгретор» без лодок

Предлагаемый API для сборки мусора на Rust.

  1. Сборка мусора как библиотека Rust (в архиве)
  2. Примечания по трассировке сборщиков мусора (в архиве)
  3. Рутирование (в архиве)
  4. Розыск (в архиве)

«Районные / параллельные итераторы» Нико Мацакис

Ниши: параллелизм

  1. Район: параллелизм данных в Rust (архив)
  2. Параллельные итераторы. Часть 1: Основы (в архиве)
  3. Параллельные итераторы. Часть 2: Производители (из архива)
  4. Параллельные итераторы, часть 3: Потребители (в архиве)

«Как Rust оптимизирует async / await», Тайлер Мандри

Ниши: компиляторы; макет памяти

  1. Часть I (архивная)
  2. Часть II: Анализ программы (архив)

«Написание ОС на Rust» Филиппа Опперманна

Ниши: операционные системы, ассемблер

  1. Отдельно стоящий двоичный файл Rust (из архива)
  2. Минимальное ядро Rust (из архива)
  3. Текстовый режим VGA (в архиве)
  4. Тестирование (в архиве)
  5. Исключения ЦП (в архиве)
  6. Двойные ошибки (в архиве)
  7. Аппаратные прерывания (в архиве)
  8. Введение в пейджинг (в архиве)
  9. Реализация пейджинга (в архиве)
  10. Выделение кучи (в архиве)
  11. Проекты распределителя (в архиве)
  12. Async / Await (в архиве)

«Изучение комбинаторов синтаксического анализатора с помощью Rust», автор Бодил Стокке

(~ 60 страниц; в архиве)

Предполагая, что вы знакомы с Rust, это на практике научит вас основам синтаксических комбинаторов.

Ниши: парсеры

«Маниш против ASCII», Маниш Горегаокар

Несколько сообщений о том, почему предположение, что текст является ASCII, бесполезны.

Ниши: юникод

  1. Давайте перестанем приписывать смысл кодовым точкам (архив)

    tl;dr вы никогда не должны индексировать текст Unicode.

  2. Нарушение наших предположений Latin-1 (из архива)

    Примеры скриптов / языков, которые действительно не работают, если вы предполагаете, что у вас есть текст ASCII.

  3. Выделение сбойной строки iOS (из архива)

    Забавный анализ ошибки рендеринга Unicode, приводящей к сбою устройств iOS.

«Протокол Вэйланда» Дрю ДеВолт

(~ 156 стр .; в архиве)

«Wayland - это сервер отображения следующего поколения для Unix-подобных систем […] Эта книга поможет вам получить твердое представление о концепциях, дизайне и реализации [этого]».

Ниши: вейленд; графика; протоколы; unix

«Обратная связь по программированию для продвинутых новичков» Роберта Хитона.

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

Полный указатель серий здесь.

  1. Обратная связь по программированию для продвинутых начинающих # 0 (в архиве)
  2. Определите свои границы (архив)
  3. Как структурировать свои программы (в архиве)
  4. Как тщательно проанализировать свой путь к работе (из архива)
  5. Обработка исключений и устранение сбоев (в архиве)
  6. Как сделать ваши программы короче (в архиве)
  7. Практика отладки в реальных условиях (в архиве)
  8. Как написать библиотеку (в архиве)
  9. Проверка ввода - компромисс между удобством и неожиданностью (архив)
  10. Пакетная или потоковая обработка (в архиве)
  11. Первоклассные функции и внедрение зависимостей (в архиве)
  12. Разделение логики и данных (в архиве)
  13. Системный дизайн для продвинутых новичков (в архиве)
  14. Когда код слишком умен, чтобы быть чистым (в архиве)
  15. Evil eval (в архиве)
  16. Не переутомляй свои функции (в архиве)
  17. Как сделать код быстрее и почему часто не стоит заморачиваться (заархивировано)
  18. предварительное вычисление звучит как жульничество, но это не так (архив)
  19. Приключения в сжатии сериализованных данных (в архиве)

Спасибо за чтение.