오규혁 Site Admin
가입: 2022년 3월 15일 올린 글: 88
|
올려짐: 2025년4월18일 9:53 주제: [숙제 6] 공지사항 및 보충 세부사항 안내드립니다. |
|
|
안녕하세요 수강생 여러분,
숙제 6에 대한 공지사항 및 보충 세부사항을 안내해드리겠습니다.
내용 : http://kwangkeunyi.snu.ac.kr/4190.310/25/hw6.pdf
제출 : http://ropas.snu.ac.kr/~ta/4190.310/25/submit/index.pl
기한 : 5/16 밤 11시 59분 59초
# 과제 관련 주의 사항
과제를 제출하기 전에 꼭 주의사항( https://ropas.snu.ac.kr/phpbb/viewtopic.php?t=7434 )을 확인해 주세요.
# K-* 언어 문법 및 의미 구조
http://ropas.snu.ac.kr/~ta/4190.310/25/show/SM5_K-star.pdf
K-* 언어에 대한 설명은 교재에서도 확인 할 수 있습니다. (교재 4.3)
# 뼈대 코드
## SM5 / SM5 Limited
* http://ropas.snu.ac.kr/~ta/4190.310/25/show/sm5.zip (다운로드 문제 발생시 브라우저 새 탭에 주소를 입력해 주시기 바랍니다)
* 뼈대 코드에는 K-* 언어와 SM5 언어의 실행기가 들어있습니다.
* 뼈대 코드는 dune 빌드 시스템을 사용해서 작성되었습니다. `dune build --release`를 실행하면 컴파일이 되고, `_build/default/bin` 아래 `main.exe` 실행 파일이 생성됩니다. (UNIX에서도 마찬가지로 `main.exe`이니 착오 없으시길 바랍니다.)
이렇게 만들어진 `main.exe`를 실행하여 `examples` 디렉터리에 있는 예제를 실행기로 돌려볼 수 있습니다.
코드: | dune build --release
./_build/default/bin/main.exe examples/test1.k-
|
* 과제를 하실 때, 다른 쉘에서
코드: | dune build --release --watch
|
를 실행하면, 코드를 변경하실 때마다 자동으로 빌드가 진행됩니다. 이에 따라 편집기에서 실시간으로 타입 정보 등의 정보를 제공받을 수 있으니 유용하게 사용하세요.
* Dune을 사용해 바로 실행을 할 수도 있습니다:
코드: | dune exec --release sm5 examples/test1.k-
|
## Lambda Ground
* http://ropas.snu.ac.kr/~ta/4190.310/25/show/lambda.zip (다운로드 문제 발생시 브라우저 새 탭에 주소를 입력해 주시기 바랍니다)
* 빌드 및 실행 방식은 위와 동일합니다.
# 보충 세부사항
(이 글에 답글로 질문하지 말아 주세요. 별도의 게시글로 질문해 주시기 바랍니다!)
## Exercise 1 "SM5"
* 제출 시에는 뼈대 코드 중 translator.ml 파일만 제출합니다. 꼭 주의해 주세요. 엉뚱한 ml 파일을 잘못 제출하시면 조교팀이 해결해 드릴 방법이 없습니다.
* 숙제 문서의 `Sm5.command`, `Sm5.run` 등은 `Machine.command`, `Machine.run` 등에 대응됩니다.
* 주석으로 TODO가 표시되어 있는 trans 함수를 완성해서 제출하시면 됩니다. K- 실행기 때와 마찬가지로, 간단한 몇몇 케이스에 대한 구현을 제공해 드리므로 이를 보고 익히셔서, 나머지 부분을 완성하세요.
* "같은 일을 하는" 은 다음과 같이 정의됩니다. "같은 일을 한다" = "같은 조건에서 실행했을 때 모든 side-effect 의 결과가 같다"
- "같은 조건" : K-* 에서의 빈 메모리, 빈 환경 / SM5 에서의 "C만 가지고 있고 나머지 부품은 비어있는 기계상태"
- "모든 side-effect" : K-* 에서의 read/write, SM5 에서의 get/put
- 간단한 예를 들면, K-* 에서 read 로 3을 받아 write 로 4 를 내놓았다면, SM5 에서는 get 으로 3 을 받아 put 으로 4 를 내놓아야 한다는 것입니다.
그 도중에 일어나는 환경, 메모리의 변화는 "같은 일을 한다" 와 무관합니다.
* 번역 과정에서, K-* 프로그램에서 사용하는 변수 이름과 겹치지 않는 변수 이름이 필요한 경우가 있습니다. 이를 위해 K-* 언어에서 사용하는 변수 이름에는 #, @와 같은 특수문자를 사용되지 않는다고 가정하겠습니다.
## Exercise 2 "SM5 Limited = SM5 + 메모리 재활용"
* 제출 시에는 뼈대 코드 중 machine.ml 파일만 제출합니다. 꼭 주의해 주세요. 엉뚱한 ml 파일을 잘못 제출하시면 조교팀이 해결해 드릴 방법이 없습니다.
* 주석으로 TODO가 표시되어 있는 malloc_with_gc 함수를 완성해서 제출하시면 됩니다. 약간의 코드 틀이 잡혀있으니 참고하시기 바랍니다.
* 메모리 재활용은 malloc을 실행할 때 메모리의 크기가 128 이상이 된 경우 작동합니다. 메모리의 크기는 loc --> value 엔트리의 개수입니다.
메모리 재활용을 실행하였음에도 불구하고 메모리 크기가 128 미만으로 줄어들지 않았으면, 뼈대코드에 제공된 GC_Failure예외를 내 주세요.
* 수업시간에 배운 GC알고리즘을 구현하는 것이 과제의 의도입니다. 무조건 GC_Failure를 발생시키거나, 적당히 malloc 회수만 세서 GC_Failure를 발생시킨다거나 하는 코드는 0점 처리될 수 있습니다.
* gc_test.ml 파일을 이용하여 간단히 테스트 해볼수 있습니다. 빌드 후 ./_build/default/bin/gc_test.exe로 실행하시면 됩니다. 파일 끝에 주석으로 올바른 결과값이 제공됩니다.
## Exercise 3 "Lambda Ground"
* 제출 시에는 뼈대 코드 중 evaluator.ml 파일만 제출합니다. 꼭 주의해 주세요. 엉뚱한 ml 파일을 잘못 제출하시면 조교팀이 해결해 드릴 방법이 없습니다.
* 숙제 문서의 `lexp` 타입은 `Lexp.t`에 대응됩니다.
* reduce하는 과정이 무한히 계속되는 입력은 채점에 사용하지 않겠습니다. 이러한 입력에 대해서는 자유롭게 처리하셔도 좋습니다. reduce하는 과정이 무한히 계속될 경우, 답이 될 수 있는 표현(lexp)이 여러 개 있을 수 있기 때문에, 위와 같이 결정하였습니다.
* test case는 모호하지 않도록 괄호를 친 인풋을 넣겠습니다. (혹 모호하더라도 조교들이 제공한 파서의 -pp 옵션 결과 기준으로 채점합니다.)
감사합니다.
조교 드림 _________________ TA 오규혁
e-mail: ghoh@ropas.snu.ac.kr |
|