Roslyn



MS에서 발표한 RoadMap에 따라 예고 되었던 로슬린 개발 진행이 표면에 나타나고 있습니다.


우선 관련 URL을 알려 드리도록 하겠습니다.


Roslyn HomePage

Roslyn Overview



저에게 로슬린(Roslyn)이라고 하면 떠 오르는 관련 단어가 아래와 같습니다.


- 동적 컴파일, javascript, script language,  CodeDom, dynamic


이 키워드로 Ryslyn을 알려 드리기에는 미흡하지만 컨셉은 전해줄 수 있을것이라 생각합니다.


간단하게 설명을 드리자면 운영 환경에서 프로그래머의 도움없이 동적으로 수정된 코드를 사용할 수 있도록 지원해주는 Host를 설정하고 사용하는 것입니다.


아래 간단한 예제를 보여 드리겠습니다.

void EngineTest()
{
    var scriptEngine = new ScriptEngine();
    scriptEngine.Execute("using System; Console.WriteLine(DateTime.Now);");
}

위 메소드를 호출하여 실행해 보면 정상적으로 실핼되는 것을 확인할 수 있습니다.

(Roslyn homepage에서 관련 설치 파일을 설치하고 진행해야 정상적으로 동작합니다.)


또 다른 예제

아래 코드는 네임스페이스를 SyntaxTree를 이용해서 수정하는 예제다.

class Program
{
    static void Main(string[] args)
    {
        //코드 텍스트로 Syntax tree에 넣기
        SyntaxTree syntaxTree = SyntaxTree.ParseCompilationUnit(
            @"using System;
            namespace Sample
            {
                class Class1
                {
                }
            }");
 
        //Sample 네임스페이스를 RoslySample로 수정을 위한 루트 가져오기
        var root = (CompilationUnitSyntax)syntaxTree.Root;
 
        //현재 네임스페이스 가져오기
        var currentNamespace = (NamespaceDeclarationSyntax)root.Members[0];
 
        //새로운 네임 스페이스 수정 코드
        var newNameSpace = currentNamespace.Update(currentNamespace.NamespaceKeywordSyntax.IdentifierName("RoslynSample"), currentNamespace.OpenBraceToken,
                                                    currentNamespace.ExternscurrentNamespace.UsingscurrentNamespace.Members,
                                                    currentNamespace.CloseBraceTokencurrentNamespace.SemicolonTokenOpt);
 
        //RoslynSample로 수정된 코드 노드를 업데이트 한다.
        root = root.ReplaceNode(currentNamespacenewNameSpace);
    }
}

이와 같이 작성된 코드에 대해서도 이후에 수정을 임의로 할 수 있고, 이 과정으로 인해 올바르게 작성이 되었는지 여부나 자동 refactoring을 해주는 서비스를 해 줄 수도 있을 것이다.


관련 URL : Example #1


+ Recent posts