2012-07-20 3 views
2

루비 블록과 비슷한 언어 구조를 구현하고 싶습니다. 따라서루비 블록 구현 방법 (컴파일러에서)

main() 
{ 
    i = 123 
    array.function(|x| { puts x + i; }) //the block needs access to the local variable i 
} 

잘 컴파일해야합니다. 나는 1 시간 동안 소스 코드를 살펴 봤지만 C가 좋지 않기 때문에 어떻게 구현하는지 아직 모른다. 내 첫 번째 생각은 주소가 매개 변수로 전달되는 중첩 된 함수 였지만 중첩 된 함수가 로컬 변수에 액세스하는 방법을 잘 모르겠습니다. 대부분의 언어로 볼 수 없기 때문입니다. 누구든지이 구현 방법에 대한 아이디어를 줄 수 있다면 매우 기뻐할 것입니다.

+0

관련 스택을 호출 할 때 새 기능으로 푸시 할 수 있습니까? – alex

+0

함수를 호출 할 때 스택에 매개 변수 (각각 4 바이트)를 넣고 ras에있는 반환 주소를 푸시하는 호출을합니다. –

+0

블록은 익명의 함수로 구현 될 수 있습니다. 그러나 호출 된 함수에서 해제되지 않은 경우 ('& block'이 없다면) 현재 프레임에서 완전히 선언/시뮬레이션 될 수 있습니다 .. –

답변