пятница, апреля 28, 2017

Приключения с Windows 10, русофобские

Делал-делал некую программку, придумывал/отлаживал, чего-то получилось – ура! Настала пора делать пакет для Магазина – нет проблем, запускаем в Студии процедуру и на выходе получаем …нет, не пакет, а кукиш Thumbs down в виде длинного и малоосмысленного перечня ошибок в программе, которая отлажена и 5 минут назад работала.

Что ж, надо рыть… Раскопки привели к факту падения программки …\Microsoft.net.native.compiler\1.6.1\tools\x64\ilc\Tools\nutc_driver.exe со странной формулировкой “fatal error N1002: Недостаточно памяти” при том, что на тот момент свободной памяти было ок.11 Гб. Если отключить компиляцию в native-код, то никаких ошибок не появляется, но по умолчанию она включена, да и в магазин, говорят, пакеты без такого кода не принимают. Хотя, спрашивается, кому он сдался, этот код? Программы для Windows 8.1 никто не компилит, а они и в “десятке” прекрасно работают… 

После некоторых манипуляций с подключениями сторонних пакетов памяти стало хватать, появилась другая ошибка – “fatal error N1001: Internal compiler Error”. Поиск причины такого харакири компилятора привёл к двум константам, объявленным внутри метода и имеющим русские имена. (Ну да, у меня много и других русских имён в программе, но только вот такие константы заваливают компилятор…). Ну, русофобы там работают, что с них возьмёшь? Кортану на русском даже и обещать перестали, Магазин для русских тоже сильно ограничен, теперь вот и компилятор. Devil

Если кто не верит – крохотный тест: В Visual Studio 2017 сделайте новый пустой проект универсального приложения (самый верхний пункт) с именем “Переводчик”, на страницу MainPage добавьте пару элементов

image

и пару методов:

image

Включите конфигурацию Debug, запустите и наблюдайте исправную работу переводчика.

Теперь включите конфигурацию Release, запустите и наблюдайте кукиш, который наблюдал я в начале расследования.

image

И будет этот кукиш до тех пор, пока не исправите вон ту самую маленькую жопу:

image

Вот такая вот русофобия в недрах благодетеля…

P.S. И не говорите, что писать русские имена неправильно – во-первых, язык официально поддерживает любые юникодные наименования, во-вторых я русский, отчасти фанат правильного использования языков (как своего, так и английского) и для меня правильней написать русское имя, чем тужиться и изобретать при помощи “трансляторов” осмысленное английское. Тем более, никогда не напишу транслитом.

И что с того, что какой-то засранец в команде разработчиков каким-то специальным способом обработал именно имена констант (и только их)? Её и вовсе быть не должно, этой жопо-константы – где-то там речь шла про оптимизацию кода, а заинлайнить жопу предлагал ещё Roslin, как только я её написал. Пришлось .Trim() написать, чтоб отстал. А где были остальные оптимизаторы – неведомо, если жопа дожила до native-компиляции…

Прорвёмся…