A computing platform , digital platform , or software platform is the infrastructure on which software is executed. While the individual components of a computing platform may be obfuscated under layers of abstraction , the summation of the required components comprise the computing platform .
49-488: Universal Windows Platform ( UWP ) is a computing platform created by Microsoft and introduced in Windows 10 . The purpose of this platform is to help develop universal apps that run on Windows 10, Windows 10 Mobile (discontinued), Windows 11 , Xbox One , Xbox Series X/S , and HoloLens without the need to be rewritten for each . It supports Windows app development using C++ , C# , VB.NET , and XAML . The API
98-771: A Microsoft subsidiary since 2016. Community solutions also exist for non-targeted platforms, such as the Uno Platform . UWP is a part of Windows 10, Windows 10 Mobile and Windows 11. UWP apps do not run on earlier Windows versions. Apps that are capable of implementing this platform are natively developed using Visual Studio 2015 , Visual Studio 2017 , Visual Studio 2019 , or Visual Studio 2022 . Older Metro-style apps for Windows 8.1 , Windows Phone 8.1 , or for both (universal 8.1) need modifications to migrate to UWP. Some Windows platform features in later versions have been exclusive to UWP and software specifically packaged for it, and are not usable in other architectures such as
147-521: A concrete language can be represented by combining these basic types in LLVM. For example, a class in C++ can be represented by a mix of structures, functions and arrays of function pointers . The LLVM JIT compiler can optimize unneeded static branches out of a program at runtime, and thus is useful for partial evaluation in cases where a program has many options, most of which can easily be determined unneeded in
196-464: A disadvantage as Microsoft is "curtailing users' freedom to install full-featured PC software and subverting the rights of developers and publishers to maintain a direct relationship with their customers". As such, Sweeney argued that end-users should be able to download UWP software and install it in the same manner as non-UWP software. Windows VP Kevin Gallo addressed Sweeney's concerns, stating that "in
245-413: A large percentage of their C# code to deliver a fully native mobile app experiences for iOS and Android." In a live interview with Giant Bomb during its E3 2016 coverage, Spencer defended the mixed reception of its UWP-exclusive releases, stating that "they all haven't gone swimmingly. Some of them have gone well", and that "there's still definitely concern that UWP and our store are somehow linked in
294-399: A mobile phone or a tablet and provide suitable experiences on each. A universal app running on a smartphone may start behaving the way it would if it were running on a PC when the phone is connected to a desktop computer or a suitable docking station . Games developed for UWP are subject to technical restrictions, including incompatibility with multi- video card setups, difficulties modding
343-511: A platform but does not have to be adapted to run on the Windows, Linux or Macintosh OS platforms. However, the JVM, the layer beneath the application, does have to be built separately for each OS. LLVM LLVM is a set of compiler and toolchain technologies that can be used to develop a frontend for any programming language and a backend for any instruction set architecture . LLVM
392-474: A proper 3D hardware driver loaded. In 2011, programs compiled by GCC outperformed those from LLVM by 10%, on average. In 2013, phoronix reported that LLVM had caught up with GCC, compiling binaries of approximately equal performance. LLVM has become an umbrella project containing multiple components. LLVM was originally written to be a replacement for the extant code generator in the GCC stack, and many of
441-519: A specific environment. This feature is used in the OpenGL pipeline of Mac OS X Leopard (v10.5) to provide support for missing hardware features. Graphics code within the OpenGL stack can be left in intermediate representation and then compiled when run on the target machine. On systems with high-end graphics processing units (GPUs), the resulting code remains quite thin, passing the instructions on to
490-582: A target platform. LLVM can accept the IR from the GNU Compiler Collection (GCC) toolchain , allowing it to be used with a wide array of extant compiler front-ends written for that project. LLVM can also be built with gcc after version 7.5. LLVM can also generate relocatable machine code at compile-time or link-time or even binary machine code at runtime. LLVM supports a language-independent instruction set and type system . Each instruction
539-500: A team to work on the LLVM system for various uses within Apple's development systems. LLVM has been an integral part of Apple's Xcode development tools for macOS and iOS since Xcode 4 in 2011. In 2006, Lattner started working on a new project named Clang . The combination of Clang frontend and LLVM backend is named Clang/LLVM or simply Clang. The name LLVM was originally an initialism for Low Level Virtual Machine . However,
SECTION 10
#1732776788176588-440: A way that is nefarious. It's not." He also discussed Microsoft's relationships with third-party developers and distributors such as Steam, considering the service to be "a critical part of gaming's success on Windows" and stating that Microsoft planned to continue releasing games through the platform as well as its own, but that "There's going to be areas where we cooperate and there's going to be areas where we compete. The end result
637-913: Is PNaCl . The LLVM project also introduces another type of intermediate representation named MLIR which helps build reusable and extensible compiler infrastructure by employing a plugin architecture named Dialect. It enables the use of higher-level information on the program structure in the process of optimization including polyhedral compilation . At version 16, LLVM supports many instruction sets , including IA-32 , x86-64 , ARM , Qualcomm Hexagon , LoongArch , M68K , MIPS , NVIDIA Parallel Thread Execution (PTX, also named NVPTX in LLVM documentation), PowerPC , AMD TeraScale , most recent AMD GPUs (also named AMDGPU in LLVM documentation), SPARC , z/Architecture (also named SystemZ in LLVM documentation), and XCore . Some features are not available on some platforms. Most features are present for IA-32, x86-64, z/Architecture, ARM, and PowerPC. RISC-V
686-407: Is LLVM's framework for translating machine instructions between textual forms and machine code. Formerly, LLVM relied on the system assembler, or one provided by a toolchain, to translate assembly into machine code. LLVM MC's integrated assembler supports most LLVM targets, including IA-32, x86-64, ARM, and ARM64. For some targets, including the various MIPS instruction sets, integrated assembly support
735-474: Is a required component for the program code to execute, it is part of the computing platform. Platforms may also include: Some architectures have multiple layers, with each layer acting as a platform for the one above it. In general, a component only has to be adapted to the layer immediately beneath it. For instance, a Java program has to be written to use the Java virtual machine (JVM) and associated libraries as
784-536: Is aimed at replacing the C/Objective-C compiler in the GCC system with a system that is more easily integrated with integrated development environments (IDEs) and has wider support for multithreading . Support for OpenMP directives has been included in Clang since release 3.8. The Utrecht Haskell compiler can generate code for LLVM. While the generator was in early stages of development, in many cases it
833-626: Is an open-source middleware toolkit that allows iOS apps developed in Objective-C to be ported to Windows 10 by using Visual Studio 2015 to convert the Xcode project into a Visual Studio project. An early build of Windows Bridge for iOS was released as open-source software under the MIT License on August 6, 2015, while the Android version was in closed beta . This "WinObjC" project
882-432: Is better for gamers." Spencer also stated that he was a friend of Sweeney and had been in frequent contact with him. On May 30, 2019, Microsoft announced that it would support distribution of Win32 games on Microsoft Store; Spencer (who had since been promoted to head of all games operations at Microsoft, reporting directly to CEO Satya Nadella ) explained that developers preferred the architecture, and that it "allow[s] for
931-448: Is designed around a language-independent intermediate representation (IR) that serves as a portable , high-level assembly language that can be optimized with a variety of transformations over multiple passes. The name LLVM originally stood for Low Level Virtual Machine, though the project has expanded and the name is no longer officially an initialism . LLVM is written in C++ and
980-771: Is designed for compile-time , link-time , runtime , and "idle-time" optimization. Originally implemented for C and C++, the language-agnostic design of LLVM has since spawned a wide variety of frontends: languages with compilers that use LLVM (or which do not directly use LLVM but can generate compiled programs as LLVM IR) include ActionScript , Ada , C# for .NET , Common Lisp , PicoLisp , Crystal , CUDA , D , Delphi , Dylan , Forth , Fortran , FreeBASIC , Free Pascal , Halide , Haskell , Idris , Java bytecode , Julia , Kotlin , LabVIEW 's G language, Lua , Objective-C , OpenCL , PostgreSQL 's SQL and PLpgSQL, Ruby , Rust , Scala , Standard ML , Swift , Xojo , and Zig . The LLVM project started in 2000 at
1029-593: Is implemented in C++, and supported in C++, VB.NET, C#, F# and JavaScript . Designed as an extension to the Windows Runtime (WinRT) platform introduced in Windows Server 2012 and Windows 8 , UWP allows developers to create apps that will potentially run on multiple types of devices. UWP does not target non-Microsoft systems. Microsoft's solution for other platforms is .NET MAUI (previously " Xamarin.Forms "), an open-source API created by Xamarin ,
SECTION 20
#17327767881761078-594: Is in static single assignment form (SSA), meaning that each variable (called a typed register) is assigned once and then frozen. This helps simplify the analysis of dependencies among variables. LLVM allows code to be compiled statically, as it is under the traditional GCC system, or left for late-compiling from the IR to machine code via just-in-time compilation (JIT), similar to Java . The type system consists of basic types such as integer or floating-point numbers and five derived types : pointers , arrays , vectors , structures , and functions . A type construct in
1127-432: Is mostly obsolete. LLVM currently supports compiling of Ada , C , C++ , D , Delphi , Fortran , Haskell , Julia , Objective-C , Rust , and Swift using various frontends . Widespread interest in LLVM has led to several efforts to develop new frontends for many languages. The one that has received the most attention is Clang, a newer compiler supporting C, C++, and Objective-C. Primarily supported by Apple, Clang
1176-637: Is open source on GitHub . It contains code from various existing implementations of Cocoa Touch like Cocotron and GNUstep as well as Microsoft's own code that implements iOS frameworks using UWP methods. It uses a version of the LLVM clang compiler. Windows Bridge for Android (codenamed "Astoria") was a runtime environment that would allow for Android apps written in Java or C++ to run on Windows 10 Mobile and published to Microsoft Store . Kevin Gallo, technical lead of Windows Developer Platform, explained that
1225-823: Is supported as of version 7. In the past, LLVM also supported other backends, fully or partially, including C backend, Cell SPU , mblaze (MicroBlaze) , AMD R600, DEC/Compaq Alpha ( Alpha AXP ) and Nios2 , but that hardware is mostly obsolete, and LLVM developers decided the support and maintenance costs were no longer justified. LLVM also supports WebAssembly as a target, enabling compiled programs to execute in WebAssembly-enabled environments such as Google Chrome / Chromium , Firefox , Microsoft Edge , Apple Safari or WAVM . LLVM-compliant WebAssembly compilers typically support mostly unmodified source code written in C, C++, D, Rust, Nim, Kotlin and several other languages. The LLVM machine code (MC) subproject
1274-548: Is usable but still in the beta stage. The lld subproject is an attempt to develop a built-in, platform-independent linker for LLVM. lld aims to remove dependence on a third-party linker. As of May 2017 , lld supports ELF , PE/COFF , Mach-O , and WebAssembly in descending order of completeness. lld is faster than both flavors of GNU ld . Unlike the GNU linkers, lld has built-in support for link-time optimization (LTO). This allows for faster code generation as it bypasses
1323-562: The Rust compiler, a Java bytecode frontend, a Common Intermediate Language (CIL) frontend, the MacRuby implementation of Ruby 1.9, various frontends for Standard ML , and a new graph coloring register allocator. The core of LLVM is the intermediate representation (IR), a low-level programming language similar to assembly. IR is a strongly typed reduced instruction set computer (RISC) instruction set which abstracts away most details of
1372-485: The University of Illinois at Urbana–Champaign , under the direction of Vikram Adve and Chris Lattner . LLVM was originally developed as a research infrastructure to investigate dynamic compilation techniques for static and dynamic programming languages. LLVM was released under the University of Illinois/NCSA Open Source License , a permissive free software licence . In 2005, Apple Inc. hired Lattner and formed
1421-510: The GCC frontends have been modified to work with it, resulting in the now-defunct LLVM-GCC suite. The modifications generally involve a GIMPLE -to-LLVM IR step so that LLVM optimizers and codegen can be used instead of GCC's GIMPLE system. Apple was a significant user of LLVM-GCC through Xcode 4.x (2013). This use of the GCC frontend was considered mostly a temporary measure, but with the advent of Clang and advantages of LLVM and Clang's modern and modular codebase (as well as compilation speed),
1470-585: The GPU with minimal changes. On systems with low-end GPUs, LLVM will compile optional procedures that run on the local central processing unit (CPU) that emulate instructions that the GPU cannot run internally. LLVM improved performance on low-end machines using Intel GMA chipsets. A similar system was developed under the Gallium3D LLVMpipe, and incorporated into the GNOME shell to allow it to run without
1519-644: The LLVM implementation of the C++ Standard Library (with full support of C++11 and C++14 ), etc. LLVM is administered by the LLVM Foundation. Compiler engineer Tanya Lattner became its president in 2014 and was in post as of March 2024 . "For designing and implementing LLVM" , the Association for Computing Machinery presented Vikram Adve, Chris Lattner, and Evan Cheng with the 2012 ACM Software System Award . The project
Universal Windows Platform - Misplaced Pages Continue
1568-406: The LLVM project evolved into an umbrella project that has little relationship to what most current developers think of as a virtual machine . This made the initialism "confusing" and "inappropriate", and since 2011 LLVM is "officially no longer an acronym", but a brand that applies to the LLVM umbrella project. The project encompasses the LLVM intermediate representation (IR), the LLVM debugger ,
1617-467: The UWP interface, so that applications written in these APIs would run on UWP. Two bridges are announced during the 2015 Build keynote for Android and iOS apps to be ported to Windows 10 Mobile. Until January 2022, Microsoft maintained support for bridges for Windows desktop apps, progressive web apps , Microsoft Silverlight , and iOS's Cocoa Touch API. Windows Bridge for iOS (codenamed "Islandwood")
1666-409: The UWP no longer indicate having been written for a specific OS in their manifest build; instead, they target one or more device families, such as a PC, smartphone, tablet, or Xbox One , using Universal Windows Platform Bridges. These extensions allow the app to automatically utilize the capabilities that are available to the particular device it is currently running on. A universal app may run on either
1715-468: The Windows 10 November Update, we enabled people to easily side-load apps by default, with no UX required. We want to make Windows the best development platform regardless of technologies used, and offer tools to help developers with existing code bases of HTML/JavaScript, .NET and Win32, C++ and Objective-C bring their code to Windows, and integrate UWP capabilities. With Xamarin , UWP developers can not only reach all Windows 10 devices, but they can now use
1764-404: The communication, referring to the whole using only one of its attributes – i.e. using a metonymy . For example, in a single computer system, this would be the computer's architecture , operating system (OS), and runtime libraries . In the case of an application program or a computer video game , the most relevant layer is the operating system, so it can be called a platform itself (hence
1813-440: The customization and control [developers and players] come to expect from the open Windows gaming ecosystem." It was also announced that future Xbox Game Studios releases on Windows would be made available on third-party storefronts such as Steam, rather than be exclusive to Microsoft Store. Computing platform Sometimes, the most relevant layer for a specific software is called a computing platform in itself to facilitate
1862-570: The existing WinAPI , WPF , and Windows Forms . However, as of 2019, Microsoft has taken steps to increase the parity between these application platforms and make UWP features usable inside non-UWP software. Microsoft introduced XAML Islands (a method for embedding UWP controls and widgets into non-UWP software) as part of the Windows 10 May 2019 update, and stated that it would also allow UWP functions and Windows Runtime components to be invoked within non-packaged software. UWP Bridges translate calls in other application programming interfaces (APIs) to
1911-429: The game , overlays for gameplay-oriented chat clients, or key binding managers. UWP will only support DirectX 11.1 or later, so games built on older DirectX versions will not work. During Build 2016, Microsoft Xbox division head Phil Spencer announced that the company was attempting to address issues which would improve the viability of UWP for PC games, stating that Microsoft was "committed to ensuring we meet or exceed
1960-468: The human-readable IR format: The many different conventions used and features provided by different targets mean that LLVM cannot truly produce a target-independent IR and retarget it without breaking some established rules. Examples of target dependence beyond what is explicitly mentioned in the documentation can be found in a 2011 proposal for "wordcode", a fully target-independent variant of LLVM IR intended for online distribution. A more practical example
2009-433: The installation of external software (similarly to Android ). Additionally, certain operating system features are exclusive to UWP and cannot be used in non-UWP software such as most video games. Sweeney characterized these moves as "the most aggressive move Microsoft has ever made" in attempting to transform PCs into a closed platform, and felt that these moves were meant to put third-party games storefronts such as Steam at
Universal Windows Platform - Misplaced Pages Continue
2058-553: The layer contained some limitations: Google Mobile Services and certain core APIs are not available, and apps that have "deep integration into background tasks", such as messaging software, would not run well in this environment. In February 2016, Microsoft announced that it had ceased development on Windows Bridge for Android, citing redundancies due to iOS already being a primary platform for multi-platform development, and that Windows Bridge for iOS produced native code and did not require an OS-level emulator. Instead, Microsoft encouraged
2107-458: The performance expectations of full-screen games as well as the additional features including support for overlays, modding, and more." Support for AMD FreeSync and Nvidia G-Sync technologies, and disabling V-sync, was later added to UWP. Epic Games founder Tim Sweeney criticized UWP for being a walled garden , since by default UWP software may only be published and installed via Windows Store , requiring changes in system settings to enable
2156-440: The target. For example, the calling convention is abstracted through call and ret instructions with explicit arguments. Also, instead of a fixed set of registers, IR uses an infinite set of temporaries of the form %0, %1, etc. LLVM supports three equivalent forms of IR: a human-readable assembly format, an in-memory format suitable for frontends, and a dense bitcode format for serializing. A simple "Hello, world!" program in
2205-422: The term cross-platform for software that can be executed on multiple OSes, in this context). In a multi-computer system, such as in the case of offloading processing, it would encompass both the host computer's hardware , operating system (OS), and runtime libraries along with other computers utilized for processing that are accessed via application programming interfaces or a web browser . As long as it
2254-416: The use of C# for multi-platform app development using tools from Xamarin , which they had acquired prior to the announcement. In 2021, Microsoft allowed Windows 11 to run Android apps with an OS-level emulator and allowed apps to be installed in the store. UWP provides an application model based upon its CoreApplication class and the Windows Runtime (WinRT). Universal Windows apps that are created using
2303-567: The use of a linker plugin, but on the other hand prohibits interoperability with other flavors of LTO. The LLVM project includes an implementation of the C++ Standard Library named libc++, dual-licensed under the MIT License and the UIUC license . Since v9.0.0, it was relicensed to the Apache License 2.0 with LLVM Exceptions. This implements a suite of cache-locality optimizations as well as auto-parallelism and vectorization using
2352-450: Was more efficient than the C code generator. The Glasgow Haskell Compiler (GHC) backend uses LLVM and achieves a 30% speed-up of compiled code relative to native code compiling via GHC or C code generation followed by compiling, missing only one of the many optimizing techniques implemented by the GHC. Many other components are in various stages of development, including, but not limited to,
2401-486: Was originally available under the UIUC license . After v9.0.0 released in 2019, LLVM relicensed to the Apache License 2.0 with LLVM Exceptions. As of November 2022 about 400 contributions had not been relicensed. LLVM can provide the middle layers of a complete compiler system, taking intermediate representation (IR) code from a compiler and emitting an optimized IR. This new IR can then be converted and linked into machine-dependent assembly language code for
#175824