당신이 중간 형식이있는 경우에, 당신은 언어 X에서 프로그램을 변환하는 것을 구현할 수 에 해당 형식을,도 에서 언어 Y.에 해당 형식 당신이 관심있는 모든 언어에 대한 이러한 변환을 구현하고, 오른쪽 완료?
당신은 무엇을 알고 있습니까? 이러한 형식은 이미 존재합니다 : 어셈블리. 컴파일러는 이미 "언어 X에서 어셈블리로"변환을 수행하고 디스어셈블러를 "어셈블리에서 언어 Y로"변환합니다.
이제 어셈블리는 역변환을 수행하는 데 큰 언어가 아니지만 MSIL은 실제로 그렇게 나쁘지 않습니다. Reflector를 다운로드 하면 .NET 어셈블리를 여러 언어로 분해 할 수있는 옵션이 있습니다 (플러그인은 더 많은 것을 제공합니다). 따라서 C #에서 프로그램을 가져 와서 DLL (MSIL)로 컴파일 한 다음 리플렉터를 사용하여 VB, C ++ / CLI, F # 및 기타 여러 가지로 분해 할 수 있습니다. 물론 다른 모든 변환 작업도 수행됩니다. F # 파일을 가져 와서 DLL로 컴파일하고 Reflector를 사용하여 C #으로 변환하십시오.
물론 두 가지 큰 문제는 다음과 같습니다.
- 코드는 기본적으로 읽을 수 없습니다. MSIL (디버깅 정보 포함)은 원본 소스에서 많은 정보를 제거하므로 변환 된 버전은 100 % 충실도를 갖지 않습니다 (이론적으로 C #-> MSIL-> C # 변환을 수행하면 원래 코드를 다시 제공해야 함). 습관).
- 많은 .NET 언어에는 자체 사용자 지정 라이브러리 (예 : VB 런타임 라이브러리, F # 라이브러리 등)가 있습니다. 변환 할 때도 포함 (또는 변환)해야합니다.
실제로 2 번을 해결할 수는 없지만 MSIL에서 속성을 통해 추가 주석을 사용하여 1 번을 얻을 수 있습니다. 물론 추가 작업이 될 것입니다.