Native Development Experience in Windows Embedded Compact 2013

In windows embedded compact 2013, we are updating the native developer experience to the latest and greatest experience available via Visual Studio 2012. With this update, we are essentially bringing 2012 native desktop experience to embedded developers. This post details some of the key updates to the experience.

Run time updates

We are porting Visual C++ 11 runtime to run on the Windows Embedded Compact operating system. The new runtime includes improved support for C++ 11 standard features such as new STL headers, rvalue references, auto, lambdas and range-based for-loop. These allows developers to write safer, faster code that is easier to maintain and is compliant with the C++ 11 standard. Additionally, we are bringing in C++ 11 standard’s concurrency features such as atomics, strong compare and exchange, to target multicore scenarios that are becoming prevalent in the embedded world.

Apart from the addition of C++ 11 standards, Visual C++ 11 desktop runtime has numerous bug fixes and optimizations. Some of the cool optimizations we are bringing forth in Windows Embedded Compact 2013 (from desktop) include all containers (vector, array, queues, maps etc), which now have smaller representations. Compared with VC 9, the memory usage is significantly reduced in VC 11. Decreased memory usage saves both space and time, something that is a premium especially in the embedded space. Another optimization worth mentioning is the porting of Auto-vectorizer. Just like on desktop Windows, the Auto-vectorizer will automatically analyze the loops in your code and where possible, emits Streaming SIMD Extensions resulting in faster execution. This optimization is designed to provide performance gains for the loops in your code when targeting newer processor or multicore processors. For more details, refer to this link.

Speaking of multicore processors, we are also updating libraries in this release. With hardware moving to multi-core and many-core architectures, even in embedded world, we are bringing parallel programming support via Concurrency Runtime. Introduced in Visual Studio 2010 and updated in 2012, we will be bringing in the powerful C++ parallelization libraries such as the Parallel Patterns Library, Task Parallelism, Concurrency-safe containers and Asynchronous Agents Library. Apart from these, we are also updating the MFC and ATL to the Visual Studio 2012 version, thereby bringing in the various bug fixes and optimizations already available in the desktop world.

It’s worth mentioning that one library we will not be porting is C++ AMP technology. Introduced in Visual Studio 2012, C++ AMP has a dependency on DirectX11 which is not support by Windows Embedded Compact 2013.

IDE updates

In this release, the updates are not limited to the runtime. The tools in the Visual Studio IDE have also been improved to help you be more productive when you code in C++. Some highlights include:

  • MSBuild Support. Visual C++ solutions and projects are now built using MSBuild, instead of VCBuild.exe. Due to this change, Visual C++ project files now use an XML file format and have the .vcxproj file name extension. For more information see MSBuild (Visual C++).
  • Visual Studio Templates support. The project and item templates for embedded scenarios have been updated to use the Visual Studio Templates technology.
  • Richer IntelliSense. We have vastly improved IntelliSense performance to be faster, more accurate and able to handle larger projects. We are bringing all those enhancements to the Compact world. Further, C++ IntelliSense Quick Info tooltips now show richer XML documentation comments style information.
  • C++ Code Constructs. Skeleton code is available for switch, if-else, for loop, and other basic code constructs, in the List Members drop-down list. Select a piece of code from the list to insert it into your code and then fill in the required logic. You can also create your own custom pieces of code for use in the editor.
  • List Members Enhancements. The List Members drop-down list appears automatically as you type code into the code editor. Results are filtered, so that only relevant members are displayed as you type.
  • Semantic Colorization. Types, enumerations, macros, and other C++ tokens now have colorization by default.
  • Reference Highlighting. Selecting a symbol now highlights all instances of the symbol in the current file. Press Ctrl+Shift+Up Arrow or Ctrl+Shift+Down Arrow to move among the highlighted references.

Static Code Analysis

This release also includes the updated Static analysis for C++. Updates provide richer error context information, more analysis rules, and better analysis results. In the new Code Analysis window, you can filter messages by keyword, project, and severity. When you select a message in the window, the line in the code where the message was triggered is highlighted in the code editor. For certain C++ warnings, the message lists source lines that show the execution path that leads to the warning; decision points and the reasons for taking that specific path are highlighted. For more information about how to improve the quality of your code, see Analyzing Application Quality by Using Code Analysis Tools.

To sum up, we are very eager to update the native development experience in Windows Embedded Compact 2013 release. We envision a world where native desktop developers and embedded developers can develop applications using the same set of capabilities and tools. This release is a fulfillment towards that vision.