9

그리고 같은 의미에서 C/Java forwhile 루프의 펑키 구문입니다.스칼라 "연속"은 콜백 함수를 정의하고 사용하기위한 펑키 구문인가요?

루프 문과 관련된 세 가지 제어 표현식의 실행 순서를 이해해야하는 정신적 노력 인 C에서 for 루프에 대해 처음 알았을 때 나는 아직도 기억합니다. Continuations (스칼라와 아마도 다른 언어들도있을 것입니다)를 이해하기 위해 동일한 종류의 노력이 적용되어야합니다.

그리고 확실한 후속 질문이 있습니다. 그렇다면 핵심은 무엇입니까? 아무런 이득이없는 것처럼 많은 고통 (언어 복잡성, 프로그래머 오류, 읽을 수없는 프로그램 등)처럼 보입니다.

답변

3

어떤 의미에서, 계속은 콜백을 사용하기위한 펑키 구문입니다. 코드에서 매우 복잡한 전역 변환을 수동으로 수행 할 수 있습니다 (소위 연속 전달 스타일 변환). 직접 언어를 지원하지 않고도 손쉽게 연속 변환을 얻을 수 있습니다.

그러나 전체 코드베이스를 변환하는 것은별로 실용적이지 않으며 그 결과 코드를 읽기가 어렵 기 때문에 컴파일러에서 배후에서 코드를 작성하는 것이 훨씬 좋습니다.

+1

네,하지만 .... 스칼라 연속 기능은 뒤에서 변형을 수행하지 않습니다. 실제로 그것은 정반대의 것입니다. 코드를 작성하기가 어렵고 계속되는 연속적 전달 스타일로 작성하고이를 규칙적인 명령형 JVM 바이트 코드로 변환합니다. 이점은 어디 있습니까? –

+1

http://lamp.epfl.ch/~rompf/continuations-icfp09.pdf (scala continuations paper)에서는 CPS 변환을 사용하여 '시프트'와 '리셋'을 구현하는 방법에 대해 설명합니다. 그것은 많은 세부 사항을 가지고 있지만, 기본적으로 아이디어는 'shift'와 'reset'내부에서 모든 정의와 기능 응용 프로그램을 뒤집는 것과 관련이 있습니다. 손으로 쓴다면 이것은 꽤 추한 코드 일 것입니다. – hzap

+0

Alex, 댓글이 잘못되었습니다. continuations 플러그인의 핵심은 연속적인 스타일로 코드를 작성하지 않아도된다는 것입니다. 나는 당신이 "연속성 전달 스타일"이 무엇인지 혼동하고 있다고 생각합니다. –

관련 문제