스코프 모드 · 코딩 클래스
선택한 언어나 버전에는 이 주제가 없어 같은 영역의 시작 페이지를 표시합니다.
학습 장의 개념을 직접 사용합니다. 문제는 확인하기 → 프로그램 만들기 → 오류 해결하기 순서입니다. 먼저 구현한 뒤 힌트를 읽고 완료 기준으로 확인하세요. 각 문제는 별도 파일이나 작업 디렉터리에서 진행하세요.
1. 확인하기 · 필요한 범위에만 참조 허용
섹션 제목: “1. 확인하기 · 필요한 범위에만 참조 허용”학습 장의 scope_modes.xen에서 main 전체에 어노테이션을 붙인 버전과 호출 블록만 표시한 버전을 각각 실행하세요.
완료 기준: 두 버전 모두 [1, 2, 3]과 10을 출력합니다. 참조를 허용하는 범위가 어디인지 표시할 수 있습니다.
힌트: 함수에는 #![explc], 블록에는 #scope[explc]를 사용합니다.
2. 프로그램 만들기 · 최적화 비교 실험
섹션 제목: “2. 프로그램 만들기 · 최적화 비교 실험”같은 프로그램을 —opt=off, —opt=basic으로 실행하고 표준 출력을 비교하세요. basic에서 —opt-report도 실행해 보고서와 결과를 구분하세요.
완료 기준: 두 실행 결과는 같습니다. 보고서는 stderr에 나타납니다. 출력 일치만으로 속도 향상을 주장하지 않습니다.
힌트: 학습 장의 명령을 사용하세요. 보고서의 내부 식별자를 고정 결과로 삼지 마세요.
3. 오류 해결하기 · 호출자 어노테이션 누락 수정
섹션 제목: “3. 오류 해결하기 · 호출자 어노테이션 누락 수정”아래 코드를 검사하고 main의 참조 생성 부분만 블록으로 감싸서 고치세요. —opt 옵션으로 해결할 수 없는 이유를 설명하세요.
의도적인 오류가 있는 시작 코드입니다.
#![explc]fn append(values: &mut Vec<Int>) { values.push(3); }fn main() { let mut values = [1, 2]; append(&mut values); println(values);}xen check class_scope.xen진단에 포함되는 내용:
passing references requires #![explc]완료 기준: 출력은 [1, 2, 3]입니다. 호출되는 함수의 표시와 호출자의 표시를 각각 확인합니다.
힌트: 호출된 함수의 explc 설정은 호출자에 전파되지 않습니다.
검증하고 기록하기
섹션 제목: “검증하고 기록하기”정상 프로그램은 xen check 파일.xen 후 xen run 파일.xen으로 확인하세요. 테스트 전용 파일은 xen test 파일.xen을 사용합니다. 수정 전 오류·원인·수정 후 결과를 짧게 기록하고, 완료 기준의 모든 입력을 다시 실행하세요.