Несколько дней назад корпорация Microsoft приняла решение открыть исходный код известной всем программы — «Калькулятора» из ОС Windows. Это приложение входило во все дистрибутивы ОС от Microsoft начиная с 1985 года, когда свет увидела Windows 1.0.
Microsoft использует лицензию MIT для своего ПО. Это тот же тип лицензии, что используется в .Net Core, Visual Studio Code, и MS-DOS. По словам представителей корпорации, сейчас они открывают процесс разработки для open-source сообщества. Сторонние разработчики могут предлагать новые функции и сотрудничать с инженерами Microsoft для добавления этих фич.
С течением времени Калькулятор Windows совершенствуется. Программа появилась на свет в качестве элементарного помощника для выполнения арифметических действий. Сейчас же это надежный научный калькулятор, который может использоваться широким кругом пользователей для решения весьма серьезных задач.
Программа написана на С++ и содержит более 35000 строк кода. Для компиляции проекта пользователям необходима Windows 10 1803 (или более новая) и последняя версия Visual Studio. Со всеми требованиями можно ознакомиться на GitHub.
Компания открыла код для того, чтобы любой желающий мог ознакомиться с такими технологиями Microsoft как Fluent, Universal Windows Platform, Azure Pipelines и другими. Благодаря этому проекту разработчики могут больше узнать о том, как выполняется работа по созданию тех либо иных проектов в Microsoft.
Тем разработчикам, кто планирует присоединиться к проекту, необходимо ознакомиться с требованиями и нормами, сделать это можно здесь.
Ну а с подробным анализом исходного кода Калькулятора Windows можно ознакомиться здесь, прямо на Хабре.
tormozedison
Ну вот, теперь его перетащат в ReactOS и сделают программируемым и графическим.
enabokov
Он работает на UWP. Я ожидал C#, получил нечитаемый (по сравнению с C#) С++.
tormozedison
Почитал, что за UWP. Значит, не перетащат.
xfaetas
Получается в MS не используют свой же C# даже для калькулятора.
leotsarev
C# по историческим причинам не популярен среди команды Windows
0xf0a00
Так какого же лысого они им весь мир кормят?
tyomitch
«Они»? Вы про команду Windows или про команду Development Tools?
leotsarev
Wesha
Замечательно. Братва, кто хочет поиграть в калькулятор на Xbox? :)
solovetski
Ага, с мультиплеером на сто юзеров.
CHolfield
Дэсматч в калк по сети на хололинзах (ёпт)
Wesha
Это как — проигравший делит на ноль (фаталити!)?
qw1
Проигравшего делят.
General_Failure
Но он же тогда станет стремиться к бесконечности, то есть станет бессмертным!
Groramar
Видимо Шарпей настолько хорош, что Майкрософт не использует его даже для калькулятора :)))
Groramar
Возразить есть что? Или правда глаза колет? :) Больше минусов, больше!!! Обожаю анти-кармодрочество.
sumanai
А я наоборот в десятку калькулятор от ReactOS ставлю. Ибо он лучше.
AlexanderS
А как вы настраиваете кодировку? У меня вместо русских — крякозябли.
sumanai
Ничего не настраивал, всё работает из коробки. Даже виртуальные кнопки при нажатии физических нажимаются
AlexanderS
Я только под Win7x64 запускал.
Evengard
Всё равно калькулятор из семёрки лучше! =)
Victor_koly
Вы не понимаете, самый крутой был в Windows XP. А потом ввели глупое ограничение, не дающее считать результат величиной 1010000 и более. А я так хотел посчитать на своем процессоре 250000!..
Sun-ami
Нет, калькулятор из XP лучше — в семёрке просто бесит, что для того, чтобы перевести число в шестнадцатиричный вид, или из него в десятичный, нужно переключаться из инженерного режима в режим «Программист», при этом текущий результат стирается, и теряется возможность вычислений с дробной частью!
KostaArnorsky
Звучит как идея для Pull Request или хотя бы Issue.
KostaArnorsky
Создал Issue.
Psychosynthesis
Ну, кстати да. Для меня лично единственный объективный минус это отсутствие графического переключателя режимов (инженерный, программист, etc). Если бы кто-нибудь выкатил точно такой же как системный, но всего лишь с дополнительной полоской радио-селекта режима, вынесенной из меню — скачал бы не раздумывая.
zv347
Самый лучший калькулятор был в девяностовосьмерке. У него экранные кнопки «нажимаются», когда вводишь с клавиатуры, т.е. слепой ввод облегчается. Хорошо, что и в десятке (20 лет спустя!) его можно использовать.
Max_JK
Только что проверил в 10 калькуляторе экранные кнопки тоже нажимаются при вводе с клавиатуры
zv347
Слева нажатая кнопка, справа ненажатая.
Если в Windows 10 экранная кнопка визуально меняется при вводе с клавиатуры, то это хорошо. И удивительно. Потому что в XP, Vista, 7, 8 — ничего подобного не было, а было последний раз в 98.
Сам проверить не могу, у меня Windows 10 LTSB и метро нет, а стандартный калькулятор от семерки.
spinagon
danfe
rsashka
В него даже успели накидать ишью, что под Linux не работает ;-)
enabokov
Тролли загадили ишью лист топиками вроде «деление на ноль не работает».
vladimirad
Маленький шаг для сообщества и гигантский для Микрософт.
Andy_U
Тридцать пять тысяч строк C++ кода?
EvilGenius18
Что же тут удивительного? Это ведь не высокоуровневый язык вроде JS или Python, где многое выполняется за тебя автоматически.
Хотя, в эту цифру они наверно еще xml и С# код посчитали
Serge78rus
А с каких пор C++ стал низкоуровневым? И что такого за меня автоматически выполняется в JS, что в плюсах придется писать руками?
EvilGenius18
Я имел ввиду более высокоуровневые, поскольку C++ обычно все считают более близким к железу.
А на счет того, что JS делает автоматически — управление памятью, к примеру. Да в C++ есть поинтеры, позволяющие уменьшить количество мусора, но попробуйте написать 35000 строк идеально структурированого кода без автоматического сборщика мусора. В сравнении с той же программой на JS, тут неизбежно увеличится количество кода.
Serge78rus
Честно говоря, мне трудно представить архитектуру приложение, подобного калькулятору, в котором автоматическое управление памятью сколько-нибудь серьезно уменьшило бы объем кода.
Если не считать за автоматическое управление памятью упомянутые Вами «умные» указатели, то занимаюсь этим на постоянной основе. Было бы нескромно называть свой код «идеально структурированным», но что уж точно не сильно влияет на его приближение к идеалу, так это отсутствие встроенного в язык сборщика мусора. Помимо C++, приходилось писать и на Java, и на JavaScript, и ни один из этих языков за счет наличия GC автоматически не приближал мой код к идеалу. Более того, в Java сильно не хватало так привычного по плюсам RAII, ведь ресурсы, которыми приходится управлять, не сводятся только к памяти.Groramar
Ручное управление памятью (разрушение) в более-менее структурированном коде занимает примерно 0.1% строк программы. То есть в калькуляторе примерно 35-50 строк. Можно проверить.
Groramar
С другой стороны, 35 тысяч строк — это в самом деле замного для калькулятора.
DrPass
Удивительно то, что если написать на C++ приложение калькулятора с аналогичным функционалом на чистом WinAPI, со всеми плюшками по валидации данных, поддержке разных языков и т.д., там все равно должно получиться этак на порядок меньше строк.
Wesha
Вы про код телеметрии забыли!
leotsarev
Покажете?
DrPass
Нет. Но вы зря сомневаетесь в моей способности (и вообще в способности любого среднестатистического программиста) написать калькулятор, подобный виндовому, уложившись в 3500 строк на С++ :)
leotsarev
Забыли добавить: за выходные вечерами.
FloorZ
А чо там писать?
Алгоритм сортировочной станции, работающий по обратной польской записи.
Этого хватит для любого матиматического действия
alsii
это вызов для плюсистов :-) Сделать калькулятор с теми же функциями и неотличимый внешне, но с меньшим объемом кода.
Serge78rus
Отправка телеметрии, и именно на сервера Microsoft, входит в условия задачи?
Mirn
ну что-ж начнём: я уго… кхм реализую этот функционал за 5 но… кхм тысяч строк
Serge78rus
Хотел съязвить, что половина из них — это комментарии с перечислением копирайтов, авторов и т.д. в заголовке каждого файла. Но был не прав — оказалось, что заголовок один из самых коротких, что видел на GitHub:
WRONGWAY4YOU
Обычно комментарии в таких случаях не считаются. Все современные инструменты анализа объема кода пропускают всё, что находится под комментарием, т.к. оно никак не влияет на сложность программы.
Serge78rus
Согласен, но при желании насчитать побольше можно и wc -l использовать.
enabokov
Интересно, если бы он был написан на C#, было бы меньше строк?
MonkAlex
Самый смак в телеметрии.
al_one
Вам тоже понравилась вот эта функция? :)
EvilGenius18
Т.е. если ты случаяно вставишь предыдущий скопированный текст в калькулятор (думая, что ты вставляешь скопированное число), то программа автоматически отправит этот текст в Майкрософт, здорово…
al_one
Я глубоко не копал, могу ошибаться, но похоже так и есть.
EvilGenius18
Скорее всего так и есть, ведь скопированный текст, картинки, и тп. не буду считаться валидным вставленным числом (что как раз и регистрирует
::LogInvalidInputPasted
), что автоматически выдаст ошибку, и вызовет данного логгера, который отправит телеметрию с этими 5 значениями (одно из которых «pastedExpression» — вставленное значение)al_one
Я все-таки надеюсь, что отправляют на сервер не всегда, а при определенных условиях, например при креше приложения.
KostaArnorsky
А если посмотреть на LogTelemetryEvent
то можно удивить, что это все-лишь Event Tracing, но ведь это скучнее, чем Microsoft следит за всеми. Я думаю, что если покопаться, то окажется, что по умолчанию он вообще отключен и его нужно специально включать для отладки.
al_one
А как по-вашему выглядит «настоящий» код отправки телеметрии? Могу предположить, она реализована именно как event tracing, где событию, относящемуся к телеметрии, ставится соответствующий флаг (MICROSOFT_KEYWORD_TELEMETRY). А системный сервис уже решает, что делать с таким событием на основе своих настроек.
Опция SEND_TELEMETRY включается для билдов для «production configuration to be released to the Store and the Windows image», т.е. как раз для релизов в официальном магазине и в дисках с windows.
rogoz
terrier
Неплохо.
Объявляем переменную:
Затем сравниваем ее значение со строкой:
Microsoft — запредельный профессионализм сотрудников и традиционно высокое качество!
Студентам на начальном курсе C/C++ за такое двойки ставят, а для них норм!
Psychosynthesis
Ну вообще забавно, да, весьма корявая конструкция. Можно более подробно в каком файле вы это нашли? А то вообще не очень понятно, что именно тут хотели сделать. Насколько я понимаю, это такая корявая попытка понять разрядность текущей системы (подозреваю, что в x64 LOCALE_NAME_MAX_LENGTH будет больше чем L«en-US», хотя не уверен, поскольку не знаю правил типизации для компилятора, используемого в VS).
В общем, хотелось бы понять, что конкретно вам не нравится. Вы думаете это опечатка (я про L перед строкой) или вас в принципе смущает корявый способ преобразования типа сей строки и использование «магической константы» «en-US»?
OldFisher
Здесь вместо сравнения строк по значению сравниваются указатели (на объявленный массив и на строковую константу, которая тоже массив). Указатели эти, понятное дело, не совпадут никогда.
Psychosynthesis
А, я чёт не обратил внимания на квадратные скобки… Тогда всё ещё более коряво, согласен.
А разве L, перед этой константой, никак не повлияет на способ передачи этого массива в оператор сравнения?Впрочем, если ранее в коде не было перегрузки оператора "==" для массивов, тогда в любом случае будет выполнено сравнение с указателем…
0xd34df00d
Маловероятно, что она ранее была, так как перегружать оператор сравнения для типов вроде указателей или массивов нельзя.
Psychosynthesis
Можно подробнее? Впервые об этом слышу.
0xd34df00d
Отсюда.
Psychosynthesis
А, я понял, вы имели ввиду, что нельзя перегружать операторы для встроенных типов вообще, без обёртки их в класс.
Но тут как раз вот это объявление:
wchar_t m_resolvedName[LOCALE_NAME_MAX_LENGTH]
Внутри класса, поэтому внутри этого же класса может быть перегружен оператор сравнения для это типа. По вашей же ссылке в Restrictions нет ничего про "==".
0xd34df00d
Смотрите не на то, где объявлен
operator==
, а на то, какие у него аргументы. И хотя бы один аргумент должен быть классом либо перечислением.Psychosynthesis
Upd… не, я чёт не так сделал, походу.
0xd34df00d
(Отвечая на ваш исходный коммент)
Да, если один из аргументов имеет тип вашего класса, то такой оператор написать можно. Только, увы, механизм выбора перегрузки гарантирует, что воображаемый встроенный оператор сравнения для указателей выиграет.
Psychosynthesis
Ну я согласен, что в исходном варианте, который обсуждается практически гарантированно будет сравнение указателей, перегрузка оператора сравнения это достаточно редкий кейс, насколько я могу по своему опыту судить.
Мне хотелось в деталях разобраться просто.
0xd34df00d
Ну, для value-подобных объектов всякие операторы сравнений перегружаются регулярно, без этого некуда.
qw1
wchar_t m_resolvedName[100]
— не объект класса).poison85
Невыполнимое условие. А внутри него можно написать много всякого разного. Индусский код же.
terrier
Собственно, код взят отсюда.
В массив m_resolvedName кладется (видимо) название локали, после чего в функции GetEnglishValueFromLocalizedDigits проводится вышеуказанная проверка — если мы уже в американской локали, тогда конструируем строку как есть, иначе начинаем ковырять переданную строку.
Проблема, однако, в том, что само имя m_resolvedName — это не строка, а указатель. Сравнение указателя со строковым литералом, как мне подсказывает статический анализатор — unspecified behavior. Здесь правильно воспользоваться семейством функций *str(n)cmp.
Psychosynthesis
terrier
Ну, в смысле где-то между объявлением переменной и вызовом функции с этой проверкой туда кладется имя локали.
Psychosynthesis
А зачем вообще имя локали кладётся в массив? Не логичнее было бы для этой цели строку использовать, и сравнивать потом уже эту строку со строкой, чтобы такой огород не городить?
terrier
Да, конечно, логичнее. Почему автор так не сделал и ни один из его инструментов разработки ему не подсказал — загадка.
Вообще, понятно, что имя локали лучше положить в переменную отдельного типа LocaleName, ведь мы не любую строку туда можем запихать — как минимум есть ограничения по длине, уверен много других. Но автор поленился — и вот.
aram_pakhchanian
Ну так код компилировали с /w3. Кто-то уже попробовал с w/4 и компилятор выдал предупреждение на эти строки.
SergeyMax
Serge78rus
Это строка в C. Конечно, можно и в C++ использовать строки в стиле C, но зачем?
Welran
Видимо потому что функции по получению имени локали из API используют C-style строки. А потом их пытаются сравнить как std::string, что естественно не срабатывает.
Serge78rus
Windows API, как и многие другие API, весь написан в C-style. Но это не мешает программистам, работающим на C++, преобразовывать полученные от него данные в более высокоуровневые типы и далее, оперируя уже только ими, избегать подобных «детских» ошибок.
Psychosynthesis
Да? И что, методы типа empty() или clear() для такого массива тоже работают?
questor
Вангую, что скоро мы увидим статью от Andrey2008 на тему проверки калькулятора при помощи PVS-Studio.
qw1
Вангую, что не скоро (либо совсем не увидим), т.к. калькулятор написан на MC++ (managed C++/CLI), который синтаксически не совместим с C++, т.е. анализатор упадёт уже на создании AST.
Andrey2008
PVS-Studio. Поддерживаемые языки и компиляторы:
lostpassword
Так увидим?)
Andrey2008
Коллега уже в процессе написания заметки.
Andrey2008
А вот и статья про проверку калькулятора.
lostpassword
Вот это оперативность!)
NeocortexLab
Ссылка на MS
Equality operators can compare pointers to members of the same type. In such a comparison, pointer-to-member conversions are performed.
В данном случае имеем случай с same type (wchar_t)
tyomitch
В данном случае не member, так что ваша цитата ни при чём.
Wesha
Слово "индиоты" не из ниоткуда появилось...
gasizdat
Ну значит я зря удивлялся почему в стандартном калькуляторе 2 + 2 * 2 = 8. Теперь все ясно.
agranom555
Калькулятор в простом режиме вычисляет последовательно. Поэтому и так
gasizdat
Ну, это слегка противоречит правилам математики и здравому смыслу. Мало того, переключаясь между другими режимами, где приоритетность математических операторов все-таки соблюдается, не ожидаешь от стандартного режима такой подлости.
SergeyMax
Возьмите в руки аппаратный калькулятор, узнаете много нового)
alan008
На научных калькуляторах порядок действий соблюдается, а иногда еще и скобки есть. На бухгалтерских — вряд ли соблюдается.
gasizdat
Вот я не поленился и взял в руки Citizen LC-110N. Это самый простой из тех, что имеются у меня. Ничего нового не узнал. Калькулятор не соблюдает приоритет операций, но при этом ведет себя честно, в отличие от сабжа. Так, если ввести 2 + 2, а затем нажать на *, то он сразу посчитает промежуточный результат и отобразит 4. Т.о. четко видно, что следующее действие будет выполнятся над 4. И результат будет закономерным — 8. «Стандартный» же калькулятор просто наглым образом врет, позволяя полностью записать выражение 2+2*2 и при этом получить неверный с математической точки зрения результат.
SergeyMax
sumanai
В Андройде так же, только в итоге выходит 6.
rogoz
UMAX
Ой, извините за оффтоп, а как он у вас на русском языке?
У меня русская 10-ка (уже 1809), но все «стандартные» проги винды на английском.
Demon_i
У Вас язык интерфейса русский. Стор (и прочая Метро братия) Тянет язык интерфейса приложений. В настройках языковых параметров переключите все на русский. В принципе, «метод ввода по умолчанию» можно оставить на английском, если программируете. Хотя лучше поставить галку запоминать для каждого приложения.
UMAX
Спасибо!
WayMax
toster.ru/q/472164
UMAX
Спасибо!
Stepan555
Кому это надо? :-)
caveeagle
В комментарии призывается Andrey2008 — как раз для его PVS-студии развлечение, ну и мы посмеёмся.
Andrey2008
Демоны призваны и выполняют вашу волю.
SkyHunter
> Компания открыла код для того, чтобы любой желающий мог ознакомиться с такими технологиями Microsoft как Fluent, Universal Windows Platform, Azure Pipelines и другими.
Без этого уже калькулятор никак не написать?
aram_pakhchanian
Наверное, на нем студенты практиковались.
Wesha
"При изготовлении часов использованы самые современные технологии: сварка взрывом, клёпка газом, сборка трезвым." ©
OldGrumbler
Ага, «Позолоченный корпус
куркучасов оцинкован вольфрамом» )))neit_kas
М.б. понесло? Было как-то. Писал одну прогу для себя. Работы там было на 2-3 дня зевая. Но это же скучно. И понесло меня в абстракции: всякие менеджеры, какие-то зачатки недоСОА, хитрая сигнальная библиотека на C++ шаблонах (её м.б. как-нибудь даже на хабр вытащу, если допилю). В общем, пилил я это всё месяца два, да так и не допилил.
leotsarev
Вообще-то нет
leotsarev
Расскажите, как бы вы написали калькулятор без Azure Pipelines например. Вручную бы собирали и в релиз добавляли?
selivanov_pavel
*минутка рекламы калькуляторов*
Открытый кросс-платформенный speedcrunch умеет всё то же самое и даже больше, как-то обходясь без сбора телеметрии.
enabokov
Ну если пошла такая пьянка — писать выражения вручную, то тогда уже надо ставить Jupyter, который поддерживает разные ядра (языки) с разными прилагающимися библиотеками. Фактически это учебный стандарт.
selivanov_pavel
Ну это уже другого класса инструмент, так можно и до Maxima/Mathcad докатиться :)
Вручную набрать быстрее, чем кликать по кнопочкам, особенно если для авто-дополнение для функций и констант работает.
Andy_U
А просто набрать в строке поиска Google? Например 2+2*2? Кстати — ответ 6.
Groramar
Есть еще wolframalpha:
www.wolframalpha.com
balsoft
Вы забыли про самый лучший из всех калькуляторов — qalculate (основанный на qalc), Открытый, кроссплатформенный,…
roodz
О да, он чертовски хорош.
Хоть старый добрый Numlock Calculator 3.2 и всплывает быстрее, но тут такая мощь…
balsoft
У меня qalc прикручен к запускалке albert, и поэтому открывается мгновенно. Позволяет делать всё, что может понадобиться вычислительно-считательного и даже немного больше.
sumanai
MTyrz
Так он небось всю GTK с собой в гости ведет?
sumanai
Естественно.
0xd34df00d
Ну так то Windows.
Правда, 2.5 мегабайта на калькулятор — всё равно перебор, даже если там в комплекте красивые начертания для всяких тангенсов-котангенсов.
sumanai
У вас просто GTK уже стоит, вот он его и не посчитал. У меня под WSL всё намного печальнее, правда лишь потому, что ещё иксы тянутся со всеми прибабахами.
0xd34df00d
Ну, gtk — достаточно широко используемая библиотека, чтобы считать, что она почти наверняка уже есть. Вон, даже у меня есть, несмотря на
USE="-gtk -gtk2 -gtk3"
.danfe
Ivnika
Мне как почти полному нубу в программировании всегда было интересно- почему нажатие кнопок в этом гадском калькуляторе не всегда срабатывало? Причем это не зависило от мощности ресурсов.
morgot
При каких вводных данных это было и на какой ОС?
Чтобы программист мог найти ошибку, он должен ее сначала воспроизвести. Копаться в 35к строках чужого кода сложно, намного проще запустить в отладчике.
AngReload
Зря кто-то чуваку минус поставил, есть непонятные траблы с этим калькулятором. Например, Win 10 1809, после смены раскладки клавиатуры калькулятор перестаёт реагировать на нажатие Backspace. Но на нескольких других компах это не воспроизводится.
Впрочем, мельком взглянув на исходники, у меня уже пропало всякое желание в этом разбираться.
Ivnika
Версии виндовс от 97 до 10
проявляется в несрабатывании кнопок калькулятора при клике на них мышкой. Клик быстрый. Визуально видно что кнопка нажимается, но на экране нет отклика (не появляется цифра)
4umak
Возможно mouseup происходит уже за пределами кнопки? Тогда она не активируется, да, нажатие в винде срабатывает именно на up, а не на down. Можно зажать мышью кнопку, держать, увести курсор с кнопки, отпустить, и ничего не произойдёт.
sumanai
Полезная кстати фича, когда понимаешь, что нажал не ту клавишу, но отжать ещё не успел.
dimonoid
Зачем писать калькулятор когда можно использовать Python или R? Там есть куда больше возможностей для вычисления чего угодно, даже тех формул которые ещё не существует.
Zuy
Потому что эта куча возможностей большинству не нужна, а нужен аналог самого обычно калькулятора, к ктоторому люди привыкли в обычной жизни. Люди хотят видеть и нажимать ровно теже кнопки которые они нажимают на обычном калькуляторе и никого не волнуют функции которых не существует, нужны те, которые уже существуют сотни лет и чтобы пользоваться было так же, как и в докомпьютерную эпоху.
Ну и потом, калькулятор, который был до Win10, просто удобный. Как вы на питоне переведете число из десятичной системы в шестнадцатиричную, а потом мышкой битики пощелкаете, чтобы увидеть как оно меняется? Один клик мышкой по биту позволяет изменить его состояние и увидеть как изменилось само число. Никакой python или R такой фичей не похвастается.
Dovgaluk
Если сотни лет, то умножать придется в столбик.
dimonoid
Windows калькулятор тоже графики строить умеет одной командой? А посчитать сумму серии?
Desmos прямо никто не использует вместо калькулятора? Wolfram Alpha? Symbolab?
Покликать мышкой по битикам не оправдание, этим мало кто вообще пользуется (только для понимания принципа бинарных чисел?)
Я просто пытаюсь объяснить что именно Windows калькулятор не умеет почти ничего, что возможно в вышеперечисленных продуктах.
Почему на хабре так Python не любят? Он мягкий и пушистый особенно для единоразовых вычислений. Также имеет историю и возможность сохранить формулы вычисления на потом, и сохранить все это в виде программы.
DrPass
Так с этим никто не спорит. Ещё калькулятор Windows вам не защитит сеть от кибератак, не загрузит свежие фоточки в облако и не проведет анализ семантического ядра сайта.
Но зато он похож на обычный калькулятор. Вы можете набрать на клавиатуре, или даже мышкой, выражение и увидеть результат, ничего вообще не зная про командные строки, как скачивать и устанавливать Питона и т.д.
Это ведь важнее, чем возможность сохранять формулы вычисления на потом и т.д. (я без сарказма). Сложных навороченных агрегатов с побочной функцией «могу посчитать выражение» немало, и Питон не первый, и не последний из них. Калькулятор крут тем, что он простой и понятный всем (ну, по крайней мере, простой в тех инкарнациях, которые без телеметрии и 35000 строк счастья).
tendium
А я так надеялся, что это будет калькулятор из семерки. Его код, мне почему-то думается, что был бы несколько более элегантным.
lany
В старой утечке исходников Windows 2000 тоже был ещё старый калькулятор. Любопытно, что эти исходники лежат на гитхабе. Интересно, в курсе ли Микрософт?..
Serge78rus
Там sloccount насчитывает всего 3065 строк. Это явно недостаточно для таких заявлений, как:
lany
Ну так это почти двадцать лет назад было. С тех пор технологии калькулирования-то сильно шагнули вперёд!
0xf0a00
По моему гениально, выкладываем код стандартных приложений. Сообщество их приводит в порядок, обновленные приложения набиваем телеметрией и выкладываем с новым апдейтом венды, не забывая взять денег за лицензию.
tyomitch
Вы описали традиционную бизнес-модель Red Hat :-)
Stepan555
Я так и не понял в связи с чем такой ажиотаж. Когда в «детстве» я писал на дельфях, такую поделку сделал бы за часок и никто бы этому не удивился. Там кто-то увидел какие-то гениальные откровения в коде?
Groramar
Так это в детсве и на делфях. А сейчас для этого нужно 35 тысяч строк, отдел программистов и тестировщиков :)))
leotsarev
Ещё один. Давайте за два часа. Напишете?
Stepan555
Для этого мне надо найти машину с Виндусом, найти где-то дистриб Дельфей, установить и всё для того, чтобы доказать вам, что я умею класть кнопочки на форму и писать простые обработчики? Мммм, пожалуй, мне это не интересно.
0xf0a00
Нет никаких проблем накидать калькулятор на Delphi.
leotsarev
Ждем статью. За два часа аналог калькулятора винды :-)
Stepan555
не ждите, откройте Дельфи для чайников и делайте
xn--i1abbnckbmcl9fb.xn--p1ai/статьи/524913
ds-release.ru/borland-delphi-7/kalkulyator-na-delphi
ну и так далее:
yandex.ru/search/?text=delphi%20calculator&clid=2233627&lr=213
leotsarev
Немного намекаю на то, что может вы поторопились с оценкой в 1 час? Это нормально для разработчиков, мы всегда так делаем. Сейчас время подумать и оценку изменить :-)
А то бросаться выводами, не подумав, недостойно инженера. Вот сейчас например вы сделали вывод, что я не знаком с Delphi. Зачем? :-)
Stepan555
даже если я и поторопился и это будет не 1 час, а 1 вечер, это всё равно не материально и не сравнимо с 35000 строк и человеко-годами, затраченными MS. И никто так и не ответил мне на мой изначальный вопрос — в связи с чем такой ажиотаж и в чём ценность этого кода, щедро предоставленного МS?
А вам я просто ответил, что если вам интересно как на Дельфи сделать калькулятор, то всё уже давно сделано 1000 раз, не надо ждать 1001 статьи на ту же тему. Вашего уровня знакомства с Дельфи я неимею чести знать.
leotsarev
Сделать на Дельфи калькулятор так же, как и везде: взять и написать :-)
Вопрос-то не в этом. Вопрос в том, что вы даёте совершенно нереалистичные оценки с умным видом. Зачем?
Вот сейчас вы написали про человеко-годы. На основании чего?
Вы понимаете разницу между написанием прототипа и законченным программным продуктом?
dim2r
а как же кровавый энтерпрайз, аджайл, совещания? чем занять толпу менеджеров? :):):):):)
Groramar
Скорее всего в два часа уложусь. Если на Лазарусе, то будет еще и кросс-платформенный. В отличие от :)
leotsarev
Ждем статью. За два часа аналог калькулятора винды :-) Кроссплатформенный.
Alexufo
сделают все что угодно для отвода глаз, лишь бы не выкладывать пинболл.
cyber_roach
Думаю причина в этом: habr.com/ru/post/163105
Кстати я бы тоже посмотрел на код игрушек MS, пусть даже бы и только новых, последний сапер на UWP был неплох.
cb_ein
Как сейчас помню, что окончательно переехал на unix, когда калькулятор в чистой свежеустановленной win 10 вдруг выбросил исключение при запуске.
Alexufo
вы еще не видели как калькулятор предлагал оценить его звездочками после некоторой эксплуатации.
DVoropaev
не слишком ли много?
Alexufo
в то время премии платили за «сколько поработал».
itconsulting
Вспомнилось из юности, когда калькуляторы были в новинку и их только недавно разрешили использовать на «предприятиях советской торговли и общественного питания» — но только после тестирования: необходимо было умножить число 12345679 (без восьмёрки!) на любое число из строки таблицы умножения для девятки (9, 18, 27, 36, 54 и т.д.). Если в результате получалось число вида 111111111, 222222222, 333333333 — то это должно было документироваться и калькулятор допускался к использованию.
ainoneko
Мне помнится, был когда-то «неофициальный калькулятор от MS» (из пакета «PowerToys»), который ещё и графики рисовал.
В нём доблестные программисты вычисляли синус разложением в ряд, не приводя аргумент к небольшому диапазону.
DerRotBaron
Теперь понятно, почему встроенный калькулятор Windows 10 просит оценить себя в магазине приложений.
MacIn
Кстати, а XPшный в десятке будет работать?
SvyatoslavMC
Будет, наверное. Я до сих пор играю в Пинбол, скопированный из дистрибутива с XP :D
sumanai
Используйте из ReacOS, он практически идентичен калькулятор из XP и имеет давнюю историю открытого исходного кода.
SvyatoslavMC
Всех, кто упомянул PVS-Studio и не верил, что проверка нестандартного C++ возможна, приглашаю к прочтению и обсуждению!
Подсчитаем баги в калькуляторе Windows (хабрапост).
perfect_genius
Вот бы они выпустили исходники Пейнта — багов там целый список можно набрать.
sumanai
Боюсь если и откроют, то Paint3D.