Skip to content

aaron-michaux/zero

Repository files navigation

zero

About

This repo is a playground where I teach myself new stuff about C++.

This is all quite broken at the moment. I wrote my own implementation of C++ futures, and then realized that I really need to learn P2300 senders+receivers. Starting out on that made me realize that I needed to move on from header-only libraries. (libunifex needs to be built.) And also use git submodules. The niggly contains the base library along with install scripts.

Building

Since this is a personal project, it very much is "works for me". I use Ubuntu and MacOS.

Use the build script bin/build-cc.sh to install custom versions of clang (llvm) and gcc.

The ./run.sh script is a front end to the Makefile... it:

  • Sets environment variables that change the mode of the Makefile.
  • Runs make
  • Runs the code, including under gdb.

  • Spin out install stuff, including project-config

Technologies To Learn

  • P2300, senders/receivers
    • With Linux's io_uring
  • Ranges
  • Modules (when clang-scan-deps is available)
  • Concepts
  • source_location
  • Calendar/Time Zone library
  • jthread
  • owned (dumb) smart pointer (library)
  • coroutines

Build System

  • arch directory for dependencies
  • LTO
  • unity build
  • asan/usan/tsan/debug/release
  • testing with gtest/catch
  • constexpr-testing
  • fuzz testing
  • coverage
  • benchmark
  • compiled examples
  • doxygen
  • cmake? (groan)

Subsystems

  • refined "niggly" library. (Rename?)
    • Make every string function aware of custom string types (ranges)
    • Polyfill methods
  • websockets -- websockets to work in WebAssembly (through Javascript), and stand alone executable
  • Symmetric client/server rpc service over websocket layer
  • cpp_asio_grpc_unifex, a grpc example
  • StateMachine, with undo/redo checkpoints (external polymorphism?)
  • User Interface
    • SDL/ImGUI of Webassembly
    • Curses server with logging to file (tail -f) Always wanted to do this

Cyber-Security executive order