As part of this course, you will be asked to give a presentation on a programming language outside those that you have seen previously during your degree.
In groups of 4 or 5, please choose a topic from the list below. You can claim any topic by opening a pull request on the repository hosting this website, where you add the name of all the team members to the topic. I’ll try to merge these promptly, but you may want to check any open pull requests to be sure no other team has chosen this subject.
The aim of the presentations is to provide students with a broad overview of modern programming languages. In your presentation, you should try to give an overview of the language and try to position it relative to other languages you may know. This includes addressing questions such as:
But more generally, it’s not so important to describe the exact syntax of for-loops – try to focus on what makes this language interesting and different. I’ve tried to include some key questions for each topic, but there may be many issues that I’ve overlooked.
You should aim to talk approximately 30-40 minutes, leaving time for questions.
Please use the slide template here:
Note that this requires pandoc to create .pdf slides using LaTeX beamer from Markdown. There are instructions in the slides.md file about building your slides. This should hopefully be fairly straightforward to set up.
What kind of language is Swift? How does it compare to older languages such as Java or C#? How does Swift handle abstraction? Other possible interesting topics for Swift may include closures, tuples, protocols, extensions, API’s to “embedded” objective-c, type inference, comparing Haskell’s Maybe type to Swifts Optional enum, garbage collection vs. automatic reference counting, safety in regards to memory leaks or memory cycles, constructors vs. initializers and potentially more.
What kind of language is Rust? What is the problem with aliasing? How does Rust’s borrowing mechanism address this?
How does Scala combine functional and object-oriented programming? What are traits? What are case classes and pattern matching? How can you interface with Java?
What is Lightweight Modular Staging? How is it implemented in Scala? How is it used for embedding compilers in Scala? What DSLs are implemented in this style? How does it compare to other approaches to implementing DSLs that we have seen?
What is OCaml’s module system? How is it different from Haskell’s? What are signatures and functors? What is the difference between generative and applicative functors?
How are data structures represented in memory? How is the interface with C managed? What are boxed and unbox
What are C++ templates? What are they good for? What are their limitations?
What is logic programming? How does the Prolog engine find solutions? What is cut? And when should it be used?
What is a language designers workbench? How is this approach to domain specific languages different from embedded or stand-alone languages? What are the relative merits of all these approaches?
Feel free to suggest other topics provided these languages are suitably distinct from those listed above. Jean Yang teaches a similar course on domain specific languages at CMU – any of the languages she mentions would also be suitable for presentation.