Skip to content

v0.92.1 — std::format/print/println built in; binaries for Linux, Windows, macOS

Latest

Choose a tag to compare

@derekbsnider derekbsnider released this 20 Aug 03:52

madc v0.92.1

This is the download release for the v0.92 line — the first published
binaries on all three platforms since v0.82.0. Every feature below ships
in the attached packages (Linux .deb/.rpm, Windows zip, macOS
tarballs for Apple Silicon and Intel).

Features

  • std::format, std::print, and std::println are simply part of
    madc
    — no includes, no header parsing:
    std::println("x={} y={:.3f}", x, y); works in a bare script. Literal
    format strings are validated at compile time (bad presentation types,
    bad indexes, and malformed strings are compile errors), and output is
    pinned byte-for-byte to real libstdc++ std::format by 1430 generated
    oracle rows — shortest-round-trip floats, bit-exact hex floats, the
    works. std::format returns a real std::string.
  • cout << value with zero includesvalue/var is an inherent
    madc type, and streaming one works in a bare script regardless of
    include order: var test = "hello"; cout << test << endl; — and it
    honors <iomanip> manipulators (setprecision, setw, setfill).
  • UFCS in the madc dialect — free functions call as methods and
    methods as free functions under --std=madc.
  • php::print_r / php::var_dump over ANY madc type — structs,
    classes, containers, nested aggregates, not just value/array;
    cycle-safe, with the type words a human expects (std::vector<int>,
    not the canonical four-argument spelling).
  • Range-for over PHP arrays with the carrier as the element
    for (value v : arr) is kind-preserving with copy semantics; auto
    elements work too.
  • value maturityvalue(N) constructors in temporaries,
    direct-init, and loop headers; .count()/.size() owner semantics;
    php::array_push as one overloaded name returning the new count.
  • Headerless libc calls get real signatures — an undeclared
    floorf(3.9f) passes a genuine float (nine argument shapes, three
    suffixes each) instead of the variadic promotion garbage.
  • --version reports the build.

Fixes and internals

  • win64: ucrtbase hides four C99 float-math names (fabsf, frexpf,
    hypotf, ldexpf) from runtime lookup; they are now pinned in the
    name map, closing the complete hidden set (found by the new
    three-platform release gate).
  • win64: var_dump(long) printed the rank's int(42); the LLP64
    platform long now words as its source name — long(42) on every
    target.
  • Front end: a cast binds a paren-less sizeof/alignof operand
    ((long long)sizeof chunk).
  • Numeric overload grading: a float argument selects double, never
    truncates.
  • Process: every master promotion is three-platform and the platform
    suites gate it; fulltest gates the merge wave; master release notes
    summarize everything since the previous master release, features
    first.

Validation

Linux fulltest, native EXE/OBJ lanes, packed and headerless suites,
Windows wine packed suite, and the macOS release verifiers — all green
at this tag. Counts in docs/test-status.md and the
CHANGELOG.

Full feature detail: v0.92.0 notes
and docs/release-notes/ for the per-release stories (v0.83.0–v0.92.1).