Table of Contents:
- Introduction (1/11)
- Goals and Architecture (2/11)
- The inotify API (3/11)
- File Watcher, C++ (4/11)
- File Watcher, Bash (5/11)
- Execution Engine (6/11)
- Containerization (7/11)
- Kubernetes (8/11)
- Demo (9/11)
- Conclusion (10/11)
- System Setup (11/11)
- Source code
This series of posts will talk about an implementation for a multi-language compiler system. Specifically, the goal will be to create a back-end system similar to something like ideone, where the back-end system will handle compiling and executing an arbitrary program that a user provides. These files will be provided as input source files for a supported set of languages. As part of this project, the following languages will have support: C, C++, C#, Java, and Python, although the code and architecture can easily be extended to allow for more.
The bulk of the implementation code for this will be in C++ and targeting Linux. There will be some supporting Bash scripts developed, as well as some very basic Dockerfile and Kubernetes configurations. The goal is to have an end-to-end “feature complete” system that can be used as a playground for experimenting with different languages. Since this is a personal project, the main focus is on simplicity of the design and implementation. The approach presented here is not the only one, and likely not even the best one, depending on what characteristics are desired. The focus on simplicity means that things like security and resiliency/fault-tolerance (to an extent) were slightly overlooked. Consider these factors if this architecture is to be used in a system where these are primary concerns.
Having said that, the next series of posts will describe the goals of the system in more depth and provide a higher-level architecture for how those goals are to be achieved. The full set of posts, with links to them, is shown below
you wrote “can be easily be extended” lol
Comment by name — May 20, 2021 @ 8:53 AM
Thanks, fixed it
Comment by admin — May 20, 2021 @ 9:21 AM