Поделиться через


Проблемы с переносимостью приложения B

Это предложение является информативным.

Общие сведения B.1

Это приложение собирает некоторые сведения о переносимости, которая отображается в этой спецификации.

Неопределенное поведение B.2

Поведение не определено в следующих обстоятельствах:

  1. Поведение заключающей асинхронной функции при реализации методов INotifyCompletion.OnCompleted интерфейса в ожидании и ICriticalNotifyCompletion.UnsafeOnCompleted не приводит к вызову делегата возобновления не более одного раза (§12.9.8.4).
  2. Передача указателей в качестве ссылочных или выходных параметров (§23.3).
  3. При расшифровке результата преобразования одного типа указателя в другой, а результирующий указатель неправильно выравнивается для типа с указанием на тип. (§23.5.1).
  4. Когда унарный * оператор применяется к указателю, содержащей недопустимое значение (§23.6.2).
  5. Если указатель подписывается для доступа к элементу вне границ (§23.6.4).
  6. Изменение объектов управляемого типа с помощью фиксированных указателей (§23.7).
  7. Содержимое памяти, недавно выделенное stackalloc (§12.8.21).
  8. Попытка выделить отрицательное число элементов с помощью stackalloc(§12.8.21).
  9. Неявные динамические преобразования (§10.2.10) входных параметров с аргументами значений (§12.6.4.2).

Поведение, определяемое реализацией B.3

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

  1. Обработка символа NULL Юникода (U+0000) в единице компиляции. (§6.1)
  2. Поведение при обнаружении идентификатора, не в форме нормализации C. (§6.4.3)
  3. Максимально допустимое Decimal_Digit+ PP_Line_Indicatorзначение в . (§6.5.8)
  4. Интерпретация input_characters в тексте pp_pragma директивы #pragma. (§6.5.10)
  5. Значения всех параметров приложения, передаваемых Main в среду узла перед запуском приложения. (§7.1)
  6. Механизм определения того, компилируется ли программа как библиотека классов или как приложение. (§7.1)
  7. Политика или механизмы, используемые реализацией для создания и уничтожения доменов приложений. (§7.1)
  8. Код выхода, если метод эффективной точки входа завершается из-за исключения. (§7.2)
  9. Независимо от того, выполняются ли методы завершения в рамках завершения приложения. (§7.2)
  10. Разрешает ли API-интерфейсы выполнять метод завершения более одного раза. (§7.9)
  11. Независимо от того, выполняются ли методы завершения в рамках завершения приложения. (§7.9)
  12. Область API, предоставляемая за пределами Expression<TDelegate> требования к методу Compile . (§8.6)
  13. Точную структуру дерева выражений, а также точный процесс его создания, когда анонимная функция преобразуется в дерево выражений. (§10.7.3)
  14. Причина, по которой преобразование в совместимый тип делегата может завершиться сбоем во время компиляции. (§10.7.3)
  15. Значение, возвращаемое при выделении стека нулевого размера. (§12.8.21)
  16. System.ArithmeticException Возникает ли исключение (или подкласс) или переполнение не соответствует результирующем значению, являющемся левым операндом, когда в unchecked контексте и левом операнде целочисленного деления является максимальным отрицательным int или long значением, а правый операнду является–1. (§12.10.3)
  17. System.ArithmeticException Если при выполнении десятичной оставшейся операции возникает исключение (или подкласс). (§12.10.4)
  18. Влияние завершения потока при отсутствии обработчика исключения, и сам поток завершается. (§13.10.6)
  19. Механизм, с помощью которого достигается связывание с внешним методом. (§15.6.8)
  20. Влияние завершения потока при отсутствии соответствующего catch предложения для исключения и кода, который изначально начал работу потока. (§21.4).
  21. Среда выполнения может предоставлять дополнительные атрибуты, влияющие на выполнение программы C#. (§22.5.1)
  22. Сопоставления между указателями и целыми числами. (§23.5.1)
  23. Эффект применения унарного * оператора к null указателю. (§23.6.2)
  24. Поведение, когда арифметика указателя переполняет домен типа указателя. (§23.6.6, §23.6.7)
  25. Результат sizeof оператора для неопределенных типов значений. (§23.6.9)
  26. Поведение инструкции, если выражение массива fixed имеет null или имеет нулевые элементы. (§23.7)
  27. Поведение инструкцииfixed, если строковое выражение .null (§23.7)

Неопределенное поведение B.4

  1. Время выполнения средства завершения (если такового) для объекта после того, как этот объект станет допустимым для завершения (§7.9).
  2. Представление true (§8.3.9).
  3. Значение результата при преобразовании значений вне диапазона из float или double значений в целочисленный тип в unchecked контексте (§10.3.2).
  4. Точный целевой объект и целевой метод делегата, созданный из anonymous_method_expression , содержит (§10.7.2).
  5. Макет массивов, за исключением небезопасного контекста (§12.8.16.5).
  6. Существует ли какой-либо способ выполнения блока анонимной функции, отличной от оценки и вызова lambda_expression или anonymous_method-выражения (§12.19.3).
  7. Точное время инициализации статического поля (§15.5.6.2).
  8. Результат вызова MoveNext при выполнении объекта перечислителя (§15.14.5.2).
  9. Результат доступа Current , когда объект перечислителя находится в состоянии до, выполнения или после состояния (§15.14.5.3).
  10. Результат вызова Dispose , когда объект перечислителя находится в состоянии выполнения (§15.14.5.4).
  11. Атрибуты типа, объявленного в нескольких частях, определяются объединением атрибутов каждого из его частей (§22.3).
  12. Порядок упаковки элементов в структуру (§23.6.9).
  13. Исключение возникает во время выполнения средства завершения, и это исключение не поймано (§21.4).
  14. Если несколько элементов совпадают, какой член является реализацией I.M (§18.6.5).

Другие проблемы B.5

  1. Точные результаты вычисления выражения с плавающей запятой могут отличаться от одной реализации к другой, так как реализация разрешена для оценки таких выражений с использованием большего диапазона и /или точности, чем требуется (§8.3.7).
  2. Интерфейс командной строки резервирует определенные подписи для совместимости с другими языками программирования (§15.3.10).

Конец информативного текста.