Графики в Windows Calculator

Материал из Неолурк, народный Lurkmore
Перейти к навигации Перейти к поиску

Графики в Windows Calculator — это не просто баг, это, блджад, эпик вин индусского кодинга и наглядное пособие по превращению UWP (Universal Windows Platform то есть кроссплатформенная ABI-совместимая помойка) в УГП (Унылое Говно Платформу). Если вы когда-нибудь хотели увидеть, как тангенс разрывает пердаки, а велосипедная асинхронщина с костылями вместо thread pool ебёт мозги, то добро пожаловать в дивный мир Windows Calculator, очередной пример торжества NIH синдрома.

Краткая история криворукости[править]

В далёком 2019 году, когда трава была зеленее, а Билл Гейтс ещё не чипировал население, корпорация добра выкатила исходники Windows Calculator на GitHub под MIT лицензией. Типа, смотрите, какой у нас опенсорс, мы не жадные, пользуйтесь, обмазывайтесь! Написано сие чудо было на C++, с использованием UWP — модной, молодёжной, но, как оказалось, крайне ебанутой технологии, от которой у нормальных кодеров волосы встают дыбом, а глаза наливаются кровью из-за постоянного желания переписать это на нормальных async/await вместо ублюдских Task.

Потом, видимо, какой-то студент-практикант, насмотревшись на monkey patching от старших товарищей, решил, что негоже калькулятору без графиков жить, и прикрутил туда эту фичу, через жопу и с костылями да еще и переименовав Y в зависимой переменной на X, потому что можем. Получилось… ну, как всегда у Microsoft: через жопу и с костылями, натянув сову UWP абстракций на глобус математики.

В чём соль[править]

Наш герой, Пётр Turbo, небритый и, вероятно, не очень трезвый обзорщик всякой IT-хтони, решил потыкать палкой свой любимый deprecated WinAPI в этот шедевр и обосрался, поняв, что надо звать санитаров из дурки имени Страуструпа. Оказалось, что построить график сраного tan(10*x) — это вам не хухры-мухры, а непосильная задача для этой поделки из-за кривого парсера выражений и отсутствия нормального AST. Калькулятор, вместо того чтобы рисовать график, начинает пердеть, тужиться, зависать, уходить в deadlock и вообще вести себя как шлюха на последнем издыхании.

Петя, не будь дурак, посмотрев дизассемблированный код решил разобраться, в чём же траблы, и вскрыл пациента, попутно найдя там пару мест где не хватает synchronized. Внутренности калькулятора ожидаемо оказались наполнены говнокодом, кривыми велосипедами и уродскими костылями, причём квадратными, написанными джунами после курсов по говнокодингу.

Вот вам ТОП-3 причины, почему эта хрень не работает и как индусы опять обосрались с итераторами:

  1. Вместо нормальных, математически обоснованных методов, типа метода золотого сечения или Ньютона, индусы запилили убогий перебор по иксу, как будто в школе не учились и не умеют в итераторы.
  2. Всё считается в одном потоке, и пока калькулятор ебётся с тангенсом, вместо того чтобы заюзать thread pool, интерфейс каменеет намертво. Привет, GIL головного мозга и проблемы race condition, и пока, нервные клетки! И где тут, спрашивается, нормальный event loop?
  3. UWP — это, конечно, хорошо для сферического коня в вакуме, но когда у тебя каждый чих обёрнут в десять слоёв абстрактного говна и интерфейсов ради интерфейсов, то не удивляйся, что всё тормозит, течёт, падает, а потом ещё и сегфолтится, оставляя после себя кернел паник. Вместо кода — лапша из фабрик, визиторов, тонн шаблонного бойлерплейта и прочей ереси, понятной разве что самим индусам, которые наверняка юзают либы без документации и тестов.

В качестве контрольного в голову, чтобы показать как надо писатб с нуля нормальные либы, Пётр Turbo написал свой построитель графиков на Паскале, который, внезапно, оказался быстрее и адекватнее выпердыша Microsoft, несмотря на то, что у него под капотом обычный интерпретатор на switch/case, а не модный JIT. Вот вам и прогресс, мать вашу!

Что в итоге[править]

  • Microsoft: Положила болт на проблему, как будто так и надо, забив на юзеров и надеясь что всё само починится.
03ef4f7db0cccdf39bf013566aed31bd.jpg Системы, без которых машина просто откажется работать
СистемыAndroidDOSFreeBSDHaikuЛинуксMenuetOSMacOS (OS X) / Хакинтош / iOSOS/2ReactOSWindows / ВиндаРусОСФантом ОСUnixHarmony OSWindows vs. LinuxАстра ЛинуксMATEKaiOSChimbalixIOS 18WinGetThe Amnesic Incognito Live SystemTemple OSGrapheneOS
СредыGNOMEGNU EmacsKDEЛинус Торвальдс vs x86 64SELinuxWindows UpdateИгры из репозиториевТерминалОптимизация WindowsПасьянс КосынкаEnd of 10
ЛюдиБалмерГенерал ФейлорПоттерингСтоллманТорвальдсФолькердингРуслан КармановRealme (компания)
Дистрибутивы LinuxArchDebianFedoraFinnixGentooLFSUbuntu (BolgenOS) • СлакаUncom OSTiny10Tiny11Дешёвые ключи для Windows
Версии виндыWindows 95Windows 98Windows 2000Windows XPWindows VistaWindows 7Windows 8Windows 10Windows 11Windows Phone 7Windows Phone 8ГовносборкиWindows MEWindows ШкольникГрафики в Windows CalculatorKasperskyOSQuick machine recoveryBypassNRO
ПользователиАдминБздун • Виндузятник • КрасноглазикЛинуксоидЯблочникФайл подкачки
Площадки/s/LORru macru.os.cmpstoplinux.org.ru
Мемы/dev/null • BSD, not LSD • GIFGNOME vs. KDEMac vs. PCOS-tanrm -rfSystem32TRUE-DEATH-PRIMITIVE-LINUX-MITOLLWindows vs LinuxБубенВендекапецГномикиДаунгрейдЕсли бы…Ждём ебилдовКЛБМаздайПатчить KDE2 под FreeBSDПереустановка WindowsПриборчикРаспечатать лицензию на ЛинуксTuxТупые свитчерыФениксНе работай под рутомБлокировка Windows в РоссииОСВзлом Windows через MetasploitЭффект Пьюдипая
Достойные упоминанияAmigaСтарая копипаста:ШindowsЛинуксоидное ХанжествоСкотный Двор имени Линуса Торвальдса