[Rust] Nightly: 제너레이터

이것도 unstable한 기능이다.

제너레이터는 일종의 스택기반 코루틴을 제공하는 기능이다. 자바크립트 등의 제너레이터와 거의 같다.

제너레이터 함수는 겉으로 보기에는 그냥 클로저지만, yield를 사용하면 값을 반환해주는 것과 동시에 그때까지의 코드 실행 컨텍스트를 기억한다.

함수에서 얼마든지 부분적인 리턴을 할 수 있다는 것이다.

제너레이터를 이용해 카운팅용 함수를 구현한다면, 다음과 같이 할 수 있다. resume()으로 계속 재진입하는 것이다.

아직은 제너레이터 리턴값에 Pin을 해줘야하는게 불편한 점이긴 하다.
개선이 가능할지는 모르겠다.

그러면 대충 다음과 같이 반환될 것이다.

YieldStatus?라는 제너레이터 전용 열거값을 뿌려준다.
Yielded는 부분반환에 성공했다는 것이다.



참조
https://doc.rust-lang.org/beta/unstable-book/language-features/generators.html