1

В стандарте языка программирования С определен такой термин, как «trap representation»:

3.19.4

trap representation

an object1 representation2 that need not represent a value3 of the object4 type

Суть trap representation вкратце такова.

Допустим, у нас в памяти компьютера есть область размером в 1 байт, в которой хранятся биты 1000 1010. Назовем ее A.

Допустим также, что у нас есть два типа размером 1 байт: целое-число и дробное-число. Тип целое-число не имеет trap representation, то есть любая комбинация из 8 бит является корректным значением типа целое-число. В то же время тип дробное-число имеет одно trap representation — 1000 0000.

Тогда если мы попытаем использовать то, что находится в A как значение типа целое-число, то все будет нормально, так как 1000 1010 не является trap representation для типа целое-число. Использовать — применить в арифметическом выражении (A + 3) или, допустим, в сравнении (A > 9) и т. д.

Тогда если мы попытаем использовать то, что находится в A как значение типа дробное-число, то получим ошибку, потому что комбинация битов 1000 0000 является trap representation для типа дробное-число.

Как можно настолько же выразительно перевести этот термин на русский язык?

P. S. Прошу прощение за такое большое количество сносок и объяснений. Просто попытался как можно точнее обозначить контекст использования этого термина.


1) object — region of data storage in the execution environment, the contents of which can represent values.
2) representation — грубо говоря, просто определенный набор битов в памяти.
3) value — precise meaning of the contents of an object when interpreted as having a specific type.
4) object — region of data storage in the execution environment, the contents of which can represent values.

1
  • Вы не там задали свой вопрос, как мне кажется. Для перевода терминов нужно хорошо знать предметную область и понимать смысл термина. Знание собственно языка тут вторично.
    – freim
    Commented 28 июл. 2019 в 8:12

3 ответа 3

1

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

Относительно других ответов замечу, что в программирование слово trap со времён как минимум PDP-11 обозначает именно исключение либо прерывание, но ни в коем случае не ловушку. Нет в программировании никаких ловушек, вообще нет! Не стоит переводит дословно непонятные термины, они от этого становятся ещё более непонятными.

1
  • Не такой красивый вариант, как «неполное представление», но более точный как мне кажется. Спасибо :)
    – eanmos
    Commented 28 июл. 2019 в 10:08
3

Буквальный перевод (представление с подвохом) вряд ли подойдёт для термина. Из английского определения следует, что это "неполное представление (репрезентация)" объекта (числа в вашей интерпретации): это представление может не содержать информацию о типе объекта (эта информация в виде числового значения, соотв. "типу", отделена от такой репрезентации), вследствие чего при попытке интерпретировать такое представление, не располагая информацией о типе, можно (буквально) попасть в "ловушку" (trap), - в вашем примере можно по ошибке работать с целым числом как с дробным, что обнаружится только при появлении запрещённого дробного значения.

14
  • Спасибо за интересный вариант, но я не уверен, удачен ли он. «…это представление может не содержать информацию о типе объекта…». Представление и не должно содержать информацию о типе: набор битов в памяти — это просто бессмысленный набор битов. Смысл этому набору придает наша интерпретация: 01000001 — это число 64, но в то же время и символ A. Причем сначала мы можем интерпретировать этот участок памяти как число, а затем как символ. Поэтому, я не уверен, можно ли применить термин «неполное представление», как вы считаете?
    – eanmos
    Commented 26 июл. 2019 в 11:07
  • Представление неполное в том смысле, что не содержит информации о том, как его можно интерпретировать. Если вы знаете, что это за объект (пусть из ограниченного набора возможных), то сможете работать с этими данными, если нет, то вам сначала придётся каким-то образом выяснить, вольты это или литры; в простейшем случае (отличить целое от дроби) прогнать какие-нибудь тесты на запрещённые значения. В этом смысле полное представление могло бы иметь напр. заголовок для идентификации типа объекта.
    – Alex_ander
    Commented 26 июл. 2019 в 11:23
  • В таком смысле все представления неполные, потому что ни одно из них не содержит информацию о том, как его можно интерпретировать. Зная, что у нас в памяти есть байт 01000001 мы никак не можем выяснить «вольты это или литры». Мы можем лишь, как вы правильно заметили, исключить некоторые типы, проверив эту комбинацию битов на trap representation для этих некоторых типов.
    – eanmos
    Commented 26 июл. 2019 в 11:29
  • Если есть заголовок (отведенные биты) и известно, из какого набора вариантов выбирать (таблица значений заголовка), то это условно полная информация. Есть и другие возможности (включая скрытые, скремблинг и прочее) заложить эти данные в код, а перед началом (или в процессе) работы с переменной извлечь данные о типе проведением дополнительной процедуры.
    – Alex_ander
    Commented 26 июл. 2019 в 11:36
  • Но у нас нет такого заголовка. Все, что у нас есть — это сырые биты и байты. Мы можем интерпретировать их как захотим. 11111001 10011010 10011001 00101100 может быть знаковым числом, может быть беззнаковым числом, может быть массивом, может быть структурой — да вообще чем угодно. На самом деле, мне уже довольно сложно что-то утверждать, поскольку я не настолько хорошо знаю стандарт языка.
    – eanmos
    Commented 26 июл. 2019 в 12:13
2

Я чуть-чуть занимаюсь переводом документации, поэтому решился добавить пять копеек.

Мне кажется, что если Вы занимаетесь переводом, то нужно переводить. Если написано trap representation, то нужно переводить как представление-ловушка. Всё остальное будет искажением смысла текста (стандарта).

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

Буду рад узнать окончательную версию перевода!

1
  • Если речь идёт о термине, то его обычно не "переводят", а ставят ему в соответствие общепринятый русский термин. Например, если упоминается escape velocity, то это не "скорость убегания", а "вторая космическая скорость". В нашем случае устоявшегося русского термина, по-видимому, нет, поэтому окончательный перевод невозможен. Буквальный же перевод может создать плохой прецедент для закрепления словосочетания, вводящего в заблуждение относительно содержания термина. В таких случаях буквальный перевод лучше оставлять в комментарии, оставив окончательное решение техническим специалистам.
    – Alex_ander
    Commented 29 июл. 2019 в 5:46

Войдите, чтобы ответить на этот вопрос.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .