Закончен перевод книги Learn Rust With Entirely Too Many Linked Lists.
Традиционно для удобства читателей публикую Содержание со ссылками на все семь глав. Перевод доступен также и на GitHub Pages. Время от времени мне присылают опечатки и ошибки, я исправляю их именно на GitHub, поэтому постепенно тот перевод будет становиться точнее и аккуратнее.
Несколько замечаний переводчика (их можно не читать, но если вы сами занимаетесь переводами, вам может быть интересно).
Оригинальный текст написан в разговорной манере с обилием слов-эвфемизмов — heck, dang и подобных.
Я постарался сохранить стиль автора, конечно, в меру своих возможностей, поэтому в тексте вы встретите и блин, и хрень, и массу других замечательных заместителей. Не обессудьте.
Divergent function получила перевод расходящаяся функция по аналогии с расходящимися и сходящимися вычислениями. В конечном итоге, если вычисления не сходятся, функция выполняется бесконечно. Это и есть определение divergent function — функция, которая не возвращает управления. Одна из интересных особенностей расходящейся функции заключается в том, что тип её результата (обозначается !) совместим с любыми типами программы: целыми числами, строками, с чем угодно! Результат можно присвоить любой переменной и компилятор это «проглотит», потому что реального присвоения никогда не случится.
let a: i32 = panic!("Компилируется!");
Моя попытка найти русский аналог для iterator invalidation закончилась провалом, поэтому в переводе вы встретите слово инвалидация. Мне это не нравится, но, кажется, инвалидация — устоявшийся термин в профессиональной русской литературе. Я бы предпочёл поломку итератора или что-то в этом роде, но не стану спорить с традицией.
Структуру данных persistent stack, описанную в третьей главе, я перевёл как устойчивый стек. Ссылаюсь на перевод книги Криса Окасаки «Чисто функциональные структуры данных», где persistent data structures превратились в устойчивые структуры данных. На мой взгляд, удачный термин. Хорошо передаёт смысл.
Аббревиатура UB не переводится — в соответствии с традицией. Хотя Undefined Behaviour — тоже в соответствии с традицией — становится Неопределённым Поведением.
Если вы нашли ошибку, форкайте репозиторий проекта, вносите правки и отправляйте мне — я приму.
И — приятного вам знакомства с лучшим введением в продвинутый Rust!
P.S. По совету друзей добавлю, что эта книга переведена вручную. Конечно, я использовал ИИ — вместе с другими инструментами переводчика — urban dictionary, reverso context и google translate (последний больше как словарь).
ИИ помогал мне справиться со сложными местами, но сложные места я находил самостоятельно, пытаясь ухватить мысль автора. Время от времени google translate подсказывал мне формулировки, гораздо более удачные, чем мои.
Поэтому без модных инструментов не обошлось, но только в качестве вспомогательных. Так что, встретив неудачный или даже неверный перевод — смело валите всё на меня!