문제

나는 방식을 통역 서면에서 C현재 그것을 사용하여 C runtime 스택으로 자신의 스택이 제시 사소한 문제로 구현하는 연속.현재 해결책은 설명서를 복사하의 C 택하여 힙에 복사하여 다시 그것을 때 필요합니다.고객께서는 되지 않는 표준 C,이 솔루션은 거의 이상적입니다.

가장 간단한 방법은 무엇입을 구현하는 경우 연속 작업에 대한 계획 C?

도움이 되었습니까?

해결책

내가 기억하는 기사를 읽을 수 있는 당신에게 도움이 될: 체 니에 M.A.T. :-)

일부를 구현 계획의 나를 알고,등 SISC, 을 할당,자신의 통화 프레임에 힙.

@올리:당신이 할 필요가 없는 게양하는 경우의 모든 호출 프레임에 힙.거기 거래에서의 성능,의 코스:시간하는 호이스트와 필요한 오버헤드를 할당하는 모든 프레임에 힙.어쩌면 그것이 있어야 조정 가능한 런타임 매개변수에는 인터프리터입니다.:-P

다른 팁

좋은 요약에서 사용 가능 구현 전략에 대한 첫 번째 클래스의 연속 작업, 는 문서를 통해 클린저,Hartheimer 및 Ost.내가 보는 것이 좋습니다 Chez 계획의 구현됩니다.

스택을 복사하지 않는 복잡하고의 숫자가 잘 이해할 수 있는 기술을 사용할 수 있는 성능을 향상시킬 수 있습니다.를 사용하여 힙 할당 프레임은 또한 매우 간단합니다,하지만 당신은 만들의 거래를 만들기 위한 오버헤드"정상"상황은 당신을 사용하지 않는 명시적 연속.

변환하는 경우에는 코드를 입력해 계속 전달하는 스타일(CPS)당신은 멀리 얻을 수 있을 제거와 스택합니다.그러나,CPS 은 우아한 그가 또 다른 처리 단계에서 프런트 엔드가 추가로 필요합의 최적화를 극복하는 특정 성능에 영향을 줍니다.

당신은에서 시작하는 스크래치,당신은 정말이 찾아야에 지속 전달하는 스타일(CPS)변화.

좋은 소스"LISP 에서 작은 조각"고 Marc Feeley 의 계획에서 90 분 프레젠테이션.

그것은 보인다 Dybvig 의 논문을 언급되지 않는다.그것은 기쁨을 읽을 수 있습니다.힙 기반으로 모델 장을 구현하지만,stack 기반 더 효율적입니다.시 문자열에 기반한 모델입니다.

R.켄트 Dybvig."세 가지 구현은 모델에 대한계획"을 실시하고 있습니다.http://www.cs.indiana.edu/~dyb/논문/3imp.pdf

또한 확인 구현에 대한 논문 ReadScheme.org.http://library.readscheme.org/page8.html

추상적인은 다음과 같습니다:

이 논문에는 세 가지 구현에 대한 모델을 계획 프로그래밍 언어입니다.첫 번째는 힙 기반한 모델에 사용되는 몇몇 양식에서는 대부분의 계획의 구현을두 번째는 새로운 스택에 기반한 모델을 훨씬 더 많은 효율적이다 힙 기반한 모델에서 실행하는 대부분 프로그램그리고 세 번째 새로운 문자열에 기반한 모델을 사용해서 여러 프로세서 의 구현 방식입니다.

힙 기반한 모델을 할당하는 몇 가지 중요한 데이터 구조에 힙 포함하여,실제 매개변수 목록에 바인딩하는 환경,그리고 전화 프레임입니다.

스택에 기반한 모델을 할당한 이러한 동일한 구조에서 스 언제 가능합니다.이 결과를 적은 힙 할당,적은 수의 메모리 참조,짧은 명령을 시퀀스를 덜 쓰레기 컬렉션 고 보다 효율적 사용의 메모리입니다.

문자열에 기반한 모델을 할당하 버전에 이러한 구조의 오른쪽에서 프로그램에 텍스트 문자열로 표시의 상징입니다.에 문자열에 기반한 모델을 계획 프로그램으로 변환되는 FFP 언어 설계된 구체적으로 지원하는 방식입니다.이 프로그램 언어는 직접에 의해 실행되는 FFP 기 다중 프로세서 문자열을 감소 컴퓨터입니다.

스택에 기반한 모델이의 즉각적인 실용적인 베네;그 모델의 사용에 의하여 저자의 체 계획 시스템,고성능 의 구현 방식입니다.문자열에 기반한 모델이 될용 제공하는 제도로 높은 수준의 대안 FFP 에 FFP 기계 기계되면을 재현할 수 있습니다.

게다가 좋은 대답을 지원합니다.Andrew Appel 의 컴파일로 연속 작업.그것은 매우 잘 쓰지 않는 동안 처리와 직접 C,그의 근원이 정말 좋은 아이디어를 위한 컴파일러 작가이다.

닭 위키는 또한 페이지를 찾을 수있는 매우 흥미로운 등 내부 구조컴파일 과정 (는 CPS 에 설명되어 실제 예제의 편집).

예를 볼 수 있습니다: 닭고기 (계획,구현 C 언어로 작성된 지원의 연속 작업);바울은 그레이엄의 에 Lisp -는 그 CPS 변압기를 구현하는 하위 집합의 연속 작업에 cl;고 Weblocks -연속 기반으로 웹 프레임워크를 구현하 제한된 형태의 연속 작업에서 일반적인 패키지.

연속 작업에 문제가 되지 않습:을 구현할 수 있습니다 그와 함께 정규 고용하여 기능 CPS.문제로 순진한 스택 할당는 꼬리를 호출은 없을 최적화할 수 있음을 의미하는지 체계입니다.

현재 최고의 접근 방식을 매핑 제도의 스파게티 스택에 스택 트램폴린을 사용하여:기본적으로 여분의 인프라를 처리 비 C-를 종료에서 절차가 있습니다.보 Trampolined 스타일(ps).

일부 코드 설명 이들 모두는 아이디어.

전통적인 방법을 사용하는 것입 setjmplongjmp, 지만,몇 가지 유의할 점이 있습니다.

합리적으로 좋은 설명

연속 작업을 기본적으로 저장된 상태의 스택과 CPU 등록 시점에서의 컨텍스트 스위치가 있습니다.적어도 없을 복사하려면 전체 스택하여 힙 전환할 때,당신은 당신만을 리디렉션 스택은 포인터이다.

연속 작업은 손쉽게 구현하여 섬유입니다. http://en.wikipedia.org/wiki/Fiber_%28computer_science%29 .만을 필요로 하는 것을주의 캡슐화는 매개 변수를 전달하고 값을 반환합니다.

Windows 섬유를 사용하여 수행됩 CreateFiber/SwitchToFiber 의 가족 호출합니다.에 Posix-compliant 시스템으로 할 수 있습니 makecontext/swapcontext.

부스트::coroutine 작업의 구현 하는 C++용할 수 있는 기준점으로 적용됩니다.

사용은 명시적인 스택을 대신 합니다.

패트릭은 정확한 유일한 방법은 당신이 정말로 할 수있는 이를 사용하는 것에 명시적인 스택에서 당신의 통역사,그리고 호이스트는 적절한 세그먼트에 스택으로 힙 필요가 있을 때 변환을 지정합니다.

이것은 기본적으로 동일한으로 무엇을 지원하는 데 필요한 폐쇄를 지원하는 언어들(폐쇄하고 연속되는 어느 정도 관련).

soegaard 지적,주요 기준 남

아이디어,연속은 폐쇄는 유지 평가하 제어 스택입니다.제어 스택에서 요구를 계속하기 위해 evalution 는 순간부터 계속 사용하여 만들어졌 call/cc.

Oftenly 호출 연속게 긴 시간의 실행 및을 채운 메모리와 함께 중복 스택입니다.내가 쓴 이 코드는 것을 증명서,mit-scheme 그것은 방식,충돌

코드 합계 최초 1000 번호 1+2+3+...+1000.

(call-with-current-continuation 
 (lambda (break)
   ((lambda (s) (s s 1000 break))
    (lambda (s n cc)
      (if (= 0 n)
          (cc 0)
          (+ n
             ;; non-tail-recursive,
             ;; the stack grows at each recursive call
             (call-with-current-continuation
              (lambda (__)
                (s s (- n 1) __)))))))))

로 전환하면서 1000 100 000 코드를 보낼 것입니다 2 초과하는 경우 당신은 성장 번호를 입력 충돌이 발생합니다.

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