]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - contrib/bc/NEWS.md
Fix panic when destroying interface with ECMP routes.
[FreeBSD/FreeBSD.git] / contrib / bc / NEWS.md
1 # News
2
3 ## 3.3.4
4
5 This is a production release that fixes a small bug.
6
7 The bug was that output was not flushed before a `read()` call, so prompts
8 without a newline on the end were not flushed before the `read()` call.
9
10 This is such a tiny bug that users only need to upgrade if they are affected.
11
12 ## 3.3.3
13
14 This is a production release with one tweak and fixes for manuals.
15
16 The tweak is that `length(0)` returns `1` instead of `0`. In `3.3.1`, I changed
17 it so `length(0.x)`, where `x` could be any number of digits, returned the
18 `scale`, but `length(0)` still returned `0` because I believe that `0` has `0`
19 significant digits.
20
21 After request of FreeBSD and considering the arguments of a mathematician,
22 compatibility with other `bc`'s, and the expectations of users, I decided to
23 make the change.
24
25 The fixes for manuals fixed a bug where `--` was rendered as `-`.
26
27 ## 3.3.2
28
29 This is a production release that fixes a divide-by-zero bug in `root()` in the
30 [extended math library][16]. All previous versions with `root()` have the bug.
31
32 ## 3.3.1
33
34 This is a production release that fixes a bug.
35
36 The bug was in the reporting of number length when the value was 0.
37
38 ## 3.3.0
39
40 This is a production release that changes one behavior and fixes documentation
41 bugs.
42
43 The changed behavior is the treatment of `-e` and `-f` when given through
44 `BC_ENV_ARGS` or `DC_ENV_ARGS`. Now `bc` and `dc` do not exit when those options
45 (or their equivalents) are given through those environment variables. However,
46 `bc` and `dc` still exit when they or their equivalents are given on the
47 command-line.
48
49 ## 3.2.7
50
51 This is a production release that removes a small non-portable shell operation
52 in `configure.sh`. This problem was only noticed on OpenBSD, not FreeBSD or
53 Linux.
54
55 Non-OpenBSD users do ***NOT*** need to upgrade, although NetBSD users may also
56 need to upgrade.
57
58 ## 3.2.6
59
60 This is a production release that fixes the build on FreeBSD.
61
62 There was a syntax error in `configure.sh` that the Linux shell did not catch,
63 and FreeBSD depends on the existence of `tests/all.sh`.
64
65 All users that already upgraded to `3.2.5` should update to this release, with
66 my apologies for the poor release of `3.2.5`. Other users should skip `3.2.5` in
67 favor of this version.
68
69 ## 3.2.5
70
71 This is a production release that fixes several bugs and adds a couple small
72 things.
73
74 The two most important bugs were bugs that causes `dc` to access memory
75 out-of-bounds (crash in debug builds). This was found by upgrading to `afl++`
76 from `afl`. Both were caused by a failure to distinguish between the same two
77 cases.
78
79 Another bug was the failure to put all of the licenses in the `LICENSE.md` file.
80
81 Third, some warnings by `scan-build` were found and eliminated. This needed one
82 big change: `bc` and `dc` now bail out as fast as possible on fatal errors
83 instead of unwinding the stack.
84
85 Fourth, the pseudo-random number now attempts to seed itself with `/dev/random`
86 if `/dev/urandom` fails.
87
88 Finally, this release has a few quality-of-life changes to the build system. The
89 usage should not change at all; the only thing that changed was making sure the
90 `Makefile.in` was written to rebuild properly when headers changed and to not
91 rebuild when not necessary.
92
93 ## 3.2.4
94
95 This is a production release that fixes a warning on `gcc` 6 or older, which
96 does not have an attribute that is used.
97
98 Users do ***NOT*** need to upgrade if they don't use `gcc` 6 or older.
99
100 ## 3.2.3
101
102 This is a production release that fixes a bug in `gen/strgen.sh`. I recently
103 changed `gen/strgen.c`, but I did not change `gen/strgen.sh`.
104
105 Users that do not use `gen/strgen.sh` do not need to upgrade.
106
107 ## 3.2.2
108
109 This is a production release that fixes a portability bug in `configure.sh`. The
110 bug was using the GNU `find` extension `-wholename`.
111
112 ## 3.2.1
113
114 This is a production release that has one fix for `bcl(3)`. It is technically
115 not a bug fix since the behavior is undefined, but the `BclNumber`s that
116 `bcl_divmod()` returns will be set to `BCL_ERROR_INVALID_NUM` if there is an
117 error. Previously, they were not set.
118
119 ## 3.2.0
120
121 This is a production release that has one bug fix and a major addition.
122
123 The bug fix was a missing `auto` variable in the bessel `j()` function in the
124 math library.
125
126 The major addition is a way to build a version of `bc`'s math code as a library.
127 This is done with the `-a` option to `configure.sh`. The API for the library can
128 be read in `./manuals/bcl.3.md` or `man bcl` once the library is installed with
129 `make install`.
130
131 This library was requested by developers before I even finished version 1.0, but
132 I could not figure out how to do it until now.
133
134 If the library has API breaking changes, the major version of `bc` will be
135 incremented.
136
137 ## 3.1.6
138
139 This is a production release that fixes a new warning from Clang 12 for FreeBSD
140 and also removes some possible undefined behavior found by UBSan that compilers
141 did not seem to take advantage of.
142
143 Users do ***NOT*** need to upgrade, if they do not want to.
144
145 ## 3.1.5
146
147 This is a production release that fixes the Chinese locales (which caused `bc`
148 to crash) and a crash caused by `bc` executing code when it should not have been
149 able to.
150
151 ***ALL USERS SHOULD UPGRADE.***
152
153 ## 3.1.4
154
155 This is a production release that fixes one bug, changes two behaviors, and
156 removes one environment variable.
157
158 The bug is like the one in the last release except it applies if files are being
159 executed. I also made the fix more general.
160
161 The behavior that was changed is that `bc` now exits when given `-e`, `-f`,
162 `--expression` or `--file`. However, if the last one of those is `-f-` (using
163 `stdin` as the file), `bc` does not exit. If `-f-` exists and is not the last of
164 the `-e` and `-f` options (and equivalents), `bc` gives a fatal error and exits.
165
166 Next, I removed the `BC_EXPR_EXIT` and `DC_EXPR_EXIT` environment variables
167 since their use is not needed with the behavior change.
168
169 Finally, I made it so `bc` does not print the header, though the `-q` and
170 `--quiet` options were kept for compatibility with GNU `bc`.
171
172 ## 3.1.3
173
174 This is a production release that fixes one minor bug: if `bc` was invoked like
175 the following, it would error:
176
177 ```
178 echo "if (1 < 3) 1" | bc
179 ```
180
181 Unless users run into this bug, they do not need to upgrade, but it is suggested
182 that they do.
183
184 ## 3.1.2
185
186 This is a production release that adds a way to install *all* locales. Users do
187 ***NOT*** need to upgrade.
188
189 For package maintainers wishing to make use of the change, just pass `-l` to
190 `configure.sh`.
191
192 ## 3.1.1
193
194 This is a production release that adds two Spanish locales. Users do ***NOT***
195 need to upgrade, unless they want those locales.
196
197 ## 3.1.0
198
199 This is a production release that adjusts one behavior, fixes eight bugs, and
200 improves manpages for FreeBSD. Because this release fixes bugs, **users and
201 package maintainers should update to this version as soon as possible**.
202
203 The behavior that was adjusted was how code from the `-e` and `-f` arguments
204 (and equivalents) were executed. They used to be executed as one big chunk, but
205 in this release, they are now executed line-by-line.
206
207 The first bug fix in how output to `stdout` was handled in `SIGINT`. If a
208 `SIGINT` came in, the `stdout` buffer was not correctly flushed. In fact, a
209 clean-up function was not getting called. This release fixes that bug.
210
211 The second bug is in how `dc` handled input from `stdin`. This affected `bc` as
212 well since it was a mishandling of the `stdin` buffer.
213
214 The third fixed bug was that `bc` and `dc` could `abort()` (in debug mode) when
215 receiving a `SIGTERM`. This one was a race condition with pushing and popping
216 items onto and out of vectors.
217
218 The fourth bug fixed was that `bc` could leave extra items on the stack and
219 thus, not properly clean up some memory. (The memory would still get
220 `free()`'ed, but it would not be `free()`'ed when it could have been.)
221
222 The next two bugs were bugs in `bc`'s parser that caused crashes when executing
223 the resulting code.
224
225 The last two bugs were crashes in `dc` that resulted from mishandling of
226 strings.
227
228 The manpage improvement was done by switching from [ronn][20] to [Pandoc][21] to
229 generate manpages. Pandoc generates much cleaner manpages and doesn't leave
230 blank lines where they shouldn't be.
231
232 ## 3.0.3
233
234 This is a production release that adds one new feature: specific manpages.
235
236 Before this release, `bc` and `dc` only used one manpage each that referred to
237 various build options. This release changes it so there is one manpage set per
238 relevant build type. Each manual only has information about its particular
239 build, and `configure.sh` selects the correct set for install.
240
241 ## 3.0.2
242
243 This is a production release that adds `utf8` locale symlinks and removes an
244 unused `auto` variable from the `ceil()` function in the [extended math
245 library][16].
246
247 Users do ***NOT*** need to update unless they want the locales.
248
249 ## 3.0.1
250
251 This is a production release with two small changes. Users do ***NOT*** need to
252 upgrade to this release; however, if they haven't upgraded to `3.0.0` yet, it
253 may be worthwhile to upgrade to this release.
254
255 The first change is fixing a compiler warning on FreeBSD with strict warnings
256 on.
257
258 The second change is to make the new implementation of `ceil()` in `lib2.bc`
259 much more efficient.
260
261 ## 3.0.0
262
263 *Notes for package maintainers:*
264
265 *First, the `2.7.0` release series saw a change in the option parsing. This made
266 me change one error message and add a few others. The error message that was
267 changed removed one format specifier. This means that `printf()` will seqfault
268 on old locale files. Unfortunately, `bc` cannot use any locale files except the
269 global ones that are already installed, so it will use the previous ones while
270 running tests during install. **If `bc` segfaults while running arg tests when
271 updating, it is because the global locale files have not been replaced. Make
272 sure to either prevent the test suite from running on update or remove the old
273 locale files before updating.** (Removing the locale files can be done with
274 `make uninstall` or by running the `locale_uninstall.sh` script.) Once this is
275 done, `bc` should install without problems.*
276
277 *Second, **the option to build without signal support has been removed**. See
278 below for the reasons why.*
279
280 This is a production release with some small bug fixes, a few improvements,
281 three major bug fixes, and a complete redesign of `bc`'s error and signal
282 handling. **Users and package maintainers should update to this version as soon
283 as possible.**
284
285 The first major bug fix was in how `bc` executed files. Previously, a whole file
286 was parsed before it was executed, but if a function is defined *after* code,
287 especially if the function definition was actually a redefinition, and the code
288 before the definition referred to the previous function, this `bc` would replace
289 the function before executing any code. The fix was to make sure that all code
290 that existed before a function definition was executed.
291
292 The second major bug fix was in `bc`'s `lib2.bc`. The `ceil()` function had a
293 bug where a `0` in the decimal place after the truncation position, caused it to
294 output the wrong numbers if there was any non-zero digit after.
295
296 The third major bug is that when passing parameters to functions, if an
297 expression included an array (not an array element) as a parameter, it was
298 accepted, when it should have been rejected. It is now correctly rejected.
299
300 Beyond that, this `bc` got several improvements that both sped it up, improved
301 the handling of signals, and improved the error handling.
302
303 First, the requirements for `bc` were pushed back to POSIX 2008. `bc` uses one
304 function, `strdup()`, which is not in POSIX 2001, and it is in the X/Open System
305 Interfaces group 2001. It is, however, in POSIX 2008, and since POSIX 2008 is
306 old enough to be supported anywhere that I care, that should be the requirement.
307
308 Second, the BcVm global variable was put into `bss`. This actually slightly
309 reduces the size of the executable from a massive code shrink, and it will stop
310 `bc` from allocating a large set of memory when `bc` starts.
311
312 Third, the default Karatsuba length was updated from 64 to 32 after making the
313 optimization changes below, since 32 is going to be better than 64 after the
314 changes.
315
316 Fourth, Spanish translations were added.
317
318 Fifth, the interpreter received a speedup to make performance on non-math-heavy
319 scripts more competitive with GNU `bc`. While improvements did, in fact, get it
320 much closer (see the [benchmarks][19]), it isn't quite there.
321
322 There were several things done to speed up the interpreter:
323
324 First, several small inefficiencies were removed. These inefficiencies included
325 calling the function `bc_vec_pop(v)` twice instead of calling
326 `bc_vec_npop(v, 2)`. They also included an extra function call for checking the
327 size of the stack and checking the size of the stack more than once on several
328 operations.
329
330 Second, since the current `bc` function is the one that stores constants and
331 strings, the program caches pointers to the current function's vectors of
332 constants and strings to prevent needing to grab the current function in order
333 to grab a constant or a string.
334
335 Third, `bc` tries to reuse `BcNum`'s (the internal representation of
336 arbitary-precision numbers). If a `BcNum` has the default capacity of
337 `BC_NUM_DEF_SIZE` (32 on 64-bit and 16 on 32-bit) when it is freed, it is added
338 to a list of available `BcNum`'s. And then, when a `BcNum` is allocated with a
339 capacity of `BC_NUM_DEF_SIZE` and any `BcNum`'s exist on the list of reusable
340 ones, one of those ones is grabbed instead.
341
342 In order to support these changes, the `BC_NUM_DEF_SIZE` was changed. It used to
343 be 16 bytes on all systems, but it was changed to more closely align with the
344 minimum allocation size on Linux, which is either 32 bytes (64-bit musl), 24
345 bytes (64-bit glibc), 16 bytes (32-bit musl), or 12 bytes (32-bit glibc). Since
346 these are the minimum allocation sizes, these are the sizes that would be
347 allocated anyway, making it worth it to just use the whole space, so the value
348 of `BC_NUM_DEF_SIZE` on 64-bit systems was changed to 32 bytes.
349
350 On top of that, at least on 64-bit, `BC_NUM_DEF_SIZE` supports numbers with
351 either 72 integer digits or 45 integer digits and 27 fractional digits. This
352 should be more than enough for most cases since `bc`'s default `scale` values
353 are 0 or 20, meaning that, by default, it has at most 20 fractional digits. And
354 45 integer digits are *a lot*; it's enough to calculate the amount of mass in
355 the Milky Way galaxy in kilograms. Also, 72 digits is enough to calculate the
356 diameter of the universe in Planck lengths.
357
358 (For 32-bit, these numbers are either 32 integer digits or 12 integer digits and
359 20 fractional digits. These are also quite big, and going much bigger on a
360 32-bit system seems a little pointless since 12 digits in just under a trillion
361 and 20 fractional digits is still enough for about any use since `10^-20` light
362 years is just under a millimeter.)
363
364 All of this together means that for ordinary uses, and even uses in scientific
365 work, the default number size will be all that is needed, which means that
366 nearly all, if not all, numbers will be reused, relieving pressure on the system
367 allocator.
368
369 I did several experiments to find the changes that had the most impact,
370 especially with regard to reusing `BcNum`'s. One was putting `BcNum`'s into
371 buckets according to their capacity in powers of 2 up to 512. That performed
372 worse than `bc` did in `2.7.2`. Another was putting any `BcNum` on the reuse
373 list that had a capacity of `BC_NUM_DEF_SIZE * 2` and reusing them for `BcNum`'s
374 that requested `BC_NUM_DEF_SIZE`. This did reduce the amount of time spent, but
375 it also spent a lot of time in the system allocator for an unknown reason. (When
376 using `strace`, a bunch more `brk` calls showed up.) Just reusing `BcNum`'s that
377 had exactly `BC_NUM_DEF_SIZE` capacity spent the smallest amount of time in both
378 user and system time. This makes sense, especially with the changes to make
379 `BC_NUM_DEF_SIZE` bigger on 64-bit systems, since the vast majority of numbers
380 will only ever use numbers with a size less than or equal to `BC_NUM_DEF_SIZE`.
381
382 Last of all, `bc`'s signal handling underwent a complete redesign. (This is the
383 reason that this version is `3.0.0` and not `2.8.0`.) The change was to move
384 from a polling approach to signal handling to an interrupt-based approach.
385
386 Previously, every single loop condition had a check for signals. I suspect that
387 this could be expensive when in tight loops.
388
389 Now, the signal handler just uses `longjmp()` (actually `siglongjmp()`) to start
390 an unwinding of the stack until it is stopped or the stack is unwound to
391 `main()`, which just returns. If `bc` is currently executing code that cannot be
392 safely interrupted (according to POSIX), then signals are "locked." The signal
393 handler checks if the lock is taken, and if it is, it just sets the status to
394 indicate that a signal arrived. Later, when the signal lock is released, the
395 status is checked to see if a signal came in. If so, the stack unwinding starts.
396
397 This design eliminates polling in favor of maintaining a stack of `jmp_buf`'s.
398 This has its own performance implications, but it gives better interaction. And
399 the cost of pushing and popping a `jmp_buf` in a function is paid at most twice.
400 Most functions do not pay that price, and most of the rest only pay it once.
401 (There are only some 3 functions in `bc` that push and pop a `jmp_buf` twice.)
402
403 As a side effect of this change, I had to eliminate the use of `stdio.h` in `bc`
404 because `stdio` does not play nice with signals and `longjmp()`. I implemented
405 custom I/O buffer code that takes a fraction of the size. This means that static
406 builds will be smaller, but non-static builds will be bigger, though they will
407 have less linking time.
408
409 This change is also good because my history implementation was already bypassing
410 `stdio` for good reasons, and unifying the architecture was a win.
411
412 Another reason for this change is that my `bc` should *always* behave correctly
413 in the presence of signals like `SIGINT`, `SIGTERM`, and `SIGQUIT`. With the
414 addition of my own I/O buffering, I needed to also make sure that the buffers
415 were correctly flushed even when such signals happened.
416
417 For this reason, I **removed the option to build without signal support**.
418
419 As a nice side effect of this change, the error handling code could be changed
420 to take advantage of the stack unwinding that signals used. This means that
421 signals and error handling use the same code paths, which means that the stack
422 unwinding is well-tested. (Errors are tested heavily in the test suite.)
423
424 It also means that functions do not need to return a status code that
425 ***every*** caller needs to check. This eliminated over 100 branches that simply
426 checked return codes and then passed that return code up the stack if necessary.
427 The code bloat savings from this is at least 1700 bytes on `x86_64`, *before*
428 taking into account the extra code from removing `stdio.h`.
429
430 ## 2.7.2
431
432 This is a production release with one major bug fix.
433
434 The `length()` built-in function can take either a number or an array. If it
435 takes an array, it returns the length of the array. Arrays can be passed by
436 reference. The bug is that the `length()` function would not properly
437 dereference arrays that were references. This is a bug that affects all users.
438
439 **ALL USERS SHOULD UPDATE `bc`**.
440
441 ## 2.7.1
442
443 This is a production release with fixes for new locales and fixes for compiler
444 warnings on FreeBSD.
445
446 ## 2.7.0
447
448 This is a production release with a bug fix for Linux, new translations, and new
449 features.
450
451 Bug fixes:
452
453 * Option parsing in `BC_ENV_ARGS` was broken on Linux in 2.6.1 because `glibc`'s
454   `getopt_long()` is broken. To get around that, and to support long options on
455   every platform, an adapted version of [`optparse`][17] was added. Now, `bc`
456   does not even use `getopt()`.
457 * Parsing `BC_ENV_ARGS` with quotes now works. It isn't the smartest, but it
458   does the job if there are spaces in file names.
459
460 The following new languages are supported:
461
462 * Dutch
463 * Polish
464 * Russian
465 * Japanes
466 * Simplified Chinese
467
468 All of these translations were generated using [DeepL][18], so improvements are
469 welcome.
470
471 There is only one new feature: **`bc` now has a built-in pseudo-random number
472 generator** (PRNG).
473
474 The PRNG is seeded, making it useful for applications where
475 `/dev/urandom` does not work because output needs to be reproducible. However,
476 it also uses `/dev/urandom` to seed itself by default, so it will start with a
477 good seed by default.
478
479 It also outputs 32 bits on 32-bit platforms and 64 bits on 64-bit platforms, far
480 better than the 15 bits of C's `rand()` and `bash`'s `$RANDOM`.
481
482 In addition, the PRNG can take a bound, and when it gets a bound, it
483 automatically adjusts to remove bias. It can also generate numbers of arbitrary
484 size. (As of the time of release, the largest pseudo-random number generated by
485 this `bc` was generated with a bound of `2^(2^20)`.)
486
487 ***IMPORTANT: read the [`bc` manual][9] and the [`dc` manual][10] to find out
488 exactly what guarantees the PRNG provides. The underlying implementation is not
489 guaranteed to stay the same, but the guarantees that it provides are guaranteed
490 to stay the same regardless of the implementation.***
491
492 On top of that, four functions were added to `bc`'s [extended math library][16]
493 to make using the PRNG easier:
494
495 * `frand(p)`: Generates a number between `[0,1)` to `p` decimal places.
496 * `ifrand(i, p)`: Generates an integer with bound `i` and adds it to `frand(p)`.
497 * `srand(x)`: Randomizes the sign of `x`. In other words, it flips the sign of
498   `x` with probability `0.5`.
499 * `brand()`: Returns a random boolean value (either `0` or `1`).
500
501 ## 2.6.1
502
503 This is a production release with a bug fix for FreeBSD.
504
505 The bug was that when `bc` was built without long options, it would give a fatal
506 error on every run. This was caused by a mishandling of `optind`.
507
508 ## 2.6.0
509
510 This release is a production release ***with no bugfixes***. If you do not want
511 to upgrade, you don't have to.
512
513 No source code changed; the only thing that changed was `lib2.bc`.
514
515 This release adds one function to the [extended math library][16]: `p(x, y)`,
516 which calculates `x` to the power of `y`, whether or not `y` is an integer. (The
517 `^` operator can only accept integer powers.)
518
519 This release also includes a couple of small tweaks to the [extended math
520 library][16], mostly to fix returning numbers with too high of `scale`.
521
522 ## 2.5.3
523
524 This release is a production release which addresses inconsistencies in the
525 Portuguese locales. No `bc` code was changed.
526
527 The issues were that the ISO files used different naming, and also that the
528 files that should have been symlinks were not. I did not catch that because
529 GitHub rendered them the exact same way.
530
531 ## 2.5.2
532
533 This release is a production release.
534
535 No code was changed, but the build system was changed to allow `CFLAGS` to be
536 given to `CC`, like this:
537
538 ```
539 CC="gcc -O3 -march=native" ./configure.sh
540 ```
541
542 If this happens, the flags are automatically put into `CFLAGS`, and the compiler
543 is set appropriately. In the example above this means that `CC` will be "gcc"
544 and `CFLAGS` will be "-O3 -march=native".
545
546 This behavior was added to conform to GNU autotools practices.
547
548 ## 2.5.1
549
550 This is a production release which addresses portability concerns discovered
551 in the `bc` build system. No `bc` code was changed.
552
553 * Support for Solaris SPARC and AIX were added.
554 * Minor documentations edits were performed.
555 * An option for `configure.sh` was added to disable long options if
556   `getopt_long()` is missing.
557
558 ## 2.5.0
559
560 This is a production release with new translations. No code changed.
561
562 The translations were contributed by [bugcrazy][15], and they are for
563 Portuguese, both Portugal and Brazil locales.
564
565 ## 2.4.0
566
567 This is a production release primarily aimed at improving `dc`.
568
569 * A couple of copy and paste errors in the [`dc` manual][10] were fixed.
570 * `dc` startup was optimized by making sure it didn't have to set up `bc`-only
571   things.
572 * The `bc` `&&` and `||` operators were made available to `dc` through the `M`
573   and `m` commands, respectively.
574 * `dc` macros were changed to be tail call-optimized.
575
576 The last item, tail call optimization, means that if the last thing in a macro
577 is a call to another macro, then the old macro is popped before executing the
578 new macro. This change was made to stop `dc` from consuming more and more memory
579 as macros are executed in a loop.
580
581 The `q` and `Q` commands still respect the "hidden" macros by way of recording
582 how many macros were removed by tail call optimization.
583
584 ## 2.3.2
585
586 This is a production release meant to fix warnings in the Gentoo `ebuild` by
587 making it possible to disable binary stripping. Other users do *not* need to
588 upgrade.
589
590 ## 2.3.1
591
592 This is a production release. It fixes a bug that caused `-1000000000 < -1` to
593 return `0`. This only happened with negative numbers and only if the value on
594 the left was more negative by a certain amount. That said, this bug *is* a bad
595 bug, and needs to be fixed.
596
597 **ALL USERS SHOULD UPDATE `bc`**.
598
599 ## 2.3.0
600
601 This is a production release with changes to the build system.
602
603 ## 2.2.0
604
605 This release is a production release. It only has new features and performance
606 improvements.
607
608 1.      The performance of `sqrt(x)` was improved.
609 2.      The new function `root(x, n)` was added to the extended math library to
610         calculate `n`th roots.
611 3.      The new function `cbrt(x)` was added to the extended math library to
612         calculate cube roots.
613
614 ## 2.1.3
615
616 This is a non-critical release; it just changes the build system, and in
617 non-breaking ways:
618
619 1.      Linked locale files were changed to link to their sources with a relative
620         link.
621 2.      A bug in `configure.sh` that caused long option parsing to fail under `bash`
622         was fixed.
623
624 ## 2.1.2
625
626 This release is not a critical release.
627
628 1.      A few codes were added to history.
629 2.      Multiplication was optimized a bit more.
630 3.      Addition and subtraction were both optimized a bit more.
631
632 ## 2.1.1
633
634 This release contains a fix for the test suite made for Linux from Scratch: now
635 the test suite prints `pass` when a test is passed.
636
637 Other than that, there is no change in this release, so distros and other users
638 do not need to upgrade.
639
640 ## 2.1.0
641
642 This release is a production release.
643
644 The following bugs were fixed:
645
646 1.      A `dc` bug that caused stack mishandling was fixed.
647 2.      A warning on OpenBSD was fixed.
648 3.      Bugs in `ctrl+arrow` operations in history were fixed.
649 4.      The ability to paste multiple lines in history was added.
650 5.      A `bc` bug, mishandling of array arguments to functions, was fixed.
651 6.      A crash caused by freeing the wrong pointer was fixed.
652 7.      A `dc` bug where strings, in a rare case, were mishandled in parsing was
653         fixed.
654
655 In addition, the following changes were made:
656
657 1.      Division was slightly optimized.
658 2.      An option was added to the build to disable printing of prompts.
659 3.      The special case of empty arguments is now handled. This is to prevent
660         errors in scripts that end up passing empty arguments.
661 4.      A harmless bug was fixed. This bug was that, with the pop instructions
662         (mostly) removed (see below), `bc` would leave extra values on its stack for
663         `void` functions and in a few other cases. These extra items would not
664         affect anything put on the stack and would not cause any sort of crash or
665         even buggy behavior, but they would cause `bc` to take more memory than it
666         needed.
667
668 On top of the above changes, the following optimizations were added:
669
670 1.      The need for pop instructions in `bc` was removed.
671 2.      Extra tests on every iteration of the interpreter loop were removed.
672 3.      Updating function and code pointers on every iteration of the interpreter
673         loop was changed to only updating them when necessary.
674 4.      Extra assignments to pointers were removed.
675
676 Altogether, these changes sped up the interpreter by around 2x.
677
678 ***NOTE***: This is the last release with new features because this `bc` is now
679 considered complete. From now on, only bug fixes and new translations will be
680 added to this `bc`.
681
682 ## 2.0.3
683
684 This is a production, bug-fix release.
685
686 Two bugs were fixed in this release:
687
688 1.      A rare and subtle signal handling bug was fixed.
689 2.      A misbehavior on `0` to a negative power was fixed.
690
691 The last bug bears some mentioning.
692
693 When I originally wrote power, I did not thoroughly check its error cases;
694 instead, I had it check if the first number was `0` and then if so, just return
695 `0`. However, `0` to a negative power means that `1` will be divided by `0`,
696 which is an error.
697
698 I caught this, but only after I stopped being cocky. You see, sometime later, I
699 had noticed that GNU `bc` returned an error, correctly, but I thought it was
700 wrong simply because that's not what my `bc` did. I saw it again later and had a
701 double take. I checked for real, finally, and found out that my `bc` was wrong
702 all along.
703
704 That was bad on me. But the bug was easy to fix, so it is fixed now.
705
706 There are two other things in this release:
707
708 1.      Subtraction was optimized by [Stefan Eßer][14].
709 2.      Division was also optimized, also by Stefan Eßer.
710
711 ## 2.0.2
712
713 This release contains a fix for a possible overflow in the signal handling. I
714 would be surprised if any users ran into it because it would only happen after 2
715 billion (`2^31-1`) `SIGINT`'s, but I saw it and had to fix it.
716
717 ## 2.0.1
718
719 This release contains very few things that will apply to any users.
720
721 1.      A slight bug in `dc`'s interactive mode was fixed.
722 2.      A bug in the test suite that was only triggered on NetBSD was fixed.
723 3.      **The `-P`/`--no-prompt` option** was added for users that do not want a
724         prompt.
725 4.      A `make check` target was added as an alias for `make test`.
726 5.      `dc` got its own read prompt: `?> `.
727
728 ## 2.0.0
729
730 This release is a production release.
731
732 This release is also a little different from previous releases. From here on
733 out, I do not plan on adding any more features to this `bc`; I believe that it
734 is complete. However, there may be bug fix releases in the future, if I or any
735 others manage to find bugs.
736
737 This release has only a few new features:
738
739 1.      `atan2(y, x)` was added to the extended math library as both `a2(y, x)` and
740         `atan2(y, x)`.
741 2.      Locales were fixed.
742 3.      A **POSIX shell-compatible script was added as an alternative to compiling
743         `gen/strgen.c`** on a host machine. More details about making the choice
744         between the two can be found by running `./configure.sh --help` or reading
745         the [build manual][13].
746 4.      Multiplication was optimized by using **diagonal multiplication**, rather
747         than straight brute force.
748 5.      The `locale_install.sh` script was fixed.
749 6.      `dc` was given the ability to **use the environment variable
750         `DC_ENV_ARGS`**.
751 7.      `dc` was also given the ability to **use the `-i` or `--interactive`**
752         options.
753 8.      Printing the prompt was fixed so that it did not print when it shouldn't.
754 9.      Signal handling was fixed.
755 10.     **Handling of `SIGTERM` and `SIGQUIT`** was fixed.
756 11.     The **built-in functions `maxibase()`, `maxobase()`, and `maxscale()`** (the
757         commands `T`, `U`, `V` in `dc`, respectively) were added to allow scripts to
758         query for the max allowable values of those globals.
759 12.     Some incompatibilities with POSIX were fixed.
760
761 In addition, this release is `2.0.0` for a big reason: the internal format for
762 numbers changed. They used to be a `char` array. Now, they are an array of
763 larger integers, packing more decimal digits into each integer. This has
764 delivered ***HUGE*** performance improvements, especially for multiplication,
765 division, and power.
766
767 This `bc` should now be the fastest `bc` available, but I may be wrong.
768
769 ## 1.2.8
770
771 This release contains a fix for a harmless bug (it is harmless in that it still
772 works, but it just copies extra data) in the [`locale_install.sh`][12] script.
773
774 ## 1.2.7
775
776 This version contains fixes for the build on Arch Linux.
777
778 ## 1.2.6
779
780 This release removes the use of `local` in shell scripts because it's not POSIX
781 shell-compatible, and also updates a man page that should have been updated a
782 long time ago but was missed.
783
784 ## 1.2.5
785
786 This release contains some missing locale `*.msg` files.
787
788 ## 1.2.4
789
790 This release contains a few bug fixes and new French translations.
791
792 ## 1.2.3
793
794 This release contains a fix for a bug: use of uninitialized data. Such data was
795 only used when outputting an error message, but I am striving for perfection. As
796 Michelangelo said, "Trifles make perfection, and perfection is no trifle."
797
798 ## 1.2.2
799
800 This release contains fixes for OpenBSD.
801
802 ## 1.2.1
803
804 This release contains bug fixes for some rare bugs.
805
806 ## 1.2.0
807
808 This is a production release.
809
810 There have been several changes since `1.1.0`:
811
812 1.      The build system had some changes.
813 2.      Locale support has been added. (Patches welcome for translations.)
814 3.      **The ability to turn `ibase`, `obase`, and `scale` into stacks** was added
815         with the `-g` command-line option. (See the [`bc` manual][9] for more
816         details.)
817 4.      Support for compiling on Mac OSX out of the box was added.
818 5.      The extended math library got `t(x)`, `ceil(x)`, and some aliases.
819 6.      The extended math library also got `r2d(x)` (for converting from radians to
820         degrees) and `d2r(x)` (for converting from degrees to radians). This is to
821         allow using degrees with the standard library.
822 7.      Both calculators now accept numbers in **scientific notation**. See the
823         [`bc` manual][9] and the [`dc` manual][10] for details.
824 8.      Both calculators can **output in either scientific or engineering
825         notation**. See the [`bc` manual][9] and the [`dc` manual][10] for details.
826 9.      Some inefficiencies were removed.
827 10.     Some bugs were fixed.
828 11.     Some bugs in the extended library were fixed.
829 12.     Some defects from [Coverity Scan][11] were fixed.
830
831 ## 1.1.4
832
833 This release contains a fix to the build system that allows it to build on older
834 versions of `glibc`.
835
836 ## 1.1.3
837
838 This release contains a fix for a bug in the test suite where `bc` tests and
839 `dc` tests could not be run in parallel.
840
841 ## 1.1.2
842
843 This release has a fix for a history bug; the down arrow did not work.
844
845 ## 1.1.1
846
847 This release fixes a bug in the `1.1.0` build system. The source is exactly the
848 same.
849
850 The bug that was fixed was a failure to install if no `EXECSUFFIX` was used.
851
852 ## 1.1.0
853
854 This is a production release. However, many new features were added since `1.0`.
855
856 1.      **The build system has been changed** to use a custom, POSIX
857         shell-compatible configure script ([`configure.sh`][6]) to generate a POSIX
858         make-compatible `Makefile`, which means that `bc` and `dc` now build out of
859         the box on any POSIX-compatible system.
860 2.      Out-of-memory and output errors now cause the `bc` to report the error,
861         clean up, and die, rather than just reporting and trying to continue.
862 3.      **Strings and constants are now garbage collected** when possible.
863 4.      Signal handling and checking has been made more simple and more thorough.
864 5.      `BcGlobals` was refactored into `BcVm` and `BcVm` was made global. Some
865         procedure names were changed to reflect its difference to everything else.
866 6.      Addition got a speed improvement.
867 7.      Some common code for addition and multiplication was refactored into its own
868         procedure.
869 8.      A bug was removed where `dc` could have been selected, but the internal
870         `#define` that returned `true` for a query about `dc` would not have
871         returned `true`.
872 9.      Useless calls to `bc_num_zero()` were removed.
873 10.     **History support was added.** The history support is based off of a
874         [UTF-8 aware fork][7] of [`linenoise`][8], which has been customized with
875         `bc`'s own data structures and signal handling.
876 11.     Generating C source from the math library now removes tabs from the library,
877         shrinking the size of the executable.
878 12.     The math library was shrunk.
879 13.     Error handling and reporting was improved.
880 14.     Reallocations were reduced by giving access to the request size for each
881         operation.
882 15.     **`abs()` (`b` command for `dc`) was added as a builtin.**
883 16.     Both calculators were tested on FreeBSD.
884 17.     Many obscure parse bugs were fixed.
885 18.     Markdown and man page manuals were added, and the man pages are installed by
886         `make install`.
887 19.     Executable size was reduced, though the added features probably made the
888         executable end up bigger.
889 20.     **GNU-style array references were added as a supported feature.**
890 21.     Allocations were reduced.
891 22.     **New operators were added**: `$` (`$` for `dc`), `@` (`@` for `dc`), `@=`,
892         `<<` (`H` for `dc`), `<<=`, `>>` (`h` for `dc`), and `>>=`. See the
893         [`bc` manual][9] and the [`dc` manual][10] for more details.
894 23.     **An extended math library was added.** This library contains code that
895         makes it so I can replace my desktop calculator with this `bc`. See the
896         [`bc` manual][3] for more details.
897 24.     Support for all capital letters as numbers was added.
898 25.     **Support for GNU-style void functions was added.**
899 26.     A bug fix for improper handling of function parameters was added.
900 27.     Precedence for the or (`||`) operator was changed to match GNU `bc`.
901 28.     `dc` was given an explicit negation command.
902 29.     `dc` was changed to be able to handle strings in arrays.
903
904 ## 1.1 Release Candidate 3
905
906 This release is the eighth release candidate for 1.1, though it is the third
907 release candidate meant as a general release candidate. The new code has not
908 been tested as thoroughly as it should for release.
909
910 ## 1.1 Release Candidate 2
911
912 This release is the seventh release candidate for 1.1, though it is the second
913 release candidate meant as a general release candidate. The new code has not
914 been tested as thoroughly as it should for release.
915
916 ## 1.1 FreeBSD Beta 5
917
918 This release is the sixth release candidate for 1.1, though it is the fifth
919 release candidate meant specifically to test if `bc` works on FreeBSD. The new
920 code has not been tested as thoroughly as it should for release.
921
922 ## 1.1 FreeBSD Beta 4
923
924 This release is the fifth release candidate for 1.1, though it is the fourth
925 release candidate meant specifically to test if `bc` works on FreeBSD. The new
926 code has not been tested as thoroughly as it should for release.
927
928 ## 1.1 FreeBSD Beta 3
929
930 This release is the fourth release candidate for 1.1, though it is the third
931 release candidate meant specifically to test if `bc` works on FreeBSD. The new
932 code has not been tested as thoroughly as it should for release.
933
934 ## 1.1 FreeBSD Beta 2
935
936 This release is the third release candidate for 1.1, though it is the second
937 release candidate meant specifically to test if `bc` works on FreeBSD. The new
938 code has not been tested as thoroughly as it should for release.
939
940 ## 1.1 FreeBSD Beta 1
941
942 This release is the second release candidate for 1.1, though it is meant
943 specifically to test if `bc` works on FreeBSD. The new code has not been tested as
944 thoroughly as it should for release.
945
946 ## 1.1 Release Candidate 1
947
948 This is the first release candidate for 1.1. The new code has not been tested as
949 thoroughly as it should for release.
950
951 ## 1.0
952
953 This is the first non-beta release. `bc` is ready for production use.
954
955 As such, a lot has changed since 0.5.
956
957 1.      `dc` has been added. It has been tested even more thoroughly than `bc` was
958         for `0.5`. It does not have the `!` command, and for security reasons, it
959         never will, so it is complete.
960 2.      `bc` has been more thoroughly tested. An entire section of the test suite
961         (for both programs) has been added to test for errors.
962 3.      A prompt (`>>> `) has been added for interactive mode, making it easier to
963         see inputs and outputs.
964 4.      Interrupt handling has been improved, including elimination of race
965         conditions (as much as possible).
966 5.      MinGW and [Windows Subsystem for Linux][1] support has been added (see
967         [xstatic][2] for binaries).
968 6.      Memory leaks and errors have been eliminated (as far as ASan and Valgrind
969         can tell).
970 7.      Crashes have been eliminated (as far as [afl][3] can tell).
971 8.      Karatsuba multiplication was added (and thoroughly) tested, speeding up
972         multiplication and power by orders of magnitude.
973 9.      Performance was further enhanced by using a "divmod" function to reduce
974         redundant divisions and by removing superfluous `memset()` calls.
975 10.     To switch between Karatsuba and `O(n^2)` multiplication, the config variable
976         `BC_NUM_KARATSUBA_LEN` was added. It is set to a sane default, but the
977         optimal number can be found with [`karatsuba.py`][4] (requires Python 3)
978         and then configured through `make`.
979 11.     The random math test generator script was changed to Python 3 and improved.
980         `bc` and `dc` have together been run through 30+ million random tests.
981 12.     All known math bugs have been fixed, including out of control memory
982         allocations in `sine` and `cosine` (that was actually a parse bug), certain
983         cases of infinite loop on square root, and slight inaccuracies (as much as
984         possible; see the [README][5]) in transcendental functions.
985 13.     Parsing has been fixed as much as possible.
986 14.     Test coverage was improved to 94.8%. The only paths not covered are ones
987         that happen when `malloc()` or `realloc()` fails.
988 15.     An extension to get the length of an array was added.
989 16.     The boolean not (`!`) had its precedence change to match negation.
990 17.     Data input was hardened.
991 18.     `bc` was made fully compliant with POSIX when the `-s` flag is used or
992         `POSIXLY_CORRECT` is defined.
993 19.     Error handling was improved.
994 20.     `bc` now checks that files it is given are not directories.
995
996 ## 1.0 Release Candidate 7
997
998 This is the seventh release candidate for 1.0. It fixes a few bugs in 1.0
999 Release Candidate 6.
1000
1001 ## 1.0 Release Candidate 6
1002
1003 This is the sixth release candidate for 1.0. It fixes a few bugs in 1.0 Release
1004 Candidate 5.
1005
1006 ## 1.0 Release Candidate 5
1007
1008 This is the fifth release candidate for 1.0. It fixes a few bugs in 1.0 Release
1009 Candidate 4.
1010
1011 ## 1.0 Release Candidate 4
1012
1013 This is the fourth release candidate for 1.0. It fixes a few bugs in 1.0 Release
1014 Candidate 3.
1015
1016 ## 1.0 Release Candidate 3
1017
1018 This is the third release candidate for 1.0. It fixes a few bugs in 1.0 Release
1019 Candidate 2.
1020
1021 ## 1.0 Release Candidate 2
1022
1023 This is the second release candidate for 1.0. It fixes a few bugs in 1.0 Release
1024 Candidate 1.
1025
1026 ## 1.0 Release Candidate 1
1027
1028 This is the first Release Candidate for 1.0. `bc` is complete, with `dc`, but it
1029 is not tested.
1030
1031 ## 0.5
1032
1033 This beta release completes more features, but it is still not complete nor
1034 tested as thoroughly as necessary.
1035
1036 ## 0.4.1
1037
1038 This beta release fixes a few bugs in 0.4.
1039
1040 ## 0.4
1041
1042 This is a beta release. It does not have the complete set of features, and it is
1043 not thoroughly tested.
1044
1045 [1]: https://docs.microsoft.com/en-us/windows/wsl/install-win10
1046 [2]: https://pkg.musl.cc/bc/
1047 [3]: http://lcamtuf.coredump.cx/afl/
1048 [4]: ./karatsuba.py
1049 [5]: ./README.md
1050 [6]: ./configure.sh
1051 [7]: https://github.com/rain-1/linenoise-mob
1052 [8]: https://github.com/antirez/linenoise
1053 [9]: ./manuals/bc/A.1.md
1054 [10]: ./manuals/dc/A.1.md
1055 [11]: https://scan.coverity.com/projects/gavinhoward-bc
1056 [12]: ./locale_install.sh
1057 [13]: ./manuals/build.md
1058 [14]: https://github.com/stesser
1059 [15]: https://github.com/bugcrazy
1060 [16]: ./manuals/bc/A.1.md#extended-library
1061 [17]: https://github.com/skeeto/optparse
1062 [18]: https://www.deepl.com/translator
1063 [19]: ./manuals/benchmarks.md
1064 [20]: https://github.com/apjanke/ronn-ng
1065 [21]: https://pandoc.org/