Best of C ProgrammingJanuary 2026

  1. 1
    Article
    Avatar of collectionsCollections·19w

    Linus Torvalds Unveils AudioNoise: An Open-Source Digital Guitar Pedal Project

    Linus Torvalds released AudioNoise, an open-source digital guitar pedal simulator on GitHub that explores digital signal processing and hardware design. The project uses manually coded C components and AI-assisted Python visualization through Google's Antigravity AI IDE. Torvalds advocates for 'vibe coding' with AI tools for non-critical projects, particularly when working with less familiar programming languages. AudioNoise runs on RP2354 hardware with TAC5112 codec, demonstrating how AI coding assistants can bridge research and implementation while enhancing learning outcomes.

  2. 2
    Article
    Avatar of hnHacker News·17w

    beginner-jhj/mini_browser

    A high school student built a functional browser engine from scratch in C++ over 8 weeks to understand how browsers work internally. The project implements HTML/CSS parsing, DOM tree construction, layout calculation, and rendering using Qt6. It covers the complete browser rendering pipeline: tokenization, DOM construction, style calculation (CSSOM), layout computation, and painting. The implementation supports core CSS properties, image loading with caching, navigation with history, and handles both block and inline layouts. Beyond technical achievements, the author emphasizes lessons in systematic debugging, persistence, pragmatism over perfection, and the importance of asking "why" when learning.

  3. 3
    Article
    Avatar of danielhaxxsedaniel.haxx.se·18w

    libcurl memory use some years later

    libcurl's memory usage has improved over five years despite adding features. Comparing current development to version 7.75.0, key structs show mixed changes: the multi handle grew from 416 to 816 bytes, the easy handle from 5272 to 5352 bytes, while connectdata shrank from 1472 to 912 bytes. For 10 parallel transfers with 20 connections, total memory decreased by 10,000 bytes. A single 512MB HTTP download now uses 133,856 bytes across 107 allocations (1.6% more memory, 11% more allocations than five years ago). The project added test case 3214 to prevent accidental struct size growth by setting upper limits on fifteen important structs.

  4. 4
    Article
    Avatar of lobstersLobsters·20w

    Why I switched away from Zig to C3

    A developer shares their journey from Zig to C3, a newer systems programming language. C3 offers C-like syntax with modern features including temporary allocators via @pool, flexible module systems similar to C++ namespaces, interfaces with dynamic dispatch, contracts for pre/post-conditions, and methods on types. The author highlights both strengths (better ergonomics than Zig for C programmers, powerful type system) and quirks (const enums for C compatibility, confusing optional/result terminology, file/pipe handling issues). Includes practical code examples and links to active C3 projects being developed.

  5. 5
    Video
    Avatar of tsoding_dailyTsoding Daily·18w

    This is Better Than Protobuf

    ASN.1 is a data serialization standard from 1984 that predates Protocol Buffers and solves similar problems. The libtasn1 library allows parsing ASN.1 schema definitions at runtime to create serializers/deserializers without code generation. The API lets you define data structures in .asn files, parse them into an internal tree representation, create elements, set values, and encode/decode binary data. While the core concept is elegant—runtime schema parsing with dynamic introspection—the implementation has quirks like inconsistent naming conventions, poorly documented APIs, buffer overflow risks, and unusual type handling (booleans as null-terminated strings). Despite rough edges typical of legacy GNU projects, the approach offers more flexibility than Protobuf's code generation model.

  6. 6
    Article
    Avatar of hnHacker News·20w

    Why Is SQLite Coded In C

    SQLite is implemented in C because it provides optimal performance, universal interoperability across platforms and languages, minimal runtime dependencies, and stability. C allows SQLite to be called from any programming language (Java, Swift, Objective-C, etc.) while maintaining speed comparable to assembly language. Object-oriented languages like C++ and Java lack this portability. While modern safe languages like Rust are interesting, they didn't exist during SQLite's first decade, introduce branch testing challenges, and handle out-of-memory situations differently than SQLite requires. The SQLite team prioritizes old, boring, well-understood languages over newer alternatives, though Rust remains a distant possibility if certain preconditions are met.