Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Trait #22

Open
funkill opened this issue Jan 6, 2021 · 20 comments
Open

Trait #22

funkill opened this issue Jan 6, 2021 · 20 comments

Comments

@funkill
Copy link
Member

funkill commented Jan 6, 2021

Возможные варианты:

  • типаж (текущий)
  • черта
  • трейт
@ivanych
Copy link

ivanych commented Jan 7, 2021

Я тут из мира Перла заглянул, так там это называется "роль" ("role"). Что-то вроде "этот объект играет роли такие-то...".

"Типаж" конечно сбивает с толку, особенно, если ранее с таким термином не сталкивался. "Трейт" понятен сходу, даже если в другом языке программирования это называлось как-то иначе, потому что англоязычная документация в основной своей массе использует термин "trait".

@SomeAkk
Copy link

SomeAkk commented Jan 7, 2021

В Scala так же имеет место быть понятие trait. Слава богу для Scala есть книжки на русском, в качестве примера можем взять "Scala. Профессиональное программирование": в книге переводчиками издательства "Питер" trait переведен как "трейт". Мне импонирует данный термин переводить так же, как в издательствах - просто как "трейт".

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

Поясню:
trait -> читаю как трейт -> запоминаю как трейт - идеально для меня
trait -> читаю как трейт -> запоминаю как типаж - не идеально, т.к. в голове надо держать сразу два бессмысленных слова: трейт (которое известно так и в скале и в мире и много еще где) и типаж (которое не понятно кому за пределами rust ру-сообщества еще может быть известно).

И дополнительный аргумент против типажа, что в некоторых статьях типаж подается как "класс, тип, вариант" чего-либо, вот например как тут: типажи программистов

@ava57r
Copy link
Member

ava57r commented Jan 11, 2021

"трейт" - это же не перевод....

@funkill
Copy link
Member Author

funkill commented Jan 11, 2021

Чтобы посмотреть кто какой термин использует:

  • ДМК-Пресс. Джим Блэнди "Программирование на языке Rust" - Харакеристика ("Глава 11. Характеристики и универсальные типы"). При этом они вводят термин "крейт" ("Глава 8. Крейты и модули")
  • ИД Питер. С. Клабник "Программирование на Rust" (он же TRPL, который мы переводим) - типаж. При этом, по всей видимости, термин "crate", они переводят как "упаковка".
  • Официальная документация PHP - трейт
  • ИД Питер. М. Одерски. "Scala. Профессиональное программирование" - Трейт, ссылка на товар
  • Wikipedia - типаж

@funkill
Copy link
Member Author

funkill commented Jan 11, 2021

А еще не являются переводом такие слова, как «монитор», «парашют», «дисплей», «дизайн», «документ» (и следовательно «документация») и многие другие.
Думаю тут лучше осмысленно заимствовать слово, так как оно уже используется в сообществе и вроде как прижилось.

@ava57r
Copy link
Member

ava57r commented Jan 16, 2021

Вот предположим приняли трейт. чего мне не хочется )

ринемся менять название везде специально, где встретим?

@funkill
Copy link
Member Author

funkill commented Jan 17, 2021

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

@ilyakmet
Copy link
Collaborator

Пусть будет Трейт

@p0lunin
Copy link

p0lunin commented Feb 27, 2021

В целом, правильнее конечно называть растовские трейты тайпклассами (typeclasses), как они и называются в haskell. Но чтобы не возникало дробления с уже сложившейся экосистемой, лучше оставить типаж, на мой вкус.

  1. Типаж - русское слово, имеющее совершенно приятное звучание и написание.
  2. От этого слова могут возникнуть ассоциации, которые помогут осознать смысл сей конструкции.
  3. В программировании типажи действительно есть https://ru.m.wikipedia.org/wiki/%D0%A2%D0%B8%D0%BF%D0%B0%D0%B6_(%D0%B0%D0%B1%D1%81%D1%82%D1%80%D0%B0%D0%BA%D1%82%D0%BD%D1%8B%D0%B9_%D1%82%D0%B8%D0%BF), которые очень похожи на наши тайпклассы.

@ava57r
Copy link
Member

ava57r commented Feb 27, 2021

Предлагаю так
В каждом языке есть

  • литературный
  • разговорный

Вот у нас так будет

  • литературный - это ТИПАЖ
  • разговорный - это ТРЕЙТ

@torgeek
Copy link

torgeek commented Feb 28, 2021

Исходя из понимания авторов термина, типажи (traits) — это композиция элементов поведения или общие черты поведения. По русски может быть так: черты поведения, манеры, нравы.

Вполне подходят слова «нрав», «манеры»: «унаследовал нрав ...», «реализовал манеры ...», «на манер ...», «манерность объекта», «нрав объекта ...». Вместо точек — имя/название типажа.

Русское «типаж» в этом смысле несколько размывает исходный посыл черт поведения, указывая на любые черты или совокупность признаков. Хотя реализация в PHP, в отличие от Rust, Scala, Perl, под это размытие попадает точно))

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

@ilyakmet
Copy link
Collaborator

ilyakmet commented Sep 24, 2021

Предлагаю так
В каждом языке есть

* литературный

* разговорный

Вот у нас так будет

* литературный - это ТИПАЖ

* разговорный - это ТРЕЙТ

Мы ведь пытаемся сделать текст доступным для понимания. Да ты прав. Но вариант с "трейт" точно никого не будет путать.

@ilyakmet
Copy link
Collaborator

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

Вот кстати интересный момент:

Let's look at the comparison to traits for generics again. For example:

use std::fmt::Display;

fn prints<T: Display>(input: T) {
    println!("T is {}", input);
}

fn main() {}

И как я понимаю, к типажам слово trait не имеет никакого отношения в данном контексте. Так что автозамену по тексту не так просто будет сделать.

@ava57r
Copy link
Member

ava57r commented Dec 5, 2021

принимаются оба варианта. на этом и закрою

@ava57r ava57r closed this as completed in 53976cd Dec 5, 2021
@funkill funkill reopened this Jun 9, 2022
@TheTharin
Copy link

TheTharin commented Jun 9, 2022

По поводу слова Trait внесу свою лепту:

Есть же замечательное слово Черта. Более того, оно даже является прямым переводом. Дословно прямым переводом с английского, если отбросить "технический" аспект вопроса.
Почему нельзя было выбрать его?

Типаж - Совокупность признаков (черт), в к-рых обнаруживается какой-н. тип.

Приведенное выше лексическое значение больше подходит к тому, что в Rust называется "Тип Type" (не даром это синоним). Цитата:

Тип - это то, как интерпретируется значение в памяти и то, какие операции могут быть проведены над таким значением.

Если переводить это на язык метафизический, то получится:

Обобщение особенностей поведения и отображения сущности в отдельный тип.

И тут же мы в переводе для слова Trait имеем слово Типаж, - абсолютно созвучный синоним к слову Тип в русском языке, когда в Rust для слова Trait дается такое определение:

A trait is a language feature that tells the Rust compiler about functionality a type must provide.
Т.е.:
Описание поведения какого-либо типа.

У Type может быть множество Trait , что коррелирует с лексическим значением слова Тип (совокупность особенностей). Не считаю при этом, что Trait - это совокупность черт. Это отдельная черта, у которой есть какие-то свойства и методы взаимодействия с внешним миром.

Т.е. мы одновременно имеем два синонимичных И созвучных слова (Тип и Типаж), только одно из них обозначает Общность (совокупность поведений), а другое - Частность (отдельно взятое поведение Типа).

Мне одному это кажется странным?

По поводу использования слова черта - не вижу никаких объективных предпосылок НЕ использовать это слово.

@star-ver
Copy link

Ежли зрить в корень, то:
Type - тип данных,
Trait - тип поведения.

"Типаж", "черта", "характеристика" - так себе варианты, поскольку смешивают в себе и то и то (данные и функционал), а надо бы четко отделять одно от другого. "Роль", на мой взгляд - наиболее адекватный перевод "трейт"а. "Для типов Блоха, Заяц, Жеребец реализована роль Скакун". Но, всё же, использование слова Трейт "как есть" выглядит более предпочтительным. Оно вполне русское по звучанию и ближе к коду - то бишь, не требует доп. конвертации в уме а-ля "мы говорим - партия, подразумеваем - Ленин".

@star-ver
Copy link

Ещё один немаловажный для русскоговорящего человека момент. По-русски правильнее было бы писать не - "такой-то тип реализует такой то трейт" (ибо тип ничего не реализует, да и не могёт ничего реализовать), а: "для такого-то типа реализуется такой-то трейт". Это важно. Иначе получается - там неясность, тут неточность - и текст становится неудобоваримым. Тип не реализует поведение, но может обладать поведением, для него реализованным.

@aleksandr-shevchenko
Copy link

Я за устоявшееся слово "трейт". В PHP сделали правильно, назвали трейт трейтом, многие лекторы по Rust(в частности Алексей Кладов), используют слово трейт. В данной книге тоже не надо выделываться и тоже использовать устоявшийся в программистской среде термин.
А то предлагают типа русский аналог и параллельно пишут в тексте "Вау", за что я бы отлучал от компа на месяц))).

@ava57r
Copy link
Member

ava57r commented Jul 4, 2022

Я за устоявшееся слово "трейт". В PHP сделали правильно, назвали трейт трейтом, многие лекторы по Rust(в частности Алексей Кладов), используют слово трейт. В данной книге тоже не надо выделываться и тоже использовать устоявшийся в программистской среде термин. А то предлагают типа русский аналог и параллельно пишут в тексте "Вау", за что я бы отлучал от компа на месяц))).

как вариант такой вариант допустим и внесён в dictionary уже

@kuzminrobin
Copy link

К сведенью:
В Словаре для перевода "trait" встречается дважды, причём первый случай стоИт не на своём месте (если сортировать по левой колонке по алфавиту).
"trait bounds" тоже не на своём месте.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests