--- a/bsc-projects.html Wed May 08 15:22:31 2024 +0100
+++ b/bsc-projects.html Mon May 13 00:34:09 2024 +0100
@@ -1,12 +1,18 @@
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<HEAD>
-<TITLE>2018/19 BSc Projects</TITLE>
+<TITLE>BSc Projects</TITLE>
<BASE HREF="https://nms.kcl.ac.uk/christian.urban/">
<script type="text/javascript" src="striper.js"></script>
<link rel="stylesheet" href="nominal.css">
<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.2/MathJax.js?config=TeX-MML-AM_CHTML">
</script>
+<style>
+.note {
+ font-size: 100%;
+ color: "#4169E1" ;
+}
+</style>
</HEAD>
<BODY TEXT="#000000"
BGCOLOR="#4169E1"
@@ -42,7 +48,7 @@
</H4>
<H4>In 2013/14, I was nominated by the students
- for the best BSc project supervisor and best MSc project supervisor awards in the NMS
+ for the best BSc project supervisor and best MSc project supervisor awards in the NMES
faculty. Somehow I won both. In 2014/15 I was nominated again for the best MSc
project supervisor, but did not win it. ;o)
</H4>
@@ -169,7 +175,7 @@
module, that would obviously give you a head-start with this project.
</p>
-<li> <H4>[CU2] Grammars and Derivative-Based Parsing Algorithms</H4>
+<li> <H4>[CU1a] Grammars and Derivative-Based Parsing Algorithms</H4>
<p>
Parsing is an old nut. Generations of software developers need to do parsing of data or text.
@@ -200,22 +206,24 @@
</p>
-<li> <H4>[CU3] A Compiler for a small Programming Language</H4>
+<li> <H4>[CU2] A Compiler for a small Programming Language</H4>
<p>
<b>Description:</b>
Compilers translate high-level programs that humans can read and write into
efficient machine code that can be run on a CPU or virtual machine.
- A compiler for a simple functional language generating X86 code is described
- <A HREF="https://libraries.io/github/chameco/Shade">here</A>.
+ A compiler for a simple functional language generating assembly code is described
+ <A HREF="https://esumii.github.io/min-caml/paper.pdf">here</A>.
I recently implemented a very simple compiler for an even simpler functional
programming language following this
<A HREF="https://www.cs.princeton.edu/~dpw/papers/tal-toplas.pdf">paper</A>
(also described <A HREF="https://www.cs.princeton.edu/~dpw/papers/tal-tr.pdf">here</A>).
- My code, written in <A HREF="http://www.scala-lang.org/">Scala</A>, of this compiler is
- <A HREF="https://nms.kcl.ac.uk/christian.urban/compiler.scala">here</A>.
- The compiler can deal with simple programs involving natural numbers, such
- as Fibonacci numbers or factorial (but it can be easily extended - that is not the point).
+ My code, written in <A HREF="http://www.scala-lang.org/">Scala</A>, for this compiler is
+ <A HREF="https://nms.kcl.ac.uk/christian.urban/SystemF-compiler.scala">here</A>.
+ The compiler can only deal with simple programs involving natural numbers, such
+ as Fibonacci numbers or factorial function (but it can be easily extended - that is not the point).
+ The interesting feature in this compiler is that it can also deal with closure conversions and hoisting of
+ nested functions.
</p>
<p>
@@ -223,11 +231,11 @@
my compiler only produces some idealised machine code. For example I
assume there are infinitely many registers. The goal of this
project is to generate machine code that is more realistic and can
- run on a CPU, like X86, or run on a virtual machine, say the JVM.
+ run on a CPU, like X86, or run on a virtual machine, say the JVM.
+ You could also compile to the LLVM-IR.
This gives probably a speedup of thousand times in comparison to
- my naive machine code and virtual machine. The project
- requires to dig into the literature about real CPUs and generating
- real machine code.
+ my naive machine code and tiny virtual machine. The project
+ requires to dig into the literature about real machine code.
</p>
<p>
An alternative is to not generate machine code, but build a compiler that compiles to
@@ -240,13 +248,13 @@
very optimised subsets of JavaScript that can be used for this purpose:
one is <A HREF="http://asmjs.org">asm.js</A> and the other is
<A HREF="https://github.com/kripken/emscripten/wiki">emscripten</A>. Since
- last year there is even the official <A HREF="http://webassembly.org">Webassembly</A>
+ a few year ago there is even the official <A HREF="http://webassembly.org">Webassembly</A>
There is a <A HREF="http://kripken.github.io/emscripten-site/docs/getting_started/Tutorial.html">tutorial</A> for emscripten
and an impressive <A HREF="https://youtu.be/c2uNDlP4RiE">demo</A> which runs the
<A HREF="http://en.wikipedia.org/wiki/Unreal_Engine">Unreal Engine 3</A>
in a browser with spectacular speed. This was achieved by compiling the
C-code of the Unreal Engine to the LLVM intermediate language and then translating the LLVM
- code to JavaScript.
+ code to JavaScript/Webassembly.
</p>
<p>
@@ -271,7 +279,8 @@
what machine code looks like you can compile your C-program using gcc -S.
</p>
<p>
- If JavaScript is chosen as a target instead, then there are plenty of <A HREF="http://www.w3schools.com/js/">tutorials</A> on the Web.
+ If JavaScript is chosen as a target instead, then there are plenty of
+ <A HREF="http://www.w3schools.com/js/">tutorials</A> on the Web.
<A HREF="http://jsbooks.revolunet.com">Here</A> is a list of free books on JavaScript.
A project from which you can draw inspiration is this
<A HREF="http://jlongster.com/Outlet--My-Lisp-to-Javascript-Experiment">Lisp-to-JavaScript</A>
@@ -297,10 +306,18 @@
<p>
<B>PS:</B> Compiler projects consistently received high marks in the past.
- I have supervised eight so far and most of them received a mark above 70% - one even was awarded a prize.
+ I have supervised eight so far and many of them received a mark above 70% - one even was awarded a prize.
+ However in order to achieve anything better than a passing mark, you need to go beyond the
+ compiler presented in the CFL-module. For example you could implement
+
+ <ol class="note">
+ <li>first-class functions and closure conversions</li>
+ <li>recursive datatypes</li>
+ <li>interesting type-systems</li>
+ </ol>
</p>
-<li> <H4>[CU4] Webassembly Interpreter / Compiler</H4>
+<li> <H4>[CU2a] Webassembly Interpreter / Compiler</H4>
<p>
Webassembly is a recently agreed standard for speeding up web applications in browsers. In this
@@ -319,6 +336,7 @@
<B>Skills:</B> See [CU1].
</p>
+<!--
<li> <H4>[CU5] Slide-Making in the Web-Age</H4>
<p>
@@ -629,7 +647,6 @@
</ul>
-
<li> <H4>Earlier Projects</H4>
I am also open to project suggestions from you. You might find some inspiration from my earlier projects:
@@ -646,6 +663,7 @@
<A HREF="https://nms.kcl.ac.uk/christian.urban/bsc-projects-17.html">BSc 2017/18</A>,
<A HREF="https://nms.kcl.ac.uk/christian.urban/msc-projects-17.html">MSc 2017/18</A>,
<A HREF="https://nms.kcl.ac.uk/christian.urban/bsc-projects-17.html">BSc 2018/19</A>
+-->
</ul>
</TD>
</TR>