---
# System prepended metadata

title: Programming Language Design Final Report

---

# Programming Language Design Final Report

To finish your final report, you have 2 choices:
  * Summarize and comments on one of listed paper
  * Implement a programming project and write a short report

Please submit your report before 2020/01/01 23:55 and follow the format listed below.

## report format
  * PDF file, naming it in the format like `A1-107525008.pdf` where `A1` meaning the 1st paper in A.
  * A4 paper, 1 or 2 pages
  * one/two column are both acceptable.
  * font: 標楷體(Chinese)/Times New Roman(English)
  * font size is 10pt.
  * line spacing is single line (1x line).
  * margin: 1.5inch on each side

# A. Paper Summarizing and Commenting

Pick one paper from the list below, 
summarize the picked one and write down your summary and comments. 


  1. [Lightweight Modular Staging: A Pragmatic Approach to Runtime Code Generation and Compiled DSLs](https://www.researchgate.net/publication/45581394_Lightweight_Modular_Staging_A_Pragmatic_Approach_to_Runtime_Code_Generation_and_Compiled_DSLs)
  2. [Data exploration through dot-driven development](http://drops.dagstuhl.de/opus/volltexte/2017/7261/pdf/LIPIcs-ECOOP-2017-21.pdf)
  3. [Aspect-oriented programming](https://www.cs.ubc.ca/~gregor/papers/kiczales-ECOOP1997-AOP.pdf)
  4. [One VM to Rule Them All](http://lafo.ssw.uni-linz.ac.at/papers/2013_Onward_OneVMToRuleThemAll.pdf)
  5. [Traits: Composable Units of Behavior](http://scg.unibe.ch/archive/papers/Scha03aTraits.pdf)

Please note that simply copy-translate-paste from article won't get any score.

# B. Programming Project

Please also submit your source code with your report.

## 1 - Rational Arithmetic Evaluation

In this assignment, you are asked to implement a arithmetic evaluator with rational numbers in Haskell.

Minimal requirements:
  * Able to do add/subtract/multiply/divide computations on rational numbers.
  * Print the result in simplified form
  * Store rational number as two integers(numerator and denominator) instead of float numbers.
  
Example:
  * `(1%2) + (3%4) * (5%6) - (2%1) / (1%2)` will evaluates to `(-23) % 8` where `(a%b)` means $\frac{a}{b}$
  * `(1%1) / (2%0)` will report a "divide by zero" error

Please explain your design in the report, for example:
  * Overview of your code
  * Data Structures you defined
  * Idioms or Design Patterns you used
  * ...
  