5 ms·
crap - will be sticking to my free version. Soon they will charge for access to their own software documentation.
by ntulip 16y ago
crap - will be sticking to my free version. Soon they will charge for access to their own software documentation.
- toadi 16y agoDon't see the harm in charging money for labor. Everybody needs to be payed and it doesn't seem a ripoff price.
- timrobinson 16y agoSo the OSS community wouldn't do a better job of building a .NET decompiler?
- toadi 16y agoIs that what you understood from my comment? Little bit touchy ;)
- timrobinson 16y agoI agree $35 isn't a ripoff price, but not that 'everybody needs to be paid'. For instance, Red Gate recently added an F# mode, which essentially doesn't work. If Reflector had been open source and free, I'd have been willing to get this feature running. The benefit I'd derive from a working F# mode would likely make the effort worthwhile.
- toadi 16y agoThat's true. But not everybody needs open source their software. And i'm not judging against open sourcing software either.
- johnzabroski 16y agoI could be interested in building a Reflector clone if somebody would write an F# plug-in to the project. I would probably start with looking at the CCI-Metadata project on Codeplex, and the Microsoft Phoenix compiler framework. Mono has similar libraries, but I only know a very small subset of Mono.Cecil API. Cheers, Z-Bo
- timrobinson 16y agoI did look into cloning Reflector when Red Gate originally acquired it. The work involved looks similar to that needed to build a .NET compiler, but in reverse. That is, you take a low-level machine representation; then build up a control flow graph; then map that control flow graph onto common high-level constructs such as if statements and for loops.
- johnzabroski 16y agoI'm very familiar with engineering compilers and de-compilers. Have you seen Microsoft Phoenix? It lets you sink/hoist intermediate representations; the key for this would be having an API that allows ordering graph rewriting rules so that you can take the MSIL and convert it the right higher-level form (e.g., should this use LINQ? Well, what does the app settings say the user wants to see the code as?). Anyway, since Reflector is written in C#, it would be able to develop a clone much faster using code generation, since I bet Reflector uses a ton of Visitor patterns and needless C# boilerplate. I won't promise performance comparable to Redgate's Reflector, but my rule of thumb is Correct. Clear. Fast. In that order.
- timrobinson 16y agoI hadn't seen Phoenix before reading your comment, but I like the look of it. Looks useful for general compiler tinkering. When I looked at this a while back, I was trying to do it in C# on Mono.Cecil. I got bogged down writing things like CSharpWhileLoopVisitor...
- quag 16y agoReflector uses Mono's Cecil. It ships with a copy of the Cecil license.
- johnzabroski 16y agoThank you very much for that tidbit.
- acdha 16y agoDoes the OSS community mean you or other people whose time you don't have to pay for? Open source works by volunteering and yet I don't see many people stepping up to work on an alternative.
- mkr-hn 16y agoThat's because the need for an alternative has existed for less than 48 hours. I would prefer whoever has decided to do an alternative get a prototype built before announcing. Announcing before you start can easily lead to vaporware. :)
- rbanffy 16y agoI don't speak for the OSS community, but I am quite sure not many of them care enough about .NET to develop something like this.
- johnzabroski 16y agoThere are some outstanding open source .NET libraries that blow away what you can get in Java. Likewise, some COTS .NET libraries blow away equivalent Java libraries (e.g., for unit testing and inversion of control, query-driven source code analysis, etc.). But comparing .NET to anything other than Mono is apples to oranges.
- rbanffy 16y agoIndeed. The Mono folks may be interested in building something like this and glue it into MonoDevelop.
- shellscape 16y agoGlad you don't speak for all of us... An effort is already underway. Thankfully we have until the end of May to get this to a usable, somewhat mature state. RedGate's handling of this situation has lit a fire under me and a few other developers, and we're committed to releasing a free, open source competitor, and replacement, for Reflector. https://github.com/jcdickinson/Monoflector https://github.com/jcdickinson/Monoflector RedGate really screwed the pooch on this one.
- johnzabroski 16y agoThe ripoff is in the fact that they have added nothing significant to the product other than making it more difficult for people to obtain.
- true_religion 16y agoAh but they paid the original dev, so by law of transference they're the ones who are creating utility for you.
- DrJokepu 16y agoYou can't stick to your free version, I'm afraid. There's a built in expiration date in the latest free version; after April 15th 2011 it will no longer work.
- DrJokepu 16y ago(As a side note, it would be interesting to use Reflector to decompile Reflector itself and remove the expiration date or extend it to the far future. I know it's illegal and unethical, but it would be a fun and interesting exercise.)
- jeffesp 16y agoI Reflectored Reflector once and I found that the source was obfuscated. I don't think that would be a trivial task.
- nlawalker 16y agoInterestingly, I'm pretty sure that the original wasn't obfuscated, and Red Gate obfuscated it after they received it from the original developer.
- timrobinson 16y agoReflector's always been obfuscated; Lutz Roeder had a paid-for version as well alongside the free one. (You don't think the first thing we tried with Reflector was to reflect Reflector? :) )
- thisisfmu 16y agoReflector was not always obfuscated. Old versions embedded an unobfuscated but weakly encrypted dll with the core program.
- MichaelGG 16y agoMost compiled code doesn't have debug info and internal symbols. Yet, changing something like an expiry date is often a trivial task. Obfuscation just means you'll actually have to poke around a bit instead of just searching for "isExpiryDateReached".