diff options
author | Gavin Howard <yzena.tech@gmail.com> | 2019-11-23 11:28:41 -0700 |
---|---|---|
committer | Gavin Howard <yzena.tech@gmail.com> | 2019-11-23 11:28:50 -0700 |
commit | 5e2fb73c2c7a3222a443357f5a4c310e18478f9d (patch) | |
tree | bd348327a3b116877f00ffa52ef28073d03c07f9 | |
parent | 35550fedabf0a5b4c233e9c54f39038332e907fc (diff) | |
download | bc-5e2fb73c2c7a3222a443357f5a4c310e18478f9d.tar.gz |
Add a NEWS.md file
This was done on the request of a user.
-rw-r--r-- | NEWS.md | 468 |
1 files changed, 468 insertions, 0 deletions
diff --git a/NEWS.md b/NEWS.md new file mode 100644 index 00000000..d0a4464d --- /dev/null +++ b/NEWS.md @@ -0,0 +1,468 @@ +# News + +## 2.3.1 + +This is a production release. It fixes a bug that caused `-1000000000 < -1` to +return `0`. This only happened with negative numbers and only if the value on +the left was more negative by a certain amount. + +## 2.3.0 + +This is a production release with changes to the build system. + +## 2.2.0 + +This release is a production release. It only has new features and performance +improvements. + +1. The performance of `sqrt(x)` was improved. +2. The new function `root(x, n)` was added to the extended math library to + calculate `n`th roots. +3. The new function `cbrt(x)` was added to the extended math library to + calculate cube roots. + +## 2.1.3 + +This is a non-critical release; it just changes the build system, and in +non-breaking ways: + +1. Linked locale files were changed to link to their sources with a relative + link. +2. A bug in `configure.sh` that caused long option parsing to fail under `bash` + was fixed. + +## 2.1.2 + +This release is not a critical release. + +1. A few codes were added to history. +2. Multiplication was optimized a bit more. +3. Addition and subtraction were both optimized a bit more. + +## 2.1.1 + +This release contains a fix for the test suite made for Linux from Scratch: now +the test suite prints `pass` when a test is passed. + +Other than that, there is no change in this release, so distros and other users +do not need to upgrade. + +## 2.1.0 + +This release is a production release. + +The following bugs were fixed: + +1. A `dc` bug that caused stack mishandling was fixed. +2. A warning on OpenBSD was fixed. +3. Bugs in `ctrl+arrow` operations in history were fixed. +4. The ability to paste multiple lines in history was added. +5. A `bc` bug, mishandling of array arguments to functions, was fixed. +6. A crash caused by freeing the wrong pointer was fixed. +7. A `dc` bug where strings, in a rare case, were mishandled in parsing was + fixed. + +In addition, the following changes were made: + +1. Division was slightly optimized. +2. An option was added to the build to disable printing of prompts. +3. The special case of empty arguments is now handled. This is to prevent + errors in scripts that end up passing empty arguments. +4. A harmless bug was fixed. This bug was that, with the pop instructions + (mostly) removed (see below), `bc` would leave extra values on its stack for + `void` functions and in a few other cases. These extra items would not + affect anything put on the stack and would not cause any sort of crash or + even buggy behavior, but they would cause `bc` to take more memory than it + needed. + +On top of the above changes, the following optimizations were added: + +1. The need for pop instructions in `bc` was removed. +2. Extra tests on every iteration of the interpreter loop were removed. +3. Updating function and code pointers on every iteration of the interpreter + loop was changed to only updating them when necessary. +4. Extra assignments to pointers were removed. + +Altogether, these changes sped up the interpreter by around 2x. + +***NOTE***: This is the last release with new features because this `bc` is now +considered complete. From now on, only bug fixes and new translations will be +added to this `bc`. + +## 2.0.3 + +This is a production, bug-fix release. + +Two bugs were fixed in this release: + +1. A rare and subtle signal handling bug was fixed. +2. A misbehavior on `0` to a negative power was fixed. + +The last bug bears some mentioning. + +When I originally wrote power, I did not thoroughly check its error cases; +instead, I had it check if the first number was `0` and then if so, just return +`0`. However, `0` to a negative power means that `1` will be divided by `0`, +which is an error. + +I caught this, but only after I stopped being cocky. You see, sometime later, I +had noticed that GNU `bc` returned an error, correctly, but I thought it was +wrong simply because that's not what my `bc` did. I saw it again later and had a +double take. I checked for real, finally, and found out that my `bc` was wrong +all along. + +That was bad on me. But the bug was easy to fix, so it is fixed now. + +There are two other things in this release: + +1. Subtraction was optimized by [Stefan Eßer][14]. +2. Division was also optimized, also by Stefan Eßer. + +## 2.0.2 + +This release contains a fix for a possible overflow in the signal handling. I +would be surprised if any users ran into it because it would only happen after 2 +billion (`2^31-1`) `SIGINT`'s, but I saw it and had to fix it. + +## 2.0.1 + +This release contains very few things that will apply to any users. + +1. A slight bug in `dc`'s interactive mode was fixed. +2. A bug in the test suite that was only triggered on NetBSD was fixed. +3. **The `-P`/`--no-prompt` option** was added for users that do not want a + prompt. +4. A `make check` target was added as an alias for `make test`. +5. `dc` got its own read prompt: `?> `. + +## 2.0.0 + +This release is a production release. + +This release is also a little different from previous releases. From here on +out, I do not plan on adding any more features to this `bc`; I believe that it +is complete. However, there may be bug fix releases in the future, if I or any +others manage to find bugs. + +This release has only a few new features: + +1. `atan2(y, x)` was added to the extended math library as both `a2(y, x)` and + `atan2(y, x)`. +2. Locales were fixed. +3. A **POSIX shell-compatible script was added as an alternative to compiling + `gen/strgen.c`** on a host machine. More details about making the choice + between the two can be found by running `./configure.sh --help` or reading + the [build manual][13]. +4. Multiplication was optimized by using **diagonal multiplication**, rather + than straight brute force. +5. The `locale_install.sh` script was fixed. +6. `dc` was given the ability to **use the environment variable + `DC_ENV_ARGS`**. +7. `dc` was also given the ability to **use the `-i` or `--interactive`** + options. +8. Printing the prompt was fixed so that it did not print when it shouldn't. +9. Signal handling was fixed. +10. **Handling of `SIGTERM` and `SIGQUIT`** was fixed. +11. The **built-in functions `maxibase()`, `maxobase()`, and `maxscale()`** (the + commands `T`, `U`, `V` in `dc`, respectively) were added to allow scripts to + query for the max allowable values of those globals. +12. Some incompatibilities with POSIX were fixed. + +In addition, this release is `2.0.0` for a big reason: the internal format for +numbers changed. They used to be a `char` array. Now, they are an array of +larger integers, packing more decimal digits into each integer. This has +delivered ***HUGE*** performance improvements, especially for multiplication, +division, and power. + +This `bc` should now be the fastest `bc` available, but I may be wrong. + +## 1.2.8 + +This release contains a fix for a harmless bug (it is harmless in that it still +works, but it just copies extra data) in the [`locale_install.sh`][12] script. + +## 1.2.7 + +This version contains fixes for the build on Arch Linux. + +## 1.2.6 + +This release removes the use of `local` in shell scripts because it's not POSIX +shell-compatible, and also updates a man page that should have been updated a +long time ago but was missed. + +## 1.2.5 + +This release contains some missing locale `*.msg` files. + +## 1.2.4 + +This release contains a few bug fixes and new French translations. + +## 1.2.3 + +This release contains a fix for a bug: use of uninitialized data. Such data was +only used when outputting an error message, but I am striving for perfection. As +Michelangelo said, "Trifles make perfection, and perfection is no trifle." + +## 1.2.2 + +This release contains fixes for OpenBSD. + +## 1.2.1 + +This release contains bug fixes for some rare bugs. + +## 1.2.0 + +This is a production release. + +There have been several changes since `1.1.0`: + +1. The build system had some changes. +2. Locale support has been added. (Patches welcome for translations.) +3. **The ability to turn `ibase`, `obase`, and `scale` into stacks** was added + with the `-g` command-line option. (See the [`bc` manual][9] for more + details.) +4. Support for compiling on Mac OSX out of the box was added. +5. The extended math library got `t(x)`, `ceil(x)`, and some aliases. +6. The extended math library also got `r2d(x)` (for converting from radians to + degrees) and `d2r(x)` (for converting from degrees to radians). This is to + allow using degrees with the standard library. +7. Both calculators now accept numbers in **scientific notation**. See the + [`bc` manual][9] and the [`dc` manual][10] for details. +8. Both calculators can **output in either scientific or engineering + notation**. See the [`bc` manual][9] and the [`dc` manual][10] for details. +9. Some inefficiencies were removed. +10. Some bugs were fixed. +11. Some bugs in the extended library were fixed. +12. Some defects from [Coverity Scan][11] were fixed. + +## 1.1.4 + +This release contains a fix to the build system that allows it to build on older +versions of `glibc`. + +## 1.1.3 + +This release contains a fix for a bug in the test suite where `bc` tests and +`dc` tests could not be run in parallel. + +## 1.1.2 + +This release has a fix for a history bug; the down arrow did not work. + +## 1.1.1 + +This release fixes a bug in the `1.1.0` build system. The source is exactly the +same. + +The bug that was fixed was a failure to install if no `EXECSUFFIX` was used. + +## 1.1.0 + +This is a production release. However, many new features were added since `1.0`. + +1. **The build system has been changed** to use a custom, POSIX + shell-compatible configure script ([`configure.sh`][6]) to generate a POSIX + make-compatible `Makefile`, which means that `bc` and `dc` now build out of + the box on any POSIX-compatible system. +2. Out-of-memory and output errors now cause the `bc` to report the error, + clean up, and die, rather than just reporting and trying to continue. +3. **Strings and constants are now garbage collected** when possible. +4. Signal handling and checking has been made more simple and more thorough. +5. `BcGlobals` was refactored into `BcVm` and `BcVm` was made global. Some + procedure names were changed to reflect its difference to everything else. +6. Addition got a speed improvement. +7. Some common code for addition and multiplication was refactored into its own + procedure. +8. A bug was removed where `dc` could have been selected, but the internal + `#define` that returned `true` for a query about `dc` would not have + returned `true`. +9. Useless calls to `bc_num_zero()` were removed. +10. **History support was added.** The history support is based off of a + [UTF-8 aware fork][7] of [`linenoise`][8], which has been customized with + `bc`'s own data structures and signal handling. +11. Generating C source from the math library now removes tabs from the library, + shrinking the size of the executable. +12. The math library was shrunk. +13. Error handling and reporting was improved. +14. Reallocations were reduced by giving access to the request size for each + operation. +15. **`abs()` (`b` command for `dc`) was added as a builtin.** +16. Both calculators were tested on FreeBSD. +17. Many obscure parse bugs were fixed. +18. Markdown and man page manuals were added, and the man pages are installed by + `make install`. +19. Executable size was reduced, though the added features probably made the + executable end up bigger. +20. **GNU-style array references were added as a supported feature.** +21. Allocations were reduced. +22. **New operators were added**: `$` (`$` for `dc`), `@` (`@` for `dc`), `@=`, + `<<` (`H` for `dc`), `<<=`, `>>` (`h` for `dc`), and `>>=`. See the + [`bc` manual][9] and the [`dc` manual][10] for more details. +23. **An extended math library was added.** This library contains code that + makes it so I can replace my desktop calculator with this `bc`. See the + [`bc` manual][3] for more details. +24. Support for all capital letters as numbers was added. +25. **Support for GNU-style void functions was added.** +26. A bug fix for improper handling of function parameters was added. +27. Precedence for the or (`||`) operator was changed to match GNU `bc`. +28. `dc` was given an explicit negation command. +29. `dc` was changed to be able to handle strings in arrays. + +## 1.1 Release Candidate 3 + +This release is the eighth release candidate for 1.1, though it is the third +release candidate meant as a general release candidate. The new code has not +been tested as thoroughly as it should for release. + +## 1.1 Release Candidate 2 + +This release is the seventh release candidate for 1.1, though it is the second +release candidate meant as a general release candidate. The new code has not +been tested as thoroughly as it should for release. + +## 1.1 FreeBSD Beta 5 + +This release is the sixth release candidate for 1.1, though it is the fifth +release candidate meant specifically to test if `bc` works on FreeBSD. The new +code has not been tested as thoroughly as it should for release. + +## 1.1 FreeBSD Beta 4 + +This release is the fifth release candidate for 1.1, though it is the fourth +release candidate meant specifically to test if `bc` works on FreeBSD. The new +code has not been tested as thoroughly as it should for release. + +## 1.1 FreeBSD Beta 3 + +This release is the fourth release candidate for 1.1, though it is the third +release candidate meant specifically to test if `bc` works on FreeBSD. The new +code has not been tested as thoroughly as it should for release. + +## 1.1 FreeBSD Beta 2 + +This release is the third release candidate for 1.1, though it is the second +release candidate meant specifically to test if `bc` works on FreeBSD. The new +code has not been tested as thoroughly as it should for release. + +## 1.1 FreeBSD Beta 1 + +This release is the second release candidate for 1.1, though it is meant +specifically to test if `bc` works on FreeBSD. The new code has not been tested as +thoroughly as it should for release. + +## 1.1 Release Candidate 1 + +This is the first release candidate for 1.1. The new code has not been tested as +thoroughly as it should for release. + +## 1.0 + +This is the first non-beta release. `bc` is ready for production use. + +As such, a lot has changed since 0.5. + +1. `dc` has been added. It has been tested even more thoroughly than `bc` was + for `0.5`. It does not have the `!` command, and for security reasons, it + never will, so it is complete. +2. `bc` has been more thoroughly tested. An entire section of the test suite + (for both programs) has been added to test for errors. +3. A prompt (`>>> `) has been added for interactive mode, making it easier to + see inputs and outputs. +4. Interrupt handling has been improved, including elimination of race + conditions (as much as possible). +5. MinGW and [Windows Subsystem for Linux][1] support has been added (see + [xstatic][2] for binaries). +6. Memory leaks and errors have been eliminated (as far as ASan and Valgrind + can tell). +7. Crashes have been eliminated (as far as [afl][3] can tell). +8. Karatsuba multiplication was added (and thoroughly) tested, speeding up + multiplication and power by orders of magnitude. +9. Performance was further enhanced by using a "divmod" function to reduce + redundant divisions and by removing superfluous `memset()` calls. +10. To switch between Karatsuba and `O(n^2)` multiplication, the config variable + `BC_NUM_KARATSUBA_LEN` was added. It is set to a sane default, but the + optimal number can be found with [`karatsuba.py`][4] (requires Python 3) + and then configured through `make`. +11. The random math test generator script was changed to Python 3 and improved. + `bc` and `dc` have together been run through 30+ million random tests. +12. All known math bugs have been fixed, including out of control memory + allocations in `sine` and `cosine` (that was actually a parse bug), certain + cases of infinite loop on square root, and slight inaccuracies (as much as + possible; see the [README][5]) in transcendental functions. +13. Parsing has been fixed as much as possible. +14. Test coverage was improved to 94.8%. The only paths not covered are ones + that happen when `malloc()` or `realloc()` fails. +15. An extension to get the length of an array was added. +16. The boolean not (`!`) had its precedence change to match negation. +17. Data input was hardened. +18. `bc` was made fully compliant with POSIX when the `-s` flag is used or + `POSIXLY_CORRECT` is defined. +19. Error handling was improved. +20. `bc` now checks that files it is given are not directories. + +## 1.0 Release Candidate 7 + +This is the seventh release candidate for 1.0. It fixes a few bugs in 1.0 +Release Candidate 6. + +## 1.0 Release Candidate 6 + +This is the sixth release candidate for 1.0. It fixes a few bugs in 1.0 Release +Candidate 5. + +## 1.0 Release Candidate 5 + +This is the fifth release candidate for 1.0. It fixes a few bugs in 1.0 Release +Candidate 4. + +## 1.0 Release Candidate 4 + +This is the fourth release candidate for 1.0. It fixes a few bugs in 1.0 Release +Candidate 3. + +## 1.0 Release Candidate 3 + +This is the third release candidate for 1.0. It fixes a few bugs in 1.0 Release +Candidate 2. + +## 1.0 Release Candidate 2 + +This is the second release candidate for 1.0. It fixes a few bugs in 1.0 Release +Candidate 1. + +## 1.0 Release Candidate 1 + +This is the first Release Candidate for 1.0. `bc` is complete, with `dc`, but it +is not tested. + +## 0.5 + +This beta release completes more features, but it is still not complete nor +tested as thoroughly as necessary. + +## 0.4.1 + +This beta release fixes a few bugs in 0.4. + +## 0.4 + +This is a beta release. It does not have the complete set of features, and it is +not thoroughly tested. + +[1]: https://docs.microsoft.com/en-us/windows/wsl/install-win10 +[2]: http://xstatic.musl.cc/bc/ +[3]: http://lcamtuf.coredump.cx/afl/ +[4]: ./karatsuba.py +[5]: ./README.md +[6]: ./configure.sh +[7]: https://github.com/rain-1/linenoise-mob +[8]: https://github.com/antirez/linenoise +[9]: ./manuals/bc.1.ronn +[10]: ./manuals/dc.1.ronn +[11]: https://scan.coverity.com/projects/gavinhoward-bc +[12]: ./locale_install.sh +[13]: ./manuals/build.md +[14]: https://github.com/stesser |