#+TITLE: Holst #+AUTHOR: Charles Kralapp #+OPTIONS: toc:nil num:nil This project combines a raytracer and an N-body solar system simulation to learn modern C++ (C++03โ€“C++23) through practical implementation. * โœ… Project Goals - [ ] Simulate solar system using an N-body gravitational algorithm. - [ ] Implement a raytracer for rendering bodies and backgrounds. - [ ] Learn and demonstrate features from every major C++ standard. - [ ] Use open-source tooling: GNU Emacs, Org-mode, GCC, GNU Make. * ๐Ÿš€ Toolchain - Editor: Emacs + Org Mode - Compiler: GCC/g++ - Build System: GNU Make (no CMake) - Version Control: Git (optional but recommended) * ๐Ÿ“š C++ Learning Checklist ** C++03 (Baseline) - [ ] Classes & Constructors - [ ] Operator Overloading (`+`, `*`, `[]`) - [ ] Manual memory management (`new` / `delete`) - [ ] STL containers: `std::vector`, `std::map` - [ ] Function overloading - [ ] Templates (vector math, utility classes) - [ ] Pointers, references, and const correctness - [ ] Namespaces - [ ] RAII pattern with destructors - [ ] `std::string`, `std::stringstream` ** C++11 (Modern C++ begins) - [ ] `auto` type deduction - [ ] Range-based for loops - [ ] Lambda expressions - [ ] `nullptr` - [ ] `enum class` - [ ] Smart pointers: `std::unique_ptr`, `std::shared_ptr` - [ ] `override`, `final` specifiers - [ ] `move` semantics and rvalue references - [ ] `std::array`, `std::tuple` - [ ] Thread support: `std::thread` ** C++14 (Polish & convenience) - [ ] Generic lambdas (`auto` in lambda parameters) - [ ] `decltype(auto)` and improved return type inference - [ ] `std::make_unique` - [ ] Binary literals and digit separators (`0b1010`, `1'000'000`) - [ ] Relaxed constexpr functions - [ ] Using `auto` in lambda captures ** C++17 (Simpler and more expressive) - [ ] Structured bindings (`auto [x, y] = foo();`) - [ ] `if constexpr` - [ ] `std::optional` - [ ] `std::variant`, `std::any` - [ ] Inline variables - [ ] `std::string_view` - [ ] Filesystem support (`std::filesystem`) - [ ] Parallel algorithms (`std::execution`) ** C++20 (Huge leap forward) - [ ] Concepts (`template requires`) - [ ] Ranges library: views, filters, transforms - [ ] `consteval` / `constinit` - [ ] Coroutines (`co_yield`, `co_return`) - [ ] Calendar and time utilities (`std::chrono::year_month_day`) - [ ] Modules (if supported by compiler/toolchain) - [ ] Expanded constexpr support (e.g., STL algorithms) ** C++23 (Final polish) - [ ] `std::expected` (like Rust's Result) - [ ] `std::mdspan` for multidimensional array views - [ ] `explicit` lambdas - [ ] More constexpr in the standard library - [ ] `[[assume]]` attribute - [ ] Improved ranges (e.g., `views::repeat`, `zip`) * ๐Ÿ›  Project Milestones (use standards progressively) ** Milestone 1: Base Simulation Engine - [ ] Build N-body simulation using raw pointers (C++03) - [ ] Add `Vector3` class, `Body` class - [ ] Use `std::vector` and manual memory management ** Milestone 2: Modernization Pass 1 - [ ] Convert raw pointers to smart pointers (C++11) - [ ] Add lambda-driven physics update loop - [ ] Use `enum class` for material types ** Milestone 3: Raytracer Core - [ ] Add ray-object intersection logic - [ ] Use `std::optional` for hit results (C++17) - [ ] Structured bindings for clean code ** Milestone 4: Optimization Pass - [ ] Parallel rendering with `std::execution::par` (C++17) - [ ] Use ranges and views to process pixels (C++20) ** Milestone 5: Error Handling & Final Touches - [ ] Use `std::expected` for config file errors or simulation errors (C++23) - [ ] Add diagnostics/metrics via coroutines or logging views - [ ] Final cleanup using `consteval`, `mdspan`, or advanced features * ๐Ÿงช Testing Ideas - [ ] Unit tests for vector math and physics (can use C++11 `assert`) - [ ] Visual verification of orbits and raytraced scene - [ ] Compare numerical stability over long time steps * ๐Ÿ“‚ Directory Layout (suggested) #+BEGIN_SRC project-root/ โ”œโ”€โ”€ Makefile โ”œโ”€โ”€ README.org (this file) โ””โ”€โ”€โ”€ src/ โ”œโ”€โ”€ main.cpp โ”œโ”€โ”€ vec3.cpp / .h โ”œโ”€โ”€ body.cpp / .h โ””โ”€โ”€โ”€ raytracer/ โ””โ”€โ”€ ray.cpp / .h ... #+END_SRC