Suzanne Cook - Developing the CLR, Part I
- Posted: Feb 11, 2005 at 12:53 AM
- 140,478 Views
- 44 Comments
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
Right click “Save as…”
Comments have been closed since this content was published more than 30 days ago, but if you'd like to continue the conversation,
please create a new thread in our Forums,
or
Contact Us and let us know.
Follow the Discussion
Oops, something didn't work.
What does this mean?
Following an item on Channel 9 allows you to watch for new content and comments that you are interested in. You need to be signed in to Channel 9 to use this feature.What does this mean?
Following an item on Channel 9 allows you to watch for new content and comments that you are interested in and view them all on your notifications page.sign up for email notifications?
The quality of audio is quite bad. When can we see Chris Brumme?
To download the video click the "save" link underneath the video.
Also, good to see this round of "who invented what" ended quickly. You know how much I love that game
What's to stop you from throwing together a BSD machine to play with rotor on?
Also, I think it's important to note that for most people, understanding exactly how the CLR loads a dll (and I mean exactly, it's always good to have a vague understanding) isn't that useful. While you and I may be interested, it's mostly an intellectual curiosity rather than a deal-breaker when it comes to platform choice.
I've traded emails in the past with Suzanne (I'm the current owner of InstallUtil.exe and InstallUtilLib.dll; we're some of those people that use LoadFrom when we probably shouldn't) but I've never seen her or heard her voice until this video
I've also seen her answer questions on internal mailing lists about .Net. Thanks to her blog, she almost never has to type a reply, just a link to a blog post. I'm convinced that after years of answering the same questions over and over, it was just easier to blog about it and point people over to that.
And to hear her talk about going to the doc guys and getting them to beef up the MSDN when it comes to the loader, getting bad practice methods depricated, etc. is just 10 kinds of cool. Suzanne is my hero
Click here for some Brumme.
Managed code is code that executes in a virtual machine that automatically handles memory allocation and object lifetime among other nifty things.
In our case, this VM is the CLR and this is typically what we mean when you hear us say "managed" code around here.
* The suave geek male had to ask all the questions. The other geek male could barely hold the camera.
* Suzanne C. was not lecturing---she had to be interrogated. These events could be caused by her personality but is very, very different from most Channel 9 subjects.
* Suzanne C. seemed extremely tense but that could just be geek non-physicality.
The Amanda Silver interview was different.
perl and python are interpreters (like the original non-JIT JVM). Although you could call code running under it 'managed' it certainly doesn't mean the same thing as saying the CLR runs managed code.
I think managed referrs to code that runs in the CLR as part of a garbage collected object (as either a class or instance method). Note that you can have a mixed assembly that also contains native code - actual x86 instructions. Note also that code isn't managed just because it is JITed by the CLR. For example Visual C++ can compile any old C++ program into MSIL instead of native code just by using the /CLR switch. The code is only managed when it is part of a class marked with the Managed C++ extension __gc (or ref class in VisualC++ 2005).
That also leads me to a key difference in philosophy between .NET and Java. While they are pretty much the same technology-wise they come at it from a different angle. The idea with Java was to create a virtual machine that ran a standard set of bytecodes and a virtual OS as part of the class library. The idea for the .NET framework was just to make Windows development easier. There's a good reason why the code generated by .NET compilers is called MSIL - Microsoft Intermediate Language. The message is that this code is just seen as an intermediate stage between the compiler and the processor the same way many traditional compilers use an intermediate code internally (in GCC it is called RTL for example). MSIL is flexible enough to enable unmanaged ANSI C++ to be compiled into it. Even that model of .NET languages C# has a little used unsafe mode which you can use to write code that looks and works pretty much the same as C.
what's that?
I remember when I was at university before Java had broken cover we were using a system called poplog. It was sort of like a runtime that supported CLisp as well as its own langauge called pop11 which was like Lisp but with Pascal like syntax. Anyway, back then there was a discussion about how to refer to languages that required a memory management infrastructure like a garbage collector as well as a big runtime, to differentiate them from languages like C, Pascal and C++. 'Managed' would have been a good term to have at the time as I don't believe the discussion ever came to anything. Mostly it consisted of stupid arguments about what it meant to rely on a memory manager, i.e. C has malloc which can be as complex as some garbage collectors even though it doesn't do anything nearly as useful. C++ in all but its simplest guises needs a certain amount of library support, esp. for features like RTTI and exceptions.
I will state again becuase I think beer28 missed it the first time: The fact that a language is compiled into an intermediate code does not make it 'managed'. As I said before ANSI C++ can be compiled into MSIL by using the /CLR, but that doesn't make it managed. Likewise the UCSD p-system which first popularised the concept of p-codes wasn't managed because it ran pascal - the users program still have to manage memory allocations itself like you do in any pascal as far as I know.
Where the border really lies between managed and unmanaged is: does the runtime need to know the type and layout of all the classes/structures in your program? The runtime has to know in order to run a proper garbage collector (rather than the Bohem hack), to provide type reflection and late binding support. Languages like LISP, Smalltalk and Pop11 were managed as it Java, C# and VB.NET. Pascal, C++, Delphi (save for the latest version) are unmanaged whether they are compiled to machine code, p-code or MSIL. Languages like Perl and PHP which are interpreted could be described as managed: They are interpreted and the interpreter has to know the layout of any data structures they use in order the implement them so they are managed, but it's a moot point really.
Most people really aren't comfortable speaking in front of crowds because we all know we're being judged.
My hat is off to Suzanne, though. She's very smart. I think the second part of the video is a little better.
I'd say that "interrogation" is an entirely incorrect expression for how the interview was conducted.
When you sit down to have an informal, casual chat with somebody do you give them a list of quetions ahead of time so they know what they are going to say before you ask questions?
We don't do this type of thing on Channel 9, and we won't. Perhaps I need to do a better job of making people feel comfortable. What do you all think? I'd appreciate feedback.
Charles
Thank you. This is helpful. I will work on getting better at this. This is all pretty off the cuff and very often my questions are born during the interview (there is nothing as pure and honest as spontaneity). I try to keep the technical stuff approachable since we want these interviews to appeal to a wide audience.
Please always feel free to give feedback on what we do and how we do it.
Thanks again.
Charles
To the extent that it is possible, yes. There are a few situations in which a function will be left as native code (embedded asm springs to mind) but it'll mostly spit out MSIL and the framework will be required to run it.
A lot of times in interviews I'm just trying to mentally keep up with the interviewee.
She's a developer on the .NET CLR team. I'm nowhere near as smart as she is.
So... thumbs up for Suzanne!
And for Robert and Charles too! I actually like your style better than Robert Hess's, because it is so natural and informal.
Keep up the great work guys, we LOVE these videos! And really, Channel9 has become one of the very few sites that I visit daily, even in weekends (only to see that it wasn't updated yet
What's more, Channel9 changes the perception of Microsoft in a way that you just cannot imagine. Seeing all these nice and intelligent people behind the products that we use, creates a very strong bond. This unique inside view into a corporation achieves much more than even millions of dollars of marketing money ever could...
Greetings from Belgium,
dotnetjunkie
I would like to hear more about StrongName (SN) improvements that may be coming in loader or other. Not about the FQ Assem Name per se, but protecting the assembly signature and the public key, and hence the bits, somehow. Today, you can resign any assembly by changing the public key hex and using SN -R. See http://www.atrevido.net/blog/PermaLink.aspx?guid=f772c18a-f389-4c28-bd6a-a30f4ccc84f5 .
That pretty much allows you to change assem and resign. You can also zero out the signature and use SN -V to skip verify. As you can resign assemblies with a new key pair, I don't see the need for Delayed signed assemblies anymore. As you can just sign your assems with a tmp key pair during dev, and have the "Key" team resign with real key before shipping and key testing. That way, I ~think, you could do away with SN -V and the Delayed Signed process all togeter to remove the "skip" attack. Any work on better protecting the public key and the signature (maybe CLR and meta data in assem working together to provide a solution)? I realize there is a circular problem here with protecting x to protect y to protect z, but just interested if anyone is working on something new and interesting. TIA!!!
--
William Stacey [MVP]
in my opinion robert and charles try really hard to create this 3-person-friendly-chat style so people don't feel the pressure of talking infront of a camera and infront of an online audience. i also think that they really succeed in that. not only the public speaking warriors like don box (no offence! don's speeches are among my favourites (i must say i like 'the ballmer' most on stage)) but also people who don't give public presentations all day feel comfortable being on channel9.. and i think you can see that throughout all of the videos. i wouldn't judge based on a few interviews where the private atmorphere didn't really work out. that happens.
roberts interjectional
charles has obviously a tendency to ask some indepth technical questions. and i do think that they are always of general interest for the niners. asking indepth questions to a guy who's developed OSes and file systems his whole life is not the easiest thing! charles does it. after all we're geeks.
the one thing i would like to add is that maybe if you gave the interviewees notice so they knew you are about to visit them in a week or so. i think this would also be the rersponsibility of the PMs in charge to make sure the team knows about channel9... not so that they can prepair themselves.. we all don't need that and they don't need that, more importantly... but to make them comfortable with the idea of being on camera. PMs shouldn't surprise the interviewees in those "tour-style" videos. Just let them spread the word of channel9. if they see that we're a bunch of friendly geeks ( sounds hard i know +g+) they won't hesitate to sit infront of the camera.
i'm sorry this post has gotten so long.. but i feel that the mood and style of the channel9 interviews is just the right thing. let robert hess do his thing.. he won't achieve this style we have here on channel9.
(i respect robert hess and his team very much. i've just got a little tired of his discussions about concepts and philosophies behind something that might be aswell seen as geeky stuff).
best regards
- martin.
While I understand its much more effort to arrange, I find the videos where you get the Guest and someone the Guest knows (manager or whatever) together, there is less chance for the silent parts where your thinking whats the next smart question, as the other person who knows the subject area you are talking about with the guest can then chime in. There's many videos already where we have seen this work best I think, like
Kevin Schofield - Tour of Microsoft Research
Herb Sutter, the Future of Visual C++
Kit George - Tour of .NET CLR Base Class Library Team (Part II)
This tour with expert + a good conversation with guests format is very good as there can both be expert conversation and novice questions and less chance for akward silence. And the guest may even feel more comfortable when theres someone (s)he knows better to help out if the question is going a bit out of his/her area of knowledge etc..
And my hidden agenda: Less of The Scobleizer laughing and more of the interesting conversation between people who know what they're talking about - if they go too much rocket science, you can always let them know.
But actually I feel stupid whining about this, most of the videos lately have been like I've hoped here, for this video I guess you just could not arrange the better setup?
There was some tense energy
to be felt, but I don't necessarily think it's anybody's fault. I'm not sure how much can be ascribed to gender dynamics, but gender dynamics are what they are and some people might get caught in
a cross-fire of contradictory expectations (or what
they imagine society expects), especially if they are a minority gender in a given field. Especially if they are smart.
Certainly, the "geek" image is male-centered and
might be alienating for techy women i guess...
If I were Robert, I wouldn't push the geekiness talk so much... There's some gender issues with it, like with the image of hip-hop homies and the surrounding narrative.
All in all I think Suzanne did a pretty good job and I liked those interviews a lot.
I noticed that Suzanne was kind of sweating visibly (I guess I was viewing full-screen rather than in a mini window) so I had the sense she felt put on the spot for an impromptu talk. That stuff is definitely not easy for most people. But that's how I like it - a raw and uncut view of the people at Microsoft to some extent.
Dan Lipsy
Stevens Institute of Technology
Student Ambassador to Microsoft
Yeah, I don't want to bring up the Amanda interview and the Suzanne interview like they must go together because they are both of the same gender. People are allowed to be different.
In an effort to not accuse you guys of having bad experiences with female interview subjects I cannot avoid making sexist observations. But the great thing about these 'new days' of American "liberty" and "freedom" my sexist remarks are totally insignificant to the "good people of Texas" all over the world.
I'm not sure if such comments are part of the solution or part of the problem.
I disregard political correctness for its ficticious character - trying to conjure the problem by putting enough tokens on the front page (analyze the demographics on pictures on ms.com)
But I also disregard the right-wing version of political correctness which dismisses equality as a ficticious issue. It is not.
Managed comes about from some runtime features that currently aren't exploited in common scenarios. The guts of the runtime can be thought of as a request/response cycle with messages. So when you make a call on a method, the call is packaged as a message and follows a request/response cycle. Just like it's possible to 'manage' messages in a TCP/IP environment it's equally possible to 'manage' runtime messages.
Spend some time spelunking around System.Runtime.Remoting.Context and System.Runtime.Remoting.Messaging.
So it goes alot more further than simply managing memory etc... It's more about having an environment where programming messages can be managed.
I won't even answer the rest. It's pretty clear you don't understand how the CLR works. Everything is represented a message inside of the CLR. Spend some time investigating those namespaces and then we can talk.
Also messsages != managed. The managed aspect comes into play with this notion of an omnipresent thing, a manager if you will, looking down at message paths saying yes you can do this, no you can't do that. Oops you actually need to go here.
Finally anyone who doesn't acknowledge that the CLR is COM done right (or COM version 3.0) is deluded. In fact IIRc the original name for the CLR was COM+2.
Feel free to scan whatever, it isn't going to change the way it works.
Don't let the fact that all this stuff lives in a remoting namespace confuse you.
If you really want to understand how it works, download rotor and navigate to \sscli\clr\src\vm\. You will find a unmanaged counterpart to every single call construct used in the managed environment. The critical class is message.cpp basically what it does is well... here's the comments
/*============================================================
**
** File: message.cpp
**
** Purpose: Encapsulates a function call frame into a message
** object with an interface that can enumerate the
** arguments of the message
**
** Date: Mar 5, 1999
**
===========================================================*/
The runtime views everything as a message and the runtime manages these messages. Again, it's pretty clear to me that you have no idea what you are talking about.
My comments were by definition sexist. Your wish is to extend my assertions into the phrase you have been taught, "political correctness." So I agree with you that you are not sure. And I am no "problem" for the "good people of Texas" because I have no nuclear weapons. The data have been transmitted. Please parse the data. Use quotes. Do not use the uncertainty of loyal captivity.
Which parser do you use? Mine barfed on this.
And which definition are you talking about? You didn't import any definitions. Your stuff doesn't compile.
So what you are saying is you are going to study an inferior virtual machine that supports a lowest common denominator threading model?
The fundametal difference between the CLR virtual Machine and the Java Virtual Machine is this message based architecture. Like I said, while this is not commonly exploited it does open up an incredible array of possibility.
You will see, in a few years Microsoft is going to 'flip the script' and all this message stuff is going to make a whole lot of sense. When that happens I suspect your little penguin will start to shake and ultimatly implode.
Maybe, just maybe if you studied what Microsoft is doing with the runtime you would get it and help the communist duck live to see a future in the computing arena. But in your arrogance I doubt that will happen, so let me wish you fairwell; because by 2010 you won't be relevant at all.
Maybe you should just buy a Mac. At least they understand a: good threading models b: good network stacks and c: the future of the personal computer.
You are totally missing the point of it. In a message based system, there is really no need for a module to be local. If you would like me to explain it to you, don't hesitate to ask.
And FWIW, I've never built Rotor - I just know how to read the code and I've spent alot of time programing with IMessage on the managed side.
Sorry if I sound so harsh but I've been reading your back log of posts and find you to be an arrogate, uninformed blabber mouth would really doesn't understand the Microsoft platform at all and who has no intention of doing anything other make inflamatory comments that are designed to make noobs feel stupid.
If fact the only reason why I started posting here was to shut you up, or at least force you to make sense.
I dyslexic. Get used to it.
Yes. That's exactly how it works. Let me give you an analogy.
Consider a router. When a packet comes into a router on an interface the router looks at that packet and makes some decisions about what to do with that packet. In some cases it might need to wrap that packet (e.g. nat), In some cases it might need to unwrap that packet (e.g. nat again). It does this by using some internal state (a routing table).
The runtime can be thought of in a similiar fashion. So as method messages calls are coming into the runtime some state tables are used to load and execute code, which in turn generate return messages.
more than one year and the video is not available to download
Remove this comment
Remove this thread
close