This repository is the GNUstep Objective-C runtime library (libobjc2), a drop-in replacement for the GCC Objective-C runtime that implements the modern Objective-C runtime API for non-Apple platforms. It provides the core runtime services: message dispatch (via architecture-specific assembly fast paths and a C fallback), memory management (ARC retain/release, autorelease pools, weak references), block support, property access, exception handling (with C++ interop), and type-dependent dispatch. The architecture is a shared library with a modular design: loader.c handles module loading, selector_table.cc manages selector uniquing, class_table.c manages class loading and +load, sendmsg2.c implements message lookup, and arc.mm implements the ARC contract. It supports three ABIs (GCC legacy, GNUstep v1 non-fragile, GNUstep v2 modern) and runs on Linux, Windows, FreeBSD, Android, and WebAssembly. The codebase is well-structured with several reusable data structures (hopscotch hash tables, sparse arrays, platform-abstracted locks) and demonstrates strong engineering practices in performance-critical paths (cache-line alignment, atomic operations, copy-on-write dispatch tables). However, it carries significant complexity from legacy ABI compatibility and platform-specific ifdefs, and some components (C++ exception interop) rely on fragile runtime structure discovery.
Qthreads is a user-level threading library designed for high-performance computing (HPC) environments. It provides lightweight, stackful coroutines (qthreads) that are scheduled across 'shepherds' (groups of workers) with topology-aware affinity via hwloc. The library's core synchronization model is the full/empty bit (FEB) on every aligned word, enabling efficient producer-consumer and data-flow patterns. It includes lock-free data structures (queues, hash maps, distributed arrays), parallel loop constructs, and algorithmic skeletons (allpairs, wavefront). The codebase is heavily research-oriented, with multiple scheduler backends (nemesis, sherwood, distrib) and synchronization primitives (sincs, barriers, syncvars). While the architecture is sophisticated and demonstrates deep knowledge of parallel systems, it shows signs of academic evolution: multiple implementations of similar concepts, conditional compilation for optional lock-free paths, and some dead or incomplete code. The library is primarily targeted at HPC applications needing fine-grained task parallelism and is used in benchmarks like UTS (unbalanced tree search) and HPCCG.