AndyA
Architect on the Phoenix Project. Joined Microsoft in 2002 after working on compilers for HP and founding a startup (InCert) that developed tools based on binary analysis.
Loading User Information from Channel 9
Something went wrong getting user information from Channel 9
Loading User Information from MSDN
Something went wrong getting user information from MSDN
Loading Visual Studio Achievements
Something went wrong getting the Visual Studio Achievements
Andy Ayers: Understanding the Phoenix Compiler Framework
Apr 27, 2008 at 10:33 PMFor educational purposes you can download the Windows Research Kernel which gives you kernel source for a good part of the Server 2003 kernel. You can build this with Phoenix if you want to experiment with OS/Compiler interactions (though if you do so in the near future, I recommend using the VS2005 based June 2007 SDK, since the newer April 2008 SDK exposes some source issues in the WRK code). And the SSCLI will give you a pretty clear idea of what a good part of the .Net 2.0 code looks like.
As far as building Phoenix yourself, or building other microsoft products, from what I know it's really up to each product group to decided if/when/how to provide access to source. I don't know if there is an umbrella program that applies to the entire company but I suspect there isn't any such thing.
As is typical with such things there are many factors and stakeholders involved. For example, we have thought about including portions of the compiler test suite with the SDK but a goodly number of test cases have been licensed from third parties or are based on code given to us with other sorts of restrictions. Just sorting out what we can give out is a major effort.
Andy Ayers: Understanding the Phoenix Compiler Framework
Apr 27, 2008 at 10:19 PMI'm glad to see that some of our vision resonates with you. There's a lot I would like to say about where we are headed and what might be possible in future product releases, but I'm going to have to leave things up in the air for now. Let's just say that there are a lot of cool things that can be done -- which ones of those happen and when is still being sorted out.
Andy Ayers: Understanding the Phoenix Compiler Framework
Apr 14, 2008 at 12:35 AMMSIL/CIL/IL is the way it is for a couple of reasons -- it has a compact encoding, it is relatively straightforward to translate to machine code, and its semantics are carefully specified so that verification is possble. Phoenix IR has a much different set of design parameters and so has different attributes: a representation that is somewhat redundant but can represent rich relationships among the instructions in a program, the flexibilty to represent programs at several different semantic levels (eg HIR, LIR), and the expressive power to describe most of the popular machine architectures.
A bytecode that has some of the attributes of our IR makes a lot of sense -- the ability to specify a register set, the ability to annotate the IR with useful derived facts (perhaps, as you note, provably correct ones), the ability to mix semantic levels (as Phoenix IR allows LIR/HIR islands in HIR/LIR). If you can have all that and retain the benefits of MSIL then it would be something really interesting.
And I'm with you on that last comment -- around 1998 or so I was convinced jitted code was going to take over the world.
Andy Ayers: Understanding the Phoenix Compiler Framework
Apr 11, 2008 at 9:29 AMI've always wanted to do an IL-to-IL optimizer. While the jit does a good job it doesn't have time for in-depth analysis, and there are a number of things you can do upstream to boost performance.
As far as what all those cores will be doing -- I expect we will find good ways to employ them to directly address user problems. Phoenix itself can profitably use 6-8 cores, and with a bit more work we should be able to scale even higher. It may be that the world of code is more dynamic in the future, but I thought that 10 years ago when I worked on a big static compiler and things haven't really changed that much.
Andy Ayers: Understanding the Phoenix Compiler Framework
Apr 10, 2008 at 9:49 AMBinary translation is certainly doable, and the machine-specific part of Phoenix is extensible (though this is not yet as easy to do as we would like it to be). Sounds like a fun project for somebody to try...
Andy Ayers: Understanding the Phoenix Compiler Framework
Apr 10, 2008 at 9:43 AMReverse debugging is indeed really cool, but there's a sizeable gap between what we can do with slicing and actually being able to run the program backwards. Still, the idea is compelling...
We should be dislosing release plans sometime in the not-too-distant future. But you don't have to wait until then to have fun with Phoenix -- download the SDK and you'll get a version of Phoenix that plugs right into the VS2008 C++ toolchain.
Thanks for the correction.
Andy Ayers: Understanding the Phoenix Compiler Framework
Apr 10, 2008 at 9:28 AMOne of the cool things about Phoenix is that it blurs the line between managed and native code in a number of interesting ways.
So, if you're into managed code, you'll be happy to hear that the dynamic slice tool works on managed code too.
Herb Sutter, the Future of Visual C++, Part II
Feb 05, 2005 at 10:23 AMFrom Chuck's segment:
RDK: Research Development Kit. A variant of an SDK for use by academic and industry researchers.
BBT: An binary analysis and transformation tool done at MSR, built on top of Vulcan
Vulcan: a binary analysis and transformation toolkit done by MSR (now CSE)
MSR: Microsoft Research
CSE: Center for Software Excellence (for a bit more on CSE, Vulcan and BBT see http://www.microsoft.com/windows/cse/bit.mspx)
JIT: Just In Time compiler, used by the CLR to transform MSIL into native code.
CLR: Common Language Runtime -- the runtime environment that hosts .Net.
MSIL: MicroSoft Intermediate Language -- the bytecode intermediate language used by .Net.
UTC: Universal Tuple Compiler -- our name for the current command line compiler backend.
Prefast: a compiler-hosted defect analysis tool initially done by MSR that is now part of the Whidbey C/C++ compiler.