2001 년의 매우 흥미로운 post에서 Allen Wirfs-Brock은 네이티브 스택을 수정하지 않고 블록 클로저를 구현하는 방법을 설명합니다.특정 블록 클로저 최적화가 왜 효과적일까요?
그는 내가 이해하지 못하는 아이디어가 많아서 여기에 질문하는 것이 좋을 것이라고 생각했습니다. 그는 말합니다 :
블록의 수명 동안 절대 할당 할 수없는 변수 (예 : 메서드 및 블록을 둘러싼 인수)는 변수의 복사본이 클로저에 저장되어 있으면 환경에 배치 할 필요가 없습니다 이
를 만들 때 내가 충분히 이해 확실하지 않다 두 가지가 있습니다
- 읽기 전용 변수의 두 복사본 환경으로 이동 변수를하는 것보다 빠릅니다을 사용하는 이유는 무엇입니까? 왜냐하면 둘러싸는 컨텍스트가 스택의 (원본) 변수에 액세스하는 것이 더 빠르기 때문입니까?
- 두 변수를 동기화 된 상태로 유지하려면 어떻게해야합니까?
질문 1에 다른 이유가 있어야합니다. 그렇지 않으면 최적화를 구현하는 비용과 비교했을 때 이득이 표시되지 않습니다.
질문 2는 메소드가 아닌 블록에 할당 된 논인 인수를 취합니다. 스택에 저장된 oop가 블록 수명 기간 동안 변경되지 않은 이유는 무엇입니까?
Q2에 대한 답을 알고 있다고 생각합니다. 블록의 실행이 메서드의 실행과 얽힐 수 없기 때문에 (즉, 블록이 살아있는 동안), 둘러싸는 컨텍스트가 실행되지 않습니다. 그러나 블록이 살아있는 동안 스택을 임시로 수정할 수있는 방법이 없습니까?
흥미롭게도 클레멘트 베라는 폐쇄에 관해 블로그를 작성 했으므로 같은 주제를 공유하는 것 같습니다. https://clementbera.wordpress.com/2015/01/21/context-and-blockclosure-implementation/ –
감사합니다. 그것은 아주 명백한 설명입니다. (선택기에 오타가 있지만 ZooKeeper >> ** free ** AllAnimals ;-)를 읽었어야합니다. –