google/comprehensive-rust
58.1
Adequate · 28 September 2026
5.1k
lines of production code
Rust
with JavaScript
2
measurements over time
What this system is
This system is the build infrastructure and content management engine for the Comprehensive Rust educational curriculum. It utilizes mdBook with custom preprocessors to parse course structures, manage translations, and extract executable code examples into standalone files. The project also provides a comprehensive suite of Rust exercises and bare-metal examples for Android, microcontrollers, and general language concepts, all standardized under a Bazel build system.
How it got here
2022 — Bazel migration and curriculum restructuring
20 changes.
The project migrated its build system to Bazel and upgraded to the Rust 2024 edition, introducing automation tools and updating dependencies. Concurrently, the Android course materials were modernized with improved build configurations and interoperability examples, while the broader curriculum was restructured to remove outdated exercises and integrate Bazel support into remaining learning modules.
2023 — bare-metal expansion and course restructuring
30 changes.
This period focused on significantly expanding the bare-metal Rust curriculum with extensive examples for AArch64, microcontrollers, and interrupt handling, alongside new interop tutorials for C++. Simultaneously, the core educational content was restructured and enriched with new exercises and documentation for fundamental topics like borrowing, control flow, and smart pointers, all while integrating Bazel build support across these modules.
2024–2025 — curriculum expansion and test infrastructure
13 changes.
This period focused on significantly expanding the educational curriculum with new modules on lifetimes, concurrency, closures, and the typestate pattern, alongside comprehensive async exercises. Concurrently, the project established robust testing infrastructure, introducing WebdriverIO for end-to-end UI verification and adding specific unit tests for Android and slide validation. Development workflows were also standardized through the introduction of a centralized cargo xtask for automation.
Features
Add RTC bare-metal exercise
A new bare-metal exercise for the Real-Time Clock (RTC) has been added to the curriculum. This includes the necessary build infrastructure (Makefile, build script, and linker script) to compile and run the exercise on QEMU, providing users with a hands-on environment to practice RTC programming.
src/exercises/bare-metal/rtc · high confidence
Add Typestate Pattern chapter with generic serializer example
Added a new chapter to the Idiomatic Rust course that introduces the typestate pattern, demonstrating how to encode runtime state into types to prevent invalid operations at compile time. The content includes an initial example using concrete types and a more advanced implementation leveraging generics to handle nested structures and lists, complete with editable code blocks and transition diagrams.
src/idiomatic/leveraging-the-type-system/typestate-pattern · high confidence
Add bare-metal compass exercise with accelerometer mode toggle
The new \src/exercises/bare-metal/compass/src/main.rs\ file introduces a bare-metal exercise for the micro:bit that initializes an LSM303AGR IMU via I2C and displays sensor data on the 5x5 LED matrix. By default, it visualizes compass (magnetic field) readings, but pressing button A toggles the display to show accelerometer data instead. The solution logs raw sensor values to the serial port and uses a clamping scale function to map sensor ranges to the LED grid coordinates.
src/exercises/bare-metal/compass/src · high confidence
Add bare-metal heap allocation example for AArch64
A new example project has been added to demonstrate heap allocation in a bare-metal Rust environment targeting the AArch64 architecture. The example configures the build target to 'aarch64-unknown-none' and implements a global heap allocator using the 'buddy\_system\_allocator' crate, initializing a 64KB static memory buffer. It provides a concrete usage pattern for creating and populating heap-allocated vectors (Vec) and strings in a no\_std, no\_main context, utilizing the panic\_halt crate for panic handling.
src/bare-metal/alloc-example · high confidence
Add bare-metal microcontroller examples for the nRF52833
New example binaries have been added to demonstrate different approaches to interacting with the nRF52833 microcontroller. These include a minimal entry point, raw MMIO access, direct Peripheral Access Crate (PAC) usage, HAL-level GPIO control, a high-level board support crate example using the micro:bit v2, and a type-state pattern example showing safe pin configuration transitions.
src/bare-metal/microcontrollers/examples/src/bin · high confidence
Add buddy\_system\_allocator example and Bazel build
A new example demonstrating the buddy\_system\_allocator crate has been added to the bare-metal useful-crates section. The example shows how to initialize a FrameAllocator, add memory frames, and perform aligned allocations for MMIO regions. A Bazel BUILD file is also included to define the rust\_binary and associated tests, ensuring the example is built and tested via Bazel alongside the existing Cargo-based tooling.
src/bare-metal/useful-crates/allocator-example · high confidence
Add mdbook-course preprocessor for parsing course structure and frontmatter
Introduces the \mdbook-course\ library, which parses the Comprehensive Rust book's \SUMMARY.md\ and chapter frontmatter to build a hierarchical model of courses, sessions, segments, and slides. This preprocessor enables features such as stripping instructional timing metadata from slide content, inserting duration hints into speaker notes, and replacing custom directives (e.g., \{% course outline %}\) with generated schedule tables.
mdbook-course/src · high confidence
Add methods and traits exercise section
Added a new educational section covering Rust methods and traits, including documentation on method receivers, trait definitions, and derive macros, along with a new Logger trait exercise that requires implementing a verbosity filter.
src/methods-and-traits · high confidence
Add raw MMIO interrupt vector table example
A new example file has been added to the bare-metal microcontrollers examples that demonstrates how to define a raw interrupt vector table using unsafe link sections and no-mangle attributes. This provides a reference implementation for users needing to manually configure interrupt handlers at the lowest level.
src/bare-metal/microcontrollers/examples/src/bin/interrupts · high confidence
Add smart pointers exercise with Bazel build support
The smart pointers section now includes a binary tree exercise (exercise.rs) with a corresponding Bazel build file (BUILD.bazel) to run tests, alongside updated documentation for Box, Rc, and owned trait objects.
src/smart-pointers · high confidence
Add zerocopy example demonstrating safe byte conversion
A new example in the bare-metal useful-crates section demonstrates using the zerocopy crate to safely convert Rust structs and enums into byte slices. The example defines a VirtioBlockRequest struct and a RequestType enum with zerocopy traits (Immutable, IntoBytes) to show how to obtain a byte representation without unsafe code, and includes a Bazel build file to compile and test the example.
src/bare-metal/useful-crates/zerocopy-example · high confidence
Added Arabic and Bengali translations
The course is now available in Arabic (ar) and Bengali (bn). These new language files allow users to access the Comprehensive Rust curriculum in their respective languages, expanding the international reach of the documentation.
po · high confidence
Added Bazel build support for the std-types module
The \src/std-types\ directory now includes a \BUILD.bazel\ file that defines a \rust\_binary\ target for the \hashset\ exercise and a corresponding \rust\_test\ target, enabling the module's code to be built and tested using the Bazel build system alongside the existing Cargo workflow.
src/std-types · high confidence
Added CXX integration tutorial and build examples
This change introduces a new tutorial and demonstration area for the CXX Rust-C++ interop library. It includes a complete buildable 'blobstore' example with build files for both Bazel and Android.bp, demonstrating how to bridge Rust and C++ code. Additionally, it adds code snippets for the CXX book covering shared types, enums, and error handling, providing users with concrete examples of CXX usage patterns.
_third\party/cxx · high confidence
Added CXX-based blobstore tutorial example
A new tutorial example demonstrating interop between Rust and C++ via CXX has been added to the third\_party/cxx/blobstore location. The Rust code defines an FFI bridge exposing a BlobstoreClient (implemented in C++) to Rust, allowing users to upload blobs, add tags, and retrieve metadata, while the C++ implementation provides the underlying storage logic using an in-memory map.
_third\party/cxx/blobstore · high confidence
Added Control Flow Basics course module
Introduced a new educational module covering fundamental Rust control flow, including \if\ expressions, \match\ expressions, loops (\while\, \for\, \loop\), \break\/\continue\, blocks and scopes, functions, and common macros like \dbg!\ and \todo!\. The module includes a hands-on exercise to implement the Collatz sequence, complete with a Bazel build configuration (\BUILD.bazel\) for running the associated Rust binary and tests, alongside detailed speaker notes and solution explanations.
src/control-flow-basics · high confidence
Added async chat exercise with Bazel build support
The concurrency course now includes a new asynchronous chat exercise located in src/concurrency/async-exercises/chat-async. This addition provides a complete client-server WebSocket implementation using Tokio and tokio-websockets, demonstrating concurrent message handling via tokio::select!. The exercise is now buildable and testable via Bazel, with a new BUILD.bazel file defining rust\_binary targets for the client and server, along with corresponding rust\_test targets.
src/concurrency/async-exercises/chat-async · high confidence
Added bare-metal RTC exercise with PL031 driver and exception handling
The bare-metal RTC exercise now includes a complete solution implementation. This adds a PL031 Real-Time Clock driver (pl031.rs) that uses the safe-mmio crate for register access, a custom UART-based logger (logger.rs) for output, and an exception handler module (exceptions.rs) for managing synchronization and interrupt exceptions. The main entry point (main.rs) demonstrates initializing the GICv3 interrupt controller, configuring the RTC for match-based interrupts, and waiting for events using WFI, providing a working example of bare-metal interrupt-driven I/O on aarch64.
src/exercises/bare-metal/rtc/src · high confidence
Added build infrastructure for bare-metal AP examples
The bare-metal AP examples now include a Makefile and a linker script (image.ld) to facilitate building and running the example binaries. The Makefile defines targets for building various example binaries (improved, logger, minimal, psci, rt, safemmio) and provides QEMU launch commands for each. The linker script configures memory layout, section placement, and stack size for the bare-metal images.
src/bare-metal/aps/examples · high confidence
Birthday service now supports passing data via parcelables, binder interfaces, and file descriptors
The Android AIDL birthday service has expanded its API to accept birthday information in three new ways: directly via a \BirthdayInfo\ parcelable object, through an \IBirthdayInfoProvider\ binder interface (including an erased \IBinder\ variant), and by reading from a \ParcelFileDescriptor\. The Rust client and server implementations have been updated to support these new interaction patterns, allowing callers to choose the most appropriate data-passing mechanism for their use case.
_src/android/aidl/birthday\service/src · high confidence
Introduce cargo xtask for project task automation
Added a new \xtask\ binary that centralizes project maintenance tasks, allowing users to run commands like \cargo xtask install-tools\ to build and install dependencies via Bazel, \cargo xtask serve\ to start the web server with optional language and output directory settings, and \cargo xtask web-tests\ to execute web driver tests. This replaces ad-hoc scripts with a unified, cross-platform interface for common development workflows.
xtask · high confidence
Migrate build system to Bazel and introduce cargo xtask for project automation
The project has adopted Bazel as its primary build system, introducing a new toolchain for mdbook and managing dependencies via MODULE.bazel. To simplify development workflows, a new cargo xtask command has been added, centralizing common tasks such as installing tools, serving the course, running tests, and building translations. The build configuration has also been updated to use the Rust 2024 edition.
(repo-wide) · high confidence
New CLI tools for course content and schedule management
Added three new binaries in the mdbook-course crate: \course-content\ prints the full hierarchical structure of courses, sessions, segments, and slides along with their source content; \course-schedule\ provides subcommands to display session summaries with timing adjustments and PR-specific schedule updates; and \mdbook-course\ serves as the main mdbook preprocessor that extracts course structure, inserts timing information, and performs replacements on chapters.
mdbook-course/src/bin · high confidence
New async concurrency exercises: Dining Philosophers and Broadcast Chat
The concurrency course now includes two new async-focused exercises. The Dining Philosophers exercise challenges users to implement a deadlock-free solution using \tokio\'s \Mutex\ and \mpsc\ channels, with a provided solution that limits the number of philosophers to avoid scheduler livelocks. The Broadcast Chat Application exercise guides users in building a client-server chat system using \tokio-websockets\ and broadcast channels, requiring the implementation of concurrent message handling in both server and client binaries.
src/concurrency/async-exercises · high confidence
New bare-metal AP examples for ARM64 entry, exceptions, and UART drivers
The bare-metal AArch64 examples now include a complete set of starter files for building secondary processor images. This adds a generic assembly entry point (entry.S) that sets up the MMU with an identity map, enables caching and floating-point, and jumps to Rust, alongside a vector table and exception handlers (exceptions.S) that save volatile registers and dispatch to Rust. Two Rust exception handler styles are provided: a manual approach (exceptions.rs) and one using the aarch64-rt crate (exceptions\_rt.rs). Several main entry examples demonstrate different patterns: a minimal UART driver (main\_minimal.rs), a struct-based driver (main\_improved.rs), a safe-MMIO driver using the safe\_mmio crate (main\_safemmio.rs), a logger-backed example (main\_logger.rs), and a PSCI-based shutdown example (main\_psci.rs). The examples also include an identity map table (idmap.S) and a logger implementation (logger.rs) that writes to the UART.
src/bare-metal/aps/examples/src · high confidence
New borrowing exercise and supporting documentation
The borrowing section now includes a 'Wizard's Inventory' exercise where users implement spell management (adding, casting, and removing spells based on mana and usage limits) to practice ownership and borrowing rules, along with a corresponding solution file. This is supported by new documentation pages covering borrow checking rules (aliasing, outlives, non-lexical lifetimes), interior mutability concepts, shared borrowing examples, and concrete borrow error scenarios like iterator invalidation. A Bazel build file has also been added to define the exercise as a Rust binary and test target.
src/borrowing · high confidence
New closures training module with capture, syntax, and trait exercises
A new closures section has been added to the curriculum, providing a complete learning path for users. It begins with syntax basics, then explains how closures capture environment variables (by reference, mutable reference, or move) and details the \Fn\, \FnMut\, and \FnOnce\ traits. The module includes an interactive exercise where users implement a generic \Filter\ struct that uses a closure predicate to filter log messages, along with a solution guide explaining the necessary trait bounds and invocation syntax.
src/closures · high confidence
New iterator training materials and exercise infrastructure
The \src/iterators\ section now includes a complete set of instructional slides covering the \Iterator\ trait, \IntoIterator\, helper methods like \map\ and \filter\, \enumerate\, \collect\, and a review of \for\ loops. It also introduces a new "Iterator Method Chaining" exercise (\exercise.rs\) that requires implementing an \offset\_differences\ function, accompanied by a Bazel build configuration (\BUILD.bazel\) to run the associated unit tests.
src/iterators · high confidence
New lifetimes section with protobuf parsing exercise
The lifetimes section has been reworked to include new educational content on borrowing and lifetime elision, alongside a comprehensive exercise where learners implement a parser for the protobuf binary encoding format. The new materials cover simple borrows, returning borrows, multiple borrows, and lifetimes in data structures, providing interactive examples and explanations. The exercise requires implementing the \ProtoMessage\ trait and \parse\_field\ function to handle \Person\ and \PhoneNumber\ messages, illustrating common parsing patterns using slices without copying underlying data.
src/lifetimes · high confidence
New mdbook-exerciser plugin extracts code blocks to files
A new mdbook plugin has been added that processes book chapters to extract code blocks into separate files. By recognizing HTML comments formatted as \<!-- File \<name\> --\> immediately preceding a code block, the plugin writes the block's content to the specified filename within an output directory. This allows documentation to maintain executable examples as distinct files rather than inline text.
mdbook-exerciser/src · high confidence
New references section with slides, exercises, and Bazel build rules
The course now includes a dedicated 'references' module in src/references, providing structured learning material on Rust references, slices, and strings. This addition introduces slides covering shared references (&T), exclusive/mutable references (&mut T), dangling references, string slices (&str), and owned Strings (String), along with a hands-on geometry exercise (magnitude and normalize functions) and its solution. To support automated testing and integration, a Bazel BUILD file (BUILD.bazel) is added to define the Rust binary and test targets for the exercise code.
src/references · high confidence
New theme files for comprehensive-rust mdbook
The theme directory now includes generated mdbook template files (index.hbs, head.hbs) and JavaScript modules (book.js, speaker-notes.js, save-playgrounds.js, redbox.js). These files implement the visual structure, theme switching, and interactive features for the comprehensive-rust documentation site, including speaker notes support, playground code saving, and aspect ratio helpers.
theme · high confidence
Removals
Removed Day 1 exercises and solutions
The Day 1 exercise materials have been removed from the course. This includes the morning exercises covering implicit conversions and arrays/for-loops, the afternoon exercises on designing a library and iterators/ownership, and their corresponding solution files. Users will no longer have access to these specific practice problems and their implementations.
src/exercises/day-1, src/exercises/day-4 · high confidence
Removed Day 2 exercise files
The exercise files for Day 2 (including health-statistics, luhn, points-polygons, strings-iterators, and their corresponding solution files) have been deleted from the repository.
src/exercises/day-2 · high confidence
Removed embedded Exercism Rust track stubs and documentation
The local copy of the Exercism Rust track's 'Health Statistics' exercise has been removed, including the \health-statistics.rs\ stub file, its \health-statistics.md\ description, the \README.md\, and the \LICENSE\ file. This eliminates the bundled, incomplete Rust exercise code from the repository.
_third\party/rust-on-exercism · high confidence
Removed third-party Rust by Example examples and license files
The directory third\_party/rust-by-example has been removed, deleting the embedded Rust by Example source files (including destructuring-arrays.rs, destructuring-structs.rs, match-guards.rs, and webevent.rs) along with their associated Apache 2.0 and MIT license texts and README. This eliminates the local copy of these educational examples from the repository.
_third\party/rust-by-example · high confidence
Behavioural changes
Android course materials: new testing guide, build script updates, and documentation refinements
The Android section now includes a new testing guide (testing.md) explaining how to use the \rust\_test\ module in AOSP, along with a corresponding entry in the \build\_all.sh\ script to run these tests via \atest\. The \build\_all.sh\ script has been updated to add \adb root\ before deploying the \birthday\_server\ example, fix quoting in \adb\ commands, and include instructions for using bind mounts to expose course targets to an AOSP checkout. Several documentation files (aidl.md, build-rules.md, interop.md, logging.md, setup.md) have been updated with SPDX license headers, improved language, and added speaker notes in collapsible sections. The setup instructions now specify the \trunk\_staging\ variant for the Cuttlefish device.
src/android · high confidence
Birthday service build configuration updated to prevent dynamic link errors
The Android build configuration for the birthday service (libbirthdayservice, birthday\_server, and birthday\_client) has been updated to remove the dependency on libbinder\_rs and add comments to the prefer\_rlib settings to explicitly avoid dynamic link errors.
_src/android/aidl/birthday\service · medium confidence
Concurrency exercises reorganized and updated
The concurrency exercises have been moved to a new location (src/concurrency/sync-exercises) and updated for the Rust 2024 edition. The Dining Philosophers exercise now uses 'chopsticks' instead of 'forks' and includes a Bazel build definition. The Link Checker exercise has been expanded to include the 'scraper' and 'thiserror' dependencies, updated to use newer versions of these libraries, and now features a more robust multi-threaded implementation with a fixed number of crawler threads.
src/concurrency/sync-exercises · high confidence
Fix dynamic link error and add SPDX headers
The Android build configuration for the library now includes a comment explaining that \prefer\_rlib: true\ is required to avoid dynamic link errors, clarifying the build behavior. Additionally, SPDX license identifiers (Apache-2.0) have been added to the Rust source files to improve license compliance visibility.
src/android/build-rules/library · high confidence
Fixes build dependency and improves safety documentation in bindgen example
The bindgen interoperability example now builds correctly by adding the missing \static\_libs\ dependency for \libbirthday\ in the Android build configuration. Additionally, the Rust source code has been updated to include explicit safety comments explaining the unsafe pointer usage, and unnecessary type casts have been removed to improve code clarity. License headers have also been standardized across all source and documentation files in this directory.
src/android/interoperability/with-c/bindgen · high confidence
Improved RTL support, SVG legibility, and developer aids
This update introduces several CSS improvements to enhance the user experience and developer workflow. Right-to-left (RTL) content now renders more correctly, with code blocks, the cookie bar, and SVGs forced to left-to-right alignment to prevent layout issues. SVG text is now styled to inherit the foreground color, ensuring legibility across all themes. Additionally, a new 'red box' overlay is available to help developers visualize the optimal slide aspect ratio (16/8.5) and maximum width, which can be toggled off via a button. The language picker's positioning is also adjusted for RTL layouts, and speaker notes styling has been refined for better visibility.
theme/css · high confidence
Restructure tuples and arrays section with Bazel build support
The tuples-and-arrays section has been reorganized into dedicated Markdown files (arrays, tuples, destructuring, iteration) and a new Bazel build configuration (BUILD.bazel) that defines the exercise binary and its associated test. The exercise code (exercise.rs) was moved from the day-1 for-loops location, updated with SPDX license headers, and refactored to include a main function and a unit test for the matrix transpose exercise, replacing the previous pretty-print helper approach.
src/tuples-and-arrays · high confidence
Restructured error-handling documentation and added Bazel build support
The error-handling section has been reorganized to improve clarity and build integration. A new Bazel build file (BUILD.bazel) defines the parser library and its associated tests, enabling the exercise to be built and tested via Bazel. The documentation content has been split and renamed for better modularity: 'deriving-error-enums.md' is now 'thiserror.md' and 'converting-error-types.md' is now 'try-conversions.md'. The 'error-contexts.md' and 'panic-unwind.md' files have been removed, with their content either integrated into other pages (like 'panics.md') or replaced by new dedicated pages for 'anyhow' and dynamic error types ('error.md'). The 'exercise.md' and 'solution.md' files now reference a new 'exercise.rs' that implements an expression evaluator with proper Result-based error handling for division by zero, replacing the previous panic-based approach.
src/error-handling · high confidence
Restructured generics section with new slides and Bazel build support
The generics learning module has been reorganized into distinct, focused slides: generic functions, generic traits, generic data types, trait bounds, impl Trait, and a new slide on dyn Trait (dynamic dispatch). An exercise and solution for a generic min function have been added, and the Bazel build system now includes a BUILD.bazel file to compile and test the exercise code. Several older, consolidated slides (closures, data-types, methods, monomorphization, trait-objects) were removed to streamline the content.
src/generics · high confidence
Restructured memory management curriculum with new builder exercise
The memory management section has been reorganized into a more logical flow, consolidating scattered topics like stack vs. heap, ownership, move semantics, and the Drop trait into dedicated pages. The previous comparative analysis of C, C++, Java, and Rust memory models has been removed and its content integrated into the new 'Approaches to Memory Management' overview. A new interactive builder-pattern exercise has been added, featuring a \PackageBuilder\ implementation in Rust, complete with a Bazel build configuration and test target to validate the solution.
src/memory-management · high confidence
Restructured pattern matching slides and added expression evaluation exercise
The pattern-matching section has been reorganized into dedicated slides for Irrefutable Patterns, Let Control Flow, and Matching Values, with the previous Match Guards and Destructuring Arrays content removed or integrated. The Destructuring Structs and Destructuring Enums slides have been updated to include speaker notes and examples for struct-style enum variants and match ergonomics. A new 15-minute Expression Evaluation exercise has been added, providing an editable Rust implementation for evaluating arithmetic expression trees, complete with a Bazel build configuration for testing.
src/pattern-matching · high confidence
Restructured types-and-values section with new exercises and build rules
The types-and-values section has been reorganized to include new educational content and build infrastructure. A new Bazel build file (BUILD.bazel) defines a FizzBuzz binary and its associated test, enabling this exercise to be built and verified via Bazel. The section now features a Hello World slide introducing basic syntax, a Values slide detailing primitive types and literals, a Variables slide demonstrating immutability, and an Arithmetic slide explaining integer overflow behavior. A new Fibonacci exercise (exercise.rs) with a corresponding solution (solution.md) teaches recursion and panic conditions, while the Type Inference content has been moved from basic-syntax to this section to better contextualize type rules.
src/types-and-values · high confidence
Restructured user-defined-types section with new exercises and Bazel build support
The user-defined-types module has been reorganized to improve clarity and buildability. A new Bazel build file (BUILD.bazel) was added to define the 'elevator' exercise as a rust\_binary and its corresponding test, enabling consistent testing via Bazel alongside Cargo. The module now includes dedicated documentation pages for type aliases, constants, statics, enums, named structs, and tuple structs, with updated content such as recommending newtypes over type aliases and clarifying struct field defaults. The 'Elevator Events' exercise and its solution have been refined, including fixes to anchor tags and explanatory commentary, to better guide users through defining and using custom types in a realistic scenario.
src/user-defined-types · high confidence
Reworked modules section with new encapsulation content and simplified GUI exercise
The modules learning area has been restructured: a new slide on struct visibility and encapsulation has been added to explain how private struct fields are controlled within their module, and the GUI library exercise has been simplified by removing the callback functionality from the Button widget to focus on module organization. Additionally, the documentation for filesystem hierarchy, paths, and visibility has been updated with clearer explanations, modern Rust 2018+ file conventions, and improved formatting, while a Bazel build file was added to support testing the module exercise.
src/modules · high confidence
Rust C-interop: modernize unsafe attributes and fix header naming
The Rust library for Android C interoperability now uses the modern \\#\[unsafe(no\_mangle)\]\ attribute instead of the deprecated \\#\[no\_mangle\]\, ensuring compatibility with newer Rust editions. Additionally, the C header file has been corrected to use the standard \ANALYZE\_H\ include guard (fixing a typo) and the redundant \extern "C"\ block has been removed, as the function signature already specifies the C calling convention. SPDX license identifiers have also been added to the source files.
src/android/interoperability/with-c/rust · high confidence
Rust logging demo updated for AOSP compatibility and output consistency
The Rust logging example in src/android/logging has been updated to ensure it compiles on the latest AOSP versions and aligns its output with documentation. The build configuration (Android.bp) no longer forces the use of rlib, and the main program now uses the correct API (with\_max\_level) for setting the log level, adds an info-level log message, and includes the required SPDX license identifier.
src/android/logging · high confidence
Standard library traits section reorganized and expanded
The \src/std-traits\ area has been restructured to provide a more comprehensive guide on standard library traits. This includes new dedicated slides for casting (explaining \as\, \From\, and \TryFrom\), comparisons (\PartialEq\, \Eq\, \PartialOrd\, \Ord\), the \Default\ trait, and operator overloading (highlighting \Not\'s behavior). The existing \From\/\Into\ and \Read\/\Write\ content has been moved into this new directory, updated with consistent formatting, license headers, and inline documentation links. Additionally, a new exercise section introduces a ROT13 cipher implementation using the \Read\ trait, supported by a Bazel build configuration for testing.
src/std-traits · high confidence
Unsafe Rust chapter: new exercises, Bazel build, and cross-platform FFI fixes
The unsafe-rust section now includes a full set of educational materials (dereferencing, mutable statics, unsafe functions/traits, unions) and a Safe FFI Wrapper exercise with a provided solution. A Bazel build file (BUILD.bazel) has been added to define the exercise binary and its associated unit tests. The FFI exercise code has been updated to support macOS by providing platform-specific struct layouts and linking to the correct readdir variants, and the Drop implementation no longer performs a redundant null check on the directory pointer.
src/unsafe-rust · high confidence
Updated JNI build configuration and Rust FFI implementation
The Android build system now uses the \jni\_libs\ property instead of \required\ to link the native library, ensuring correct dependency handling for JNI binaries. In the Rust source, the code has been updated to use \\#\[unsafe(no\_mangle)\]\ and \output.into\_raw()\ to align with newer Rust compiler requirements, and the \env.get\_string\ call now passes a reference to the string object. Additionally, SPDX license identifiers were added to the Java and Rust source files.
src/android/interoperability/java · high confidence
Updated mdBook to version 0.4.35
The third-party mdBook dependency has been updated to version 0.4.35. This update includes the integration of Google Analytics 4 (GA4) code directly into the generated book.js, meaning user interaction tracking is now handled via the new GA4 implementation rather than previous methods. Additionally, the playground timeout for code examples has been increased to 15 seconds, providing more time for code execution in interactive examples.
_third\party/mdbook · high confidence
Test coverage
Add Android testing examples for GoogleTest and Mockall; Added WebdriverIO test infrastructure for Comprehensive Rust; Added end-to-end tests for UI components and playground behavior; Added test infrastructure for slide size validation and exemptions; Added unit tests for the Android leftpad utility; Restructured testing documentation and added Bazel build support.
Dependencies
Upgrade to Rust 2024 edition and update dependencies
The course exercises and examples have been migrated to the Rust 2024 edition, updating the \edition\ field in all \Cargo.toml\ manifests. This change is accompanied by a comprehensive update of dependencies across the project, including major version bumps for \embedded-hal\ (0.2.7 to 1.0.0), \thiserror\ (1.x to 2.0), and \panic-halt\ (0.2.0 to 1.0.0), as well as updates to tooling crates like \mdbook\ and \pulldown-cmark\. These updates ensure compatibility with the latest Rust standards and provide users with current library versions in the learning materials.
(dependencies) · high confidence
Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.
How this codebase got here
Score
- CAI 64 → 58 (-5.7)
- Rubric changed (rubric-2026.09.8 → rubric-2026.09.16) — scores are not directly comparable.
Lenses
- Code Health 62 → 63 (+0.9)
- Architecture 100 → 100 (+0.0)
- Maturity 57 → 57 (+0.0)
- Readiness 72 → 63 (-9.4)
- Security 64 → 75 (+10.5)
- Event Sourcing 100 → 100 (+0.0)
- Accessibility 51 (new)
- Performance 100 (new)
Resolved (3)
- Documentation: no installation or build instructions (README.md)
- Documentation: no usage examples (README.md)
- Off-boarding risk: anonymized user #1
New (9)
- Medium vulnerability: RUSTSEC-2026-0285 (Cargo.lock)
- No ADRs found
- Off-boarding risk: anonymized user #1
- Outdated: clap
- Outdated: reqwest
- Outdated: thiserror
- Outdated: zerocopy
- book.document.addEventListener("keydown") (cognitive 17) (theme/book.js)
- book.document.addEventListener("keydown") (cyclomatic 18) (theme/book.js)
Changes since last survey
- 5 commits — 4 feature/other, 1 fixes
By area
- src/SUMMARY.md — 2 commits
- src/closures — 1 commit
- src/idiomatic — 1 commit
- src/iterators — 1 commit
Notable commits
- fix: Fix login function argument passing in example. (#3278)
- change: Add review of for loops to iterator section (#3280)
- change: Add slide on enumerate (#3282)
- change: Fundamentals: Add more loggers so we can be more generic (#3279)
- change: Split out slide for IntoIterator on references (#3281)
Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.
Survey your own repository
google/comprehensive-rust was measured the same way every project in this corpus was: the same rubric, at a pinned commit, with the result published in full. Point a surveyor at a repository you know and see whether you agree with it.
About this page
- The score is its most recent published measurement, taken on 28 September 2026 at a pinned commit. It is not a live figure and does not change until the project is measured again.
- Measured at commit 2019b27e56a97bcec8d1ea4a7893fda92de69e1b — the exact code this score is about.
- Scored under rubric-2026.09.16 — the same rubric and the same method as every other entry in this index.
- Measured by watchdog.canine.dev using codehealth-analyzer preprod-d46da229e3fd.