Repository navigation
RuleMonkey 3.9.0
[3.9.0] — 2026-08-07
Added
-
Windows / MSVC is now a CI gate (issue #29). The
buildjob runs
ubuntu-latest,macos-latestandwindows-latest; the Windows leg
configures, compiles with MSVC 14.51 and passes all 30 ctest cases in
under two minutes. Before this, no part of RuleMonkey had ever been
compiled with MSVC — the code's_MSC_VERguards were an assessment from
reading the source, not a tested claim, and one of them was missing (see
below).All three legs share the same Ninja
releasepreset. A multi-config
Visual Studio generator would leaveCMAKE_BUILD_TYPEempty and silently
change which self-check defines compile in, so the Windows leg instead
puts the MSVC environment onPATHfirst — the hosted image does not
exposecl.exeto a non-VS generator, and CMake would otherwise
configure against whatever compiler it found (the Strawberry Perl gcc).Two MSVC-only compile flags come with it, applied directory-wide and
gated onMSVCso the Clang/GNU-Wall -Wextra -Werrorsets are
untouched:/bigobj, without which the vendored exprtk translation unit
stops atfatal error C1128, and/utf-8, which pins source decoding so
RM's non-ASCII diagnostic strings do not depend on the build machine's
active code page. The tree compiles clean at MSVC's default/W3— zero
warnings.The
asanjob stays ubuntu/macos:-fsanitize=address,undefinedis the
GCC/Clang spelling, MSVC ships no UBSan, andCMakeLists.txtalready
refusesRULEMONKEY_ENABLE_ASANoutside Clang/GCC.
Changed
-
CI workflow actions moved off Node 20 (issue #30).
actions/checkout,
actions/setup-pythonandactions/upload-artifactare on v7. The two pins
with no Node 24 version were retired rather than bumped:
seanmiddleditch/gha-setup-ninjais gone entirely — it is archived upstream
and its latest release is still Node 20, while all three runner images ship
Ninja 1.13.2 on PATH — and the MSVC environment now comes from avswhere+
vcvars64.batstep rather thanilammy/msvc-dev-cmd, every available
MSVC-environment action being Node 20 as well. A full run now carries no
deprecation annotations on any job.Build pipeline only: no engine, API or build-system behaviour changes for a
consumer of the library.
Fixed
-
__builtin_popcountmade the engine uncompilable with MSVC.
build_nary_partitions, which pre-expands the Möbius coefficients for a
rule with three or more reactant patterns, reached for the GCC/Clang
builtin with no_MSC_VERcounterpart — unlikehighest_pow2a few lines
above it, which carries GCC/Clang, MSVC and generic branches — socl.exe
stopped atengine.cppwitherror C3861: '__builtin_popcount': identifier not found. This was the only MSVC break in the tree.It is now a portable Kernighan loop rather than a third per-compiler
branch: the code runs once per partition at rule setup over a mask of at
mostkMaxNarySlotsbits, so there is nothing for an intrinsic to win,
and MSVC's__popcntwould have carried its own caveats (x86-only, and it
assumes a POPCNT-capable target).