bsc-projects.html
changeset 651 e69c7e03bbd1
parent 617 03c19716590d
--- 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>