Microsoft выложила исходный код своего калькулятора на GitHub
Компания Microsoft открыла исходный код «Калькулятора», который входит в состав стандартных программ операционной системы Windows, и опубликовала его на GitHub. Кстати, если вы не знали (или забыли), GitHub тоже принадлежит софтверному гиганту. Наряду с исходным кодом, Microsoft также выложила данные о тестовых сборках приложения и «дорожную карту» развития своего продукта.
Вы наверняка спросите, зачем Microsoft понадобилось делать исходный код калькулятора открытым? Во-первых, компания не раз заявляла о лояльном отношении к Open Source, периодически публикуя код своих программ. Во-вторых, она заявила о желании создать более удобный пользовательский интерфейс калькулятора, воспользовавшись помощью сообщества. Теперь любой желающий может внести изменения в код программы, чтобы её улучшить. При этом Microsoft будет оценивать новые пользовательские функции и изменения интерфейса прежде, чем внедрить их в калькулятор.
Кроме того, исходный код калькулятора также упростит разработчикам задачу по созданию собственных приложений, а сообщество может участвовать в обсуждениях будущих версий калькулятора. В прошлом году Microsoft уже открыла исходный код оригинальной версии File Manager, созданного ещё в 90-х годах, чтобы он мог работать в Windows 10, а недавно компания передала 60 тыс. патентов на различные технологии в собственность OIN, которая обеспечивает юридическую защиту Linux.
Windows калькулятор теперь Open-Source
Мы рады рассказать, что на прошлой неделе наш Windows Calculator стал OpenSource. Сейчас он доступен на GitHub по лицензии MIT. Это включает в себя исходный код, структуру сборки, модульные тесты и структуру продукта. Наша цель — создать еще лучший продукт в партнерстве с сообществом. Мы поощряем ваши свежие идеи и активное участие в определении будущего Windows Calculator.
Как разработчики, если вы хотите узнать, как работают различные части приложения «Калькулятор», легко интегрировать логику или пользовательский интерфейс «Калькулятор» в свои собственные приложения или внести непосредственный вклад во что-то, что есть в Windows, теперь вы можете это сделать. Калькулятор будет продолжать проходить все обычные процессы тестирования, проверки соответствия, безопасности, качества и проверки внутренних данных, как это происходит со всем остальными приложениями. Вы можете узнать больше об этом в документации на GitHub.
Совместная разработка
Помимо повторного использования и адаптации кода в ваших собственных приложениях, каждый может принять участие в разработке калькулятора Windows. Вовлечься просто. Проект “clone-and-go”, и его развитие будет осуществляться в соответствии со стандартным процессом GitHub. На всех этапах разработчики могут внести свой вклад:
Обучение
Изучение кода калькулятора — отличный способ узнать о новейших технологиях Microsoft, таких как универсальная платформа Windows, XAML и Azure Pipelines. Благодаря этому проекту разработчики могут извлечь уроки из полного цикла разработки Microsoft, а также повторно использовать код для создания собственных продуктов. Это также отличный пример создания Fluent app design. Чтобы сделать это еще проще, мы будем предоставлять пользовательские элементы управления и расширения API, которые мы используем в калькуляторе и других приложениях, для таких проектов, как Windows Community Toolkit и Windows UI Library.
Мы рады пригласить всех вас в команду Windows Calculator! Чтобы начать, заходите в проект Windows Calculator на GitHub.
Подсчитаем баги в калькуляторе Windows
Введение
Калькулятор Windows наверняка знаком каждому пользователю этой операционной системы и не требует особого представления. Теперь же любой пользователь может изучить исходный код калькулятора на GitHub и предложить свои улучшения.
Общественность, например, уже обратила внимание на такую функцию:
которая логирует текст из буфера обмена и, возможно, отправляет его на серверы Microsoft. Но эта заметка не об этом. Хотя подозрительных примеров кода будет много.
Мы проверили исходный код калькулятора с помощью статического анализатора PVS-Studio. Так как код написан на нестандартном C++, многие постоянные читатели блога анализатора усомнились в возможности анализа, но это оказалось возможным. C++/CLI и C++/CX поддерживаются анализатором. Некоторые диагностики выдали ложные предупреждения из-за этого, но ничего критичного не произошло, что помешало бы воспользоваться этим инструментом.
Возможно, вы пропустили новости и о других возможностях PVS-Studio, поэтому хочу напомнить, что кроме проектов на языках C и C++, можно проанализировать код и на языках C# и Java.
Про неправильное сравнение строк
V547 Expression ‘m_resolvedName == L«en-US»’ is always false. To compare strings you should use wcscmp() function. Calculator LocalizationSettings.h 180
Я просматриваю отчёты анализатора, сортируя их по возрастанию номеров диагностик, и предупреждение на этот код было самым первым в списке, и очень удачным.
Дело в том, что здесь неправильно сравниваются строки. Получилось сравнение указателей вместо значений строк. Сравнивается адрес массива символов с адресом строкового литерала. Указатели всегда неравны, поэтому условие всегда ложно. Для правильного сравнения строк следует использовать, например, функцию wcscmp.
Кстати, пока я пишу эту статью, в заголовочном файле массив символов m_resolvedName превратился в полноценную строку типа std::wstring. И теперь сравнение работает правильно. К моменту, когда вы будете читать эту статью, скорее всего, многие другие ошибки тоже будут исправлены благодаря энтузиастам и таким исследованиям, как это.
Утечка памяти в нативном коде
V773 The function was exited without releasing the ‘temp’ pointer. A memory leak is possible. CalcViewModel StandardCalculatorViewModel.cpp 529
Мы видим указатель temp, ссылающийся на массив из 100 элементов, под который выделена динамическая память. К сожалению, память освобождается всего в одном месте функции, во всех остальных местах возникает утечка памяти. Она не очень большая, но это всё равно ошибка для C++ кода.
Неуловимое исключение
V702 Classes should always be derived from std::exception (and alike) as ‘public’ (no keyword was specified, so compiler defaults it to ‘private’). CalcManager CalcException.h 4
Анализатор обнаружил класс, унаследованный от класса std::exception через модификатор private (модификатор по умолчанию, если ничего не указано). Проблема такого кода заключается в том, что при попытке поймать общее исключение std::exception исключение типа CalcException будет пропущено. Такое поведение возникает потому, что приватное наследование исключает неявное преобразование типов.
Пропущенный день
V719 The switch statement does not cover all values of the ‘DateUnit’ enum: Day. CalcViewModel DateCalculator.cpp 279
Подозрительно, что в switch не рассмотрен случай с DateUnit::Day. Из-за этого в календарь (переменная m_calendar) не добавляется значение, связанное с днём, хотя метод AddDays у календаря присутствует.
Подозрительные сравнение вещественных чисел
Избыточность
Переменная op уже сравнивалась со значением NumbersAndOperatorsEnum::None и дублирующую проверку можно удалить.
Это гигантское условное выражение изначально имело ширину 218 символов, но я разбил его на несколько строк для демонстрации предупреждения. А переписать код можно до такого короткого и, главное, читабельного варианта:
V524 It is odd that the body of ‘ConvertBack’ function is fully equivalent to the body of ‘Convert’ function. Calculator BooleanNegationConverter.cpp 24
Анализатор обнаружил две функции, которые реализованы одинаково. По названиям функций Convert и ConvertBack можно предположить, что они должны выполнять разные действия, но разработчикам виднее.
Заключение
Наверное, каждый открытый проект от Microsoft давал нам возможность показать важность применения методологии статического анализа. Даже на таких маленьких проектах, как калькулятор. В таких крупных компаниях, как Microsoft, Google, Amazon и других, работает много талантливых программистов, но они такие же люди, которые делают ошибки в коде. Применение инструментов статического анализа кода — один из хороших способов повысить качество программ в любых командах разработчиков.
Проверь свой «Калькулятор», скачав PVS-Studio и попробовав на своём проекте. 🙂
Если хотите поделиться этой статьей с англоязычной аудиторией, то прошу использовать ссылку на перевод: Svyatoslav Razmyslov. Counting Bugs in Windows Calculator
Ищем баги, готовим фиксы: Microsoft открыл исходный код калькулятора
Компания Microsoft выложила в открытый доступ исходный код калькулятора. Разработчики заявили, что таким образом демонстрируют свою открытость и хотят улучшить продукт.
Необходимый инструмент
Калькулятор – одно из немногих приложений, которое вошло во все дистрибутивы Windows. Оно появилось в Windows 1.0 в 1985 году и до версии для Windows 10 претерпело значительные изменения.
Изначально калькулятор позволял выполнять лишь простые арифметические действия. Сейчас он поддерживает отдельные режимы для инженеров и программистов, так что нередко используется для решения сложных задач.
Открытый код
Исходный код проекта доступен на GitHub. В нем – единственная ветвь и 106 обновлений (коммитов).
Проект содержит более 35 тыс. строк кода. Чтобы скомпилировать его, нужна последняя версия Visual Studio и Windows 10 не старше версии 1803.
Ближе к пользователям
В Microsoft отметили, что калькулятор станет первым шагом в открытии процесса разработки продуктов компании для open-source сообщества. Все желающие могут искать в коде баги, предлагать решения, а также сотрудничать со специалистами Microsoft по внедрению в калькулятор новых функций.
Код позволит разработчикам познакомиться с новыми технологиями, созданными Microsoft. Это, прежде всего Universal Windows Platform, Fluent и Azure Pipelines. Проект также поможет понять, как в Microsoft разрабатывают ПО и каких стандартов придерживаются.
Предложение Microsoft оказалось популярным среди разработчиков: для проекта уже предложили 29 вариантов улучшений (пул-реквестов) и обнаружили 103 проблемы.
Исходный код калькулятора windows
The Windows Calculator app is a modern Windows app written in C++ that ships pre-installed with Windows. The app provides standard, scientific, and programmer calculator functionality, as well as a set of converters between various units of measurement and currencies.
Calculator ships regularly with new features and bug fixes. You can get the latest version of Calculator in the Microsoft Store.
Your computer must be running Windows 10, version 1803 or newer.
Install the latest version of Visual Studio (the free community edition is sufficient).
Install the XAML Styler Visual Studio extension.
Open src\Calculator.sln in Visual Studio to build and run the Calculator app.
For a general description of the Calculator project architecture see ApplicationArchitecture.md.
To run the UI Tests, you need to make sure that Windows Application Driver (WinAppDriver) is installed.
Want to contribute? The team encourages community feedback and contributions. Please follow our contributing guidelines.
If Calculator is not working properly, please file a report in the Feedback Hub. We also welcome issues submitted on GitHub.
For information regarding Windows Calculator plans and release schedule, please see the Windows Calculator Roadmap.
Adding graphing calculator functionality is on the project roadmap and we hope that this project can create a great end-user experience around graphing. To that end, the UI from the official in-box Windows Calculator is currently part of this repository, although the proprietary Microsoft-built graphing engine, which also drives graphing in Microsoft Mathematics and OneNote, is not. Community members can still be involved in the creation of the UI, however developer builds will not have graphing functionality due to the use of a mock implementation of the engine built on top of a common graphing API.
This project collects usage data and sends it to Microsoft to help improve our products and services. Read our privacy statement to learn more. Diagnostic data is disabled in development builds by default, and can be enabled with the SEND_DIAGNOSTICS build flag.
Windows Calculator includes a currency converter feature that uses mock data in developer builds. The data that Microsoft uses for the currency converter feature (e.g., in the retail version of the application) is not licensed for your use. The mock data will be clearly identifiable as it references planets instead of countries, and remains static regardless of selected inputs.
Reporting Security Issues
Copyright (c) Microsoft Corporation. All rights reserved.
Licensed under the MIT License.
About
Windows Calculator: A simple yet powerful calculator that ships with Windows




