Report 3 ¶
Specification ¶
~cpp C supports two kinds of parameter passing mode, pass-by-value and pass-byreference, but not pass-by-name. A technique for implementing pass-by-name is to treat the actual parameters as thunks. Whenever a formal parameter is referenced in a subprogram, the corresponding thunk compiled for that parameter is executed. Even though it is difficult to avoid run-time overhead in the execution of thunks, sometimes it provides a very powerful feature for some applications like a generic summation routine. Suppose that whenever a programmer wants to pass a parameter by name in C, it is required to prefix the keyword name just in front of both the actual and formal parameters as below: Sum (name i + j, 1, n, name V[i]); Of course, if a C program with the call statement above is to be compiled by a conventional compiler, syntax errors should occur since it violates the syntactical rules of C. You are required to implement C preprocessor that supports the pass-by-name parameter-passing method. The preprocessor should transform C programs with name parameters into pure C programs so that the transformed programs manage to handle parameters prefixed with name as if they were called by name without causing any syntax errors.
숙제의 이해를 위해서 우선 thunks 라는 단어의 의미를 알아야합니다.
thunks 는 두가지 의미로 해석됩니다. 첫번째, 함수형 언어에서 말하는 지연형 계산 두번째, 호환성의 이유로 서로다른 데이터형 간의 매핑을 행하는 행위
이번 숙제에서 구현하려는 것은 첫번째의 의미로 지연형 계산(delayed computation)을 의미합니다. call-by-name, call-by-need를 통해 함수에게 넘어오는 일련의 매개변수를 thunk라는 이름으로 부릅니다. 간단히 말해 thunk라는 것은 실행시에 계산되어 변수의 값이 얻어진다는 의미입니다. (이는 기존의 함수에서 파라메터 패싱에서 Call 시에 변수에 바인딩되는 것과는 다릅니다.) 이런 기능이 최초로 구현된 Algol60입니다.
Requirement
소스가 잘 이해가 안되신다면... -_-; 계속 보시라고 밖엔;;;
cf) Jensen's Device, Man Boy Test 는 Compiler Theory 의 한 항목들입니다.
Hand-In
thunks 는 두가지 의미로 해석됩니다. 첫번째, 함수형 언어에서 말하는 지연형 계산 두번째, 호환성의 이유로 서로다른 데이터형 간의 매핑을 행하는 행위
이번 숙제에서 구현하려는 것은 첫번째의 의미로 지연형 계산(delayed computation)을 의미합니다. call-by-name, call-by-need를 통해 함수에게 넘어오는 일련의 매개변수를 thunk라는 이름으로 부릅니다. 간단히 말해 thunk라는 것은 실행시에 계산되어 변수의 값이 얻어진다는 의미입니다. (이는 기존의 함수에서 파라메터 패싱에서 Call 시에 변수에 바인딩되는 것과는 다릅니다.) 이런 기능이 최초로 구현된 Algol60입니다.
~cpp x = sigma(i=1, n) {V} 1) Your program should handle Jensen’s device; show that your program works properly by testing it for various summation below. 2) You are also recommended to check if Swap (x, y) does work properly or not by passing parameters by name. 3) You have to show off the robustness of your program by checking various error conditions.Jensen's Machine 은 Jørn Jensen라는 사람이 Algol 60을 제안하는 보고서에서 제시한 프로그래밍 테크닉을 말합니다.
~cpp begin integer i; real procedure sum(i, lo, hi, term); value lo, hi; integer i, lo, hi; real term; comment term is passed by-name; begin real temp; temp := 0; for i := lo step 1 until hi do temp := temp + term; sum := temp end; print( sum(i, 1, 100, 1/i)) end제시된 문제는 상기와 같으며, 이는 100번째의 조화수를 구하는 문제를 해결하는 방법입니다. 차후에 그 이름도 유명한 Knuth 님께서 Man Boy Test로 발전시켰습니다.
소스가 잘 이해가 안되신다면... -_-; 계속 보시라고 밖엔;;;
cf) Jensen's Device, Man Boy Test 는 Compiler Theory 의 한 항목들입니다.
~cpp You should follow the guideline suggested later. To be specific, your report is supposed to include an external documentation as well as an internal documentation. The external documentation should explain your program in detail so that we can understand what kind of data structures have been used, the characteristics and general as well as unique features of your program, etc. An internal documentation means the comment attached in your source. You are supposed to upload your source program and executable file. You are also required to submit a listing of your program and a set of test data of your own choice, and its output, when you show up for demo. Be sure to design carefully your test data to exercise your program completely.
brief note ¶
음 잠깐 하면서 생각한건데.... 이 숙제 정말로 구리다. 내가 이렇게 재미없는 숙제를 하게된건 파일구조때 binary 가지고 장난친 이후 처음인듯하다. 문자열 장난할꺼면 펄로하게 해주던지... C 문자열 함수 가지고 놀려니... 정말로 구리다라는 생각뿐~ - eternalbleu