@@ -44,6 +44,33 @@ RELEASE VERSION/DATE TO BE FILLED IN LATER
4444 new contributors. (Using Gemini AI)
4545 - Fix Appveyor scripting to install unavailable python versions when needed and use them
4646 for testing.
47+ - Subst: Fixed ListSubber.expanded(), which never detected an already-expanded
48+ string (dead code since its 2019 introduction), so fully-expanded values are
49+ no longer recursively re-processed during scons_subst_list().
50+ - Subst: scons_subst() and scons_subst_list() no longer leak a __builtins__
51+ key into the construction environment's dictionary if an exception is
52+ raised during substitution.
53+ - Subst: the result of the inspect.signature() check for callable
54+ construction variables is now cached per callable, speeding up expansion
55+ of function-valued variables. Callables whose signature cannot be
56+ determined (some C/builtin callables) are now treated as not matching
57+ the (target, source, env, for_signature) convention instead of raising.
58+ - Subst: variable values which are plain strings with no further '$'
59+ expansions are now returned directly, skipping an unneeded dict copy
60+ and recursive substitution pass. Combined, the substitution speedups
61+ measured on a representative command line (this from a micro benchmark
62+ and not on a full build) are:
63+ ('$CC $CCFLAGS $CPPDEFINES $GEN -c -o $TARGET $SOURCES'):
64+ old new improvement
65+ scons_subst 20.7 us 12.8 us ~38% faster
66+ scons_subst_list 37.4 us 25.1 us ~33% faster
67+ - Subst: a NameError raised during scons_subst_list() now includes the
68+ name of the unknown variable in the error message.
69+ - Subst: the overrides argument to scons_subst()/scons_subst_list() no
70+ longer mutates a caller-supplied lvars dictionary; also removed mutable
71+ default arguments. Removed Literal.__neq__, a misspelled (and therefore
72+ never-invoked) version of __ne__; Python derives inequality from
73+ Literal.__eq__.
4774
4875 From Prabhu S. Khalsa:
4976 - Fix typo in preface
@@ -54,6 +81,13 @@ RELEASE VERSION/DATE TO BE FILLED IN LATER
5481
5582 From Mats Wichmann:
5683 - Introduce some unit tests for the file locking utility routines
84+ - Subst: Improved variable substitution by consolidating dictionary
85+ merging operations, reducing unnecessary copy operations when no
86+ TARGET/SOURCE variables or overrides need to be applied. Combined
87+ with other substitution improvements (lru_cache for callable signature
88+ caching, action hashability, for_signature bug fix, f-string
89+ modernization), typical builds see up to 8-12% improvement with larger gains
90+ (up to 20-30%) on builds with many callable construction variables.
5791 - Reduce unneeded computation of overrides. The Mkdir builder used an
5892 unknown argument ('explain') on creation, causing it to be considered
5993 an override. Also, if override dict is empty, don't even call the
0 commit comments