5 ms·
I think this is quite interesting. The ability to treat code as data is an incredibly powerful concept. I don't know exactly what Roslyn does, but I see a lot o
by Jupe 15y ago
I think this is quite interesting. The ability to treat code as data is an incredibly powerful concept. I don't know exactly what Roslyn does, but I see a lot of potential:
1. Measuring code complexity. I've often felt that code complexity can be gauged several ways, and one is the number of "if" statements (or select..case). Being able to query the code base of an extremely large solution is a big step in that direction.
2. Being able to "query" the call stack - how do I get from this line to the base constructor of my "user" object. Rather than stepping through the debugger, it could be a query of the code base to find the path from here to there.
3. Detecting bit-rot. Finding any method class that's simply never used could be another "query" of the code base. Yes, proper test-coverage would help detect this, but not every production system has unit tests.
4. I've worked on projects in the past where we really wanted to add guid tracing to the preamble of each function to dynamically trace the code at run time. If Roslyn supports "update" queries of the code, it might be easy to add such a feature across the whole code base (or perhaps only classes that inherit from some known base class).
Managing a code base like this (rather than grepping/searching) is a powerful concept. Perhaps we could see a LINQ for source code some day?
- SeveredCross 15y agoI agree with all of your points, though the only one I can address is the LINQ for source code quip and amend it somewhat to an already possible "LINQ for codebases." It should, in theory, be just a few weekends worth of work to use Mono.Cecil (https://github.com/jbevain/cecil https://github.com/jbevain/cecil) to provide a nice queryable API to inspect an (already compiled) codebase. I'm sure some nice static evaluation tools could be written based on this that nobody's thought of yet. That said, being able to inspect the source-code pre-compilation is a whole other level above and beyond—as a fan of the compile-time safety that statically-typed languages provide, any opportunity to eliminate bugs and complexity before the code makes it to a customer is a welcome one, and if Roslyn is good, it could be huge.
- solutionyogi 15y agoRoslyn will be good. It has to be because from what I understand, the MS team themselves will use Roslyn in Visual Studio and other products. Roslyn isn't just a public API for others to analyze code. It will be the foundation on which .NET framework languages will depend upon. See Eric Lippert (Member of the Roslyn team, C# Principal) notes here: http://blogs.msdn.com/b/ericlippert/archive/2011/10/19/the-roslyn-preview-is-now-available.aspx http://blogs.msdn.com/b/ericlippert/archive/2011/10/19/the-r...
- SeveredCross 15y agoWell…I think Roslyn will be good, but I think it's reaching to say it must be because the MS team themselves will use it. After all, these are the same people who invented (and used!) MFC, long known as the Microsoft Frustration Classes.
- xpaulbettsx 15y ago1992 called and wants its Microsoft stereotype back.
- SeveredCross 15y agoIt was a joke, lighten up. For what it's worth, I'm a .NET developer and think it's awesome.
- solutionyogi 15y agoWell, MFC was actually a library. And I know it was a poor library. But this is a different ball game. With Roslyn, they are going to write C# compiler in C# itself (and VB compiler in VB). And if they expose this as an API, it's guaranteed that I will be able to parse every valid C# file.
- vogonj 15y agoas someone who's tried to use Mono.Cecil, it kind of sucks if you're not already developing on the Mono toolchain (among other things, there's no interoperability between System.Reflection types and Mono.Cecil types, and even if you're on Mono, I don't think you can "vivisect" running Assemblies.) Microsoft has a product called FxCop (http://msdn.microsoft.com/en-us/library/bb429476(VS.80).aspx http://msdn.microsoft.com/en-us/library/bb429476(VS.80).aspx) which does style analysis and linting -- however, the code analysis is all embedded in the FxCop binary and undocumented. suffice to say, I'm psyched about Roslyn -- more about code transformations than correctness aids.
- viggity 15y agoI wrote a static code analysis tool with Cecil (you can write linq statements against your assemblies). And it is free. www.nitriq.com
- solutionyogi 15y agoGreat points. Resharper already does some of this. 1. ReSharper has a plugin to analyze cyclomatic complexity. http://confluence.jetbrains.net/display/ReSharper/Cyclomatic+Complexity http://confluence.jetbrains.net/display/ReSharper/Cyclomatic... 2. ReSharper has Call Tracking and Value Tracking. http://www.jetbrains.com/resharper/features/code_analysis.html#Call_Tracking http://www.jetbrains.com/resharper/features/code_analysis.ht... 3. Once again, if you are not shipping code to outside customers, you can use Solution Wide Analsys to find out unused code. http://www.jetbrains.com/resharper/features/code_analysis.html#Solution-Wide_Analysis http://www.jetbrains.com/resharper/features/code_analysis.ht... 4. PostSharp helps you with your Aspect oriented programming. http://www.sharpcrafters.com/postsharp/features http://www.sharpcrafters.com/postsharp/features ReSharper is already very powerful, imagine if they don't have to write their own lexer and parser and can use the lexer/parser used by the C# compiler. I think they can build more useful features and users are isolated from bugs in their lexing/parsing. I think this is an amazing development and I can't wait for this to go live so that there will be many products like Resharper helping us analyze and improve our code. Relevant SO thread: What would you do with Compiler as a Service. http://stackoverflow.com/questions/4222524/what-would-you-do-with-compiler-as-a-service http://stackoverflow.com/questions/4222524/what-would-you-do...
- euroclydon 15y agoYes, but who will help us analyze and improve our use of compiler as a service?
- rbanffy 15y ago> The ability to treat code as data is an incredibly powerful concept. It was innovative too, in the late 50's...
- rbanffy 15y agoIt's an old saying, "Those who do not know Lisp are doomed to reimplement it."