그것은 정말 무슨 뜻하는 프로그래밍 언어가 stackless?

StackOverflow https://stackoverflow.com/questions/796211

  •  18-09-2019
  •  | 
  •  

문제

이에 따라 대답

https://stackoverflow.com/questions/551950/what-stackless-programming-languages-are-available/671296#671296

모든 이러한 프로그래밍 언어로는 stackless

  • Stackless Python
  • 에는 디버깅 심볼이 들어
  • Lisp
  • Tcl
  • Lua
  • 앵무새 VM

그것은 정말 무슨 뜻하 stackless?뜻하지 않을 사용 호출 스택?를 사용하지 않는 경우 호출 스택,그들은 무엇을 사용합니까?

도움이 되었습니까?

해결책

그것은 정말 무슨 뜻하 stackless?뜻하지 않을 사용 호출 스택?

네,그의 권리에 관하여.

를 사용하지 않는 경우 호출 스택,그들은 무엇을 사용합니까?

정확히 구현하는 것은 물론,다양에서 언어하는 언어입니다.에 Stackless Python,거기서 발송자에 시작하는 파이썬 인터프리터을 사용하여 맨 위의 구조 및 결과입니다.인터프리터 프로세스 컴파일러 필요에 따라 하나의 시간에 도달할 때까지 CALL_FUNCTION opcode,신호는 당신이 입력한 기능입니다.이로 인해 디스패처를 구축하는 새로운 구조와 관련한 정보를 반환하고 dispatcher 과 함께 여유를 즐기이다.거기에서 발송자의 새로운 시작을 가리키고,통역사에서 최상위 프레임입니다.

Stackless 언어를 피하에 대한 호출 스택의 수는 이유이기도 하지만,대부분의 경우 사용되는 특정 프로그래밍을 훨씬 쉽게 구현할 수 있습니다.표준 중 하나이 연속 작업.연속 작업은 매우 강력하고,매우 간단한 제어 구조를 나타낼 수 있는 모든 일반적인 제어 구조에서 당신은 아마 이미 익숙(while, do, if, switch, 등).

는 경우 복잡할 수 있습니다려고 포장 주위에 당신의 머리를 위키 문서에서,특히 꿈 지속 샌드위치를 유례:

신가 부엌에서 앞에서 냉장고에 대해 생각하고,샌드위치.당신은 계속 바로가 있고 주머니에 있습니다.그때 당신은 터키와 빵에는 냉장고와 자신 샌드위치,지금은 카운터에 앉아.당신을 호출하여 연속에서 당신의 주머니,그리고 당신을 찾아 자신이 서있는 앞에 다시 냉장고에 대해 생각하고,샌드위치.그러나 다행히도,거기에 샌드위치 카운터는 모든 자료를 사용하여 만들은 사라졌습니다.그래서 먹는 것입니다.

다른 팁

그들은 작동하기 때문에 콜 스택을 사용하지 않습니다. 연속 패스 스타일. Tail Call Optimization에 익숙하지 않다면 아마도 이것이 의미하는 바를 이해하는 좋은 첫 단계 일 것입니다.

이 모델의 기존 통화/반환을 모방하려면 리턴 주소를 푸시하고 나머지 프레임이 손대지 않도록 기대하는 대신 발신자가 코드의 나머지 부분과 여전히 필요한 변수 (나머지는 해제됩니다)를 닫습니다. 그런 다음 Callee에 대한 꼬리 호출을 수행 하여이 연속을 논쟁으로 전달합니다. Callee가 "반환"하면,이 연속을 호출하여 반환 값을 인수로 전달합니다.

위의 상황이 진행되는 한, 그것은 단지 기능 호출을 수행하는 복잡한 방법 일뿐입니다. 그러나 더 복잡한 시나리오로 매우 잘 일반화됩니다.

  1. 예외/마지막으로/etc 블록은 매우 쉽게 모델링됩니다. ""반환 "연속을 인수로 전달할 수 있다면 쉽게 2 (또는 그 이상)를 통과 할 수 있습니다. LISP -Y "Condition Handler"블록 (발신자에게 제어를 반환 할 수도 있고 없을 수도 있음)도 쉽습니다.이 기능의 나머지 부분에 대한 연속을 통과합니다.
  2. 다중 반환 값도 마찬가지로 쉽게 이루어집니다. 몇 가지 인수를 계속해서 전달합니다.
  3. 반환 임시/복사는 더 이상 기능 인수 통과와 다르지 않습니다. 이것은 종종 임시를 쉽게 제거 할 수있게합니다.
  4. 꼬리 재귀 최적화는 사소한 일입니다. 발신자는 단순히 새로운 것을 캡처하는 대신받은 "반환"연속을 전달합니다.
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top