Microsoft Phoenix

Last updated

Microsoft Phoenix was an SDK available from Microsoft Connect for creating compilers, optimize code, and perform code analysis. Microsoft describe it in the past tense on 2008-07-01. [1]

Contents

Original Description

[It was] to be used as the back-end for future compiler technologies from Microsoft. [8] It [was] also available as an SDK, a pre-release build of which has been made accessible, to create compilers and code analysis tools using the Phoenix framework.

Overview

Microsoft Phoenix defines an intermediate representation (IR) for programs, using ASTs, control-flow graphs, and an exception handling model. For any program to be handled by Phoenix, it needs to be converted to this representation. The specification for these file type-specific converters, called file readers in Phoenix terminology, is also specified. Phoenix comes included with readers for Portable Executable binary files, CIL and the output of the Visual C++ front-end. [9] Readers for other languages can be written using the Phoenix SDK, though separate tools such as lex and yacc need to be used to write the lexer and parser, respectively.

Once the program has been converted to the IR, the analysis and optimization tools can operate on that form. Phoenix includes a selection of tools – including block counting, memory analysis, code coverage, code analysis and optimization. [10] The Phoenix SDK can be used to write and plug-in other tools as well. Code generation is handled by providing architecture-specific (either physical architecture of the processor or a virtual machine architecture) file writers. Phoenix provides the c2.dll compiler backend, which it shares with Visual C++, to handle analysis, optimization and code generation for the x86 architecture. Writers for other architectures must be provided separately.

As a result of the modular architecture, any component can be replaced without affecting the rest of the system. For example, to target the compiler to a different architecture, only the file writer specific to the architecture needs to be changed, keeping the rest of the stack unchanged. To create a compiler for a new language, only the readers need to be provided.

Productization

A Phoenix component (phx.dll) is used for some of the static analysis (FxCop) in Visual Studio 2010. [11] (The Phoenix compiler itself, which is required for most instrumentation insertion to work, is not included with Visual Studio.)

See also

Related Research Articles

The Windows API, informally WinAPI, is Microsoft's core set of application programming interfaces (APIs) available in the Microsoft Windows operating systems. The name Windows API collectively refers to several different platform implementations that are often referred to by their own names ; see the versions section. Almost all Windows programs interact with the Windows API. On the Windows NT line of operating systems, a small number use the Native API.

Microsoft Visual C++ Integrated development environment product by Microsoft

Microsoft Visual C++ (MSVC) is a compiler for the C, C++, and C++/CLI programming languages by Microsoft. MSVC is proprietary software; it was originally a standalone product but later became a part of Visual Studio and made available in both trialware and freeware forms. It features tools for developing and debugging C++ code, especially code written for the Windows API, DirectX and .NET.

LLVM Compiler backend for multiple programming languages

The LLVM compiler infrastructure project is a set of compiler and toolchain technologies, which can be used to develop a front end for any programming language and a back end for any instruction set architecture. LLVM 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 Xbox Development Kit (XDK) is a software development kit created by Microsoft used to write software for the Xbox gaming system. The XDK includes libraries, a compiler, and various tools used to create software for the Xbox. The XDK has the option to integrate itself into Microsoft Visual Studio 2002 or 2003. This is needed if one wants to develop applications or games for the Xbox. The XDK also includes a tool to record in-game footage, which has been widely used to create high-quality screenshots and trailers.

In computing, D3DX is a deprecated high level API library which is written to supplement Microsoft's Direct3D graphics API. The D3DX library was introduced in Direct3D 7, and subsequently was improved in Direct3D 9. It provides classes for common calculations on vectors, matrices and colors, calculating look-at and projection matrices, spline interpolations, and several more complicated tasks, such as compiling or assembling shaders used for 3D graphic programming, compressed skeletal animation storage and matrix stacks. There are several functions that provide complex operations over 3D meshes like tangent-space computation, mesh simplification, precomputed radiance transfer, optimizing for vertex cache friendliness and strip reordering, and generators for 3D text meshes. 2D features include classes for drawing screen-space lines, text and sprite based particle systems. Spatial functions include various intersection routines, conversion from/to barycentric coordinates and bounding box and sphere generators.

Microsoft Visual C++ is an integrated development environment (IDE) product from Microsoft for the C, C++, and C++/CLI programming languages. MSVC is proprietary software; it was originally a standalone product but later became a part of Visual Studio and made available in both trialware and freeware forms. It features tools for developing and debugging C++ code, especially code written for the Windows API, DirectX and .NET.

The Global Assembly Cache (GAC) is a machine-wide CLI assembly cache for the Common Language Infrastructure (CLI) in Microsoft's .NET Framework. The approach of having a specially controlled central repository addresses the flaws in the shared library concept and helps to avoid pitfalls of other solutions that led to drawbacks like DLL hell.

thinBasic is a BASIC-like computer programming language interpreter with a central core engine architecture surrounded by many specialized modules. Although originally designed mainly for computer automation, thanks to its modular structure it can be used for wide range of tasks.

WinDbg is a multipurpose debugger for the Microsoft Windows computer operating system, distributed by Microsoft. Debugging is the process of finding and resolving errors in a system; in computing it also includes exploring the internal operation of software as a help to development. It can be used to debug user mode applications, device drivers, and the operating system itself in kernel mode. Like the better-known Visual Studio Debugger it has a graphical user interface (GUI), but is more powerful and has little else in common.

ProDG by SN Systems is a suite of development tools produced for PlayStation 3, PlayStation 2, PSP, Nintendo DS, GameCube, and Game Boy Advance.

Dynamic-link library (DLL) is Microsoft's implementation of the shared library concept in the Microsoft Windows and OS/2 operating systems. These libraries usually have the file extension DLL, OCX, or DRV . The file formats for DLLs are the same as for Windows EXE files – that is, Portable Executable (PE) for 32-bit and 64-bit Windows, and New Executable (NE) for 16-bit Windows. As with EXEs, DLLs can contain code, data, and resources, in any combination.

NeuroSolutions

NeuroSolutions is a neural network development environment developed by NeuroDimension. It combines a modular, icon-based (component-based) network design interface with an implementation of advanced learning procedures, such as conjugate gradients, Levenberg-Marquardt and backpropagation through time. The software is used to design, train and deploy neural network models to perform a wide variety of tasks such as data mining, classification, function approximation, multivariate regression and time-series prediction.

In computer programming, DLL injection is a technique used for running code within the address space of another process by forcing it to load a dynamic-link library. DLL injection is often used by external programs to influence the behavior of another program in a way its authors did not anticipate or intend. For example, the injected code could hook system function calls, or read the contents of password textboxes, which cannot be done the usual way. A program used to inject arbitrary code into arbitrary processes is called a DLL injector.

Sandcastle is a documentation generator from Microsoft. It automatically produces MSDN-style code documentation out of reflection information of .NET assemblies and XML documentation comments found in the source code of these assemblies. It can also be used to produce user documentation from Microsoft Assistance Markup Language (MAML) with the same look and feel as reference documentation.

Microsoft Visual Studio Code editor and IDE

Microsoft Visual Studio is an integrated development environment (IDE) from Microsoft. It is used to develop computer programs, as well as websites, web apps, web services and mobile apps. Visual Studio uses Microsoft software development platforms such as Windows API, Windows Forms, Windows Presentation Foundation, Windows Store and Microsoft Silverlight. It can produce both native code and managed code.

XBLite is a free Open Source BASIC programming language compiler and development system. It was started in 2001 by David Szafranski in order to provide a Windows exclusive version of the XBasic dialect. XBLite is released under the GNU GPL licensing scheme, Standard libraries are released under the GNU LGPL licensing scheme.

FlashDevelop Text editor

FlashDevelop is an integrated development environment (IDE) for development of Adobe Flash websites, web applications, desktop applications and video games. The resulting applications run in Adobe Flash Player or Adobe AIR, on Microsoft Windows, Mac OS X, Android or iOS. The primary purpose of FlashDevelop is enabling developers to edit, compile, debug and publish a Flash ActionScript project. It supports ActionScript 2.0, ActionScript 3.0, Haxe and other upcoming languages. It has code completion, syntax highlighting, snippets and other features similar to Microsoft Visual Studio.

Basic4ppc is a programming language for Pocket PC handheld computers running Windows Mobile operating system, by Anywhere Software. The language is based on a BASIC-like syntax, taking advantage of Microsoft's .NET technology, to allow additional libraries, graphical user interface design of windows forms, rapid application development (RAD), and .NET framework compatible compilation. The language implements a unique way of adding objects to a program without being object-oriented. Its advantages are simplicity, development pace and the integration with .NET framework. A special version of the integrated development environment (IDE) allows developing straight onto the Windows Mobile device. With the demise of Windows Mobile operating system and the devices running it Basic4PPC came to the end of its life in about 2012. For owners of Basic4PPC it remains a useful Windows-desktop BASIC compiler as it runs code directly in the Windows environment and it can compile a project to a Windows 'exe' file for use as a Windows program.

Mono (software) Computer software project

Mono is a free and open-source .NET Framework-compatible software framework. Originally by Ximian, it was later acquired by Novell, and is now being led by Xamarin, a subsidiary of Microsoft and the .NET Foundation. Mono can be run on many software systems.

Meson (software) Build automation system

Meson is a software tool for automating the building (compiling) of software. The overall goal for Meson is to promote programmer productivity. Meson is free and open-source software written in Python, under the Apache License 2.0.

References

  1. "Microsoft Phoenix SDK (2008-07-01)".
  2. "Phoenix Academic Program". Archived from the original on December 13, 2007. Retrieved November 16, 2007.CS1 maint: discouraged parameter (link)
  3. Safonov, Vladimir O. (2010). "Microsoft Phoenix, Phoenix-Targeted Tools, and Our Phoenix Projects". Trustworthy Compilers. Hoboken, New Jersey: John Wiley & Sons. pp. 239–276. ISBN   9780470593349 . Retrieved May 8, 2019.CS1 maint: discouraged parameter (link)
  4. Tairas, Robert; Gray, Jeff (March 10, 2006). "Phoenix-Based Clone Detection Using Suffix Trees" (PDF). Proceedings of the 44th Annual Southeast Regional Conference. Association for Computing Machinery: 679–684. Retrieved May 8, 2019.CS1 maint: discouraged parameter (link)
  5. Safonov, Vladimir; Gratchev, Mikhail; Grigoryev, Dmitry; Maslennikov, Alexander (May 29 – June 1, 2006). "Aspect.NET — aspect-oriented toolkit for Microsoft.NET based on Phoenix and Whidbey" (PDF). .NET Technologies 2006. University of West Bohemia: 19–30. Retrieved May 8, 2019.CS1 maint: discouraged parameter (link)
  6. Ueng, Sain-Zee; Lathara, Melvin; Baghsorkhi, Sara S.; Hwu, Wen-mei W. "CUDA-Lite: Reducing GPU Programming Complexity". Languages and Compilers for Parallel Computing. University of Illinois at Urbana-Champaign: Springer: 1–15. Retrieved May 8, 2019.CS1 maint: discouraged parameter (link)
  7. Castro, Miguel; Costa, Manuel; Harris, Tim (November 6, 2006). "Securing software by enforcing data-flow integrity" (PDF). Proceedings of the 7th Symposium on Operating Systems Design and Implementation. USENIX Association: 147–160. Retrieved May 8, 2019.CS1 maint: discouraged parameter (link)
  8. [2] [3] [4] [5] [6] [7]
  9. "Phoenix Compiler Backend". Archived from the original on December 26, 2010. Retrieved November 16, 2007.CS1 maint: discouraged parameter (link)
  10. "Phoenix based tools". Archived from the original on December 26, 2010. Retrieved November 16, 2007.CS1 maint: discouraged parameter (link)
  11. "VS 2010 Beta 2 Code Analysis In-Depth First Look". Archived from the original on January 6, 2010. Retrieved March 30, 2010.CS1 maint: discouraged parameter (link)