rust-lang-ru / community

Репозиторий мета-информации о сообществе
16 stars 3 forks source link

Исправьте перевод #44

Closed fdsc closed 1 year ago

fdsc commented 4 years ago

На странице https://doc.rust-lang.ru/book/ch03-03-how-functions-work.html ошибка

"Операторы (Statements) - это инструкции, которые выполняют действия, но не возвращают значение. "

Это переводится не как "оператор", а как "утверждение".

blandger commented 4 years ago

@fdsc Оригинальный текст такой We’ve actually already used statements and expressions. Statements are instructions that perform some action and do not return a value. Expressions evaluate to a resulting value.

По устоявшейся практике, утверждениями называются конструкции вида: assert(ptr != NULL); еще со времен языков типа Паскаля.

К тем же временам относится и устоявшийся перевод термина :

Инстру́кция или опера́тор (англ. statement) — наименьшая автономная часть языка программирования; команда или набор команд...... https://ru.wikipedia.org/wiki/%D0%9E%D0%BF%D0%B5%D1%80%D0%B0%D1%82%D0%BE%D1%80_(%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5)

fdsc commented 4 years ago

Вы поменьше в википедию смотрите - там явная и глупая ошибка.

Посмотрите внимательно на английский учебник по Rust https://doc.rust-lang.org/book/appendix-02-operators.html

Appendix B: Operators and Symbols В качестве операторов там идут плюсы, минусы и т.п. И вы переводите Operator как "Оператор"

В то же время в https://doc.rust-lang.ru/book/ch03-03-how-functions-work.html указывается, что объявление функции это - Statements, И вы переводите Statement как "Оператор". То есть два разных слова вы переводите как одно наше. Это неверно.

Обратите внимание на то, что в учебнике есть следующие термины Statement Expression Operator

Обратите внимание на то, что вы переводите Statement как "оператор", однако слово Operator вы тоже переводите как "Оператор" не различая их. Это коллизия перевода. В одном месте вы называете словом "Оператор" то, что никогда не возвращает значение, а в другом месте - вы называете словом "Оператор" то, что возвращает значение.

Получается, что у вас одно и то же слово "Оператор" используется как перевод двух разных слов: "Statement" и "Operartor", которые совсем разные по смыслу.

Что касается языков типа Паскаля, то я много программировал на Паскале, но что-то не помню так assert-ов. Утверждениями там как раз называются statements и как назывались раньше ими так и называются сейчас. И они назывались так всегда. Операторы же языка - это специальные ключевые слова типа "+", "*" и т.п. Операторы являются выражениями.

Пример Statement в Rust - это let x = a + 1;

Вот это всё - это statement. Надеюсь вы не будете спорить с этим? Этот statement содержит выражение (expression) "a+1", которое состоит из идентификатора "a", числового литерала "1" и оператора (Operator) "+".

При прочтении английской версии это очевидно. Если вы с этим спорите - скажите. Проблема в том, что в английской версии Statement и Operator - это различные слова. А у вас в переводе - нет. И, поверьте, такую глупость я вижу в первый раз. Даже не знаю, где это вы взяли такой странный перевод. Про википедию я вообще молчу.

ozkriff commented 4 years ago

@fdsc спокойнее, пожалуйста.

fdsc commented 4 years ago

@ozkriff Я абсолютно вежлив и спокоен. И , в отличие от вас, на личности не перехожу

vitvakatu commented 4 years ago

@fdsc не понимаю, где вы увидели переход на личности.

Operator - это как правило арифметический или логический оператор (в расте есть также некоторые другие, например dereference или range literal).

Операторы являются выражениями.

Это, очевидно, не так.

Вот, например, аналогичное обсуждение: https://russian.stackexchange.com/questions/7583/programming-terminology-expression-statements-in-russian#7585 В частности, в книге по С++ "expresion statement" переводят как "оператор-выражение". Спорно? Возможно. Мне лично нравится перевод "statement" как "инструкция". А вот перевод "утверждение", на мой взгляд, совершенно не верен - утверждения бывают в юридических и научных текстах, а не в алгоритмах (хотя, например, в Prolog это может иметь место).

Проблема в том, что в английской версии Statement и Operator - это различные слова. А у вас в переводе - нет.

Так бывает, в любой паре языков есть такие слова. Например, известная проблема с переводом "thread" и "stream" как "поток".

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

Пример из книги по golang: "This function has no parameters, doesn't return anything and has only one statement." -> "Наша функция не имеет входных параметров, ничего не возвращает и содержит всего один оператор."

fdsc commented 4 years ago

@vitvakatu

но для изменения перевода стоит привести хотя бы пару примеров из аналогичной литературы

ok, привожу пример

http://es5.github.io/#x12 12 Инструкции

http://es5.javascript.ru/x12.html#x12 12 Statements

Как раз тот перевод, который вам нравится. Я больше привык к слову "утверждение", но я не против любого другого слова. Важно, чтобы три разных английских слова переводились тремя разными русскими. И так. чтобы это не запутывало. Operator переводить как "Оператор", а statement - как что-то другое.

fdsc commented 4 years ago

Ещё пример перевода https://vanilla-js.blogspot.com/2015/08/parser-javascript.html

Утверждения - Statements

Мы можем легко получить утверждения путем добавления еще одного метода std (statement denotation) в команды-метки (tokens).


https://habr.com/ru/post/61323/

Здесь, правда, в комментариях. "Налицо явная путаница в терминах «выражение» (expression) и «утверждение» (statement)."

Как видите, мой вариант также известен. Но вы можете выбрать любой, который вам нравится. Инструкция, утверждение, высказывание - всё подойдёт.

blandger commented 4 years ago

Statements are instructions that perform some action and do not return a value... Инструкции являются инструкциями, выполняющими некоторые действия....

Мои внутренние впечатление в общем совпадают с описанными выше от @vitvakatu

Мне напомнило существовавшее ранее : процедура (procedure) - это функция, которая не возвращает значение. А если что-то возвращается из процедуры, то это не процедура, а функция (function). Хорошо, что в большинстве ЯП это уже давно "устаканили".

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

Достаточно попасть в главы 17-19, перевести их, (вроде этого и аналогичные), чтобы понять простую мысль, что такие вот "детали и тонкости" (кто и как называется на основе перевода спеки/доки по JS) далее уже не имеет существенного значения, потому что материал имеет уровень абстракции повыше и сложность чуть побольше.

fdsc commented 4 years ago

Поверьте мне, читать очень неприятно. Отвлекает неверным переводом. Вы, может быть, уже привыкли, а мне лично глаза мозолит.

blandger commented 4 years ago

Мне читать приятно, и перечитывать тоже... есть местами "науко умные куски", которые по смыслу понятны, но по языку "хотелось бы помягче и красивее".

Вот еще словарик https://rustycrate.ru/dictionary.html statement = оператор

Паскаля, то я много программировал на Паскале, но что-то не помню так assert-ов. Утверждениями там как раз называются statements и как назывались раньше ими так и называются сейчас. И они назывались так всегда.

Даже не знаю что вам сказать... Открываю содержание Турбо-паскаля - http://mif.vspu.ru/books/pascal/ Нигде термина "утверждение" не наблюдаю, операторы, операции, выражения, процедуры, функции... где вы такое учили, я не понял....

Открываю свежее учебное пособие - http://school.podvorye.ru/staff/tsvetkov/abcpascal.pdf

Оператор – инструкция языка Паскаль. Операторы отделяются точкой с запятой друг от друга. Операторы можно объединить в составной оператор, заключив их в операторные скобки begin ... end.

Вот это всё - это statement. Надеюсь вы не будете спорить с этим?

В приведенной ссылке, appendix-02-operators.html ; | Statement and item terminator Можно подумать, что все что отделено точкой запятой - утверждение (или инструкция?), или оператор (простой или составной)

Еще один пример с той же указанной вами страницы....

fn main() {
    let y = 6;
}

Listing 3-1: A main function declaration containing one statement Function definitions are also statements; the entire preceding example is a statement in itself.

Объявления функций - также являются операторами (или утверждениями/инструкциями в вашей интерпретации???) Весь предыдущий пример сам по себе является оператором (или утверждением или назовете его инструкцией ?).

Если где-то по исходному коду "нечто не возвращающее результат" названо оператором, а не выражением, то можем на конкретные места посмотреть, оправданно или нет. А так - интепретация "statement - это инструкция" тоже не совсем полное, судя по листингу 3-1 и пояснению к нему.

blandger commented 4 years ago

В стандартном языке "классического Паскаля" Ассерта не было, но позднее он появился как процедура. https://www.freepascal.org/docs-html/rtl/system/assert.html http://docs.embarcadero.com/products/rad_studio/delphiAndcpp2009/HelpUpdate2/EN/html/delphivclwin32/System_Assert@Boolean.html

blandger commented 4 years ago

В словарях попалось совсем забавное statement

  1. (computer science) a line of code written as part of a computer program [syn: instruction, command, program line ]

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

fdsc commented 4 years ago

blander, вы спорите не о том.

Ещё раз. В английском языке есть три разных слова: statement, expression, operator

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

Открываю свежее учебное пособие

Ключевое слово "свежее". Эффективные менеджеры в действии: главное выпустить в продажу побыстрее, а что там внутри - им без разницы. Но даже там statement и operator не смешиваются, если я верно понял.

blandger commented 4 years ago

Критикуете — предлагайте, больше конкретики.

Вот тут написано так, предлагаю вот так...

А вы должны...ну вы понимаете....

kpp commented 4 years ago

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

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

Переводчики проделали титанический труд, за что им любовь и уважение. Если хотите изменений, давайте собирать доказательную базу, чтобы быть уверенными на 100%. А потом ещё и голосовалку запустим в чате.

fdsc commented 4 years ago

@blandger

Критикуете — предлагайте, больше конкретики.

Я уже предложил максимум конкретики. Переводить "statement" как любое из больше понравившихся вам вариантов: "высказывание", "утверждение", "инструкция". Что вам ещё надо?

Я предлагаю вам просто это сделать. Если надо, могу сам исправить текст, скажите, где он находится.

создадут новый тикет с просьбой вернуть как было.

Не создадут. ЛЮБОЙ новый вариант будет лучше старого. Так как текущий перевод однозначно неверный.

nlinker commented 4 years ago

@kpp Чем не статистика: https://www.multitran.com/m.exe?a=3&sc=138&s=statement&l1=1&l2=2 image

fdsc commented 4 years ago

Ещё два варианта появилось ("предложение" и "команда") ... . Давайте не будем множить варианты перевода.

Тем более, что block statement всю жизнь переводился как "составной оператор", а вовсе не как "оператор блока". Так что данная статистика крайне сомнительна.

fdsc commented 4 years ago

В любом случае, вне зависимости от статистики, слова должны быть переведены без потери смысла. Перевод statement как "оператор" - это запутывающий, бессмысленный перевод.

blandger commented 4 years ago

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

fdsc commented 4 years ago

Употребление - блочный оператор (как и составной), вполне себе распространенное уже много лет, вообще можно не плодить варианты.

Только вот ни варианта "блочный оператор", ни варианта "составной оператор" в вашей статистике нет.

В любом случае, в вашей статистике есть только один частый пригодный перевод statement - "утверждение". Который как раз вам не нравится. Я предлагаю вам выбрать любой вам нравящийся и перевести нормально.

blandger commented 4 years ago

image ГитЛокалайз пока косячит, но надеюсь его починят, дальше эту дискусию продолжать не интересно,

dluschan commented 1 year ago

Оставлю для истории ссылку на окончательное (на данный момент) решение этого вопроса) https://github.com/rust-lang-ru/dictionary/issues/70