문제

나는 내 자신의 스크립트 언어는 C#,일부 기능은 다음과 같고,를 사용하기로 결정했습니다 MSIL 로 출력의 바이트 코드(반영합니다.를 방출은 매우 유용하며,내가 생각하는 또 다른 바이트 코드).그것은 작품을 방출 실행 실행할 수 있습니다(심지어는 디 컴파일과 반사경:))매우 빠르다.

하지만 나는 실행하려는 여러'프로세스에서'하나의 프로세스나 쓰레드,그리고 그들의 제어에 할당된 CPU 시간을 수동으로(또한 구현이 훨씬 더 강력 IPC 을 제공합니다.NET 프레임워크)는 방법은 없을 완전히 사용 JIT 을 만들이 자신의 VM,스테핑 지침-후 명령을 사용합니다.NET framework(및 제어 메모리 사용량,etc.), 없이 아무것도 쓸 필요가 내 자신,또는 이를 달성하기 위해 내가 쓰는 전체 MSIL 해석?

편집 1):내가 알고있는 해석 IL 지 않는 가장 빠른 것이 우주에서:)

편집 2):을 명확히-내 VM 일종의'운영 체제'-얻는 일부의 CPU 시간과 나누고 그 사이에 프로세스 컨트롤에 대한 메모리 할당을니다.그것은 빨리해야하며,효과적인,하지만 단지 개념의 증명에 대한 몇 가지의 실험입니다.요 그것을 구현하는 수준에 처리하는 모든 교육-는 경우에 이를 수행해야 합니다.NET,나는 마음,내가 단지 말하고 싶:단계 하나의 명령하고 기다릴 때까 나는 당신을 말하는 단계는 다음에.

편집 3):내가 깨달았는 ICorDebug 수 있습니 어쩌면 성취 내가 필요,지금의 구현은 모노의합니다.

도움이 되었습니까?

해결책

당신이 사용할 수 Mono -나는 믿을 수 있는 옵션을 해석하 IL 대신 JITting 니다.는 사실 그것은 오픈 소스를 의미(subject 라이센스)할 수 있어야 하는것을 수정하는 귀하의 요구에 따라,too.

모노이 포함되어 있지 않습니다.NET 기능,틀림없이지 할 모든 당신이 필요합니다.

다른 팁

주는 MSIL 할 수 있도록 설계되었 구문 분석 JIT 컴파일러가 있습니다.그것은 매우 적합하지 않는 인터프리터입니다.좋은 예입니다 아마도 추가 명령입니다.그것을 사용하여 추가의 다양한 값을 입력값:바이트 단,int32,int64,ushort,uint32,uint64.귀하의 컴파일러 알고있는 어떤 종류의 추가 필요하지만 당신을 잃을 것이는 유형의 정보를 생성할 때 MSIL.

지금 당신은 필요한 정보를 원하시면 저희에게 연 런타임이 필요한 검사 유형의 값을 평가에 스택입니다.매우 느립니다.

는 쉽게 해석 IL 는 추가 지침을 다음과 같 ADD8,ADD16,etc.

마이크로 소프트의 구현은 일반적인 언어 런타임이 하나만 있 실행 시스템,JIT.모노,다른 한편으로 모두 함께 제공됩,JIT 및 통역입니다.

나는,그러나,완전히 이해하지 못 정확하게 당신 하고 싶 자신 그리고 당신과 같은 것을 둡 마이크로 소프트의 구현:

방법은 없을 완전히 사용 JIT 을 만들이 자신의 VM?

...없이 아무것도 쓸 필요가 내 자신,또는 이를 달성하기 위해 내가 쓰는 전체 MSIL 해석?

일종의 반대.

당신이 생각하는 경우,작성할 수 있습니다 더 나은 실행 시스템을 보다 마이크로 소프트 JIT,당신은 그것을 쓰는 처음부터.에서 곰,마음,그러나이 모두 마이크로 소프트 및 모노스 JIT 도록 최적화되어 있습니다 컴파일러입니다. (프로그래밍 언어의 차기)

할 수 있는 예약 CPU 시간을 운영하는 시스템 프로세스를 정확히 가능하지 않은 사용자 모드에서.는 운영 체제 작업입니다.

일부의 구현 녹색 스레드의 수도이지만,그것은 확실히 주제로 관리되는 코드입니다.만약 당신이 원하는 무엇을 봐야 CLR 호스팅합니다.

이,당신이 시도를 구현하는 언어에서 CIL.후에도,그것은 컴파일을 원 86.지 않는 경우 케어에 대한 안정성,사용할 수 있는 포인터가 필요하다.

한을 고려할 수 있습 하고 있는 코드를 생성하는 상태에서 머신 스타일입니다.나에게 무슨 말인지 설명합니다.

를 작성할 때는 발전기 방법 C#으로 수익률이 반환 방법으로 컴파일 안 IEnumerator 를 구현하는 클래스에 상태 기계입니다.메서드의 코드를 컴파일로 논리적 블록을 종료와 함께 수익을 반환 또는 yield break 문을,그리고 각각의 블록에 해당하는 번호가 있는 상태입니다.기 때문에 각 수익을 반환해야 합 값을 제공,각 블록의 끝에 저장하는 값에서 필드입니다.열거자는 개체를 생성하기 위해,그 다음 가치,호출하는 방법으로 구성된 거대한 switch 문 현재 상태에 번호를 실행하기 위해서는 현재의 블록,다음의 발전 상태로 값을 반환합니다 로컬 필드입니다.

귀하의 스크립트 언어를 생성할 수 있는 방법에 비슷한 스타일이는 방법에 해당하는 상태 기계체 및 VM 을 할당하여 시간 진행 상태는 동안 컴퓨터에 할당된 시간.몇 가지 까다로운 부분은 이 방법:을 구현하는 것과 같은 메소드를 호출을 시도/마지막으로 블록가 더 이상 생성하는 스트레이트 업 MSIL.

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