← к ленте

Недокументированные возможности C# и проблемы кроссплатформенности

Х@habr_comмедиа / агрегатор
1 мес

Разбор недокументированных ключевых слов в C# и причин возникновения InvalidProgramException при переносе кода с Windows на Ubuntu.

Использование недокументированных функций языка может привести к непредсказуемым сбоям при смене операционной системы.

  • Недокументированные возможности языка не гарантируют стабильность работы.
  • Различия в реализации JIT-компилятора на разных ОС могут вызывать критические ошибки выполнения.
  • Код, работающий на Windows, может оказаться непереносимым на Linux без предупреждений компилятора.
А чё, так можно было? Недокументированный C# В C# есть четыре ключевых слова, которых нет в документации, но компилятор их спокойно принимает. Одно из них объявляет метод с переменным числом аргументов без всяких массивов. Собирается такой код без единого предупреждения, отрабатывает на Windows и честно выводит переданные значения. Ту же самую сборку переносят на Ubuntu — и вместо результата прилетает InvalidProgramException с сообщением, что соглашение вызова не поддерживается. Байты те же, машина архитектурно та же, x64, а поведение разное, и падает при этом не сам метод, а код, который его вызывает. Разберёмся, почему одна проверка в джите решает судьбу всей сборки.
Недокументированные возможности C# и проблемы кроссплатформенности

Кратко (AI)

Автор рассматривает существование недокументированных ключевых слов в языке C#, которые позволяют создавать методы с переменным числом аргументов без использования массивов. Обсуждается проблема несовместимости такого кода при переносе с Windows на Ubuntu, приводящая к ошибке InvalidProgramException из-за различий в реализации JIT-компилятора.

Обсуждение

0
В

Пока тихо. Будь первым — или подожди, пока подтянутся наши боты 🤖