Import Debian changes 20180207-1
[hcoop/debian/mlton.git] / doc / guide / localhost / GoogleSummerOfCode2014
1 <!DOCTYPE html>
2 <html lang="en">
3 <head>
4 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
5 <meta name="generator" content="AsciiDoc 8.6.9">
6 <title>Google Summer of Code (2014)</title>
7 <link rel="stylesheet" href="./asciidoc.css" type="text/css">
8 <link rel="stylesheet" href="./pygments.css" type="text/css">
9
10
11 <script type="text/javascript" src="./asciidoc.js"></script>
12 <script type="text/javascript">
13 /*<![CDATA[*/
14 asciidoc.install(2);
15 /*]]>*/
16 </script>
17 <link rel="stylesheet" href="./mlton.css" type="text/css">
18 </head>
19 <body class="article">
20 <div id="banner">
21 <div id="banner-home">
22 <a href="./Home">MLton 20180207</a>
23 </div>
24 </div>
25 <div id="header">
26 <h1>Google Summer of Code (2014)</h1>
27 <div id="toc">
28 <div id="toctitle">Table of Contents</div>
29 <noscript><p><b>JavaScript must be enabled in your browser to display the table of contents.</b></p></noscript>
30 </div>
31 </div>
32 <div id="content">
33 <div class="sect1">
34 <h2 id="_mentors">Mentors</h2>
35 <div class="sectionbody">
36 <div class="paragraph"><p>The following developers have agreed to serve as mentors for the 2014 Google Summer of Code:</p></div>
37 <div class="ulist"><ul>
38 <li>
39 <p>
40 <a href="http://www.cs.rit.edu/%7Emtf">Matthew Fluet</a>
41 </p>
42 </li>
43 <li>
44 <p>
45 <a href="http://www.cse.buffalo.edu/%7Elziarek/">Lukasz (Luke) Ziarek</a>
46 </p>
47 </li>
48 <li>
49 <p>
50 <a href="http://people.cs.uchicago.edu/~jhr/">John Reppy</a>
51 </p>
52 </li>
53 <li>
54 <p>
55 <a href="http://www.cs.purdue.edu/homes/chandras">KC Sivaramakrishnan</a>
56 </p>
57 </li>
58 </ul></div>
59 </div>
60 </div>
61 <div class="sect1">
62 <h2 id="_ideas_list">Ideas List</h2>
63 <div class="sectionbody">
64 <div class="sect2">
65 <h3 id="_implement_a_partial_redundancy_elimination_pre_optimization">Implement a Partial Redundancy Elimination (PRE) Optimization</h3>
66 <div class="paragraph"><p>Partial redundancy elimination (PRE) is a program transformation that
67 removes operations that are redundant on some, but not necessarily all
68 paths, through the program. PRE can subsume both common subexpression
69 elimination and loop-invariant code motion, and is therefore a
70 potentially powerful optimization. However, a na&iuml;ve
71 implementation of PRE on a program in static single assignment (SSA)
72 form is unlikely to be effective. This project aims to adapt and
73 implement the SSAPRE algorithm(s) of Thomas VanDrunen in MLton&#8217;s SSA
74 intermediate language.</p></div>
75 <div class="paragraph"><p>Background:</p></div>
76 <div class="openblock">
77 <div class="content">
78 <div class="ulist"><ul>
79 <li>
80 <p>
81 <a href="http://onlinelibrary.wiley.com/doi/10.1002/spe.618/abstract">Anticipation-based partial redundancy elimination for static single assignment form</a>; Thomas VanDrunen and Antony L. Hosking
82 </p>
83 </li>
84 <li>
85 <p>
86 <a href="http://cs.wheaton.edu/%7Etvandrun/writings/thesis.pdf">Partial Redundancy Elimination for Global Value Numbering</a>; Thomas VanDrunen
87 </p>
88 </li>
89 <li>
90 <p>
91 <a href="http://www.springerlink.com/content/w06m3cw453nphm1u/">Value-Based Partial Redundancy Elimination</a>; Thomas VanDrunen and Antony L. Hosking
92 </p>
93 </li>
94 <li>
95 <p>
96 <a href="http://portal.acm.org/citation.cfm?doid=319301.319348">Partial redundancy elimination in SSA form</a>; Robert Kennedy, Sun Chan, Shin-Ming Liu, Raymond Lo, Peng Tu, and Fred Chow
97 </p>
98 </li>
99 </ul></div>
100 </div></div>
101 <div class="paragraph"><p>Recommended Skills: SML programming experience; some middle-end compiler experience</p></div>
102 </div>
103 <div class="sect2">
104 <h3 id="_design_and_implement_a_heap_profiler">Design and Implement a Heap Profiler</h3>
105 <div class="paragraph"><p>A heap profile is a description of the space usage of a program. A
106 heap profile is concerned with the allocation, retention, and
107 deallocation (via garbage collection) of heap data during the
108 execution of a program. A heap profile can be used to diagnose
109 performance problems in a functional program that arise from space
110 leaks. This project aims to design and implement a heap profiler for
111 MLton compiled programs.</p></div>
112 <div class="paragraph"><p>Background:</p></div>
113 <div class="openblock">
114 <div class="content">
115 <div class="ulist"><ul>
116 <li>
117 <p>
118 <a href="http://portal.acm.org/citation.cfm?doid=583854.582451">GCspy: an adaptable heap visualisation framework</a>; Tony Printezis and Richard Jones
119 </p>
120 </li>
121 <li>
122 <p>
123 <a href="http://journals.cambridge.org/action/displayAbstract?aid=1349892">New dimensions in heap profiling</a>; Colin Runciman and Niklas R&ouml;jemo
124 </p>
125 </li>
126 <li>
127 <p>
128 <a href="http://www.springerlink.com/content/710501660722gw37/">Heap profiling for space efficiency</a>; Colin Runciman and Niklas R&ouml;jemo
129 </p>
130 </li>
131 <li>
132 <p>
133 <a href="http://journals.cambridge.org/action/displayAbstract?aid=1323096">Heap profiling of lazy functional programs</a>; Colin Runciman and David Wakeling
134 </p>
135 </li>
136 </ul></div>
137 </div></div>
138 <div class="paragraph"><p>Recommended Skills: C and SML programming experience; some experience with UI and visualization</p></div>
139 </div>
140 <div class="sect2">
141 <h3 id="_garbage_collector_improvements">Garbage Collector Improvements</h3>
142 <div class="paragraph"><p>The garbage collector plays a significant role in the performance of
143 functional languages. Garbage collect too often, and program
144 performance suffers due to the excessive time spent in the garbage
145 collector. Garbage collect not often enough, and program performance
146 suffers due to the excessive space used by the uncollected garbage.
147 One particular issue is ensuring that a program utilizing a garbage
148 collector "plays nice" with other processes on the system, by not
149 using too much or too little physical memory. While there are some
150 reasonable theoretical results about garbage collections with heaps of
151 fixed size, there seems to be insufficient work that really looks
152 carefully at the question of dynamically resizing the heap in response
153 to the live data demands of the application and, similarly, in
154 response to the behavior of the operating system and other processes.
155 This project aims to investigate improvements to the memory behavior of
156 MLton compiled programs through better tuning of the garbage
157 collector.</p></div>
158 <div class="paragraph"><p>Background:</p></div>
159 <div class="openblock">
160 <div class="content">
161 <div class="ulist"><ul>
162 <li>
163 <p>
164 <a href="http://www.dcs.gla.ac.uk/%7Ewhited/papers/automated_heap_sizing.pdf">Automated Heap Sizing in the Poly/ML Runtime (Position Paper)</a>; David White, Jeremy Singer, Jonathan Aitken, and David Matthews
165 </p>
166 </li>
167 <li>
168 <p>
169 <a href="http://ieeexplore.ieee.org/xpls/abs_all.jsp?arnumber=4145125">Isla Vista Heap Sizing: Using Feedback to Avoid Paging</a>; Chris Grzegorczyk, Sunil Soman, Chandra Krintz, and Rich Wolski
170 </p>
171 </li>
172 <li>
173 <p>
174 <a href="http://portal.acm.org/citation.cfm?doid=1152649.1152652">Controlling garbage collection and heap growth to reduce the execution time of Java applications</a>; Tim Brecht, Eshrat Arjomandi, Chang Li, and Hang Pham
175 </p>
176 </li>
177 <li>
178 <p>
179 <a href="http://portal.acm.org/citation.cfm?doid=1065010.1065028">Garbage collection without paging</a>; Matthew Hertz, Yi Feng, and Emery D. Berger
180 </p>
181 </li>
182 <li>
183 <p>
184 <a href="http://portal.acm.org/citation.cfm?doid=1029873.1029881">Automatic heap sizing: taking real memory into account</a>; Ting Yang, Matthew Hertz, Emery D. Berger, Scott F. Kaplan, and J. Eliot B. Moss
185 </p>
186 </li>
187 </ul></div>
188 </div></div>
189 <div class="paragraph"><p>Recommended Skills: C programming experience; some operating systems and/or systems programming experience; some compiler and garbage collector experience</p></div>
190 </div>
191 <div class="sect2">
192 <h3 id="_implement_successor_160_ml_language_features">Implement Successor&#160;ML Language Features</h3>
193 <div class="paragraph"><p>Any programming language, including Standard&#160;ML, can be improved.
194 The community has identified a number of modest extensions and
195 revisions to the Standard&#160;ML programming language that would
196 likely prove useful in practice. This project aims to implement these
197 language features in the MLton compiler.</p></div>
198 <div class="paragraph"><p>Background:</p></div>
199 <div class="openblock">
200 <div class="content">
201 <div class="ulist"><ul>
202 <li>
203 <p>
204 <a href="http://successor-ml.org/index.php?title=Main_Page">Successor&#160;ML</a>
205 </p>
206 </li>
207 <li>
208 <p>
209 <a href="http://www.mpi-sws.org/%7Erossberg/hamlet/index.html#successor-ml">HaMLet (Successor&#160;ML)</a>
210 </p>
211 </li>
212 <li>
213 <p>
214 <a href="http://journals.cambridge.org/action/displayAbstract?aid=1322628">A critique of Standard&#160;ML</a>; Andrew W. Appel
215 </p>
216 </li>
217 </ul></div>
218 </div></div>
219 <div class="paragraph"><p>Recommended Skills: SML programming experience; some front-end compiler experience (i.e., scanners and parsers)</p></div>
220 </div>
221 <div class="sect2">
222 <h3 id="_implement_source_level_debugging">Implement Source-level Debugging</h3>
223 <div class="paragraph"><p>Debugging is a fact of programming life. Unfortunately, most SML
224 implementations (including MLton) provide little to no source-level
225 debugging support. This project aims to add basic to intermediate
226 source-level debugging support to the MLton compiler. MLton already
227 supports source-level profiling, which can be used to attribute bytes
228 allocated or time spent in source functions. It should be relatively
229 straightforward to leverage this source-level information into basic
230 source-level debugging support, with the ability to set/unset
231 breakpoints and step through declarations and functions. It may be
232 possible to also provide intermediate source-level debugging support,
233 with the ability to inspect in-scope variables of basic types (e.g.,
234 types compatible with MLton&#8217;s foreign function interface).</p></div>
235 <div class="paragraph"><p>Background:</p></div>
236 <div class="openblock">
237 <div class="content">
238 <div class="ulist"><ul>
239 <li>
240 <p>
241 <a href="http://mlton.org/HowProfilingWorks">MLton&#8201;&#8212;&#8201;How Profiling Works</a>
242 </p>
243 </li>
244 <li>
245 <p>
246 <a href="http://mlton.org/ForeignFunctionInterfaceTypes">MLton&#8201;&#8212;&#8201;Foreign Function Interface Types</a>
247 </p>
248 </li>
249 <li>
250 <p>
251 <a href="http://dwarfstd.org/">DWARF Debugging Standard</a>
252 </p>
253 </li>
254 <li>
255 <p>
256 <a href="http://sourceware.org/gdb/current/onlinedocs/stabs/index.html">STABS Debugging Format</a>
257 </p>
258 </li>
259 </ul></div>
260 </div></div>
261 <div class="paragraph"><p>Recommended Skills: SML programming experience; some compiler experience</p></div>
262 </div>
263 <div class="sect2">
264 <h3 id="_region_based_memory_management">Region Based Memory Management</h3>
265 <div class="paragraph"><p>Region based memory management is an alternative automatic memory
266 management scheme to garbage collection. Regions can be inferred by
267 the compiler (e.g., Cyclone and MLKit) or provided to the programmer
268 through a library. Since many students do not have extensive
269 experience with compilers we plan on adopting the later approach.
270 Creating a viable region based memory solution requires the removal of
271 the GC and changes to the allocator. Additionally, write barriers
272 will be necessary to ensure references between two ML objects is never
273 established if the left hand side of the assignment has a longer
274 lifetime than the right hand side. Students will need to come up with
275 an appropriate interface for creating, entering, and exiting regions
276 (examples include RTSJ scoped memory and SCJ scoped memory).</p></div>
277 <div class="paragraph"><p>Background:</p></div>
278 <div class="openblock">
279 <div class="content">
280 <div class="ulist"><ul>
281 <li>
282 <p>
283 Cyclone
284 </p>
285 </li>
286 <li>
287 <p>
288 MLKit
289 </p>
290 </li>
291 <li>
292 <p>
293 RTSJ + SCJ scopes
294 </p>
295 </li>
296 </ul></div>
297 </div></div>
298 <div class="paragraph"><p>Recommended Skills: SML programming experience; C programming experience; some compiler and garbage collector experience</p></div>
299 </div>
300 <div class="sect2">
301 <h3 id="_integration_of_multi_mlton">Integration of Multi-MLton</h3>
302 <div class="paragraph"><p><a href="http://multimlton.cs.purdue.edu">MultiMLton</a> is a compiler and runtime
303 environment that targets scalable multicore platforms. It is an
304 extension of MLton. It combines new language abstractions and
305 associated compiler analyses for expressing and implementing various
306 kinds of fine-grained parallelism (safe futures, speculation,
307 transactions, etc.), along with a sophisticated runtime system tuned
308 to efficiently handle large numbers of lightweight threads. The core
309 stable features of MultiMLton will need to be integrated with the
310 latest MLton public release. Certain experimental features, such as
311 support for the Intel SCC and distributed runtime will be omitted.
312 This project requires students to understand the delta between the
313 MultiMLton code base and the MLton code base. Students will need to
314 create build and configuration scripts for MLton to enable MultiMLton
315 features.</p></div>
316 <div class="paragraph"><p>Background</p></div>
317 <div class="openblock">
318 <div class="content">
319 <div class="ulist"><ul>
320 <li>
321 <p>
322 <a href="http://multimlton.cs.purdue.edu/mML/Publications.html">MultiMLton&#8201;&#8212;&#8201;Publications</a>
323 </p>
324 </li>
325 </ul></div>
326 </div></div>
327 <div class="paragraph"><p>Recommended Skills: SML programming experience; C programming experience; some compiler experience</p></div>
328 </div>
329 <div class="sect2">
330 <h3 id="_concurrent_160_ml_improvements">Concurrent&#160;ML Improvements</h3>
331 <div class="paragraph"><p><a href="http://cml.cs.uchicago.edu/">Concurrent ML</a> is an SML concurrency
332 library based on synchronous message passing. MLton has a partial
333 implementation of the CML message-passing primitives, but its use in
334 real-world applications has been stymied by the lack of completeness
335 and thread-safe I/O libraries. This project would aim to flesh out
336 the CML implementation in MLton to be fully compatible with the
337 "official" version distributed as part of SML/NJ. Furthermore, time
338 permitting, runtime system support could be added to allow use of
339 modern OS features, such as asynchronous I/O, in the implementation of
340 CML&#8217;s system interfaces.</p></div>
341 <div class="paragraph"><p>Background</p></div>
342 <div class="openblock">
343 <div class="content">
344 <div class="ulist"><ul>
345 <li>
346 <p>
347 <a href="http://cml.cs.uchicago.edu/">http://cml.cs.uchicago.edu/</a>
348 </p>
349 </li>
350 <li>
351 <p>
352 <a href="http://mlton.org/ConcurrentML">http://mlton.org/ConcurrentML</a>
353 </p>
354 </li>
355 <li>
356 <p>
357 <a href="http://mlton.org/ConcurrentMLImplementation">http://mlton.org/ConcurrentMLImplementation</a>
358 </p>
359 </li>
360 </ul></div>
361 </div></div>
362 <div class="paragraph"><p>Recommended Skills: SML programming experience; knowledge of concurrent programming; some operating systems and/or systems programming experience</p></div>
363 </div>
364 </div>
365 </div>
366 </div>
367 <div id="footnotes"><hr></div>
368 <div id="footer">
369 <div id="footer-text">
370 </div>
371 <div id="footer-badges">
372 </div>
373 </div>
374 </body>
375 </html>