A case study with fundamental programming constructs The PLanCompS project [1] has identified a large collection of fundamental programming constructs, referred to as funcons [2]. The funcons can be used as a vehicle for expressing the semantics of existing languages or in the design of new languages. This is achieved by expressing a translation from programs in the object language (the language being defined) to terms constructed purely out of funcons. As the funcons are executable [3], the translation enables the execution of object language programs. As such, a funcons-based language definition enables Agile Language Engineering, a form of software language engineering characterized by incremental development and rapid prototyping. The applicability and reuse of funcons has been demonstrated in various case studies, most notably C# and Caml Light. Together these case studies demonstrate the funcons can be used to define functional, imperative and object-oriented languages with non-trivial features such as exceptions, abnormal control flow, inheritance and overloading. However, case studies performed for concurrent languages, languages with concurrency primitives, and logic programming languages are absent. The goal of this project is to perform one or more case studies to validate the current set of funcons, published in the Funcons-beta library [2]. The case study should involve a new paradigm such as concurrent (distributed) programming or logic programming. A possible starting point is to define the CiviC language of the Compiler Construction course using funcons, and to extend the language with concurrency primitives (such as found in C++11 [4]). Another option is give a funcons-based definition of the eFLINT language studied in Programmeertalen [5]. Possible outcomes involve an extensive case study in the form of a funcons-based language definition for a complete academic language or for a significant subset of a real-world language, new funcons to be added to the Funcons library and a reference interpreter for executing object language programs (e.g. CiviC programs). Knowledge of Compiler Construction is recommended but not required. [1] https://plancomps.csle.cs.rhul.ac.uk/background/ [2] https://plancomps.github.io/CBS-beta/docs/Funcons-beta/index.html [3] Executable Component-Based Semantics. Journal of Logical and Algebraic Methods in Programming. 2019. L. Thomas van Binsbergen, Peter D. Mosses and Neil Sculthorpe. https://doi.org/10.1016/j.jlamp.2018.12.004 [4] Clarifying and compiling C/C++ concurrency: from C++11 to POWER. ACM SIGPLAN Notices. 2012. Mark Batty, Kayvan Memarian, Scott Owens, Susmit Sarkar, and Peter Sewell. https://doi.org/10.1145/2103621.2103717 [5] eFLINT: a Domain-Specific Language for Executable Norm Specifications. 2020. L. Thomas van Binsbergen, Lu-Chi Liu, Robert van Doesburg, and Tom van Engers. https://doi.org/10.1145/3425898.3426958