0.30

FEATURE: More aggressive caching results in Binding Phase speed improvement of by 500%. Scanning time for about 8000k files reduced from 5 sec to under 1 sec.
FEATURE: Autowrap feature applied to parsing and binding phase errors and diagnostics. 
CHANGE:  On Windows, KJam is now more case sensitive when dealing with file names and paths.    
FEATURE: Significant reduction in memory use.
cHANGE:  Actions labelled as piecemeal will have their targets and sources sorted. This avoids building certain actions multiple times unnecessarily when an action
         is called multiple times with the same arguments in different orders. In the case of piecemeal actions we know that such calls are always redundant and can
         safely be skipped.
BUGFIX:  In network mode KJam would poll network jobs for output too often, resulting in Jam's cpu load being higher than necessary. Fixed.
BUGFIX:  When using the default jamfiles and running under shells which don't provide a COLUMNS variable, like cmd.exe, arguments to SubProject targets were being 
         ignored. fixed.
BUGFIX:  Many spawned job threads were being shut down one more time than necessary. Fixed.
BUGFIX:  Under Windows, file system read operations were gaining exclusive locked access to files, when shared access was possible, resulting in a minor performance
         penalty, and an unfrequent error where scanned files would fail to open with with "permission denied" errors. Fixed.

0.29

FEATURE: Added the cleardep and clearinc built-in rules. cleardep will remove all dependencies that a given target has accumulated up to that point. 
         clearinc removes all the 'include' dependencies for the given targets. KJam will behave as if any depends or includes rules 
         previously invoked for that given target had never been invoked.
FEATURE: Added the -= operator. It removes any elements of the RHS from the list in the LHS.
BUGFIX:  When parsing a jamfile that ends in comment it was possible to get a spurious warning error about a malformed buffer. Fixed.
BUGFIX:  In certain cases on windows with a parallel build, and large amounts of output from a shell process KJam could deadlock. Fixed.
FEATURE: When KJam is unable to open a file while executing a jamfile ( such as during reading of include files, or scanning headers ), 
         the error message will now report the file name and line number of the location where the read error occurred.
FEATURE: Filename and line number is now given for a wider range of errors.
FEATURE: An error is now reported when an ill-formed regular expression is passed to glob or match built-in rules. ( match and glob are an undocumented feature
         similar to the build-in rules by those names used in jam. They are redundant - all functionality of match and glob can be done better
         using variable expansion modifiers )
FEATURE: variables can now have their values set to a numerical string. Previously, to set a variable to a number string, it was required that the string be quoted.
FEATURE: Output autowrapping. Causes Jam to automatically insert newlines into output to prevent very long lines. Lines can be terminated on the first whitespace 
         character after a certain length. New lines continued after an autowrap line termination can be indented a certain number of characters.
         JAMWRAP = 10 $(COLUMNS:E=80) 20 ; will is a useful setting for most environments. Leaving JAMWRAP unset keeps the autowrap feature turned off.
BUGFIX:  Under windows, in certain situations where many header files are being scanned in parallel, it was possible for a file open to fail with
         with a permission denied error when the file was being scanned by another thread. Fixed.
FEATURE: -d fate option, now reports the source of the timestamp for targets who get their timestamp from one of their dependents
BUGFIX:  On windows, with the built-in shell, action scripts which change the current directory would not find executables in the directory. Fixed.
BUGFIX:  the :H expansion modifier is designed to match the complete file name less the file extension. It was failing to match file names when the
         file had no extension. Fixed.
FEATURE: For the built-in shell, piping output to a file called "nul" will cause that output to be thrown away. Previously, it was possible to throw away
         output to pipe it to "nul" on windows, and to "/dev/null" on linux. This new feature makes the syntax the same for both. The old methods
         still work on their respective operating systems.
FEATURE: Output for -d targets, and -d actions, has improved more readable formatting
FEATURE: Added documentation for kjam regular expression syntax
FEATURE: Added JAMNAME and JAMUSER built-in variables
FEATURE: Added a powerful new set of built-in jambase files
FEATURE: Added two major new sections to the documentation documenting the new built-in rule sets
FEATURE: Improved formatting of command line help messages
CHANGE:  Built-in shell execution environment rewritten to support more complex built-in tools
FEATURE: Added cat, and rgxrpl as built-in tools

0.28

BUGFIX:  Variable expansions using the N regexp modifier, which then use one of the numbered regexp subexpression modifiers would crash kjam if they 
         referred to an unused subexpression. Fixed.
BUGFIX:  Some regular expressions may legally match no characters. Such expressions would cause expression matching mopdifiers to go into an infinite loop. 
         This has been fixed.
CHANGE:  The syntax for dealing with " in strings was cumbersome, and required some exotic syntax to use properly. It has been changed. Before 0.28,
         strings could include the " character if it was escaped using \. The \ was however not removed from the string - because we wanted to preserve
         and \ characters because they might be part of a dos path. This required that users manually remove \ characters in such strings with a regular
         expression. In 0.28, \ characters used before " are removed automatically and all other \ characters remain. This can produce problems in cases where a 
         quoted dos path ends in \. In such cases the final \ will be interpreted as an escape character and removed. This change to the parser may cause 
         parsing problems in rare cases of jamfile which use this construction.
CHANGE:  The syntax for \ escape characters in quoted arguments to variable expansion modifiers has changed. Before 0.28, all backslash escaped characters were
         processed as escape characters. This required that any literal backslashes were themselves also backslashed. This made it necessary for all literal backslash
         characters to be doubled. Given that backslash characters are sometimes required to escape special characters in regular expressions, some expression ended
         up with series of up to 4 backslash characters. This is ugly and error prone. After 0.28, only backslash characters before " and ' are treated specially.
         All other \'s are left as they are to be processed by the regular expression parser. The new syntax is generally cleaner and easier to understand. This change
         will require that all jamfiles which have \'s in their modifier arguments will need to be updated. In most cases to the get the same functionality,
         the number of \'s will need to be cut in half. 

0.27

BUGFIX:  In the built-in shell, the redirection syntax 1>&2, and 2>&1, worked incorrectly.
CHANGE:  In previous versions, application of modifiers would cause empty and duplicate elements in a variable to be 
         removed unless the K modifier was given. This is counter intuitive - an operation is being applied automatically
         unless the user specifically asks not to. This has been changed. Now, duplicates are removed if K is given. 
         Empties are preserved if R is given.
CHANGE:  In previous versions modifiers were not applied in strictly left to right order. Certain modifiers were reserved 
         and applied at the end giving sometimes unexpected results. This has been changed. All modifiers are now applied 
         in strictly left to right order.
BUGFIX:  || && and ! operations did not evaluate properly under some conditions.
BUGFIX:  A regular expression in the tutorial section of the documents contained a typographical error
FEATURE: the "-d thread" option will not distinguish between threads and processes when reporting them
FEATURE: the "-d if" option output improved
CHANGE:  Major changes were made to the thread management code.
CHANGE:  Major changes were made to the network management code. 
FEATURE: Added the -h option, that tab indents all the output from kjam. This is useful when kjam calls itself or is called by a 
         script.
FEATURE: Option -e, in addition to reporting the elapsed time, reports the average number of concurrently running threads.
FEATURE: Significant improvement in multi-threaded execution performance on machines with multiple physical CPU's
FEATURE: On windows, kjam will detect the number of physical processors, and adjust the default number of threads to be 4x the cpu count.
         On linux, it continues to assume a single processor and sets default thread count to 4.
BUGFIX:  Various crash bugs due to thread concurrency issues on network builds fixed.

0.26

FEATURE: Linux support, including low level changes to networking and process management. ( working but not quite ready for beta program )
FEATURE: Addition of the JAMPLATFORM and JAMUNAME built-in variables.
CHANGE:  Variables set on the command line using the -s command line switch now override built-in variables
BUGFIX:  Certain ill-formed variable expansions in command scripts could cause KJam to crash. KJam now reports an error in these cases.
BUGFIX:  Variables set to a null list now can be using the ?= default set operator. Previously the ?= only worked on variables which had never been used.
FEATURE: Implemented literal expansion. Modifiers can be applied direcly to literals, just the way they can be applied to variable expansion. This is
         useful for cases where you find yourself assigning a string to variable just so you can apply a modifier to it. literal expansion and variable
         expansions can be nested in each other. See the documentation for details on this major new feature.
FEATURE: Added -c option, to allow Kjam to run as if it were started in the given directory.
FEATURE: Improved default output slightly. For clarity, if all targets are up to date Kjam will now say that they are. 
         This chatter can be suppressed by running kjam wit the -d0 option.
FEATURE: Added -i command line option to display the status of the peer network
FEATURE: Build servers now advertize a several types by default. Linux servers will advertize themselves as "linux". Windows servers will advertize themselves
         as "win32". In addition they will list their machine name, processor architecture and operating system version. This allows network clients to be 
         able to easily schedule jobs on just servers on machines with appropriate operating systems.
FEATURE: JAMCMDOPTIONS and JAMCMDTARGETS default symbols added.
CHANGE:  JAM_IS_NETWORK_CLIENT default symbol removed.
CHANGE:  Linux version only: When spawning a server, if user does not have permission to ping, warn users that probing the network may take longer

0.25

BUGFIX:  program would crash if a certain regular expressions matched multiple times in a single expansion
FEATURE: support added for multiple grists
CHANGE:  When using -a or -t options which affect targets with no actions or dependents ( for example source files ), 
         kjam no longer issues an irrelevant warning that the target cannot be rebuilt. 
BUGFIX:  actions marked as 'updated', which limit the number of simultaneous sources and targets will now correctly limit the 
         number of targets as well as sources. Previously there could sometimes be a mismatch between sources and targets.
BUGFIX:  Variable expansion with a quote mark in it in an action script could often expand incorrectly.
CHANGE:  Variable expansion in an action script no longer breaks up quoted strings into separate expansion tokens.
BUGFIX:  Many commands in network mode were failing with "Directory not found", when the directory did exist.
CHANGE:  Variable expansions using :A and :M will return results even when the variable does not contain wildcard characters
         

0.24

CHANGE:  switch statement now requires ( ) around its variable, to improve consistency with other statements
CHANGE:  the built-in mkdir command no longer returns an error if it tries to make a directory which already exists.
FEATURE: improved output for the -d fate command line option
BUGFIX:  sometimes a target which is labelled temporary would not get flagged for updating if the file that needed it did not already exist.

0.23

BUGFIX:  When running KJam from inside the cmd.exe shell, error output from programs was sometimes being lost.
BUGFIX:  -q option did not always terminate execution when an error encountered
FEATURE: Improved output for the -d thread command line option
FEATURE: Improved error reporting for failed commands when using the built-in shell
FEATURE: New action modifier "fail_expected"

0.22

BUGFIX:  KJam would sometimes bind directories ending in '/' incorrectly
CHANGE:  For file names ending with more than one suffix, such as file.ext1.ext2, the :S expansion modifier 
         would interpret the suffix as .ext1.ext2. This has been changed to match the more normal expectation 
         that the suffix in this case should be .ext2. The :B modifier has been changed in the corresponding 
         manner.
FEATURE: Added :O expansion modifier which splits a string on a given boundary.
