Compartir a través de


Problemas de portabilidad del anexo B

Esta cláusula es informativa.

B.1 General

Este anexo recopila información sobre la portabilidad que aparece en esta especificación.

B.2 Comportamiento indefinido

El comportamiento no está definido en las siguientes circunstancias:

  1. El comportamiento de la función asincrónica envolvente cuando la implementación de un awaiter de los métodos INotifyCompletion.OnCompleted de interfaz y ICriticalNotifyCompletion.UnsafeOnCompleted no hace que el delegado de reanudación se invoque como máximo una vez (§12.9.8.4).
  2. Pasar punteros como parámetros de referencia o salida (§23.3).
  3. Al desreferenciar el resultado de convertir un tipo de puntero a otro y el puntero resultante no se alinea correctamente para el tipo señalado. (§23.5.1).
  4. Cuando el operador unario * se aplica a un puntero que contiene un valor no válido (§23.6.2).
  5. Cuando se subíndice un puntero para acceder a un elemento fuera de límites (§23.6.4).
  6. Modificar objetos de tipo administrado a través de punteros fijos (§23.7).
  7. El contenido de la memoria recién asignada por stackalloc (§12.8.21).
  8. Intentar asignar un número negativo de elementos mediante stackalloc(§12.8.21).
  9. Conversiones dinámicas implícitas (§10.2.10) de parámetros de entrada con argumentos de valor (§12.6.4.2).

B.3 Comportamiento definido por la implementación

Se requiere una implementación conforme para documentar su elección de comportamiento en cada una de las áreas enumeradas en esta subclausa. A continuación se definen las implementaciones:

  1. Control del carácter Unicode NULL (U+0000) en una unidad de compilación. (§6.1)
  2. Comportamiento cuando se encuentra un identificador que no está en el formulario de normalización C. (§6.4.3)
  3. Valor máximo permitido para Decimal_Digit+ en PP_Line_Indicator. (§6.5.8)
  4. Interpretación del input_characters en el texto pp_pragma de una directiva #pragma. (§6.5.10)
  5. Los valores de los parámetros de aplicación pasados Main por el entorno host antes del inicio de la aplicación. (§7.1)
  6. Mecanismo para determinar si un programa se compila como una biblioteca de clases o como una aplicación. (§7.1)
  7. Directiva o mecanismos utilizados por una implementación para la creación y destrucción de dominios de aplicación. (§7.1)
  8. Código de salida si el método de punto de entrada efectivo finaliza debido a una excepción. (§7.2)
  9. Indica si los finalizadores se ejecutan como parte de la terminación de la aplicación. (§7.2)
  10. Si las API permiten ejecutar un finalizador más de una vez. (§7.9)
  11. Indica si los finalizadores se ejecutan como parte de la terminación de la aplicación. (§7.9)
  12. Superficie de API proporcionada por Expression<TDelegate> más allá del requisito de un Compile método. (§8.6)
  13. Estructura precisa del árbol de expresiones, así como el proceso exacto para crearlo, cuando se convierte una función anónima en un árbol de expresiones. (§10.7.3)
  14. La razón por la que se puede producir un error en una conversión a un tipo de delegado compatible en tiempo de compilación. (§10.7.3)
  15. Valor devuelto cuando se realiza una asignación de pila de tamaño cero. (§12.8.21)
  16. System.ArithmeticException Si se produce (o una subclase de ahí) o el desbordamiento no se notifica con el valor resultante que es el del operando izquierdo, cuando en un unchecked contexto y el operando izquierdo de una división de enteros es el valor máximo negativo int o long el valor y el operando derecho es –1. (§12.10.3)
  17. System.ArithmeticException Cuando se produce una (o una subclase) al realizar una operación de resto decimal. (§12.10.4)
  18. Impacto de la terminación del subproceso cuando un subproceso no tiene ningún controlador para una excepción y el subproceso finaliza. (§13.10.6)
  19. Mecanismo por el que se logra la vinculación a un método externo. (§15.6.8)
  20. El impacto de la terminación del subproceso cuando no se encuentra ninguna cláusula coincidente catch para una excepción y el código que inicialmente inició ese subproceso se alcanza. (§21.4).
  21. Un entorno de ejecución puede proporcionar atributos adicionales que afectan a la ejecución de un programa de C#. (§22.5.1)
  22. Asignaciones entre punteros y enteros. (§23.5.1)
  23. Efecto de aplicar el operador unario * a un null puntero. (§23.6.2)
  24. El comportamiento cuando la aritmética de puntero desborda el dominio del tipo de puntero. (§23.6.6, §23.6.7)
  25. Resultado del sizeof operador para los tipos de valor no predefinidos. (§23.6.9)
  26. Comportamiento de la fixed instrucción si la expresión de matriz es null o si la matriz tiene cero elementos. (§23.7)
  27. Comportamiento de la fixed instrucción si la expresión de cadena es null. (§23.7)

B.4 Comportamiento no especificado

  1. Hora en la que se ejecuta el finalizador (si existe) para un objeto, una vez que ese objeto se ha convertido en apto para la finalización (§7.9).
  2. Representación de true (§8.3.9).
  3. Valor del resultado al convertir valores fuera del intervalo de valores de float o a un tipo entero en un unchecked contexto (§10.3.2double).
  4. El objeto de destino exacto y el método de destino del delegado generado a partir de un anonymous_method_expression contiene (§10.7.2).
  5. Diseño de matrices, excepto en un contexto no seguro (§12.8.16.5).
  6. Si hay alguna manera de ejecutar el bloque de una función anónima distinta de la evaluación e invocación de la lambda_expression o anonymous_method-expression (§12.19.3).
  7. El tiempo exacto de inicialización de campos estáticos (§15.5.6.2).
  8. Resultado de invocar MoveNext cuando se ejecuta un objeto enumerador (§15.14.5.2).
  9. Resultado del acceso Current cuando un objeto de enumerador está en los estados anterior, en ejecución o posterior (§15.14.5.3).
  10. Resultado de invocar Dispose cuando un objeto enumerador está en estado de ejecución (§15.14.5.4).
  11. Los atributos de un tipo declarado en varias partes se determinan combinando, en un orden no especificado, los atributos de cada una de sus partes (§22.3).
  12. Orden en el que los miembros se empaquetan en una estructura (§23.6.9).
  13. Se produce una excepción durante la ejecución del finalizador y esa excepción no se detecta (§21.4).
  14. Si más de un miembro coincide, qué miembro es la implementación de I.M (§18.6.5).

B.5 Otros problemas

  1. Los resultados exactos de la evaluación de expresiones de punto flotante pueden variar de una implementación a otra, ya que se permite que una implementación evalúe dichas expresiones mediante un intervalo mayor o una precisión de los necesarios (§8.3.7).
  2. La CLI reserva ciertas firmas para la compatibilidad con otros lenguajes de programación (§15.3.10).

Fin del texto informativo.