문제

니킬 코타리 스크립트# 아마도 꽤 오랫동안 JavaScript 분야에서 보아온 가장 놀라운 개념 중 하나일 것입니다.이 질문은 JavaScript에 관한 것이 아니라 .NET 런타임의 언어 컴파일에 관한 것입니다.

저는 .NET 플랫폼을 사용하여 원래 컴파일러가 출력을 생성하도록 허용하면서 원래 컴파일러와 별도의 출력을 생성하는 컴파일러(예: C#)가 이미 있는 언어용 컴파일러를 작성할 수 있는 방법에 관심이 있었습니다. 동일한 빌드 작업 중에 동일한 소스를 사용하고 다른 컴파일러의 출력도 참조/사용합니다.

올바른 세부 사항으로 질문을 할 만큼 프로세스를 잘 이해하고 있는지는 확실하지 않지만, 이것이 Script# 문서의 다이어그램에 따라 현재 프로세스를 보는 방식입니다.나는 이와 같은 개념을 활용할 수 있는 복잡한 언어 설계 및 컴파일과 관련된 많은 것에 대해 생각해 보았고 다른 사람들이 개념에 대해 어떻게 생각하는지 관심이 있습니다.

--

편집하다:지금까지 의견을 보내주셔서 감사합니다.귀하의 정보는 그 자체로 매우 흥미롭고 더 조사하고 싶습니다. 그러나 제 질문은 실제로 동일한 소스에서 동시에 실행될 수 있는 자체 컴파일러를 작성하는 방법에 관한 것입니다. CLR을 사용하여 여러 가지 유형의 (잠재적으로) 상호 의존적인 출력을 생성합니다.Script#은 동일한 C# 소스를 사용하여 JavaScript와 어셈블리를 생성하는 동시에 컴파일된 어셈블리가 JavaScript와 협력하도록 만들기 때문에 예제 역할을 합니다.이런 성격의 것을 디자인하는데 있어서 다양한 접근 방식과 이론적 개념은 무엇인지 궁금합니다.

도움이 되었습니까?

해결책

컴파일러가 수행하는 모든 작업은 소스 언어(이 경우 C#)를 가져와서 이를 구문 분석하여 컴파일러가 사람이 아닌 언어에 적합한 표현(추상 구문 트리)을 갖게 한다는 점을 인식하는 것이 중요합니다. 대상 언어에 대한 순진한 코드 생성(msil은 .NET 런타임에서 실행되는 언어의 대상)

이제 script# 코드가 어셈블리로 변환되어 다른 .NET 코드와 상호 작용하는 경우 이는 이 컴파일러가 msil을 생성해야 함을 의미합니다.script#은 이를 위해 표준 C# 컴파일러인 csc.exe를 사용하고 있습니다.이제 javascript를 생성하려면 c# 또는 msil을 가져와서 구문 분석하고 javascript를 생성하여 브라우저에 보내야 합니다.문서에는 ssc.exe라는 사용자 정의 C# -> js 컴파일러가 있다고 나와 있습니다.

클라이언트 측과 서버 측 모두에서 일관되게 상호 작용할 수 있도록 .NET으로 작성되었지만 javascript로 컴파일된 참조 어셈블리 세트가 있습니다.이는 컴파일러 관련 문제는 아니지만 해당 참조 어셈블리는 script# 런타임입니다.런타임은 아마도 여러분이 인지하고 있는 많은 script# 마법을 담당할 것입니다.

다른 팁

이제 C#을 Javascript로 컴파일한다고 가정해 보겠습니다.기존 C# 컴파일러를 활용할 수 있는지 묻는 질문입니다. C#을 Javascript로 직접 컴파일하는 대신 C# 컴파일러에서 생성된 MSIL을 실제로 Javascript로 변환합니까?

물론이죠. 그렇게 할 수 있습니다.MSIL 바이너리가 있으면 원하는 대로 무엇이든 할 수 있습니다.

Microsoft는 다음과 같은 연구 프로젝트를 진행하고 있습니다. 볼타 무엇보다도 msil을 JavaScript로 컴파일합니다.

기존의 친숙한 도구, 기술 및 패턴을 사용하여 멀티 계층 웹 응용 프로그램을 구축하기위한 개발자 도구 세트.Volta의 선언적 계층 분할을 통해 개발자는 마지막으로 책임있는 순간까지 배포에 대한 건축 결정을 연기 할 수 있습니다.또한 다중 계층의 공유 프로그래밍 모델 덕분에 Volta는 더 높은 수준의 애플리케이션 성능, 견고성 및 신뢰성을위한 새로운 엔드 투 엔드 프로파일 링 및 테스트를 가능하게합니다.선언적 계층 분할을 사용하여 개발자는이 프로파일 링 데이터를 기반으로 건축 결정을 개선 할 수 있습니다.이로 인해 수동 리팩토링과 관련된 시간과 비용이 절약됩니다.사실상 Volta는 .NET 플랫폼을 확장하여 기존의 친숙한 도구 및 기술을 사용하여 소프트웨어+서비스 응용 프로그램의 개발을 더욱 가능하게합니다.

개발 프로세스 후반에 서버 계층 및 클라이언트 계층에서 실행되는 응용 프로그램의 일부를 할당하여 .NET 클라이언트 응용 프로그램으로 애플리케이션을 설계하고 구축합니다.클라이언트와 Volta는 Tier-Splitting의 복잡성을 처리 할 때 웹 브라우저 또는 CLR을 대상으로 할 수 있습니다.컴파일러는 클라이언트 계층에 대한 크로스 브라우저 JavaScript, 서버 계층에 대한 웹 서비스 및 모든 통신, 직렬화, 동기화, 보안 및 기타 보일러 플레이트 코드를 생성하여 계층을 함께 연결합니다.사실상 Volta는 애플리케이션의 맞춤 없이도 여러 환경에서 최상의 경험을 제공합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top