2009-06-24 5 views
3

Antlr을 사용하여 DSL을 작성하여 문법 파일에서 렉서와 파서를 생성했습니다. 파서는 내가 계산할 수있는 다양한 노드 (예 : 함수 노드)를 포함하는 추상 구문 트리를 생성합니다. 함수 노드에 대한 코드에서 함수 라이브러리에서 일치하는 함수 이름과 매개 변수 유형을 바인딩 체크합니다. 여기에 함수 룩업을 최적화하기 위해 간단한 캐싱이 있습니다. (두 개의 int를 가진 A + B를 호출하면 다음에 두 개의 int가있는 더하기 연산자를 사용할 때 강력한 기회가됩니다).스크립팅 언어로 DLR로 전환 할 때의 주요 이점은 무엇입니까?

최근에 나는 DLR에 대해 읽었으며이 유형의 스크립팅 언어 구현을 수용하도록 설계된 것 같습니다. 처음에는 파서 나 렉서를 생성하는 것처럼 보이지 않지만 구현의 다른 부분을 돕는 것 같습니다. 나는 DLR 사용으로 전환하는 주된 이점이 무엇인지 궁금해하고있었습니다.

답변

2

.NET 프레임 워크에 대한 모든 액세스가 큰 것입니다. 닷넷 기본 클래스 라이브러리와 유형

2
  • 액세스 닷넷 용으로 작성된 타사 라이브러리에
  • 액세스
  • 당신은 마이크로 소프트 (보안 업데이트 등)
  • 당신에게 API 서비스를 걱정하도록 할 수 있습니다
  • Visual Studio에서 언어를 호스팅 할 수 있습니다.
4

바인딩을 신중하게 구현하면 DLR이 매우 강력한 캐싱 메커니즘을 제공합니다. 실제로는 훨씬 더 최적화되어 있습니다. 엔. 또한 "표준"동적 객체 프로토콜을 사용하므로 다른 언어와의 상호 운용성을 향상시킬 수 있습니다.

예를 들어, C# 4는 dynamic 형식을 사용하여 추가 작업없이 사용자의 언어로 전화를 걸 수 있습니다. DLR없이이를 수행하려면 "정상적인"정적 CLR 유형을 생성해야합니다.

우리는 당신이 당신의 언어를 사용하기를 원하는지 또는 이미 얼마나 많은지를 모르기 때문에 얼마나 많은 이점이 있는지를 알기가 어렵습니다. 그러나 DLR을 사용하는 사람들은 매우 똑똑합니다. .NET에서 실행되는 동적 언어를 만들면 자신의 작업을 활용하는 것이 타당한 것처럼 보입니다.

+0

감사합니다. Jon, 몇 가지 좋은 동기가 특히 동적 유형입니다. 오픈 소스 잼 (open-source-jam)에서 발표 할 수 있기를 바랍니다. – Jason

+0

5 분 밖에 걸리지 않았습니다. 세부 사항은 전혀 없습니다. C#의 동적 인 장 (Depth depth)을 거의 다 마쳤으므로 곧 사용할 수있게 될 것입니다. –