일부 문제의 경우 실제 문제를 해결할 프로그램을 생성 할 수있는 프로그램을 작성하는 것이 더 쉽습니다. 이것이 특히 유용한 곳 중 하나는 컴파일러 용 파서를 작성하는 것입니다.
다른 경우에는 특정 데이터 형식으로 작업 할 때 최적의 성능을 제공 할 수 있도록 코드를 생성 할 수 있습니다. 즉, 런타임에 해당 메타 데이터를 반영하여 방금 배운 속성에 관한 것입니다. 내가 줄 수있는 한 가지 예는 내 Modelshredder 프로젝트입니다. 기본적으로 개체의 모든 필드와 속성을 가져 와서 해당 값을 개체 배열에 저장합니다.
이 문제에 대한 나의 첫 번째 접근 방식은 Reflection.Emit
을 사용하는 손으로 코딩 된 MSIL 주입이었다. 두 번째 접근 방식은 좀 더 다이내믹하고 Expression Trees에 의존합니다.이 트리는 런타임에 효과적으로 구성되고 컴파일되어 MSIL 코딩 된 코드와 동일한 기능을 제공합니다. MoreLinq 트렁크에서 실현 된 것을 볼 수 있습니다 (Modelshredder 사이트를 보시면 링크가 있습니다). 컴파일러를 서비스로 사용하면 실제로 추상화 수준을 올리고 C# 코드를 내 보낸 다음 MSIL로 컴파일 할 수 있습니다.
도메인 특정 언어에 대한 사례가 이미 만들어졌으며 C#과 같은 명령형 언어가 "명령 줄"시나리오에는 적합하지 않지만 더 큰 스크립트보다는 적합하다고 생각합니다. 이라고하는 F # DSL을 기반으로하는 깔끔한 make 시스템이 있습니다.이 시스템은 많은 컴파일러 개념을 서비스로 사용합니다. 비슷한 개념이 Visual Studio에서 F # Interactive Window (이와 같은 방식으로?)에 사용됩니다.
재귀자가 수정 유전자 알고리즘은 어떻습니까? 방금 주위에 유행어를 던 졌나요? 아마도. 아니면 Skynet에 한 걸음 더 다가 갈 수도 있습니다 .... – Randolpho