Dynamic Language Runtime과 C # 4.0의 관계는 무엇입니까?


11

현재 존재하는 .NET 플랫폼에서 아마도 Scheme 인터프리터 인 동적 언어 컴파일러 / 인터프리터를 만들고 싶다고 가정 해 봅시다. DLR ( Dynamic Language Runtime ) 또는 C # 4.0을 사용하여 언어의 동적 기능을 구현 하는 것이 더 나을까요? 아니면 둘 다 필요합니까?

이 영역에서 특히 IronSchemeIronPython관련 하여 다른 작업이 수행되었음을 알고 있습니다. 두 언어 모두 DLR을 사용합니다. IronPython은 최신 버전의 DLR (약 1 년 전)을 사용하는 반면 IronScheme은 초기 버전의 DLR 초기, 크게 수정 된 포크를 사용합니다. 그러나 이러한 컴파일러를 만들 때는 C # 4.0을 사용할 수 없었습니다.

C # 4.0의 동적 기능을 사용하여 Massive에서 Rob Conery의 작업을 보았습니다 . 꽤 인상적입니다. 그러나 C #은 동적 언어 컴파일러 / 인터프리터의 본격적인 노력을 견뎌 낼 것입니까? C #에서 누락되었거나 DLR이 기본적으로 C # 4.0으로 롤링 된 기능이 DLR에 있습니까? C # 4.0을 방금 사용한 경우 DLR의 중요한 기능이 누락됩니까?


.Net 4.0 Dynamic 기능은 DLR을 기반으로한다고 생각합니다.
Dave Nay


@Dave : .NET 4.0 런타임과 DLR 간의 관계를 자세히 설명하는 기사에 대한 현재의 정식 링크에 만족합니다. 이것은 C # 4.0의 동적 유형 시스템이 충분히 강력하고 DLR에 .NET 4.0 런타임에서 생략 된 중요한 기능이 있는지 여부를 알 수 있습니다. 몇 가지 기사를 찾았지만 DLR이 형성되는 날에 모두 쓰여졌으며 많은 기사가 추측 적입니다.
Robert Harvey

답변:


3

이것은 내가 읽은 것을 기억하는 기사입니다. msdn.microsoft.com/en-us/magazine/gg598922.aspx

나중에 C # 및 Visual Basic의 동적 기능을 지원하기 위해 DLR도 .NET Framework 4에 포함되었습니다. C # 4에서 동적 키워드 만 필요한 경우 .NET Framework를 사용하면 대부분 DLR과의 모든 상호 작용을 자체적으로 처리합니다. 그러나 새로운 동적 언어를 .NET으로 구현하거나 이식하려는 경우 언어 구현자를위한 더 많은 기능과 서비스를 제공하는 오픈 소스 프로젝트의 추가 도우미 클래스를 활용할 수 있습니다.


3

보낸 사람 : jimmysch

로버트,

사실 : IronRuby와 IronPython은 모두 DLR을 사용합니다. 실제로 대부분의 DLR 기능은 IronPython의 초기 구현에서 파생됩니다. DLR IronScheme 버전이 사용하는 방식에 익숙하지 않습니다. DLR (Microsoft.Scripting.Core.dll)의 일부는 System.Core.dll의 .NET 4.0에 포함되어 있으며이 부분은 C # 4.0이 "동적"키워드 지원을 위해 사용하는 것입니다. DLR의 .NET 4.0 빌드에 있습니다.

이 CodePlex 프로젝트 또는 IronLanguages ​​GitHub 프로젝트 에서 DLR의 나머지 코드베이스 (Microsoft.Scripting.dll, Microsoft.Dynamic.dll이 가장 중요)를 다운로드 할 수 있습니다 . .NET 4.0의 API는 실제로 동적 메소드 디스패치를 ​​수행하기위한 반면, 호스팅 언어의 소비자 및 생산자에게 API를 제공합니다.

.NET 4.0 용 동적 언어 컴파일러를 작성하려면 C #을 구현 언어로 사용하고 DLR을 라이브러리로 사용하여 일반적인 컴파일러 작업을 단순화합니다. DLR에 대한 간단한 예제 언어는 Sympl을 참조하십시오.

~ 지미

http://dlr.codeplex.com/discussions/268746#post656778

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.