Ремесло программиста

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » Ремесло программиста » Русский язык в ИТ » Uniqueness type - как это по-русски?


Uniqueness type - как это по-русски?

Сообщений 1 страница 18 из 18

1

Хочу посоветоваться. Хочу перевести статью из английской Википедии "Uniqueness type", поместить в русскую. Сайты-переводчики переводят это как "типы уникальности". Согласен с этим, ибо это вполне соответствует смыслу выражения на английском. Однако в статье о языке Clean https://thedeemon.livejournal.com/37515.html пишут об "уникальных типах", что на мой взгляд, не верно. "Uniqueness" - это всё-таки "уникальность".

Разница между "уникальными типами" и "типами уникальности" вполне ощущается, предлагаю её почувствовать:

неисправный индикатор - индикатор неисправности
правильный критерий - критерий правильности
надёжный признак - признак надёжности
уникальное объявление - объявление уникальности
А вот частота употребления слов и словосочетаний в упомянутой статье:
uniqueness type - 1
unique type - 4
uniqueness typing - 1
type is unique - 1
uniqueness (одиночное слово) - 2

Похоже, что англичан совершенно не беспокоит разница между "каналом" и "канализацией". По смыслу этому термину (исходя из его фактической сути) больше всего соответствует фраза "тип с признаком уникальности". Просто тип некого объекта сопровождается дополнительным словом "unique". Т.е. не тип является уникальным, а объект этого типа является уникальным.

Можно привести аналогию из Си: можно говорить о типах с признаком "const":

Код:
const int
const double

Но нельзя говорить о константных типах.

Термин "тип с признаком уникальности" - это звучит длинновато. Есть сомнения, что это приживётся. Выберут какой-то эрзац и приживётся именно он, подобно  "замыканиям".  "Замыкание"  совершенно не соответствующий своей сути; "замыкание" стало лишь кличкой некоторого технического приема в программировании.

Что бы вы посоветовали? "Тип уникальности"? "Уникальный тип"?  "Тип с признаком уникальности"? Или вообще отказаться от слова "тип" и назвать "признаком уникальности"? Ведь ключевой слово  "unique" лишь дополняет имя типа, как "const" дополняет имя типа "int", к примеру. Но само "unique" не является именем типа.

2

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

Это вполне может определяться контекстом и спецификой темы. Примеров в русском тоже дофига. Поэтому наверно нужно читать весь текст или его значительную часть, чтобы сделать вывод о данном термине.
Почитал статью на вики. В ней если быть точнее (судя по описываемому примеру). говорится больше об уникальности ссылки на объект данного типа, нежели чем о самом типе. Я бы так и именовал - уникальные ссылки на объект. Ключевое слово в понимании термина именно "ссылка", как вариант указатель (звучит солидней). Хотя уникальный тоже звучит размывая смысл. Дословно передать смысл термина можно как "Единственный указатель на объект данного типа".  Уникальность все же воспринимается в значении "оригинальный", "неповторимый" и "ни у кого больше такого нет". То есть имеет более размытое значение.

можно говорить о типах с признаком "const":

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

3

utkin написал(а):

Я бы так и именовал - уникальные ссылки на объект. Ключевое слово в понимании термина именно "ссылка", как вариант указатель (звучит солидней). Хотя уникальный тоже звучит размывая смысл. Дословно передать смысл термина можно как "Единственный указатель на объект данного типа".

Юрий написал(а):

uniqueness type - 1
unique type - 4
uniqueness typing - 1
<...>
назвать "признаком уникальности"? Ведь ключевой слово  "unique" лишь дополняет имя типа, как "const" дополняет имя типа "int", к примеру. Но само "unique" не является именем типа.

Одним словом, речь про "образцы" и "образцовость". Даже гугл-переводчик знает.

4

Наверное, лучшим соответствием смыслу будет «тип, гарантирующий уникальность». Т.е. объекты этого типа будут гарантированно встречаться только один раз.

говорится больше об уникальности ссылки на объект данного типа

Ну если только «ссылка» употребляется в самом широком смысле этого слова. Если же иметь в виду ссылку из С++ или указатель из Си, то в этом случае обстоит не так. Пример:

Код:
unique X;
y = X;
f(X);

Здесь нет ссылки, но есть копирование значения. Но копирование значения — это возможное нарушение уникальности.

5

Юрий написал(а):

лучшим соответствием смыслу будет «тип, гарантирующий уникальность».

Юрий написал(а):

Здесь нет ссылки, но есть копирование значения. Но копирование значения — это возможное нарушение уникальности.

А ничего, что это противоречие?
Вообще-то, по статье в вики говорилось про оптимизацию, а также упорядочение ввода/вывода ФП, но ничего про С++. Речь точно идёт о переводе статьи?

6

Черновой перевод:

При вычислении тип с гарантией уникальности обеспечивает гарантию, что объект используется однопоточным способом, при этом ссылок на него — не более одной. Если значение имеет уникальный тип, применимая к нему функция может быть оптимизирована для обновления значения на месте в объектном коде. Такие обновления на месте повышают эффективность функциональных языков, сохраняя при этом ссылочную прозрачность. Типы с гарантией уникальности могут также использоваться для интеграции функционального и императивного программирования.

Типы с гарантией уникальности лучше всего объяснить с помощью примера. Рассмотрим функцию readLine, которая читает следующую строку текста из данного файла:
 

Код:
function readLine(File f) returns String
      return line where
          String line = doImperativeReadLineSystemCall(f)
      end
  end

Теперь doImperativeReadLineSystemCall считывает следующую строку из файла с использованием системного вызова на уровне ОС, который имеет побочный эффект из-за изменения текущей позиции в файле. Но это нарушает ссылочную прозрачность, потому что вызов этой функции несколько раз с одним и тем же аргументом будет всякий раз возвращать разные результаты при перемещении текущей позиции в файле. Это, в свою очередь, делает readLine нарушающей ссылочную прозрачность, потому что она вызывает callImperativeReadLineSystemCall.
Однако, используя типы с гарантией уникальности, мы можем построить новую версию readLine, которая является ссылочно прозрачной, даже если она построена поверх функции, которая не является ссылочно прозрачной:

Код:
  function readLine2(unique File f) returns (unique File, String)
      return (differentF, line) where
          String line = doImperativeReadLineSystemCall(f)
          File differentF = newFileFromExistingFile(f)
      end
  end

Объявление unique указывает, что объект типа f уникален; то есть f никогда не может ссылаться на вызывающую функцию readLine2 после возвращения из readLine2, и это ограничение применяется системой типов. И поскольку readLine2 не возвращает f сам, а представляет собой новый, другой файловый объект differentF, это означает, что readLine2 невозможно вызывать с аргументом f снова, тем самым сохраняя ссылочную прозрачность и допуская возникновение побочных эффектов.

Типы с гарантией уникальности реализованы в языках функционального программирования Clean, Mercury и Idris. Иногда они используются для выполнения операций ввода-вывода в функциональных языках вместо монад.

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

Тип с гарантией уникальности очень похож на линейный тип, до такой степени, что используемые термины часто взаимозаменяемы. Но на самом деле существует различие: по факту линейная типизация позволяет привести линейное значение к линейной форме, сохраняя при этом несколько ссылок на него. Уникальность гарантирует, что значение не имеет других ссылок на себя.

В Rust концепция владения приводит к тому, что в коде ниже вызова функции f(x) больше нельзя обращаться к x, его "захватила" f. Если понимать ссылку в узком смысле, как в С++, то f передается не ссылка, а копия значения. Но в Rust, как видите, это понимается шире.

7

P.S. Роман Душкин, автор многих книг и статей по функциональному программированию, посоветовал остановиться на "тип, гарантирующий уникальность". Пожалуй, так и сделаю.

8

Если значение имеет уникальный тип

Объявление unique указывает, что объект типа f уникален

Ничего не смущает?

9

Ну всё, статья готова: Типы, гарантирующие уникальность.

Ничего не смущает?

Уже нет, все сомнительные места исправил.

10

с гарантией уникальности обеспечивает гарантию

Это очень сильно для неподготовленного мозга. Масло масленное надо исправить. Навести литературный гламур.

11

Я тоже это видел, но не придумал, как обойтись без масляного масла. А у Вас есть предложения?

12

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

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

13

Теперь в такой редакции:

В некоторых языках программирования применяется концепция типа, гарантирующего уникальность. Такие типы обеспечивает гарантию, что объект используется однопоточным способом, при этом ссылок на него — не более одной.

14

Такие типы гарантируют, что объект используется однопоточным способом, при этом ссылок на него — не более одной.

Что значит обеспечивают гарантию? Ну может в буржуйском нет слова гарантировать. Но в русском от существительных можно образовывать глаголы.

15

Значит, таково было авторское решение :) Но Вы можете сами отредактировать текст, это ж Википедия.

16

Мне лень :). Я просто предложил более, как мне кажется, читаемый вариант.

17

Такие типы обеспечивает гарантию, что объект используется однопоточным способом, при этом ссылок на него — не более одной.

Сдаётся мне, ошибочка вкралась. "такие типы" подразумевают "подобие" типов во множественном числе, а потому - они "обеспечивают" гарантию... )))
Вот ещё:

Было разработано расширение компилятора для языка программирования языка программирования Scala, который использует аннотации для обработки уникальности в контексте передачи сообщений между объектами[2].

Результат:
Исправил и то и другое.

18

Спасибо, что не только заметили, но и исправили.


Вы здесь » Ремесло программиста » Русский язык в ИТ » Uniqueness type - как это по-русски?