5 ms·
Adding a new Bytecode instruction to the .NET runtime
- krallja 9y agoEvery time I see a post by matthewwarren I know I'm about to learn something seriously fun.
- thaiphanvevo 9y agoThis Matt Warren character is pretty hardcore. His passion for .NET is pretty inspirational!
- matthewwarren 9y agoWell it's a pretty interesting platform/runtime! And now that it's open-source it's easy to look under the hood and have a play around
- matthewwarren 9y agoThat's good! I always learn something when I write my posts, but it nice to know I'm not the only one
- WaxProlix 9y agoThat tl;dr wasn't very good.
- DiabloD3 9y agoI think if you tried to publish an article where you tried to add an opcode to an existing JVM... Oracle would nastygram you even if you never released the source code or even if you didn't do it to a JVM based on theirs. Something is seriously wrong with some companies. Edit: To those downvoting, remember, if you disagree, post a reply.
- kogir 9y agoThe downvotes are probably because Oracle is off topic, and you can add an opcode to OpenJDK and even blog about it if you so desire.
- pjmlp 9y agoOracle gets a bit around bad reputation on HN circles, but lot of us on the enterprise world actually do like their software. As for Java, they were already selling Java based products around 2000 and former Sun employees like James Gosling, were not happy with Google actions but Sun had run out of money for any kind of lawsuits. Also it is easy to write angry posts about Oracle's decisions, but if Google, Red-Hat or IBM actually cared that much about Java's future they would have given work to those driving the future of the language, instead of ignoring them.
- douche 9y agoJava is just... disappointing. I learned Java 5 (1.5) a decade ago in high school, for the AP test, and it's just made very little real progress since, particularly in comparison to the rest of the field. I look at all of the innovations and convenience features that C#(an unashamed Java clone at the start) has introduced in the meantime, and it makes me wonder what is so broken with Java.
- pjmlp 9y agoI deslike C a lot, however it still is probably the only programming language with more market share than Java. C design is driven by committee with deep respect for backwards compatibility, despite the inherent security flaws, the language differences between C11 and C89 are superficial. Likewise, in spite of having Oracle at the helm, Java's design is driven by the JEP working group. When the majority of the world depends on Java, cannot add language features just because they look cool. C# moves fast because it mostly only Microsoft calling the shot, even if they are now taking input via Github. We just saw Java politics recently with IBM and Red-Hat vetting jigsaw because it isn't a copy of OSGi.
- erikig 9y agoThis resource for Matt's attributions footer is a boon for CLI hackers: http://www.newardassociates.com/files/SSCLI2.pdf http://www.newardassociates.com/files/SSCLI2.pdf
- matthewwarren 9y agoYeah there's lots of good stuff in there. Even though it's written about the Shared Source code (.Net 2.0), lots of the info in the book still applies
- taspeotis 9y agoHow does one generate those "Assembly listing for method" listings?
- schrodinger 9y agoYou can use a tool called ildasm (Intermediate language disassembler) provided by Microsoft [1], or a more polished tool like ILSpy [2]. 1: https://msdn.microsoft.com/en-us/library/f7dy01k1(v=vs.110).aspx https://msdn.microsoft.com/en-us/library/f7dy01k1(v=vs.110).... 2: http://ilspy.net/ http://ilspy.net/
- taspeotis 9y agoThanks for the answer. Won't that get me the IL and not the ASM?
- mandaleeka 9y agoCorrect. To view the JIT-emitted code, you can either use a debugger or set a special environment variable (COMPlus_JitDisasm='NameOfMyMethod') that tells the JIT to emit some logging about the code it generates for that method (it appears this is what the author of the blog post did).
- taspeotis 9y agoCOMPlus_JitDisasm lead me to this [1]. Thanks! [1] https://github.com/dotnet/coreclr/blob/master/Documentation/building/viewing-jit-dumps.md https://github.com/dotnet/coreclr/blob/master/Documentation/...
- matthewwarren 9y agoYeah that's how I did it, I guess I should include the 'COMPlus_JitDisasm' info in the post, when I get a chance I'll update it
- pjmlp 9y agoAnother easier way is just to run it under Visual Studio debugging session, put breakpoint on the code one wants to see and select "Show Disassembly" view.
- 0xffffff77a81g9 9y ago> It contains just a cmp, a jg and a couple of mov instructions Using cmov you can improve performance a bit.
- hdhzy 9y agoExcellent post. The blog [0] is an incredible boon for anyone interested in CLR internals. I wonder if the author considered writing a book, kind of modern Shared Source CLI Essentials (that I read years ago and hold in high regard)? [0]: http://mattwarren.org/ http://mattwarren.org/
- matthewwarren 9y ago> I wonder if the author considered writing a book.. Now there's an idea :-) BTW I've been bugging/asking the author of the SSCLI book if he has any plans to update it, see http://mattwarren.org/2017/05/19/Adding-a-new-Bytecode-Instruction-to-the-CLR/#comment-3315200281 http://mattwarren.org/2017/05/19/Adding-a-new-Bytecode-Instr...
- pinum 9y agoI noticed you added your instruction by replacing one of the "unused" entries. Would things have been more complicated if there weren't any of those left? Or is there a strict limit to the number of instructions, with existing "unused" entries for all of the free ones?
- matthewwarren 9y agoSomeone else asked that questions over on /r/programming, see https://www.reddit.com/r/programming/comments/6c3qsh/adding_a_new_bytecode_instruction_to_the_clr/dhrrfs1/ https://www.reddit.com/r/programming/comments/6c3qsh/adding_... for the discussion