Графики в Windows Calculator
Графики в 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 причины, почему эта хрень не работает и как индусы опять обосрались с итераторами:
- Вместо нормальных, математически обоснованных методов, типа метода золотого сечения или Ньютона, индусы запилили убогий перебор по иксу, как будто в школе не учились и не умеют в итераторы.
- Всё считается в одном потоке, и пока калькулятор ебётся с тангенсом, вместо того чтобы заюзать thread pool, интерфейс каменеет намертво. Привет, GIL головного мозга и проблемы race condition, и пока, нервные клетки! И где тут, спрашивается, нормальный event loop?
- UWP — это, конечно, хорошо для сферического коня в вакуме, но когда у тебя каждый чих обёрнут в десять слоёв абстрактного говна и интерфейсов ради интерфейсов, то не удивляйся, что всё тормозит, течёт, падает, а потом ещё и сегфолтится, оставляя после себя кернел паник. Вместо кода — лапша из фабрик, визиторов, тонн шаблонного бойлерплейта и прочей ереси, понятной разве что самим индусам, которые наверняка юзают либы без документации и тестов.
В качестве контрольного в голову, чтобы показать как надо писатб с нуля нормальные либы, Пётр Turbo написал свой построитель графиков на Паскале, который, внезапно, оказался быстрее и адекватнее выпердыша Microsoft, несмотря на то, что у него под капотом обычный интерпретатор на switch/case, а не модный JIT. Вот вам и прогресс, мать вашу!
Что в итоге[править]
- Microsoft: Положила болт на проблему, как будто так и надо, забив на юзеров и надеясь что всё само починится.