Подробные тексты по интересным деталям компьютеров
Перевод | Автор оригинала: 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
-
Полчаса на изучение Rust (в архиве)
Вихревой тур по Русту как языку от Амоса Венгера.
-
Погружение в Rust с помощью интерфейса командной строки (в архиве)
Небольшое руководство Кевина Кнаппа о том, как написать инструмент для загрузки XKCD на Rust.
-
Типизированный ключевой шаблон (в архиве)
Автор Алексей Кладов.
-
Тайная жизнь коров (в архиве)
Интеллектуальный указатель «Клонирование при записи». Объяснение.
-
Шаблон индекса Newtype (в архиве)
Автор Алексей Кладов.
-
Как реализовать трейт для &str и &[&str](в архиве)
Немного размышлений о ваших трэйтах и заимствованиях.
-
Декларативное управление памятью (в архиве)
Амос Венгер. Знакомство с сложностями управления памятью и способами, которыми Rust пытается их красиво и окольным образом представить.
-
Отправка по типу возврата (в архиве)
С уважением. Указав на более позднем этапе кода, какой тип вы хотите вернуть функцией, компилятор может вернуться и заполнить пробелы.
-
Работа со строками в Rust (в архиве)
Амос Венгер. Следуя посту об управлении памятью, мы рассмотрим, насколько строки на самом деле довольно сложны и что с ними делает Rust.
-
Написание нетривиальных макросов на Rust (в архиве)
Майкл Ф. Брайан.
«Приложения командной строки в Rust» Паскаль Хертлейф
(~45 pages; archived)
Учебник о том, как писать приложения CLI на Rust, попутно изучая многие аспекты экосистемы.
Последнее обновление, которое я видел: 2020-06-12
«Узнай опасный путь Rust», Клифф Л. Биффл
Объяснение Rust для низкоуровневых разработчиков без опыта работы с CS. Если вы писали прошивки, ядра или игровые движки и хотите погрузиться в Rust, это хорошее начало. Полный указатель серий здесь.
Ниши: Rust; системное программирование; управление памятью
- Зачем изучать Rust опасным путем? (в архиве)
- Вы не можете писать C на любом старом языке (из архива)
- Ссылки доступны по запросу (в архиве)
- Измеряйте то, что вы оптимизируете (архив)
- Более совершенный союз (из архива)
- Изготовление безопасных вещей из небезопасных деталей (из архива)
- Пусть компилятор сделает всю работу (из архива)
«Жесткое чтение файлов», Амос Венгер.
Запись файлов кажется решенной проблемой. Но это не значит, что мы не сможем решить эту проблему с нуля.
Ниши: POSIX; файловые системы; системные вызовы
- Часть 1 (node.js, C, rust, strace) (в архиве)
- Часть 2 (x86 asm, ядро linux) (в архиве)
- Часть 3 (ftrace, схемы дисков, ext4) (в архиве)
«Делаем наш собственный пинг», Амос Венгер.
- Краткая (и в основном ошибочная) история компьютерных сетей (архив)
- Динамические библиотеки Windows, соглашения о вызовах и преобразование (в архиве)
- FFI-безопасные типы в Rust, newtypes и MaybeUninit (в архиве)
- Разработка и внедрение более безопасного API поверх LoadLibrary (в архиве)
- Простая библиотека ping, анализирующая строки в адрес IPv4 (в архиве)
- Шаблон компоновщика и макрос, сохраняющий СУХОЙ код FFI (в архиве).
- Нахождение сетевого интерфейса по умолчанию через WMI (в архиве)
- Связывание C API со структурами переменной длины и UTF-16 (в архиве).
- Использование Ethernet-фреймов с помощью nom crate (в архиве)
- Улучшение обработки ошибок - паника или правильные ошибки (архив)
- Анализ IPv4-пакетов, включая числа меньше байтов (в архиве).
- Разбор и сериализация ICMP-пакетов с помощью cookie-factory. (в архиве)
- Создание пакетов ARP для поиска MAC-адреса удаленного хоста (в архиве).
- Создание ICMP-пакетов IPv4 с помощью bitvec (в архиве)
«Создание нашего собственного исполняемого упаковщика», Амос Венгер.
- Что есть в исполняемом файле Linux? (в архиве)
- Запуск исполняемого файла без exec (в архиве)
- Независимый от позиции код (в архиве)
- Перемещения ELF (из архива)
- Самая простая разделяемая библиотека (в архиве)
- Загрузка нескольких объектов ELF (из архива)
- Динамическое разрешение символов (в архиве)
- Скорость и корректность динамического компоновщика (в архиве)
- Скрипты GDB и косвенные функции (в архиве)
- Более безопасные структуры с отображением в память (в архиве)
- Больше перемещений ELF (из архива)
- Бинарный файл no_std Rust (в архиве)
- Локальное хранилище потока (в архиве)
«Парсинг» Алексея Кладова
Не настоящая серия статей, а сборник сообщений человека, чья биография на Github гласит: «Застрявшие парсеры написания».
Ниши: парсеры
- Modern Parser Generator (в архиве)
- Простой, но мощный анализ Пратта (в архиве)
- От Пратта до Дейкстры (из архива)
«JavaScript Allongé» от Рега «raganwald» Брейтуэйта
(~ 530 страниц; в архиве)
Ниши: функциональное программирование; непонятный JavaScript
Последнее обновление, которое я видел: 2019-04-26
«Ремесленные переводчики» Роберта Нистрома
(~ 800 страниц; в архиве)
Последнее обновление, которое я видел: 2020-04-05
«Относительно простой механизм регистрации данных в Rust», Фрэнк МакШерри.
(~ 20 страниц; в архиве)
Создание движка регистрации данных на Rust.
Ниши: каталог данных
«Нелексические жизни» Нико Мацакис
Одна из основных особенностей языка Rust - это концепция владения и времени жизни. Эта серия сообщений Нико Мацакиса, одного из разработчиков языка Rust, посвящена теории и практической реализации обновленного и более полного способа этого в компиляторе Rust. Он начинается в начале 2016 года и продолжается до тех пор, пока они не появятся (конец 2018 года).
- Введение (в архиве)
- Нелексические времена жизни, основанные на живучести (в архиве)
- Добавление отношения outlives (в архиве)
- Использование живучести и местоположения (из архива)
- Вызов вложенных методов через двухфазное заимствование (в архиве)
- Доступны проект RFC и прототип (в архиве)
- Формулировка средства проверки займов на основе псевдонима (в архиве)
- Обновление статуса проверки заимствования (NLL) на основе MIR (в архиве)
- Заимствования на основе MIR почти здесь (из архива)
- Межпроцедурные конфликты (в архиве)
- Ошибки Polonius и региона (в архиве)
- Полоний и случай наследственного предиката гарропа (в архиве)
«Шифгретор» без лодок
Предлагаемый API для сборки мусора на Rust.
- Сборка мусора как библиотека Rust (в архиве)
- Примечания по трассировке сборщиков мусора (в архиве)
- Рутирование (в архиве)
- Розыск (в архиве)
«Районные / параллельные итераторы» Нико Мацакис
Ниши: параллелизм
- Район: параллелизм данных в Rust (архив)
- Параллельные итераторы. Часть 1: Основы (в архиве)
- Параллельные итераторы. Часть 2: Производители (из архива)
- Параллельные итераторы, часть 3: Потребители (в архиве)
«Как Rust оптимизирует async / await», Тайлер Мандри
Ниши: компиляторы; макет памяти
- Часть I (архивная)
- Часть II: Анализ программы (архив)
«Написание ОС на Rust» Филиппа Опперманна
Ниши: операционные системы, ассемблер
- Отдельно стоящий двоичный файл Rust (из архива)
- Минимальное ядро Rust (из архива)
- Текстовый режим VGA (в архиве)
- Тестирование (в архиве)
- Исключения ЦП (в архиве)
- Двойные ошибки (в архиве)
- Аппаратные прерывания (в архиве)
- Введение в пейджинг (в архиве)
- Реализация пейджинга (в архиве)
- Выделение кучи (в архиве)
- Проекты распределителя (в архиве)
- Async / Await (в архиве)
«Изучение комбинаторов синтаксического анализатора с помощью Rust», автор Бодил Стокке
(~ 60 страниц; в архиве)
Предполагая, что вы знакомы с Rust, это на практике научит вас основам синтаксических комбинаторов.
Ниши: парсеры
«Маниш против ASCII», Маниш Горегаокар
Несколько сообщений о том, почему предположение, что текст является ASCII, бесполезны.
Ниши: юникод
-
Давайте перестанем приписывать смысл кодовым точкам (архив)
tl;dr вы никогда не должны индексировать текст Unicode.
-
Нарушение наших предположений Latin-1 (из архива)
Примеры скриптов / языков, которые действительно не работают, если вы предполагаете, что у вас есть текст ASCII.
-
Выделение сбойной строки iOS (из архива)
Забавный анализ ошибки рендеринга Unicode, приводящей к сбою устройств iOS.
«Протокол Вэйланда» Дрю ДеВолт
(~ 156 стр .; в архиве)
«Wayland - это сервер отображения следующего поколения для Unix-подобных систем […] Эта книга поможет вам получить твердое представление о концепциях, дизайне и реализации [этого]».
Ниши: вейленд; графика; протоколы; unix
«Обратная связь по программированию для продвинутых новичков» Роберта Хитона.
«Конкретные действенные способы сделать ваш код чище». Ориентация на программистов среднего уровня, которым нужны занимательные статьи, у которых можно чему-то научиться.
Полный указатель серий здесь.
- Обратная связь по программированию для продвинутых начинающих # 0 (в архиве)
- Определите свои границы (архив)
- Как структурировать свои программы (в архиве)
- Как тщательно проанализировать свой путь к работе (из архива)
- Обработка исключений и устранение сбоев (в архиве)
- Как сделать ваши программы короче (в архиве)
- Практика отладки в реальных условиях (в архиве)
- Как написать библиотеку (в архиве)
- Проверка ввода - компромисс между удобством и неожиданностью (архив)
- Пакетная или потоковая обработка (в архиве)
- Первоклассные функции и внедрение зависимостей (в архиве)
- Разделение логики и данных (в архиве)
- Системный дизайн для продвинутых новичков (в архиве)
- Когда код слишком умен, чтобы быть чистым (в архиве)
- Evil eval (в архиве)
- Не переутомляй свои функции (в архиве)
- Как сделать код быстрее и почему часто не стоит заморачиваться (заархивировано)
- предварительное вычисление звучит как жульничество, но это не так (архив)
- Приключения в сжатии сериализованных данных (в архиве)
Спасибо за чтение.