From: Matthijs Kooijman Date: Mon, 7 Dec 2009 08:38:11 +0000 (+0100) Subject: Don't suggest messing with the clock input. X-Git-Tag: final-thesis~73 X-Git-Url: https://git.stderr.nl/gitweb?p=matthijs%2Fmaster-project%2Freport.git;a=commitdiff_plain;h=788930024f24adb36067d90b246621b2fa528328 Don't suggest messing with the clock input. Instead, use a register's write enable port. --- diff --git a/Chapters/Normalization.tex b/Chapters/Normalization.tex index cbb634c..5a3fecb 100644 --- a/Chapters/Normalization.tex +++ b/Chapters/Normalization.tex @@ -208,11 +208,10 @@ (like \lam{map}). The graphical version of the architecture contains a slightly simplified version, since the state tuple packing and unpacking have been left out. Instead, two separate registers are - drawn. Also note that most synthesis tools will further optimize - this architecture by removing the multiplexers at the register input - and instead put some gates in front of the register's clock input, - but we want to show the architecture as close to the description as - possible. + drawn. Most synthesis tools will further optimize this architecture by + removing the multiplexers at the register input and instead use the write + enable port of the register (when it is available), but we want to show + the architecture as close to the description as possible. As you can see from the previous examples, the generation of the final architecture from the normal form is straightforward. In each of the @@ -1634,7 +1633,10 @@ \subsubsection[sec:normalization:defunctionalization]{Defunctionalization} These transformations remove higher-order expressions from our - program, making all values first-order. + program, making all values first-order. The approach used for + defunctionalization uses a combination of specialization, inlining and + some cleanup transformations, was also proposed in parallel research + by Neil Mitchell \cite[mitchell09]. Higher order values are always introduced by lambda abstractions, none of the other Core expression elements can introduce a function type. diff --git a/Report.bib b/Report.bib index ec6846a..5e85a93 100644 --- a/Report.bib +++ b/Report.bib @@ -150,3 +150,16 @@ publisher = {Kluwer Academic Publishers}, address = {Hingham, MA, USA}, } + +@inproceedings{mitchell09, + author = {Mitchell, Neil and Runciman, Colin}, + title = {Losing functions without gaining data: another look at defunctionalisation}, + booktitle = {Haskell '09: Proceedings of the 2nd ACM SIGPLAN symposium on Haskell}, + year = {2009}, + isbn = {978-1-60558-508-6}, + pages = {13--24}, + location = {Edinburgh, Scotland}, + doi = {http://doi.acm.org/10.1145/1596638.1596641}, + publisher = {ACM}, + address = {New York, NY, USA}, +}