Hacker News new | past | comments | ask | show | jobs | submit login
Adding a new Bytecode instruction to the .NET runtime (mattwarren.org)
287 points by matthewwarren on May 19, 2017 | hide | past | web | favorite | 28 comments

Every time I see a post by matthewwarren I know I'm about to learn something seriously fun.

That's good!

I always learn something when I write my posts, but it nice to know I'm not the only one

This Matt Warren character is pretty hardcore. His passion for .NET is pretty inspirational!

Well 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

This resource for Matt's attributions footer is a boon for CLI hackers: http://www.newardassociates.com/files/SSCLI2.pdf

Yeah 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

I 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?

Someone else asked that questions over on /r/programming, see https://www.reddit.com/r/programming/comments/6c3qsh/adding_... for the discussion

How does one generate those "Assembly listing for method" listings?

You 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)....

2: http://ilspy.net/

Thanks for the answer. Won't that get me the IL and not the ASM?

Correct. 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).

COMPlus_JitDisasm lead me to this [1]. Thanks!

[1] https://github.com/dotnet/coreclr/blob/master/Documentation/...

Yeah 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

Another 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.

I'm aware of this method but I've found it difficult in practice, you want to be running in Release mode for the JIT optimisatinos. Then due to method inlining your breakpoint might get inlined somewhere that "just my code" thinks is not your code. You rarely want "just my code" off in practice, so it becomes cumbersome to toggle off/on.

Yeah I agree it isn't the best way, just one that I find comfortable to use since I am always on Studio.

What about using Windbg with the sos.dll extensions?

Excellent 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/

> 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-Instr...

> It contains just a cmp, a jg and a couple of mov instructions

Using cmov you can improve performance a bit.

That tl;dr wasn't very good.

I 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.

The 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.

Oracle 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.

Java 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.

I 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.

> C# moves fast because it mostly only Microsoft calling the shot, even if they are now taking input via Github.

Is Microsoft, RedHat, JetBrains, Unity, Samsung and Google (Also Mono and Xamarin - though they are now part of Microsoft) - as well as the wider community via GitHub etc


.NET Foundation was created when .NET went open source, about two years ago.

Still very new and so far Microsoft has been driving most of it, as one can see from the Github architecture meetings.

It is bit different from JCP which goes all the way back to 1998.

Just having the logos on the .NET Foundation web site doesn't mean those companies are driving language decisions.

Guidelines | FAQ | Support | API | Security | Lists | Bookmarklet | Legal | Apply to YC | Contact