kgv / rust_book_ru

The Rust Programming Language (на русском) (основной репозиторий теперь здесь: https://github.com/ruRust/rust_book_ru)
211 stars 22 forks source link

Правила #37

Closed kgv closed 9 years ago

kgv commented 9 years ago

Правила разметки

[^0]: Тонкий момент: не стоит переводить имена вроде Graydon и Niko как Григорий и Николай - это отсылка к создателям языка [^1]: В разделе о документации сказано, что они не являются частью синтаксиса, но являются соглашением.

Правила пунктуации

Относительные ссылоки на API документацию Rust заменяются на абсолютные. По умолчанию следует использовать ссылки на стабильную версию (http://doc.rust-lang.org/std/primitive.bool.html), если же ссылка на фичу из нестабильной версии, то добавляем nightly (http://doc.rust-lang.org/nightly/std/primitive.bool.html).

Словарь терминов

aliasing -> задание псевдонимов, псевдонимизация/совпадение, совпадающий указатель? (в отношении указателей, ссылок) borrowing -> заимствование box -> упаковка capacity -> ёмкость (в отношении векторов) crate -> контейнер destructure -> деконструкция/разбор? length -> длина (в отношении векторов) lifetime -> время жизни match -> сопоставление с образцом matcher -> matching -> module -> модуль operator -> операция ownership -> владение, владение ресурсом, право владения slice -> срез statement -> оператор trait -> типаж tuple struct -> кортежная структура variable binding -> имя (связанное имя) / значение (связанное значение) в зависимости от контекста. unit type -> единичный тип

Если у вас есть вопросы или предложения по правилам - не стесняйтесь, обязательно предлагайте лучшие на ваш взгляд варианты!

mkpankov commented 9 years ago

Моё мнение:

Во всех случаях термины должны переводиться "один к одному", т.е. использоваться везде должно одно и то же русское слово, а не различные синонимы. Aliasing в случае указателей хорошо переводится как "совпадение". Aliased pointer - "совпадающий указатель". Borrowing - предлагаю "заимствование", потому что нет такой сильной ассоциации с деньгами. Life time - "время жизни" меньше режет слух. Ownership - "владение" является одновременно нейтральным и коротким. "Владение ресурсом", "владение памятью" звучит нормально, в отличие от других альтернатив :) Destructuring по-моему хорошо описывается словом "разбор", особенно в контексте частого применения этой возможности в реализации различных парсеров.

kgv commented 9 years ago

@mkpankov я тоже придерживаюсь мнения, что стоит для одного и того же оригинального термина использовать единственный термин перевода :+1: . Однако такие вариации как "владение" и "право владения" (напримен в контексте "move ownership" - отдает право влажения) считаю приемлемыми. borrowing -> заимствование, заем считаю подходят оба, одолжить match -> сопоставление с образцом можно ли также использовать "шаблон" вместо "образец"? matcher -> образец/шаблон/сопоставитель? matching -> сопоставление? destructuring -> не вяжется у меня данное действие в Rust с термином "разбор" почему-то... У меня оно однозначно ассоциируется с "деструктуризацией" или "деконструкцией", но деструктуризация может неправильно ассоциироваться со структурами. aliasing -> да, во многоих контекстах по отношению к указателям и ссылкам "совпадение" хорошо звучит. Единственное - "have no guarantees about aliasing or mutability" - как тогда следует переводить?

mkpankov commented 9 years ago

Единственное - "have no guarantees about aliasing or mutability" - как тогда следует переводить?

Думаю, там в контексте надо переводить.

mkpankov commented 9 years ago

Новый термин: trait.

Википедия переводит его как "типаж".

На Хабре в ряде статей также используется этот термин: http://habrahabr.ru/search/?q=trait&target_type=posts&order_by=relevance

В принципе он неплох и слух вроде не режет. Единственное, что меня смущает - его возможное столкновение с "типажом", который kind.

suhr commented 9 years ago

Вот ещё перевод rustbyexample.com: https://github.com/suhr/rust-by-example, можно посмотреть, какие термины там.

И да trait — типаж, slice — срез, ownership — владение, а borrowing — заимствование. Правда crate всё-таки крэйт.

suhr commented 9 years ago

capacity -> мощность (в отношении векторов)

Ёмкость же. Т.е сколько элементов вместится без необходимости выделить память.

match -> сопоставление с шаблоном

Сопоставление с образцом, устоявшийся термин.

mkpankov commented 9 years ago

variable binding - предлагаю "имя" или "значение" в зависимости от контекста. или лучше "связанное имя"

suhr commented 9 years ago

tuple struct → кортежная структура

kgv commented 9 years ago

Единственное, что меня смущает - его возможное столкновение с "типажом", который kind.

Думаю kind тогда стоит переводить как тип, чтобы различать эти 2 понятия.

Сопоставление с образцом, устоявшийся термин.

Просто в документации затем присутствуют термины Box Syntax Patterns, Slice Patterns и т.д. а переводить их как "образцы срезов" не камильфо.

variable binding - предлагаю "имя" или "значение" в зависимости от контекста. или лучше "связанное имя"

Согласен, связанное имя или связанное значение в зависимости от контекста.

Правда crate всё-таки крэйт.

Тогда почему слайсы, туплы, трейты и паттерн-матчинг не оставить? Я склоняюсь все-таки к контейнеру. (к тому же очень канонично такой термин вписывается в cargo)

mkpankov commented 9 years ago

Думаю kind тогда стоит переводить как тип, чтобы различать эти 2 понятия.

Но "тип" - это type :) Википедия использует для kind "род".

Предлагаю пока переводить основываясь на эти основные понятия, раз у них есть канонический перевод. Как переводить higher-kinded types подумаем потом :) (высокородные типы, ахаха!)

Просто в документации затем присутствуют термины Box Syntax Patterns, Slice Patterns и т.д. а переводить их как "образцы срезов" не камильфо.

Но и как "шаблоны срезов" тоже. Думаю, для самого сопоставления с образцом надо использовать канонический перевод, а для всяких заморочных вещей потом что-то придумаем.

Тогда почему слайсы, туплы, трейты и паттерн-матчинг не оставить? Я склоняюсь все-таки к контейнеру. (к тому же очень канонично такой термин вписывается в cargo)

Согласен, контейнер нормально подходит. Я думаю в rustbyexample crate был оставлен просто из-за отсутствия канонического перевода.

suhr commented 9 years ago

Тогда почему слайсы, туплы, трейты и паттерн-матчинг не оставить? Я склоняюсь все-таки к контейнеру. (к тому же очень канонично такой термин вписывается в cargo)

Потому, что контейнер это таки контейнер (тыц, тыц, тыц, тыц, тыц), когда же крэйт — единица сборки в Rust. Слишком много всего зовётся словом «контейнер», и ничего из того, что близко к теме.

mkpankov commented 9 years ago

Потому, что контейнер это таки контейнер (тыц, тыц, тыц, тыц, тыц), когда же крэйт — единица сборки в Rust. Слишком много всего зовётся словом «контейнер», и ничего из того, что близко к теме.

Но если бы это было проблемой, другие люди тоже не называли бы новые непохожие сущности словом "контейнер".

Я не видел, чтобы первые два значения употреблялись в Rust. Для этих вещей они обычно используют "data structure", "struct", "enum", "sum type", "sequence" и подобное.

Вот, например, употребления "container" в оригинале TRPL:

➜  trpl git:(master) grep -irne 'container' .
➜  trpl git:(master)

Всё остальное вообще не относится к делу.

Crate как одновременно единица компиляции и единица распространения (пакет) это вообще не изобретение Rust ли?

mkpankov commented 9 years ago

К слову: мне кажется, для обсуждения перевода отдельных терминов, если он спорный, надо создавать отдельные задачи, иначе в комментариях к этой скоро будет не продраться.

suhr commented 9 years ago

Но если бы это было проблемой, другие люди тоже не называли бы новые непохожие сущности словом "контейнер".

Вот поэтому разработчики Rust и назвали новую сущность как crate, а не как container.

Crate как одновременно единица компиляции и единица распространения (пакет) это вообще не изобретение Rust ли?

Это же фича Cargo, а не самого Rust, разве нет?

mkpankov commented 9 years ago

Это же фича Cargo, а не самого Rust, разве нет?

Я имел ввиду экосистему языка. Компилятор тоже оперирует этим понятием, раз это единица компиляции.

Вот поэтому разработчики Rust и назвали новую сущность как crate, а не как container.

А вот этого мы не знаем.

mkpankov commented 9 years ago

Как всё-таки переводим unit?

Варианты: пустой кортеж, единичное значение, тривиальное значение.

suhr commented 9 years ago

Ну, unit type повсеместно зовётся «единичным типом», так что естественно называть unit «единичным значением» или «значением единичного типа».

mkpankov commented 9 years ago

Вообще в описании кортежа говорится, что если он с нулевым числом элементов, то это пустое множество. По сути то же самое, что и единичный тип, но более интуитивно.

suhr commented 9 years ago

Это как кортеж определяется в математике. В программировании же нет множеств, но есть типы. Единичный тип — это тип с единственным возможным значением. Пустой кортеж — лишь стандартный вариант подобного типа, но не единственный. Кроме того, есть ещё и пустой (низший) тип. У пустого типа вообще нет допустимых значений, экземпляр пустого типа невозможно создать. Хотя этот тип не встречается в обычных языках, он играет важную роль в языках с зависимыми типами.

kgv commented 9 years ago

Добавил unit type -> единичный тип Если есть критика по поводу данного варианта перевода - думаю стоит создать отдельную issue.

kgv commented 9 years ago

Ввел новое правило пунктуации:

"Одинарные кавычки" - и заменяются на "Двойную кавычку (универсальная)" - ".

В связи с обсуждением

kgv commented 9 years ago

Новое правило для ссылок на API документацию Rust.

Относительные ссылоки на API документацию Rust заменяются на абсолютные.

kgv commented 9 years ago

Добавил:

box -> упаковка

mkpankov commented 9 years ago

Закрываю.

Для дальнейшего обсуждения существующих правил или новых предложений следует создавать новые задачи.