Русский перевод книги «The Rust Programming Language» (TRPL)

    Добрый праздничный день.

    По окончанию перевода официальной версии TRPL или раст-бука (ссылка на русский вариант), я решил написать про свои размышления, наблюдения и встретившиеся сложности.
    Перевод последней актуальной версии сделан на основе последней редакции из основного репозитория английского оригинала.

    До перевода я в свободное время прочитал английский оригинал книг TRPL и Rust-By-Example. Предыдущий русский перевод смотрел редко, так как он на тот момент местами серьезно устарел по содержанию. Мой предыдущий опыт складывается из пары десятков лет java backend R&D проектов разной направленности, от «кровавого enterprise» до стартап-ов, с чем и связана основная деятельность. От себя могу ответственно сказать, что действительно многие нюансы языка или другие детали после первого прочтения английской версии остались мной незамеченными. По этой причине я рекомендую попробовать хотя бы «пролистать» русский вариант. Если вы новичок в Rust вроде меня, то с большой вероятностью найдете в переводе что-то не замеченное ранее. Если английский для вас «со словарем или около этого», если вы хотели бы познакомится с Rust, то тем более.

    Перевод не идеален, потому что сам оригинал изобилует большим количеством длинных перегруженных, «сложных сочиненно-подчиненных» предложений. Я не берусь судить строго авторов, можно ли было написать проще? Наверное да..., но профессиональным переводчиком я не являюсь. В редких местах не всегда мотивированная сложность оригинала приводит к тому, что возможно некоторые предложения или их части выглядят слегка «инородными». Этого хотелось избегать, но может не везде удалось. Думаю, что таких мест не много в книге и что особенно важно они не влияют на главный смысл материала, имея второстепенный, вспомогательный характер. При переводе с одной стороны хотелось сохранить текст узнаваемый в оригинале (без фанатизма), с другой — не потерять важные детали концентрируясь на главном, с третьей приблизить перевод к родному языку без «тяжелых англицизмов», но с более-менее понятной, устоявшейся терминологией, с четвертой добавить не всегда очевидные мини-пояснения, вплетая их в текст. Попробуйте держать оригинал под рукой для таких, надеюсь, редких случаев.

    В общей сложности перевод занял около 7 месяцев, с начала октября 2019 до почти конца апреля 2020. Мной переводилось, поправлялось, вычитывалось порядка 100 страниц книги разного объема и сложности, от коротких, до очень длинных и сложных в конце. Делал в основном вечером, в выходные или праздники, когда позволяло свободное время. Перевод выполнялся на ресурсах проекта gitlocalize.com, который предоставляет возможности коллективного перевода. Но основным преимуществом этого ресурса, я для себя нашел «встроенные» возможности «машинного перевода» (от google?), плюс код gitlocalize позволяющий получить корректными тэги кода и разметки из оригинального текста. Чтобы перевести абзац достаточно кликнуть кнопку и получить текст «разной степени пригодности» без полного и ручного набора, сохраняющий необходимые разметки и тэги из оригинала. Это все экономило время, не смотря на «машинность» перевода. Переставить слова в более естественный порядок, поправить окончания, поменять поломанный смысл было быстрее, чем делать ручной набор, допуская неизбежные «очепятки». Это было настолько удобнее, что со временем я перестал пытаться вычитывать предыдущий русский перевод, который частично имелся в наличии. Причиной было то, что новый текст изменился по содержанию и/или по встроенной в текст разметке, так что его вычитывание и изменения занимали больше времени, чем сделать машинный перевод абзаца со вполне корректной разметкой кода, внести в него необходимые исправления, причесать, поправить стилистику и т.д. По моему субъективному ощущению, я переделал или перевел с нуля от 70 до 85% текста, потому что часть вроде как готового, кем то ранее переведенного текста приходилось заново перечитывать и вносить точности из оригинала.

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

    Зачем мне это было нужно? Можно считать это моим вкладом в open source. Около 20 лет назад я начал изучать и позже работать на новом и перспективном ЯП. С год назад я подумал о том «куда дальше», обратил внимание на движение языков/компиляторов в сторону получения кода, как можно близкого к «двоичному», его native исполнения, где-то с GC (garbage collector), где-то почти без него. По итогу размышлений я начал искать в каком направлении можно приложить знания и умения «на перспективу» — Kotlin, Scala, Go, последним в списке был Rust. После небольшого ознакомления со списком личный выбор стал очевидным. Стали понятны важные плюсы — обеспечение безопасности Rust, минусы в его сложности, высоком пороге вхождения, перспективы его развития и возможные ниши использования. Субъективно мне ЯП «зашел», он стал занимать мое свободное время для изучения и практики. Я считаю его универсальным ЯП, со временем планирую найти full-time вакансию на Rust, хотя рынок проектов на нем все еще достаточно мал по сравнению с остальными ЯП, особенно в части Enterprise решений. Субъективно могу говорить, что ЯП возможно все еще отчасти недооценён. Можно заметить оправданный интерес «ИТ гигантов» к ЯП вроде Microsoft, немного Intel, но список использующих его в реальных проектах не большой, официально порядка 150 компаний, что не много в глобальном плане.

    Какие наблюдения появились за год неспешного освоения?
    Вряд ли это язык для тех, кто массу сил и своего времени уже вложил в c++, как это ни парадоксально. Он им чаще не нужен по многим объективным и субъективным причинам, которые нет смысла обсуждать слишком подробно. Я бы произнес вслух определенный личностный «downgrade» в плане предыдущего опыта, у кого он был, на который не все могут решится и наследие «legacy» кода для больших компаний, хотя это не единственные причины. Субъективно, в Rust приходят в массе из ЯП «попроще», вроде Javascript, Python, Ruby, Java и т.д.
    Невозможно переписать существующие проекты на Rust, это далеко не всегда нужно и далеко не целесообразно, хотя единичные, успешные примеры есть. По этим причинам, субъективно, это скорее ЯП для новых проектов.

    Что меня мотивировало при переводе? Отчасти я начал перевод, а после процесс «затянул». Появился некоторый азарт и возможность видеть результат, абзац за абзацем, неделю за неделей. Еще был мотив сделать перевод для сына, студента — первокурсника ИТ специальности, да и вообще для всех студентов, будущих возможных коллег. Чтобы они получили возможность начать изучение и сами получить представление о ЯП, добавлю «сыну, одному из тысяч студентов данный перевод посвящается».

    Разработка компиляторов сложное, долгое и дорогое удовольствие, но Rust развивается, цикл выпуска новых версий компилятора выдерживается, IDE хорошо подтянулись в помощи разработчику за последний год. Я как ни странно верю в большое будущее данного ЯП, что бы ни говорили про его «игрушечность». Да, разработка языка и инструментов Rust это не так легко и быстро, как этого иногда хотелось бы всем поклонникам Rust, но увы разных ресурсов довольно часто на все не хватает — таковы реалии нашей жизни. Покидать «тапки или тухлые помидоры» можно в телеграмм чате для Rust переводов.
    Реклама
    AdBlock похитил этот баннер, но баннеры не зубы — отрастут

    Подробнее

    Комментарии 26

      +5

      Сейчас изучаю Rust, читаю rust book (на английском). Как по мне, там многовато "воды". Часть из нее, возможно, — это объяснения каких-то моментов людям с практически нулевым опытом разработки, которые будут понятны и очевидны более опытным людям, пишущих на других языках. Часть из нее — слишком э… литературное описание (ИМХО). Мне кажется, можно было бы написать более сухо, но более компактно. В итоге, читаешь текст, пропускаешь/пробегаешь глазами что-то очевидно, но трудно отделить, где же заканчивается "вода", и где начинаются детали и нюансы.

        +2
        Вполне соглашусь. Тут меня больше беспокоит потеря активности. Doc team уже не собирается на митинги после ухода Клабника. Новые возможности ЯП не отражены в доке — последние улучшения match, например.
          +2

          Простите, я только изучаю раст, поэтому не совсем "в теме". А где можно почитать про актуальные возможности?

            +2
            Думаю, что если не использует в работе/учебе, то лучший вариант — это описания релизов версий (даже те которые здесь выкладываются в переводе), где написано про новые возможности и/или изменения в языке, далее по ссылкам на RFC, если нужно подробнее.
          0
          Не соглашусь. Я уже с год, с перерывами, изучаю rust и периодически перечитывая эту «воду» выясняю что-нибудь новое. По-моему, наоборот, слишком скудно рассказывается про очень неочевидные вещи. Скажем, про HRTB я уже раза 4 перечитывал, так до конца и не разобрался.
            0

            Мне кажется, что вы о разной воде. Одно дело когда разжёвывают в подробностях, а другое — эти самые "литературные описания". Скажем, в главе про каналы аналогия с резиновой уточкой упоминается раза три. И да, это совсем не мешает о каких-то других вещах упоминать только вскользь. Или не упоминать вовсе. Скажем, в главе про комментарии даже не говорится, что многострочные (//) тоже поддерживаются.

          +4
          Спасибо за труд!

          Еще был мотив сделать перевод для сына, студента первокурсника ИТ специальности, да и вообще для всех студентов, будущих возможных коллег.

          Для сына-первокурсника, на мой взгляд, было бы намного полезнее выучить хотя бы на базовом уровне английский язык — как по мне, так это вообще самый ценный навык в IT-сфере, причём как с точки зрения дальнейшего изучения профессии, так и с точки зрения soft skills, которым в последнее время уделяют всё больше внимания.
            +1
            Не спорю, одно другому не должно мешать, для первых шагов в ЯП удобнее «родная дока» когда их в печати нет, чтобы хотя бы стартануть. А навыки английского далее развивать.
            0

            Большое спасибо, отличный повод перечитать растбук.
            Однако скажу что сама книга беспричинно многословна, и если б вы сократили вполовину — я бы, например, не возразил.

              +2
              Да — это повод перечитать.
              Я как бы не против упрощения, поэтому и упомянул, что книга написана местами не оправданно сложно. Хотел бы я ее «в теории» переписать проще? — наверное да. Стану ли я это делать? — скорее нет. Вносить что то новое, удалять «от себя», менять текст на свое личное усмотрение — я не готов, я еще не настолько опытен в данном ЯП.
              +1
              Так, а epub-версию перевода где взять?
                0
                Боюсь, что EPUB никак без «локального шаманства» с Rust инструментом mdbook, но я очень давно пробовал. А PDF можно получить нажав символ принтера в правом верхнем углу книги, по ссылке — doc.rust-lang.ru/book/print.html
                  0

                  pdf на электронной читалке неудобен

                    0

                    Вполне согласен. Завтра попробую пошаманить, но не обещаю, что получится.

                      0
                      Увы, с ходу ничего толкового не вышло, но думаю со временем получится.
                      Странная ошибка при сборке epub.
                      Можете попробовать сами поупражняться.
                      Ключевые слова — mdbook-epub + репа русской книги.
                        0

                        В качестве альтернативы есть crowbook. Генератор epub пару лет назад был более-менее вменяемый.

                  0
                  Огромное спасибо за проделанную работу!
                  Я сохранил книгу в pdf, она сохранилась без оглавления (наверное это особенность способа генерации pdf), и я решил добавить оглавление программой Pdf&Djvu Bookmarker. И обратил внимание, что название главы в оглавлении (из html) практически никогда не совпадает с названием главы в тексте:) Это так случайно получилось, вы переводили их отдельно и независимо?
                    0
                    Попробовал сгенерить PDF и локально открыть, но не могу полноценно проверить. Под линукс в стандартном PDF просмотрщике оглавления действительно нет, похоже да, оно не генерируется. В общем случае оглавление и название в исходниках должны совпадать, может какие-то отдельные не соответствия могут быть, я в основном переводил содержимое, но заглядывал немного и в оглавление, не слишком внимательно. Еще будут происходить мелкие правки и тогда еще возможные, оставшиеся местами «рассинхроны» устраним, если они действительно есть.

                    А может дело и в другом? В особенностях программы, которую вы использовали для генерации PDF оглавления?
                    Заголовочный файл который связывает меню слева (как бы оглавления) и страницы содержимого (которые справа) выглядит так:
                    raw.githubusercontent.com/rust-lang-ru/book/master/rustbook-ru/src/SUMMARY.md
                    Это в некотором роде «стандарт» для mdbook (утилита генерации HTML из MD) и книг от Rust разрабов. Вдруг эта структура влияет на генерацию «стороннего» оглавления? Мне сложно сказать.
                      0
                      Программа тут не при чем (это на самом деле просто редактор оглавлений, которые все равно нужно вводить вручную; я просто вставил строки с названиями глав из html меню в левой части, а затем стал им вручную назначать номера страниц в pdf).

                      Разница есть уже в html версии. В заголовочном файле который слева многие главы называются не так, как в тексте справа. Например
                      в оглавлении «14.1. Выборочная сборка с профилями выпуска»
                      а в тексте «Настройка сборок с профилями релизов»
                      в оглавлении «6.3. Сокращённое управление с if let»
                      а в тексте «Выразительное управление с помощью if let»
                      в оглавлении «10.1. Шаблонные типы данных»
                      а в тексте «Обобщённые типы данных»
                      (кстати глава «Удаление дублирования кода с помощью выделения функции» в оглавление вообще не попала, хотя размер шрифта такой же как у «Обобщённые типы данных»).
                      А у раздела 2 «Игра угадай число» разделение на главы в левом меню вообще отсутствует, хотя главы в тексте есть.

                      Я как закончу, выложу сюда pdf для скачивания. Еще хочу главы третьего уровня добавить вручную.
                        0
                        Ну тогда да, рассинхрон еще остался, поправим со временем.
                        Лучше будет сделать коррекции в своей репе и отправить PR изменений в основную репу книги.
                    0
                    Кстати, а The Rustonomicon переводить не планируете? Это вроде как расширенные и углубленные сведения по Rust.
                    Вообще тут довольно много интересного:)
                      0
                      Были планы ее хотя бы прочитать на англ., параллельно работе, жизни и написанию своего проекта на Rust. Поэтому насчет перевода этой книги планов, увы, не строил.
                        0

                        Перевод Rustonomicon есть, но достаточно старый. Вообще, у нас есть план перевода/обновления книг: https://github.com/rust-lang-ru/books/issues/5, постепенно движемся по нему

                        +1
                        Вот ссылка на книгу в pdf с трехуровневым оглавлением
                        www.dropbox.com/s/gk3hyks3477pd1u/The%20Rust%20Programming%20Language.pdf?dl=0
                        или
                        www.upload.ee/files/11677673/The_Rust_Programming_Language.pdf.html
                        единственный момент — я не стал делать различий между 3 и 4 уровнями заголовков, т.к. заголовков уровня 4 было мало, ну и лично мне так будет удобнее с ней работать.
                          0
                          Отлично, думаю кому-то пригодится.
                          0
                          спасибо вам за вашу работу!

                          Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                          Самое читаемое