C is the manual transmission of cars, its a lot harder to operate, but you have a lot more control of how it drives. More managed languages are the automatic transmission. For 99% of the time, it'll get you to where you're going just fine, but will waste a little more gas to do it. Standards are more efficient and auto's are more simple.
To further expand the analogy, the new world order of standard transmission is to move into dual-clutch manuals, where you can still twist the knobs if you really want to, but you don't need to; everything runs automatically behind the scenes. Now to put this into a programming language paradigm, its something like making the C#/Java runtime's of the world so efficient that they're (pre?) runtime optimizers become so efficient at optimizing the codepaths that they produce better results than a typical C output. The runtimes are surely not there yet (for most cases), but in 20-30 years, I doubt there will be many pure C developers left just as there are almost non-existant need for assemby programmers in today's market. Jas in cars, the dual-clutch systems will become so cheap and so convenient that you won't find pure manuals in all but the most specific niche markets in well, maybe the same 20 years.
WTF is a Java guy? Someone who's never taken univerity? Never gone to school? How many collage courses have you been to where C was not on the curriculum? Your experience is absolute garbage. Step back and look at these people's: Age, Experience, Training and then tell me its their mythical 'language'-guy affiliation that makes them better or worse developers.
IMHO, the many 'C-guys' I've worked with write really crappy Java for at least 1.5 years before they just get it, and usually by then they aren't C guys anymore, because they get a lot more done in Java, or C#, or whatever. It won't be as performant but typically if the language of choice for a project is open for debate, then a mainstream higher level language is typcially the safer and better (over the life of the product) choice.
I was a C guy who became a Java guy. Why? Its stupidly simple to just do your work in Java instead of working with 1600 miute details of busy work that chokes productivity away from what I'm really trying to accomplish. Java has its busy work which a lot of people have been griping about for years, but its leaps and bounds from C in terms of random crap that you always have to worry about whenever your trying to accomplish something simple and straight forward.
I would not deny that every developer should at least learn on C to get familiar with the inner workings of higher level languages, and the best practices on the micro level around it, but if we all went back to C or C++, productivity would drop off the fall off the cliff (not even the learning curve, bugs etc..), just the amount of extra effort to make X from one language to another.
Funny that you're so good at diagnosing memory leaks, because in C you will spend a non-trivial amount of time detecting and fixing leaks, since any trivial omision or day to day bug could often lead to leaks. Now in the (fully) managed world, the chance of a truely leaked object becomes --substantially-- harder to accomplish (aka doing stupid things with static singletons, adding crap to an ever growing collection, etc..), and maybe because of that, the developers that use them aren't as equipped as those in the C/C++ world because by and large, they don't have to.
Well, if you bought it without clicking a EULA (maybe even if you did in some places), you could always go to small claims court, get a summary judgement (because bliz would never show up) and then get a refund through your credit card. Just don't plan to ever buy another Blizzard game again if you decide to do so, because you'll be on perma-ban for sure.
Last time I checked, Android user adoption was accelerating. Can a crappy experience hurt sales, sure. Can Horror stories about malicious app X, or Y scare the crap out of some people using their smart phone of choice, sure. At the end of the day, if you're using an Android phone, or an IOS phone, a blackberry, or windows phone, if you allow applications to be run, someone will find a way of exploiting it. Everyone's information is at jeopary, and if you're not willing to make the assumption otherwise, than you are a fool.
The same applies to Facebook, if you for a moment assume that the entire world can't or won't be able to see everything you've ever posted on Facebook or any other social media site, then by all means, stop using them. They're all susceptible and they all will be compromized in one way or another eventually.
Visa, Mastercard, banks, companies that have invested countless millions of dollars to protect their infrastructure have been hacked, and you think these companies (or any others) are perpetually immune?
Be fatalistic? Not really. I use Android and like it. I don't download programs that have stupid permissions and life goes on. Do I ever have the delusion that my phone is safe from external compromise? Not in a million years.
Fedora is definitely bleeding edge, but often rewarding. I have had a very sucessful Fedora 16 run except for the brief period when the early 3.3.2's would panic my laptop (was fixed in 3.3.x evidently), so I was stuck with an older kernel for a while and life went on. Fedora 17 on one of my alternate laptops seems even better so far, but my only pain is that its still a b**ch to install Sun JVM's on it (Many java apps I use still barf horribly and regularly with the IcedTea variants).
Can anyone point me at a good clean and simple setup for alternatives to work out of box?
I don't know what you're smoking. I bought a laptop 2 christmases ago. It had Core2duo, 3GB ram (upgraded cheaply to 8), and 72k HD and it cost me all of $300. Mind you it was on sale at the time, but I'm sure you could care less, because you have more of an axe to grind against taking air out of the port's claim that you can buy a good laptop for $300, which you can, if you actually bothered to get off your ass and looked.
Last Feb, I bought an XPS 15 for work, and it was a pricy $1500 fully speced, but it was for work, so I thought why not. My fellow contractor at the time did the same, but with a new Mac Book Pro. I think the specs were effectively the same. His may be Sandy whereas mine was Ivy. His cost was somewhere a little north of $3k Mac's ARE NOT CHEAP, and nobody can sugar coat that pill no matter how you try. I love my computer, and he loves his, so in the end its all fine.
I picked up an XPS 15 which supports mini-display port (which I dongled to DVI) and HDMI. At least with my video chip and Linux, I can run both external heads at the same time (not all three though, so I suppose only 2 internal DAC's). I think there's some inspirons that have dual headed docks, but I really haven't looked into it since getting mine. I'm pretty sure that Mini-display port can be dongled to VGA, but at least on linux it was always flaky for me.
A co-worker and I both bought XPS-15's at the same time. Mine was an I7 and his an I5. His comp took a dive after two days and mine has been fine. Anyways, for warantee, they made him pay for shipping to them (not sure if this is standard or not) and he'd have to wait until it was all repaired before getting it back. Since he was actually using the laptop for real work and all, he just returned it and decided to buy something local.
Really, almost all of those pre-requisites are mitigated with a system with a good dock and a healthy set of peripherals. If I want a portable laptop (not really much a concern for most developers who work in a cube 99% of the time) I'd at least like a dock so that I can easily leave the crap behind. My big MUST in a computer is at least decent dual monitor support and enough RAM / horsepower so that I don't feel bogged down doing day to day work.
I've got an XPS-15 and it has a great 1980x1080 panel. If you're seriously considering a non-trivial outlay, it may be worth your time. The only thing is the laptop isn't super light, so not the best traveller.
Um, how about an XPS 15? I bought my pre-sandbridge fully loaded last Feb 2011
Core I7 8GB ram 500MB (non-sata) 2GB unshared discrete Nvidia video (dual external tuners) -- 1980x1080 native panel screen (gloss, but oh well) Price: $1600cad Price now is probably closer to $1000 Running Fedora 15/16 (17 soon) and besides a small niggle with the video (doesn't boot two external heads, so I need to turn one of them on when I'm in X)
I've since upgraded to a 160 SATA, but the rest is great.
The thing works very well, and is quite comparable to my co-worker's $3000 (new) sandybridge enabled Macbook Pro.
robots.txt grumpy, if you don't want to join the link economy.
Google, apple, or any company, organization, etc.. If API's are implicitely copyrighted by definition, all open standards are suspect, all transparency, who the hell knows what happens with the concept of fair use.
The other thought was that Google's web page has never has been an API. Its an end user access mechanism to their service (which hosts a collection of useful information). If you want to use their service, you abide by their TOS which specifically forbits scraping. I've never signed an NDA for using a programming language, but it bet if I did, I'd be just as liable for breaking the terms of use as any Google scraper would be for abusing Google's service.
I'm sure you're more or less correct in regards to smart pointers, but with one caveat. In Java, circular dependencies (regardless of how nested) will always be GC'd eventually unless they're hard linked to a heap object hard-linked to a working area on a live thread. We don't care about crazy inter-dependencies that would normally cause reference counter based pointers to leak.
In Java, you really really don't care about how memory gets allocated and removed unless you're doing very non-trivial performance sensitive work, which is generally not the case when one chooses Java as a starting platform to work in. That said, More vetrain programmers will be able to mitigate most bottlenecks relating to object construction/deconstruction with various techniques (constants, reusable 'hold' objects, weak references for well behaved caching, only allocating objects when they're really going to be used, etc..). Nothing here is specific to java, but you just have fewer avenues as a developer to micro-optimize or shoot your foot off, which has and always will be the Java tradeoff.
I forget if it ever got implemented or not yet (maybe in Java 8) they were removing method scoped variables from the heap allocation which makes a billion little heap allocations (and hence fewer and simpler GC's) events a lot more tolerable.
Plus, coming from a long time convert to Java, once you've coded Java for a while, you have to be pretty off your rocker to make actual memory leaks. I mean really really off your rocker. There are times that caches stick around much longer, or you have an engrossing singleton floating around because a newbie doesn't understand anti-patterns but by and large that is a NON-PROBLEM. I've spent maybe 10 minutes this year thinking about memory management, firstly because I don't have the same performance pressure that most C/C++ programs seems to require (you guys are all nuts or game/embedded developers), and second because it is soo hard to actually cause hard-links to data you expected to throw away.
"You can call your implementation of the Java language Java if you comply with the specification." And get it tested with the TCK, which was the original cluster F*CK with Apache and the JCP to begin with, because they would only allow the software to be tested if they signed field of use restrictions which Apache wasn't/couldn't abide by.
There are common sets of Java idioms now bult into the language that makes concurrency and multithreading dead simple (for those that have a clue), but you still need to know where and how your program is supposed to function in a multi-threaded setup (which can be hard for any non-trivial orchestration). Common shared data integrity (volatile, static fields, ThreadLocal, etc..), locked collections (synchronized loop iteration), race conditions, circular lock contention, etc.. all still happen in Java if you aren't careful, so knowledge of proper practices and debugging becomes invaluable regardless of what language you're married to. The one exception may be purely functional languages where side-effects basically don't happen, but I find them very impractical for large scale real world applications ouside of a few (mostly academic) use cases.
Don't forget the real reason dev's support higher level scripting languages like LUA. If they needed to hire trained competent C developers to do the same piece of work that a LUA dev can do, it would cost a hell of a lot more to write games (both in raw dollar value per hour, and in the time wasted 'leading with the crap' that isn't important in C). And like you said, if there was some really problem areas that the script was bottlenecking on painfully, i'm sure that single function could get dragged into a native mapping.
Hell now adays, a ton of projects just leverage the engines from other companies (or teams), slap on some game specific native extensions, spend 15% of the budget on higher level scripting/graphics/sound/voice/etc.. and the other 85% on marketing =)
Thanks troll. Google is the ONE company being sued, and there's a really good rationale for WHY they were sued vs. the multitude of other companies using Java based technologies. That doesn't mean that the law suit will enevitably end up in Oracle's favor (probably not unless they get patent wins).
Before Oracle actually bought Sun, they were probably invested into the multi-billion dollars a year revenues from Java based products. Was there ever the thought that they were going to get their asses sued? No they were following the licenses as issued and they 'followed the rules'. Java products doesn't make it a legal hurdle unless: 1. You use their patents 2. You release a java-clone and call it Java without being 'certified' and licensed 3. You copy/paste part of the Oracle based source into your product
Um, each Java thread runs independently, and in The oracle JVM they're OS threads, so assuming that one wrote 'JavaForKernel' module extensions (and a shared runtime hook), there's no reason why it wouldn't be feasible for Java or a java like language to be used in the kernel. That said, its a horrible horrible idea as a result of performance and memory management overhead and bloat, but it would be a neat idea to be able to debug drivers on the fly instead of performing black rites to get C debuggers working nearly as effectively as Java ones do out of the box.
Just make the tickets named, and non-transferable. Tell people before sales that if your name doesn't match the ticket, you don't get in. Scalping over. Of course that doesn't stop the people who're just going to the conference for the hopes of netting some good swag, but the only true solution for that one would be some sort of accomplishments based invitation vetting process, which seems to be against the nature of these conferences.
I think you'll find that the.NET variants of every one of the languages mentioned are not in fact carbon copied of their namesakes. You may learn the language syntax of all those languages, but MS definitely warps them to fit the paradigm. I can't say that for all languages, but I remember the vast hords of VB6 developers cursing Microsoft's name for the upgrade path from 6->.NET. So yes, Microsoft allows you to implement many syntax standards that all get blobbed into.NET (I imagine in much the same way as LLVM I suppose.
C is the manual transmission of cars, its a lot harder to operate, but you have a lot more control of how it drives. More managed languages are the automatic transmission. For 99% of the time, it'll get you to where you're going just fine, but will waste a little more gas to do it. Standards are more efficient and auto's are more simple.
To further expand the analogy, the new world order of standard transmission is to move into dual-clutch manuals, where you can still twist the knobs if you really want to, but you don't need to; everything runs automatically behind the scenes. Now to put this into a programming language paradigm, its something like making the C#/Java runtime's of the world so efficient that they're (pre?) runtime optimizers become so efficient at optimizing the codepaths that they produce better results than a typical C output. The runtimes are surely not there yet (for most cases), but in 20-30 years, I doubt there will be many pure C developers left just as there are almost non-existant need for assemby programmers in today's market. Jas in cars, the dual-clutch systems will become so cheap and so convenient that you won't find pure manuals in all but the most specific niche markets in well, maybe the same 20 years.
WTF is a Java guy? Someone who's never taken univerity? Never gone to school? How many collage courses have you been to where C was not on the curriculum? Your experience is absolute garbage. Step back and look at these people's: Age, Experience, Training and then tell me its their mythical 'language'-guy affiliation that makes them better or worse developers.
IMHO, the many 'C-guys' I've worked with write really crappy Java for at least 1.5 years before they just get it, and usually by then they aren't C guys anymore, because they get a lot more done in Java, or C#, or whatever. It won't be as performant but typically if the language of choice for a project is open for debate, then a mainstream higher level language is typcially the safer and better (over the life of the product) choice.
I was a C guy who became a Java guy. Why? Its stupidly simple to just do your work in Java instead of working with 1600 miute details of busy work that chokes productivity away from what I'm really trying to accomplish. Java has its busy work which a lot of people have been griping about for years, but its leaps and bounds from C in terms of random crap that you always have to worry about whenever your trying to accomplish something simple and straight forward.
I would not deny that every developer should at least learn on C to get familiar with the inner workings of higher level languages, and the best practices on the micro level around it, but if we all went back to C or C++, productivity would drop off the fall off the cliff (not even the learning curve, bugs etc..), just the amount of extra effort to make X from one language to another.
Funny that you're so good at diagnosing memory leaks, because in C you will spend a non-trivial amount of time detecting and fixing leaks, since any trivial omision or day to day bug could often lead to leaks. Now in the (fully) managed world, the chance of a truely leaked object becomes --substantially-- harder to accomplish (aka doing stupid things with static singletons, adding crap to an ever growing collection, etc..), and maybe because of that, the developers that use them aren't as equipped as those in the C/C++ world because by and large, they don't have to.
Well, if you bought it without clicking a EULA (maybe even if you did in some places), you could always go to small claims court, get a summary judgement (because bliz would never show up) and then get a refund through your credit card. Just don't plan to ever buy another Blizzard game again if you decide to do so, because you'll be on perma-ban for sure.
Last time I checked, Android user adoption was accelerating. Can a crappy experience hurt sales, sure. Can Horror stories about malicious app X, or Y scare the crap out of some people using their smart phone of choice, sure. At the end of the day, if you're using an Android phone, or an IOS phone, a blackberry, or windows phone, if you allow applications to be run, someone will find a way of exploiting it. Everyone's information is at jeopary, and if you're not willing to make the assumption otherwise, than you are a fool.
The same applies to Facebook, if you for a moment assume that the entire world can't or won't be able to see everything you've ever posted on Facebook or any other social media site, then by all means, stop using them. They're all susceptible and they all will be compromized in one way or another eventually.
Visa, Mastercard, banks, companies that have invested countless millions of dollars to protect their infrastructure have been hacked, and you think these companies (or any others) are perpetually immune?
Be fatalistic? Not really. I use Android and like it. I don't download programs that have stupid permissions and life goes on. Do I ever have the delusion that my phone is safe from external compromise? Not in a million years.
Fedora is definitely bleeding edge, but often rewarding. I have had a very sucessful Fedora 16 run except for the brief period when the early 3.3.2's would panic my laptop (was fixed in 3.3.x evidently), so I was stuck with an older kernel for a while and life went on. Fedora 17 on one of my alternate laptops seems even better so far, but my only pain is that its still a b**ch to install Sun JVM's on it (Many java apps I use still barf horribly and regularly with the IcedTea variants).
Can anyone point me at a good clean and simple setup for alternatives to work out of box?
I don't know what you're smoking. I bought a laptop 2 christmases ago. It had Core2duo, 3GB ram (upgraded cheaply to 8), and 72k HD and it cost me all of $300. Mind you it was on sale at the time, but I'm sure you could care less, because you have more of an axe to grind against taking air out of the port's claim that you can buy a good laptop for $300, which you can, if you actually bothered to get off your ass and looked.
Last Feb, I bought an XPS 15 for work, and it was a pricy $1500 fully speced, but it was for work, so I thought why not. My fellow contractor at the time did the same, but with a new Mac Book Pro. I think the specs were effectively the same. His may be Sandy whereas mine was Ivy. His cost was somewhere a little north of $3k Mac's ARE NOT CHEAP, and nobody can sugar coat that pill no matter how you try. I love my computer, and he loves his, so in the end its all fine.
My coworker picked up:
http://accessories.us.dell.com/sna/productdetail.aspx?c=us&l=en&cs=19&sku=224-9949&baynote_bnrank=7&baynote_irrank=0&~ck=baynoteSearch
This monitor looks rediculously crazy large, but absolutely awesome every time I walk by his desk.
I picked up an XPS 15 which supports mini-display port (which I dongled to DVI) and HDMI. At least with my video chip and Linux, I can run both external heads at the same time (not all three though, so I suppose only 2 internal DAC's). I think there's some inspirons that have dual headed docks, but I really haven't looked into it since getting mine. I'm pretty sure that Mini-display port can be dongled to VGA, but at least on linux it was always flaky for me.
A co-worker and I both bought XPS-15's at the same time. Mine was an I7 and his an I5. His comp took a dive after two days and mine has been fine. Anyways, for warantee, they made him pay for shipping to them (not sure if this is standard or not) and he'd have to wait until it was all repaired before getting it back. Since he was actually using the laptop for real work and all, he just returned it and decided to buy something local.
Really, almost all of those pre-requisites are mitigated with a system with a good dock and a healthy set of peripherals. If I want a portable laptop (not really much a concern for most developers who work in a cube 99% of the time) I'd at least like a dock so that I can easily leave the crap behind. My big MUST in a computer is at least decent dual monitor support and enough RAM / horsepower so that I don't feel bogged down doing day to day work.
I've got an XPS-15 and it has a great 1980x1080 panel. If you're seriously considering a non-trivial outlay, it may be worth your time. The only thing is the laptop isn't super light, so not the best traveller.
Um, how about an XPS 15? I bought my pre-sandbridge fully loaded last Feb 2011
Core I7
8GB ram
500MB (non-sata)
2GB unshared discrete Nvidia video (dual external tuners) -- 1980x1080 native panel screen (gloss, but oh well)
Price: $1600cad Price now is probably closer to $1000
Running Fedora 15/16 (17 soon) and besides a small niggle with the video (doesn't boot two external heads, so I need to turn one of them on when I'm in X)
I've since upgraded to a 160 SATA, but the rest is great.
The thing works very well, and is quite comparable to my co-worker's $3000 (new) sandybridge enabled Macbook Pro.
robots.txt grumpy, if you don't want to join the link economy.
Google, apple, or any company, organization, etc.. If API's are implicitely copyrighted by definition, all open standards are suspect, all transparency, who the hell knows what happens with the concept of fair use.
The other thought was that Google's web page has never has been an API. Its an end user access mechanism to their service (which hosts a collection of useful information). If you want to use their service, you abide by their TOS which specifically forbits scraping. I've never signed an NDA for using a programming language, but it bet if I did, I'd be just as liable for breaking the terms of use as any Google scraper would be for abusing Google's service.
I'm sure you're more or less correct in regards to smart pointers, but with one caveat. In Java, circular dependencies (regardless of how nested) will always be GC'd eventually unless they're hard linked to a heap object hard-linked to a working area on a live thread. We don't care about crazy inter-dependencies that would normally cause reference counter based pointers to leak.
In Java, you really really don't care about how memory gets allocated and removed unless you're doing very non-trivial performance sensitive work, which is generally not the case when one chooses Java as a starting platform to work in. That said, More vetrain programmers will be able to mitigate most bottlenecks relating to object construction/deconstruction with various techniques (constants, reusable 'hold' objects, weak references for well behaved caching, only allocating objects when they're really going to be used, etc..). Nothing here is specific to java, but you just have fewer avenues as a developer to micro-optimize or shoot your foot off, which has and always will be the Java tradeoff.
I forget if it ever got implemented or not yet (maybe in Java 8) they were removing method scoped variables from the heap allocation which makes a billion little heap allocations (and hence fewer and simpler GC's) events a lot more tolerable.
Plus, coming from a long time convert to Java, once you've coded Java for a while, you have to be pretty off your rocker to make actual memory leaks. I mean really really off your rocker. There are times that caches stick around much longer, or you have an engrossing singleton floating around because a newbie doesn't understand anti-patterns but by and large that is a NON-PROBLEM. I've spent maybe 10 minutes this year thinking about memory management, firstly because I don't have the same performance pressure that most C/C++ programs seems to require (you guys are all nuts or game/embedded developers), and second because it is soo hard to actually cause hard-links to data you expected to throw away.
"You can call your implementation of the Java language Java if you comply with the specification."
And get it tested with the TCK, which was the original cluster F*CK with Apache and the JCP to begin with, because they would only allow the software to be tested if they signed field of use restrictions which Apache wasn't/couldn't abide by.
There are common sets of Java idioms now bult into the language that makes concurrency and multithreading dead simple (for those that have a clue), but you still need to know where and how your program is supposed to function in a multi-threaded setup (which can be hard for any non-trivial orchestration). Common shared data integrity (volatile, static fields, ThreadLocal, etc..), locked collections (synchronized loop iteration), race conditions, circular lock contention, etc.. all still happen in Java if you aren't careful, so knowledge of proper practices and debugging becomes invaluable regardless of what language you're married to. The one exception may be purely functional languages where side-effects basically don't happen, but I find them very impractical for large scale real world applications ouside of a few (mostly academic) use cases.
Don't forget the real reason dev's support higher level scripting languages like LUA. If they needed to hire trained competent C developers to do the same piece of work that a LUA dev can do, it would cost a hell of a lot more to write games (both in raw dollar value per hour, and in the time wasted 'leading with the crap' that isn't important in C). And like you said, if there was some really problem areas that the script was bottlenecking on painfully, i'm sure that single function could get dragged into a native mapping.
Hell now adays, a ton of projects just leverage the engines from other companies (or teams), slap on some game specific native extensions, spend 15% of the budget on higher level scripting/graphics/sound/voice/etc.. and the other 85% on marketing =)
Thanks troll. Google is the ONE company being sued, and there's a really good rationale for WHY they were sued vs. the multitude of other companies using Java based technologies. That doesn't mean that the law suit will enevitably end up in Oracle's favor (probably not unless they get patent wins).
Before Oracle actually bought Sun, they were probably invested into the multi-billion dollars a year revenues from Java based products. Was there ever the thought that they were going to get their asses sued? No they were following the licenses as issued and they 'followed the rules'. Java products doesn't make it a legal hurdle unless:
1. You use their patents
2. You release a java-clone and call it Java without being 'certified' and licensed
3. You copy/paste part of the Oracle based source into your product
Um, each Java thread runs independently, and in The oracle JVM they're OS threads, so assuming that one wrote 'JavaForKernel' module extensions (and a shared runtime hook), there's no reason why it wouldn't be feasible for Java or a java like language to be used in the kernel. That said, its a horrible horrible idea as a result of performance and memory management overhead and bloat, but it would be a neat idea to be able to debug drivers on the fly instead of performing black rites to get C debuggers working nearly as effectively as Java ones do out of the box.
Google employees and good friends didn't have to wait for tickets. My contemporary got his tickets couple weeks ago, and he may not even go...
Just make the tickets named, and non-transferable. Tell people before sales that if your name doesn't match the ticket, you don't get in. Scalping over. Of course that doesn't stop the people who're just going to the conference for the hopes of netting some good swag, but the only true solution for that one would be some sort of accomplishments based invitation vetting process, which seems to be against the nature of these conferences.
I think you'll find that the .NET variants of every one of the languages mentioned are not in fact carbon copied of their namesakes. You may learn the language syntax of all those languages, but MS definitely warps them to fit the paradigm. I can't say that for all languages, but I remember the vast hords of VB6 developers cursing Microsoft's name for the upgrade path from 6->.NET. So yes, Microsoft allows you to implement many syntax standards that all get blobbed into .NET (I imagine in much the same way as LLVM I suppose.