Udostępnij za pośrednictwem


Problemy z przenośnością załącznika B

Ta klauzula jest informacyjna.

B.1 Ogólne

Ten załącznik zbiera pewne informacje o przenośności, które pojawiają się w tej specyfikacji.

Zachowanie niezdefiniowane B.2

Zachowanie jest niezdefiniowane w następujących okolicznościach:

  1. Zachowanie otaczającej funkcji asynchronicznych, gdy implementacja metod INotifyCompletion.OnCompleted ICriticalNotifyCompletion.UnsafeOnCompleted interfejsu przez obiekt awaiter nie powoduje wywołania delegata wznowienia co najwyżej raz (§12.9.8.4).
  2. Przekazywanie wskaźników jako parametrów referencyjnych lub wyjściowych (§23.3).
  3. Gdy wyłuszczenie wyniku konwersji jednego typu wskaźnika na inny, a wynikowy wskaźnik nie jest poprawnie wyrównany dla typu wskazywanego. (§23.5.1).
  4. Gdy operator jednoargumentowy * jest stosowany do wskaźnika zawierającego nieprawidłową wartość (§23.6.2).
  5. Gdy wskaźnik jest indeksowany w celu uzyskania dostępu do elementu poza granicami (§23.6.4).
  6. Modyfikowanie obiektów typu zarządzanego za pomocą stałych wskaźników (§23.7).
  7. Zawartość pamięci przydzielonej stackalloc przez program (§12.8.21).
  8. Próba przydzielenia ujemnej liczby elementów przy użyciu stackalloc(§12.8.21).
  9. Niejawne konwersje dynamiczne (§10.2.10) parametrów wejściowych z argumentami wartości (§12.6.4.2).

Zachowanie zdefiniowane przez implementację B.3

Implementacja zgodna jest wymagana do udokumentowania wybranego zachowania w każdym z obszarów wymienionych w tej podklasie. Poniżej przedstawiono definicję implementacji:

  1. Obsługa znaku NULL Unicode (U+0000) w lekcji kompilacji. (§6.1)
  2. Zachowanie, gdy napotkano identyfikator, który nie znajduje się w formularzu normalizacji C. (§6.4.3)
  3. Maksymalna wartość dozwolona dla Decimal_Digit+ elementu w pliku PP_Line_Indicator. (§6.5.8)
  4. Interpretacja input_characters w tekście pp_pragma dyrektywy #pragma. (§6.5.10)
  5. Wartości wszystkich parametrów aplikacji przekazywanych Main przez środowisko hosta przed uruchomieniem aplikacji. (§7.1)
  6. Mechanizm określania, czy program jest kompilowany jako biblioteka klas, czy jako aplikacja. (§7.1)
  7. Zasady lub mechanizmy używane przez implementację do tworzenia i niszczenia domen aplikacji. (§7.1)
  8. Kod zakończenia, jeśli efektywna metoda punktu wejścia kończy się z powodu wyjątku. (§7.2)
  9. Określa, czy finalizatory są uruchamiane w ramach kończenia działania aplikacji. (§7.2)
  10. Czy interfejsy API umożliwiają uruchamianie finalizatora więcej niż raz. (§7.9)
  11. Określa, czy finalizatory są uruchamiane w ramach kończenia działania aplikacji. (§7.9)
  12. Powierzchnia interfejsu API zapewniana poza Expression<TDelegate> wymaganiem Compile dla metody. (§8.6)
  13. Dokładna struktura drzewa wyrażeń, a także dokładny proces jego tworzenia, gdy funkcja anonimowa jest konwertowana na drzewo wyrażeń. (§10.7.3)
  14. Przyczyna, dla którego konwersja na zgodny typ delegata może zakończyć się niepowodzeniem w czasie kompilacji. (§10.7.3)
  15. Wartość zwracana po utworzeniu alokacji stosu o zerowym rozmiarze. (§12.8.21)
  16. Niezależnie od tego, czy element System.ArithmeticException (lub jego podklasa) jest zgłaszany, czy przepełnienie nie jest zgłaszane z wartością wynikową będącą argumentem operacji lewej, gdy w unchecked kontekście i lewym operandem liczby całkowitej jest maksymalna wartość ujemna int lub long wartość, a prawy operand to –1. (§12.10.3)
  17. Gdy ( System.ArithmeticException lub podklasa) jest zgłaszana podczas wykonywania operacji reszty dziesiętnej. (§12.10.4)
  18. Wpływ zakończenia wątku, gdy wątek nie ma obsługi wyjątku, a sam wątek zostaje zakończony. (§13.10.6)
  19. Mechanizm, za pomocą którego uzyskuje się połączenie z metodą zewnętrzną. (§15.6.8)
  20. Wpływ zakończenia wątku, gdy nie znaleziono pasującej catch klauzuli dla wyjątku i kodu, który początkowo rozpoczął ten wątek, jest osiągany. (§21.4).
  21. Środowisko wykonywania może udostępniać dodatkowe atrybuty wpływające na wykonywanie programu w języku C#. (§22.5.1)
  22. Mapowania między wskaźnikami i liczbami całkowitymi. (§23.5.1)
  23. Efekt zastosowania operatora jednoargumentowego * null do wskaźnika. (§23.6.2)
  24. Zachowanie, gdy arytmetyka wskaźnika przepełni domenę typu wskaźnika. (§23.6.6, §23.6.7)
  25. Wynik sizeof operatora dla wstępnie zdefiniowanych typów wartości. (§23.6.9)
  26. Zachowanie instrukcji fixed , jeśli wyrażenie tablicy jest null lub jeśli tablica ma zero elementów. (§23.7)
  27. Zachowanie instrukcji fixed , jeśli wyrażenie ciągu to null. (§23.7)

B.4 Nieokreślone zachowanie

  1. Czas uruchomienia finalizatora (jeśli istnieje) dla obiektu, gdy ten obiekt kwalifikuje się do finalizacji (§7.9).
  2. Reprezentacja true (§8.3.9).
  3. Wartość wyniku podczas konwertowania wartości float poza zakresem lub double na typ całkowity w unchecked kontekście (§10.3.2).
  4. Dokładny obiekt docelowy i metoda docelowa delegata wygenerowanego z anonymous_method_expression zawiera (§10.7.2).
  5. Układ tablic z wyjątkiem niebezpiecznego kontekstu (§12.8.16.5).
  6. Niezależnie od tego, czy istnieje jakikolwiek sposób wykonywania bloku funkcji anonimowej innej niż przez ocenę i wywołanie lambda_expression lub wyrażenie-anonymous_method (§12.19.3).
  7. Dokładny czas inicjowania pola statycznego (§15.5.6.2).
  8. Wynik wywołania MoveNext , gdy obiekt modułu wyliczającego jest uruchomiony (§15.14.5.2).
  9. Wynik uzyskiwania Current dostępu, gdy obiekt modułu wyliczającego znajduje się w przed, uruchomieniu lub po stanach (§15.14.5.3).
  10. Wynik wywołania Dispose obiektu modułu wyliczającego jest w stanie uruchomienia (§15.14.5.4).
  11. Atrybuty typu zadeklarowanego w wielu częściach są określane przez połączenie w nieokreślonej kolejności atrybutów każdego z jego części (§22.3).
  12. Kolejność, w jakiej składowe są pakowane w strukturę (§23.6.9).
  13. Wyjątek występuje podczas wykonywania finalizatora i ten wyjątek nie jest przechwycony (§21.4).
  14. Jeśli więcej niż jeden element członkowski pasuje, który element członkowski jest implementacją I.M (§18.6.5).

B.5 Inne problemy

  1. Dokładne wyniki oceny wyrażeń zmiennoprzecinkowych mogą się różnić od jednej implementacji do innej, ponieważ implementacja może oceniać takie wyrażenia przy użyciu większego zakresu i/lub precyzji niż jest to wymagane (§8.3.7).
  2. Interfejs wiersza polecenia zastrzega sobie pewne podpisy pod kątem zgodności z innymi językami programowania (§15.3.10).

Koniec tekstu informacyjnego.