Import Upstream version 20180207
[hcoop/debian/mlton.git] / doc / guide / localhost / GoogleSummerOfCode2013
CommitLineData
7f918cf1
CE
1<!DOCTYPE html>\r
2<html lang="en">\r
3<head>\r
4<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">\r
5<meta name="generator" content="AsciiDoc 8.6.9">\r
6<title>Google Summer of Code (2013)</title>\r
7<link rel="stylesheet" href="./asciidoc.css" type="text/css">\r
8<link rel="stylesheet" href="./pygments.css" type="text/css">\r
9\r
10\r
11<script type="text/javascript" src="./asciidoc.js"></script>\r
12<script type="text/javascript">\r
13/*<![CDATA[*/\r
14asciidoc.install(2);\r
15/*]]>*/\r
16</script>\r
17<link rel="stylesheet" href="./mlton.css" type="text/css">\r
18</head>\r
19<body class="article">\r
20<div id="banner">\r
21<div id="banner-home">\r
22<a href="./Home">MLton 20180207</a>\r
23</div>\r
24</div>\r
25<div id="header">\r
26<h1>Google Summer of Code (2013)</h1>\r
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>\r
31</div>\r
32<div id="content">\r
33<div class="sect1">\r
34<h2 id="_mentors">Mentors</h2>\r
35<div class="sectionbody">\r
36<div class="paragraph"><p>The following developers have agreed to serve as mentors for the 2013 Google Summer of Code:</p></div>\r
37<div class="ulist"><ul>\r
38<li>\r
39<p>\r
40<a href="http://www.cs.rit.edu/%7Emtf">Matthew Fluet</a>\r
41</p>\r
42</li>\r
43<li>\r
44<p>\r
45<a href="http://www.cse.buffalo.edu/%7Elziarek/">Lukasz (Luke) Ziarek</a>\r
46</p>\r
47</li>\r
48<li>\r
49<p>\r
50<a href="http://www.cs.purdue.edu/homes/suresh/">Suresh Jagannathan</a>\r
51</p>\r
52</li>\r
53</ul></div>\r
54</div>\r
55</div>\r
56<div class="sect1">\r
57<h2 id="_ideas_list">Ideas List</h2>\r
58<div class="sectionbody">\r
59<div class="sect2">\r
60<h3 id="_implement_a_partial_redundancy_elimination_pre_optimization">Implement a Partial Redundancy Elimination (PRE) Optimization</h3>\r
61<div class="paragraph"><p>Partial redundancy elimination (PRE) is a program transformation that\r
62removes operations that are redundant on some, but not necessarily all\r
63paths, through the program. PRE can subsume both common subexpression\r
64elimination and loop-invariant code motion, and is therefore a\r
65potentially powerful optimization. However, a na&iuml;ve\r
66implementation of PRE on a program in static single assignment (SSA)\r
67form is unlikely to be effective. This project aims to adapt and\r
68implement the SSAPRE algorithm(s) of Thomas VanDrunen in MLton&#8217;s SSA\r
69intermediate language.</p></div>\r
70<div class="paragraph"><p>Background:</p></div>\r
71<div class="openblock">\r
72<div class="content">\r
73<div class="ulist"><ul>\r
74<li>\r
75<p>\r
76<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\r
77</p>\r
78</li>\r
79<li>\r
80<p>\r
81<a href="http://cs.wheaton.edu/%7Etvandrun/writings/thesis.pdf">Partial Redundancy Elimination for Global Value Numbering</a>; Thomas VanDrunen\r
82</p>\r
83</li>\r
84<li>\r
85<p>\r
86<a href="http://www.springerlink.com/content/w06m3cw453nphm1u/">Value-Based Partial Redundancy Elimination</a>; Thomas VanDrunen and Antony L. Hosking\r
87</p>\r
88</li>\r
89<li>\r
90<p>\r
91<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\r
92</p>\r
93</li>\r
94</ul></div>\r
95</div></div>\r
96<div class="paragraph"><p>Recommended Skills: SML programming experience; some middle-end compiler experience</p></div>\r
97</div>\r
98<div class="sect2">\r
99<h3 id="_design_and_implement_a_heap_profiler">Design and Implement a Heap Profiler</h3>\r
100<div class="paragraph"><p>A heap profile is a description of the space usage of a program. A\r
101heap profile is concerned with the allocation, retention, and\r
102deallocation (via garbage collection) of heap data during the\r
103execution of a program. A heap profile can be used to diagnose\r
104performance problems in a functional program that arise from space\r
105leaks. This project aims to design and implement a heap profiler for\r
106MLton compiled programs.</p></div>\r
107<div class="paragraph"><p>Background:</p></div>\r
108<div class="openblock">\r
109<div class="content">\r
110<div class="ulist"><ul>\r
111<li>\r
112<p>\r
113<a href="http://portal.acm.org/citation.cfm?doid=583854.582451">GCspy: an adaptable heap visualisation framework</a>; Tony Printezis and Richard Jones\r
114</p>\r
115</li>\r
116<li>\r
117<p>\r
118<a href="http://journals.cambridge.org/action/displayAbstract?aid=1349892">New dimensions in heap profiling</a>; Colin Runciman and Niklas R&ouml;jemo\r
119</p>\r
120</li>\r
121<li>\r
122<p>\r
123<a href="http://www.springerlink.com/content/710501660722gw37/">Heap profiling for space efficiency</a>; Colin Runciman and Niklas R&ouml;jemo\r
124</p>\r
125</li>\r
126<li>\r
127<p>\r
128<a href="http://journals.cambridge.org/action/displayAbstract?aid=1323096">Heap profiling of lazy functional programs</a>; Colin Runciman and David Wakeling\r
129</p>\r
130</li>\r
131</ul></div>\r
132</div></div>\r
133<div class="paragraph"><p>Recommended Skills: C and SML programming experience; some experience with UI and visualization</p></div>\r
134</div>\r
135<div class="sect2">\r
136<h3 id="_garbage_collector_improvements">Garbage Collector Improvements</h3>\r
137<div class="paragraph"><p>The garbage collector plays a significant role in the performance of\r
138functional languages. Garbage collect too often, and program\r
139performance suffers due to the excessive time spent in the garbage\r
140collector. Garbage collect not often enough, and program performance\r
141suffers due to the excessive space used by the uncollected garbage.\r
142One particular issue is ensuring that a program utilizing a garbage\r
143collector "plays nice" with other processes on the system, by not\r
144using too much or too little physical memory. While there are some\r
145reasonable theoretical results about garbage collections with heaps of\r
146fixed size, there seems to be insufficient work that really looks\r
147carefully at the question of dynamically resizing the heap in response\r
148to the live data demands of the application and, similarly, in\r
149response to the behavior of the operating system and other processes.\r
150This project aims to investigate improvements to the memory behavior of\r
151MLton compiled programs through better tuning of the garbage\r
152collector.</p></div>\r
153<div class="paragraph"><p>Background:</p></div>\r
154<div class="openblock">\r
155<div class="content">\r
156<div class="ulist"><ul>\r
157<li>\r
158<p>\r
159<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\r
160</p>\r
161</li>\r
162<li>\r
163<p>\r
164<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\r
165</p>\r
166</li>\r
167<li>\r
168<p>\r
169<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\r
170</p>\r
171</li>\r
172<li>\r
173<p>\r
174<a href="http://portal.acm.org/citation.cfm?doid=1065010.1065028">Garbage collection without paging</a>; Matthew Hertz, Yi Feng, and Emery D. Berger\r
175</p>\r
176</li>\r
177<li>\r
178<p>\r
179<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\r
180</p>\r
181</li>\r
182</ul></div>\r
183</div></div>\r
184<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>\r
185</div>\r
186<div class="sect2">\r
187<h3 id="_implement_successor_160_ml_language_features">Implement Successor&#160;ML Language Features</h3>\r
188<div class="paragraph"><p>Any programming language, including Standard&#160;ML, can be improved.\r
189The community has identified a number of modest extensions and\r
190revisions to the Standard&#160;ML programming language that would\r
191likely prove useful in practice. This project aims to implement these\r
192language features in the MLton compiler.</p></div>\r
193<div class="paragraph"><p>Background:</p></div>\r
194<div class="openblock">\r
195<div class="content">\r
196<div class="ulist"><ul>\r
197<li>\r
198<p>\r
199<a href="http://successor-ml.org/index.php?title=Main_Page">Successor&#160;ML</a>\r
200</p>\r
201</li>\r
202<li>\r
203<p>\r
204<a href="http://www.mpi-sws.org/%7Erossberg/hamlet/index.html#successor-ml">HaMLet (Successor&#160;ML)</a>\r
205</p>\r
206</li>\r
207<li>\r
208<p>\r
209<a href="http://journals.cambridge.org/action/displayAbstract?aid=1322628">A critique of Standard&#160;ML</a>; Andrew W. Appel\r
210</p>\r
211</li>\r
212</ul></div>\r
213</div></div>\r
214<div class="paragraph"><p>Recommended Skills: SML programming experience; some front-end compiler experience (i.e., scanners and parsers)</p></div>\r
215</div>\r
216<div class="sect2">\r
217<h3 id="_implement_source_level_debugging">Implement Source-level Debugging</h3>\r
218<div class="paragraph"><p>Debugging is a fact of programming life. Unfortunately, most SML\r
219implementations (including MLton) provide little to no source-level\r
220debugging support. This project aims to add basic to intermediate\r
221source-level debugging support to the MLton compiler. MLton already\r
222supports source-level profiling, which can be used to attribute bytes\r
223allocated or time spent in source functions. It should be relatively\r
224straightforward to leverage this source-level information into basic\r
225source-level debugging support, with the ability to set/unset\r
226breakpoints and step through declarations and functions. It may be\r
227possible to also provide intermediate source-level debugging support,\r
228with the ability to inspect in-scope variables of basic types (e.g.,\r
229types compatible with MLton&#8217;s foreign function interface).</p></div>\r
230<div class="paragraph"><p>Background:</p></div>\r
231<div class="openblock">\r
232<div class="content">\r
233<div class="ulist"><ul>\r
234<li>\r
235<p>\r
236<a href="http://mlton.org/HowProfilingWorks">MLton&#8201;&#8212;&#8201;How Profiling Works</a>\r
237</p>\r
238</li>\r
239<li>\r
240<p>\r
241<a href="http://mlton.org/ForeignFunctionInterfaceTypes">MLton&#8201;&#8212;&#8201;Foreign Function Interface Types</a>\r
242</p>\r
243</li>\r
244<li>\r
245<p>\r
246<a href="http://dwarfstd.org/">DWARF Debugging Standard</a>\r
247</p>\r
248</li>\r
249<li>\r
250<p>\r
251<a href="http://sourceware.org/gdb/current/onlinedocs/stabs/index.html">STABS Debugging Format</a>\r
252</p>\r
253</li>\r
254</ul></div>\r
255</div></div>\r
256<div class="paragraph"><p>Recommended Skills: SML programming experience; some compiler experience</p></div>\r
257</div>\r
258<div class="sect2">\r
259<h3 id="_simd_primitives">SIMD Primitives</h3>\r
260<div class="paragraph"><p>Most modern processors offer some direct support for SIMD (Single\r
261Instruction, Multiple Data) operations, such as Intel&#8217;s MMX/SSE\r
262instructions, AMD&#8217;s 3DNow! instructions, and IBM&#8217;s AltiVec. Such\r
263instructions are particularly useful for multimedia, scientific, and\r
264cryptographic applications. This project aims to add preliminary\r
265support for vector data and vector operations to the MLton compiler.\r
266Ideally, after surveying SIMD instruction sets and SIMD support in\r
267other compilers, a core set of SIMD primitives with broad architecture\r
268and compiler support can be identified. After adding SIMD primitives\r
269to the core compiler and carrying them through to the various\r
270backends, there will be opportunities to design and implement an SML\r
271library that exposes the primitives to the SML programmer as well as\r
272opportunities to design and implement auto-vectorization\r
273optimizations.</p></div>\r
274<div class="paragraph"><p>Background:</p></div>\r
275<div class="openblock">\r
276<div class="content">\r
277<div class="ulist"><ul>\r
278<li>\r
279<p>\r
280<a href="http://en.wikipedia.org/wiki/SIMD">SIMD</a>\r
281</p>\r
282</li>\r
283<li>\r
284<p>\r
285<a href="http://gcc.gnu.org/projects/tree-ssa/vectorization.html">Auto-vectorization in GCC</a>\r
286</p>\r
287</li>\r
288<li>\r
289<p>\r
290<a href="http://llvm.org/docs/Vectorizers.html">Auto-vectorization in LLVM</a>\r
291</p>\r
292</li>\r
293</ul></div>\r
294</div></div>\r
295<div class="paragraph"><p>Recommended Skills: SML programming experience; some compiler experience; some computer architecture experience</p></div>\r
296</div>\r
297<div class="sect2">\r
298<h3 id="_rtos_support">RTOS Support</h3>\r
299<div class="paragraph"><p>This project entails porting the MLton compiler to RTOSs such as:\r
300RTEMS, RT Linux, and FreeRTOS. The project will include modifications\r
301to the MLton build and configuration process. Students will need to\r
302extend the MLton configuration process for each of the RTOSs. The\r
303MLton compilation process will need to be extended to invoke the C\r
304cross compilers the RTOSs provide for embedded support. Test scripts\r
305for validation will be necessary and these will need to be run in\r
306emulators for supported architectures.</p></div>\r
307<div class="paragraph"><p>Recommended Skills: C programming experience; some scripting experience</p></div>\r
308</div>\r
309<div class="sect2">\r
310<h3 id="_region_based_memory_management">Region Based Memory Management</h3>\r
311<div class="paragraph"><p>Region based memory management is an alternative automatic memory\r
312management scheme to garbage collection. Regions can be inferred by\r
313the compiler (e.g., Cyclone and MLKit) or provided to the programmer\r
314through a library. Since many students do not have extensive\r
315experience with compilers we plan on adopting the later approach.\r
316Creating a viable region based memory solution requires the removal of\r
317the GC and changes to the allocator. Additionally, write barriers\r
318will be necessary to ensure references between two ML objects is never\r
319established if the left hand side of the assignment has a longer\r
320lifetime than the right hand side. Students will need to come up with\r
321an appropriate interface for creating, entering, and exiting regions\r
322(examples include RTSJ scoped memory and SCJ scoped memory).</p></div>\r
323<div class="paragraph"><p>Background:</p></div>\r
324<div class="openblock">\r
325<div class="content">\r
326<div class="ulist"><ul>\r
327<li>\r
328<p>\r
329Cyclone\r
330</p>\r
331</li>\r
332<li>\r
333<p>\r
334MLKit\r
335</p>\r
336</li>\r
337<li>\r
338<p>\r
339RTSJ + SCJ scopes\r
340</p>\r
341</li>\r
342</ul></div>\r
343</div></div>\r
344<div class="paragraph"><p>Recommended Skills: SML programming experience; C programming experience; some compiler and garbage collector experience</p></div>\r
345</div>\r
346<div class="sect2">\r
347<h3 id="_integration_of_multi_mlton">Integration of Multi-MLton</h3>\r
348<div class="paragraph"><p><a href="http://multimlton.cs.purdue.edu">MultiMLton</a> is a compiler and runtime\r
349environment that targets scalable multicore platforms. It is an\r
350extension of MLton. It combines new language abstractions and\r
351associated compiler analyses for expressing and implementing various\r
352kinds of fine-grained parallelism (safe futures, speculation,\r
353transactions, etc.), along with a sophisticated runtime system tuned\r
354to efficiently handle large numbers of lightweight threads. The core\r
355stable features of MultiMLton will need to be integrated with the\r
356latest MLton public release. Certain experimental features, such as\r
357support for the Intel SCC and distributed runtime will be omitted.\r
358This project requires students to understand the delta between the\r
359MultiMLton code base and the MLton code base. Students will need to\r
360create build and configuration scripts for MLton to enable MultiMLton\r
361features.</p></div>\r
362<div class="paragraph"><p>Background</p></div>\r
363<div class="openblock">\r
364<div class="content">\r
365<div class="ulist"><ul>\r
366<li>\r
367<p>\r
368<a href="http://multimlton.cs.purdue.edu/mML/Publications.html">MultiMLton&#8201;&#8212;&#8201;Publications</a>\r
369</p>\r
370</li>\r
371</ul></div>\r
372</div></div>\r
373<div class="paragraph"><p>Recommended Skills: SML programming experience; C programming experience; some compiler experience</p></div>\r
374</div>\r
375</div>\r
376</div>\r
377</div>\r
378<div id="footnotes"><hr></div>\r
379<div id="footer">\r
380<div id="footer-text">\r
381</div>\r
382<div id="footer-badges">\r
383</div>\r
384</div>\r
385</body>\r
386</html>\r