From 1e46cfbf86f99a74793fcfc907dd3300771885dc Mon Sep 17 00:00:00 2001 From: rabail-aamir Date: Sun, 30 Nov 2025 22:47:54 +1100 Subject: [PATCH 1/2] Add C++ implementation overview documentation --- Documentation/cpp-overview.md | 66 +++++++++++++++++++++++++++++++++++ 1 file changed, 66 insertions(+) create mode 100644 Documentation/cpp-overview.md diff --git a/Documentation/cpp-overview.md b/Documentation/cpp-overview.md new file mode 100644 index 0000000..14c7fb1 --- /dev/null +++ b/Documentation/cpp-overview.md @@ -0,0 +1,66 @@ +# C++ Implementation Overview in SplashKit Online + +## Introduction + +This document gives overview of how in Splashkit Online, code is compiled and execuded. It describes how user-written C++ code flows from the browser editor to WebAssembly compilation and execution. + +Main purpse is to help new contributors understand that how the system integrates C++ capability without requiring in-depth compiler knowledge. + +## Where C++ Lives in Repository + +- **compilers/cxx:** +Includes the primary logic for applying Clang to compile C++ code to WebAssembly. +- **runtimes/cxx:** +Manages the browser's runtime execution of C++ programmes that have been compiled. +- **SplashKitWasm:** +Contains the WebAssembly build of the SplashKit library used by compiled programs. +- **javascript/compilers/cxxCompiler.js:** +Manages the front-end compilation process. + +## Role of CXXCompiler + +CXXCompiler class is responsible for managing the C++ complition process. Its responsibilities include: + +- Writing source files to virtual filesystem +- Compile each file of C++ into object files +- Link object files into final WebAssembly output +- Provide syntax checking and error reporting +- Warn users about unsupported API usage + +It communicates with Web Worker to make sure that main interface doesn't freeze during compilation. + + +## Web Workers and Clang Backend + +In a Web Worker, the actual compilation process is carried out using: + +- **clang++.wasm** Compiles C++ source into object files +- **wasm-ld.wasm** Links object files into a final WASM executable + +In order to maintain UI responsiveness, this occurs asynchronously. + +## Relationship with WebAssembly (WASM) + +SplashKit Online can securely run C++ code within the browser thanks to WebAssembly. +The browser's runtime interprets WASM, which is created by the compiler from C++. +This method offers: + +- Sandboxing for security +- Compatibility between platforms +- Execution in real time in a web setting + +## Execution Environment + +Runtime environment handles: + +- Program start / stop / pause +- File system interactions +- Canvas rendering +- Audio output +- Keyboard and user input + +The ExecutionEnvironmentInternalCXX class is in charge of this, coordinating communication between the browser user interface and the compiled programme. + +## Error Handling and Output + +Prior to being displayed to the user, compiler messages undergo processing and formatting. In order to emphasise certain lines and offer insightful terminal feedback, errors are analysed. From 999889c1a63f278d6f8859736f96cc192e9a6c0e Mon Sep 17 00:00:00 2001 From: rabail-aamir Date: Sat, 24 Jan 2026 17:30:19 +0500 Subject: [PATCH 2/2] docs: address review feedback for cpp overview --- Documentation/cpp-overview.md | 29 +++++++++++++++-------------- 1 file changed, 15 insertions(+), 14 deletions(-) diff --git a/Documentation/cpp-overview.md b/Documentation/cpp-overview.md index 14c7fb1..a9dd6d1 100644 --- a/Documentation/cpp-overview.md +++ b/Documentation/cpp-overview.md @@ -2,9 +2,9 @@ ## Introduction -This document gives overview of how in Splashkit Online, code is compiled and execuded. It describes how user-written C++ code flows from the browser editor to WebAssembly compilation and execution. +This document gives an overview of how Splashkit Online compiles and executes code. It describes how user-written C++ code flows from the browser editor to WebAssembly compilation and execution. -Main purpse is to help new contributors understand that how the system integrates C++ capability without requiring in-depth compiler knowledge. +The main purpose is to help new contributors understand how the system integrates C++ capabilities without requiring in-depth compiler knowledge. ## Where C++ Lives in Repository @@ -19,25 +19,25 @@ Manages the front-end compilation process. ## Role of CXXCompiler -CXXCompiler class is responsible for managing the C++ complition process. Its responsibilities include: +The **CXXCompiler** class manages the C++ compilation process. Its responsibilities include: -- Writing source files to virtual filesystem -- Compile each file of C++ into object files -- Link object files into final WebAssembly output -- Provide syntax checking and error reporting -- Warn users about unsupported API usage +- Writing source files to the virtual filesystem +- Compiling each C++ file into object files +- Linking object files into final WebAssembly output +- Providing syntax checking and error reporting +- Warning users about unsupported API usage -It communicates with Web Worker to make sure that main interface doesn't freeze during compilation. +It communicates with a Web Worker to ensure the main interface doesn't freeze during compilation. ## Web Workers and Clang Backend In a Web Worker, the actual compilation process is carried out using: -- **clang++.wasm** Compiles C++ source into object files -- **wasm-ld.wasm** Links object files into a final WASM executable +- **clang++.wasm**: Compiles C++ source into object files +- **wasm-ld.wasm**: Links object files into a final -In order to maintain UI responsiveness, this occurs asynchronously. +This occurs asynchronously to maintain UI responsiveness. ## Relationship with WebAssembly (WASM) @@ -47,7 +47,7 @@ This method offers: - Sandboxing for security - Compatibility between platforms -- Execution in real time in a web setting +- Real-time execution in web environments ## Execution Environment @@ -63,4 +63,5 @@ The ExecutionEnvironmentInternalCXX class is in charge of this, coordinating com ## Error Handling and Output -Prior to being displayed to the user, compiler messages undergo processing and formatting. In order to emphasise certain lines and offer insightful terminal feedback, errors are analysed. +During error handling, compiler messages are processed and formatted before being displayed to the user. +This is done to ensure key lines are emphasised and clear terminal feedback is provided through error analysis. \ No newline at end of file