2013-03-04 4 views
11

C#에서 F # 코드를 실행할 수있는 방법이 있습니까? C#에서 응용 프로그램을 작성했습니다. F #을 실행할 수있는 기능을 제공하고, Record 개체를 읽고, F #에서 목록을 열거합니다. 이것에 대한 현재의 해결책은 무엇입니까? 앞으로 Roslyn에 대한 업데이트를 통해이를 수행 할 수있는 방법이 될 것임을 알고 있습니다. 또한 F #에서 F # 코드를 실행하는 방법에 대해 궁금합니다. 쉽게 할 수있는 방법이 있습니까?C#에서 F # 코드 실행 - (C#에서 Roslyn 사용) #

답변

9

현재 F # 라이브러리를 만든 다음 C#에서 호출해야합니다. F #은 .NET 뿐이므로 F # 라이브러리를 사용하는 것은 다른 C# 라이브러리를 사용하는 것과 같습니다. 그러나이 부분에서는 FSharpX을 조사하고 싶지만 C#에서 F #을 쉽게 호출 할 수있는 유틸리티를 제공하고 그 반대도 마찬가지입니다.

C#에서 F #을 동적으로 컴파일하려면 F# Power Pack의 F # CodeDom 구현을 사용해야합니다. 이렇게하면 CodeDom을 사용하여 F #을 즉시 컴파일 한 다음 C#에서 실행할 수 있습니다.

Roslyn은 F #을 코드 모델로 지원하지 않으므로 C# 및 VB.Net 만 지원하므로 여기서는 도움이되지 않습니다. Roslyn을 사용하여 F #에서 C#을 조작하고 컴파일 할 수는 있지만 다른 방법은 사용할 수 없습니다.

8

Reed가 이미 언급 한 옵션 외에도 F # Interactive를 기반으로하는 두 가지 대안이 있습니다. 별도의 프로세스로 실행하거나 오픈 소스 릴리스를 사용하여이를 참조하고 호출 할 수 있습니다 직접적으로 (이것은 상당히 도전적입니다.)

  • 당신은 fsi.exe 프로세스를 시작하고 (표준 입력하여 프로세스에 F # 코드를 전송하여)이 F # 대화 형 환경에서 F # 코드를 평가할 수 :

    그래서 요약하면, 당신은 세 가지 옵션이 있습니다. MonoDevelop에 대한 F # 바인딩은이를 수행하는 좋은 예입니다 (InteractiveSession.fs 참조).

    유일한 어려움은 두 프로세스 간의 통신이지만 .NET 원격 (또는 WCF) 채널을 사용하여이 작업을 수행 할 수 있어야한다고 생각합니다. F # Interactive에서 표준 출력을 읽을 수도 있지만 너무 간단 할 수도 있습니다.

  • 오픈 소스 릴리스 F# compiler & tools을 사용하여 F # 컴파일러의 관련 부분을 참조하고이를 라이브러리로 호출하여 F # 코드를 평가할 수 있습니다. 이 옵션이 가장 좋으며 Roslyn의 인터랙티브 C#에서 얻을 수있는 것과 동일한 옵션을 제공합니다.

    슬프게도, 이것은 쉬운 일이 아닙니다. 나는 이것을하는 아이디어로 놀고 있었고, 나는 진전을 보였습니다 (나는 그것을 나눌 수 있습니다).하지만 아직 끝나지 않았습니다. 아이디어는 fsi.exe (here)의 소스 코드를 가져와 모든 UI를 제거하고 라이브러리로 변환하는 것입니다.

  • CodeDOM을 사용하면 F # 코드 (fsc.exe)를 호출하여 F # 코드를 독립 실행 형 응용 프로그램 (또는 라이브러리)으로 컴파일하고 동적으로로드하고 실행할 수 있습니다.단점은이 옵션을 사용할 때마다 컴파일러의 새로운 인스턴스가 시작되어 조금 느릴 수 있다는 것입니다 (시나리오에 따라 다름)
7

질문이 있기 때문에 많은 질문이 있습니다.

:-) 흥미로운 개발로 이제 정말 쉽게 F# Compiler Services 프로젝트를 사용하여이 작업을 수행 할 수 있습니다

은 F # 컴파일러 서비스 패키지 F 번호를 구현하기위한 추가 기능을 노출하는 F # 컴파일러 소스 코드에서 파생 된 구성 요소 언어 바인딩, 컴파일러 또는 리팩토링을 기반으로하는 추가 도구 도구. 패키지에는 F # 스크립팅을 응용 프로그램에 임베드하는 데 사용할 수있는 F # 대화 형 서비스가 포함되어 있습니다.