doc: changelogs draft

And add big headings, for fun and to help me tell them apart.
This commit is contained in:
Simon Michael 2021-06-29 09:54:22 -10:00
parent a7ae5a1535
commit 43a909f824
5 changed files with 485 additions and 2 deletions

View File

@ -1,5 +1,51 @@
General project-related changes and major/notable all-package releases. hledger
For package-specific changes and minor releases, see the package changelogs. _ _
_ __ _ __ ___ (_) ___ ___| |_
| '_ \| '__/ _ \| |/ _ \/ __| __|
| |_) | | | (_) | | __/ (__| |_
| .__/|_| \___// |\___|\___|\__|
|_| |__/
General changes in the hledger project (and notable all-package releases).
For package-specific changes and minor releases, see the hledger package changelogs.
# d1cd4dda0
Docs:
- The info manuals now have the proper metadata so you or your
packager can install them with `install-info` and they will appear
in info's Directory. We also provide a `dir` file making it easy
for developers to see the latest dev manuals in their info Directory.
(#1585) (Damien Cassou, Simon Michael)
Chat:
- The hledger IRC channels (in matrix syntax: #hledger:libera.chat,
#hledger-bots:libera.chat) have moved to Libera.chat, like the rest
of the FOSS universe.
- The hledger Matrix room (#hledger:matrix.org), is now on at least
equal "official" footing with the IRC channel, perhaps even a bit
more. I think Matrix is the future, with IRC sticking around as the
trusty backup technology.
- I briefly bridged the two rooms, but stopped due to current
bridge/matrix issues. I hope to try again at some point, because
having two chats (four if we consider #plaintextaccounting) is a
pain.
- I upgraded the matrix room to a newer version of the Matrix
protocol. This effectively splits it into an old (read only) room
and a new room. If you are joined to the old room, you might not
have noticed; in your matrix client, please follow the link to the
new room, ie #hledger:matrix.org.
Software
- I have dropped official support for GHC 8.0/8.2/8.4; building
hledger now requires GHC 8.6 or newer. GHC 9.0 support has been
added.
# 1.21 2021-03-10 # 1.21 2021-03-10

View File

@ -1,6 +1,219 @@
hledger
_ _ _
| (_) |__
| | | '_ \
| | | |_) |
|_|_|_.__/
Internal/api/developer-ish changes in the hledger-lib (and hledger) packages. Internal/api/developer-ish changes in the hledger-lib (and hledger) packages.
For user-visible changes, see the hledger package changelog. For user-visible changes, see the hledger package changelog.
# d1cd4dda0
- Added support for GHC 9.0. Dropped support for GHC 8.0, 8.2, 8.4;
we now require GHC 8.6 or greater.
- Add now-required lower bound on containers. (#1514)
- Added useColor, colorOption helpers usable in pure code, eg for debug output.
- Added a Show instance for AmountDisplayOpts and WideBuilder, for debug logging.
Many internal refactorings/improvements/optimisations by Stephen Morgan,
including:
- Don't infer a txn price with same-sign amounts. (#1551)
- Clean up valuation functions, and make clear which to use where. (#1560)
- Replace journalSelectingAmountFromOpts with journalApplyValuationFromOpts.
This also has the effect of allowing valuation in more reports, for
example the transactionReport.
- Refactor to eliminate use of printf.
- Remove unused String, Text utility functions.
- Replace concat(Top|Bottom)Padded with textConcat(Top|Bottom)Padded.
- Export Text.Tabular from Text.Tabular.AsciiWide, clean up import lists.
- When matching an account query against a posting, don't try to match
against the same posting twice, in cases when poriginal is Nothing.
- Create mixedAmountApplyValuationAfterSumFromOptsWith for doing any
valuation needed after summing amounts.
- Create journalApplyValuationFromOpts. This does costing and
valuation on a journal, and is meant to replace most direct calls of
costing and valuation. The exception is for reports which require
amounts to be summed before valuation is applied, for example a
historical balance report with --value=end.
- Remove unused (amount|mixedAmount|posting|transaction)ApplyCostValuation functions.
- Remove unnecessary normalisedMixedAmount; replace
normaliseMixedAmountSquashPricesForDisplay with
mixedAmountStripPrices.
- Remove `showAmounts*B` functions, replacing them entirely with
`showMixedAmount*B` functions.
- Strip prices in MultiBalanceReport and PostingsReport whenever we
know we won't need them. Knowing whether we need them is
accomplished by pulling the "show-costs" option used by the Close
command up into ReportOpts.
- Use uniform naming for stripping prices. Creates a new function
amountStripPrices, and renames removePrices to postingStripPrices.
- Add more efficient toEncoding for custom ToJSON declarations.
- Fix ledgerDateSpan, so that it considers both transaction and
posting dates. (#772)
- Move reportPeriodName to Hledger.Reports.ReportOptions, use it for
HTML and CSV output for compound balance reports.
- Simplify the JSON representation of AmountPrecision. It now uses the
same JSON representation as Maybe Word8. This means that the JSON
serialisation is now broadly compatible with that used before the
commit f6fa76bba7530af3be825445a1097ae42498b1cd, differing only in
how it handles numbers outside Word8 and that it can now produce
null for NaturalPrecision.
- A number of AccountName and Journal functions which are supposed to
produce unique sorted results now use Sets internally to be slightly
more efficient. There is also a new function journalCommodities.
- More efficiently check whether Amounts are or appear to be zero.
Comparing two Quantity (either with == or compare) does a lot of
normalisation (calling roundMax) which is unnecessary if we're
comparing to zero. Do things more directly to save work.
For `reg -f examples/10000x10000x10.journal`, this results in
- A 12% reduction in heap allocations, from 70GB to 62GB
- A 14% reduction in (profiled) time, from 79s to 70s
Results for bal -f examples/10000x10000x10.journal are of the same
order of magnitude.
- In sorting account names, perform lookups on HashSets and HashMaps,
rather than lists. This is probably not an enormous performance sink
in real situations, but it takes a huge amount of time and memory in
our benchmarks (specifically 10000x10000x10.journal). For
`bal -f examples/10000x10000x10.journal`, this results in
- A 23% reduction in heap allocation, from 27GiB to 21GiB
- A 33% reduction in (profiled) time running, from 26.5s to 17.9s
- Minor refactor, using foldMap instead of asum . map . toList.
- Do not call showAmount twice for every posting. For print -f
examples/10000x10000x10.journal, this results in a 7.7% reduction in
heap allocations, from 7.6GB to 7.1GB.
- Some efficiency improvements in register reports. Strip prices after
valuing postings in PostingsReport. Use renderRow interface for
Register report.
For `reg -f examples/10000x10000x10.journal`, this results in:
- Heap allocations decreasing by 55%, from 68.6GB to 31.2GB
- Resident memory decreasing by 75%, from 254GB to 65GB
- Total (profiled) time decreasing by 55%, from 37s to 20s
- Split showMixedAmountB into showMixedAmountB and showAmountsB, the
former being a simple wrapper around the latter. This removes the
need for the showNormalised option, as showMixedAmountB will always
showNormalised and showAmountsB will never do so.
We also strip prices from MixedAmount before displaying, if not
displaying prices.
- Change internal representation of MixedAmount to use a strict Map
instead of a list of Amounts. No longer export Mixed constructor, to
keep API clean. (If you really need it, you can import it directly
from Hledger.Data.Types). We also ensure the JSON representation of
MixedAmount doesn't change: it is stored as a normalised list of
Amounts.
This commit improves performance. Here are some indicative results:
hledger reg -f examples/10000x1000x10.journal
- Maximum residency decreases from 65MB to 60MB (8% decrease)
- Total memory in use decreases from 178MiB to 157MiB (12% decrease)
hledger reg -f examples/10000x10000x10.journal
- Maximum residency decreases from 69MB to 60MB (13% decrease)
- Total memory in use decreases from 198MiB to 153MiB (23% decrease)
hledger bal -f examples/10000x1000x10.journal
- Total heap usage decreases from 6.4GB to 6.0GB (6% decrease)
- Total memory in use decreases from 178MiB to 153MiB (14% decrease)
hledger bal -f examples/10000x10000x10.journal
- Total heap usage decreases from 7.3GB to 6.9GB (5% decrease)
- Total memory in use decreases from 196MiB to 185MiB (5% decrease)
hledger bal -M -f examples/10000x1000x10.journal
- Total heap usage decreases from 16.8GB to 10.6GB (47% decrease)
- Total time decreases from 14.3s to 12.0s (16% decrease)
hledger bal -M -f examples/10000x10000x10.journal
- Total heap usage decreases from 108GB to 48GB (56% decrease)
- Total time decreases from 62s to 41s (33% decrease)
If you never directly use the constructor Mixed or pattern match against
it then you don't need to make any changes. If you do, then do the
following:
- If you really care about the individual Amounts and never normalise
your MixedAmount (for example, just storing `Mixed amts` and then
extracting `amts` as a pattern match, then use should switch to using
[Amount]. This should just involve removing the `Mixed` constructor.
- If you ever call `mixed`, `normaliseMixedAmount`, or do any sort of
amount arithmetic (+), (-), then you should replace the constructor
`Mixed` with the function `mixed`. To extract the list of Amounts, use
the function `amounts`.
- If you ever call `normaliseMixedAmountSquashPricesForDisplay`, you can
replace that with `mixedAmountStripPrices`. (N.B. this does something
slightly different from `normaliseMixedAmountSquashPricesForDisplay`,
but I don't think there's any use case for squashing prices and then
keeping the first of the squashed prices around. If you disagree let
me know.)
- Any remaining calls to `normaliseMixedAmount` can be removed, as that
is now the identity function.
- Create a new API for MixedAmount arithmetic. This should supplant
the old interface, which relied on the Num typeclass. MixedAmount
did not have a very good Num instance. The only functions which were
defined were fromInteger, (+), and negate. Furthermore, it was not
law-abiding, as 0 + a /= a in general. Replacements for used
functions are:
0 -> nullmixedamt / mempty
(+) -> maPlus / (<>)
(-) -> maMinus
negate -> maNegate
sum -> maSum
sumStrict -> maSum
Also creates some new constructors for MixedAmount:
mixedAmount :: Amount -> MixedAmount
maAddAmount :: MixedAmount -> Amount -> MixedAmount
maAddAmounts :: MixedAmount -> [Amount] -> MixedAmount
Add Semigroup and Monoid instances for MixedAmount.
Ideally we would remove the Num instance entirely.
The only change needed have nullmixedamt/mempty substitute for 0
without problems was to not squash prices in
mixedAmount(Looks|Is)Zero. This is correct behaviour in any case.
# 1.21 2021-03-10 # 1.21 2021-03-10
- Building Hledger.Data.Journal no longer fails if the monad-extras - Building Hledger.Data.Journal no longer fails if the monad-extras

View File

@ -1,6 +1,34 @@
hledger
_
_ _(_)
| | | | |
| |_| | |
\__,_|_|
User-visible changes in hledger-ui. User-visible changes in hledger-ui.
See also the hledger changelog. See also the hledger changelog.
# d1cd4dda0
- Add support for kakoune editor; fix some issues with editor invocation.
(crocket)
- The accounts screen is a little smarter at allocating space to columns.
(Stephen Morgan)
- The --version flag shows more detail (git tag/patchlevel/commit
hash, platform/architecture). (Stephen Morgan)
- In the register screen, fix queries, which had broken in 1.21. (#1523)
- Don't write a debug.log file when toggling V. (#1556)
- Add now-required lower bound on containers. (#1514)
- Added support for GHC 9.0. Dropped support for GHC 8.0, 8.2, 8.4;
we now require GHC 8.6 or greater.
# 1.21 2021-03-10 # 1.21 2021-03-10
- Register screen: also show transactions below the depth limit, as in - Register screen: also show transactions below the depth limit, as in

View File

@ -1,6 +1,29 @@
hledger
_
__ _____| |__
\ \ /\ / / _ \ '_ \
\ V V / __/ |_) |
\_/\_/ \___|_.__/
User-visible changes in hledger-web. User-visible changes in hledger-web.
See also the hledger changelog. See also the hledger changelog.
# d1cd4dda0
- In the add form, fix a bug where extra posting rows were not added
when needed in certain web browsers. (charukiewicz)
- The --version flag shows more detail (git tag/patchlevel/commit
hash, platform/architecture). (Stephen Morgan)
- Allow yesod-form 1.7 (Felix Yan)
- Add now-required lower bound on containers. (#1514)
- Added support for GHC 9.0. Dropped support for GHC 8.0, 8.2, 8.4;
we now require GHC 8.6 or greater.
# 1.21 2021-03-10 # 1.21 2021-03-10
- Register: a date range can be selected by dragging over a region on - Register: a date range can be selected by dragging over a region on

View File

@ -1,6 +1,179 @@
hledger
_ _
___| (_)
/ __| | |
| (__| | |
\___|_|_|
User-visible changes in the hledger command line tool and library. User-visible changes in the hledger command line tool and library.
# d1cd4dda0
- performance: many internal optimisations have been applied
(the hledger-lib changelog has more detail). (Stephen Morgan)
In general, you can expect most reports to be about 20% faster.
The register report is more than 2x quicker and 4x more memory efficient.
~/src/hledger$ quickbench -w hledger-1.21,hledger
Running 5 tests 1 times with 2 executables at 2021-06-29 13:13:26 HST:
Best times:
+----------------------------------------------------++--------------+---------+
| || hledger-1.21 | hledger |
+====================================================++==============+=========+
| -f examples/10000x1000x10.journal print || 1.18 | 0.90 |
| -f examples/10000x1000x10.journal register || 12.82 | 5.95 |
| -f examples/10000x1000x10.journal balance || 1.38 | 0.86 |
| -f examples/1000x1000x10.journal balance --weekly || 0.96 | 0.78 |
| -f examples/10000x1000x10.journal balance --weekly || 13.07 | 10.79 |
+----------------------------------------------------++--------------+---------+
- register: Fix the running total when there is a report interval (broken
since 1.19) (#1568). (Stephen Morgan)
- balance reports: Fix empty cells when amounts are too wide to fit
(broken since 1.20) (#1526). (Stephen Morgan)
- csv: Fix the escaping of double quotes in CSV output (broken since
1.21). (Stephen Morgan)
- check: Rename the `autobalanced` check to
`balancedwithautoconversion`. Add the `balancednoautoconversion`
check, which requires transactions to balance without the use of
inferred transaction prices. (Explicit transaction prices are
allowed.) This check is included in --strict mode. (Stephen Morgan)
- csv: Tolerate spaces when parsing amounts from CSV. (Eric Mertens)
- json: Avoid adding unnecessary decimal places in JSON output.
Previously, our decimal values would always have 10 decimal places.
(Stephen Morgan)
- json: Simplify amount precision (asprecision) in JSON output.
It is now just the number of decimal places, rather than an object.
(Stephen Morgan)
- stats: No longer gets confused by posting dates. (#772) (Stephen Morgan)
- cli: ANSI color is now also disabled by -o/--output-file
ANSI color on stdout (not stderr) is now disabled if the
-o/--output-file option is detected (and its value is not "-").
(#1533)
- cli: debug output now respects --color/NO_COLOR/ANSI support
Debug output now selects color or monochrome in the same way as normal
output.
- cli: debug output checks for color support on stderr, not stdout
This is more accurate.
useColor is replaced by useColorOnStdout, useColorOnStderr.
- Fix the error message when all transaction amounts have the same
sign (don't show an inferred price). (#1551) (Stephen Morgan)
- fix: When performing a summary posting report without depth limiting, report exclusive balances rather than inclusive balances (#1568). (Stephen Morgan)
- cli: Make sure full account name is used (possibly including dropping) for csv output. (#1566) (Stephen Morgan)
- The --version flag shows more detail (git tag/patchlevel/commit
hash, platform/architecture). (Stephen Morgan)
- Infer prices correctly even when there are only balance assignments. (Stephen Morgan)
- perf: Change internal representation of MixedAmount to use a strict Map instead of a list of Amounts. No longer export Mixed constructor, to keep API clean (if you really need it, you can import it directly from Hledger.Data.Types). We also ensure the JSON representation of MixedAmount doesn't change: it is stored as a normalised list of Amounts. (Stephen Morgan)
This commit improves performance. Here are some indicative results.
hledger reg -f examples/10000x1000x10.journal
- Maximum residency decreases from 65MB to 60MB (8% decrease)
- Total memory in use decreases from 178MiB to 157MiB (12% decrease)
hledger reg -f examples/10000x10000x10.journal
- Maximum residency decreases from 69MB to 60MB (13% decrease)
- Total memory in use decreases from 198MiB to 153MiB (23% decrease)
hledger bal -f examples/10000x1000x10.journal
- Total heap usage decreases from 6.4GB to 6.0GB (6% decrease)
- Total memory in use decreases from 178MiB to 153MiB (14% decrease)
hledger bal -f examples/10000x10000x10.journal
- Total heap usage decreases from 7.3GB to 6.9GB (5% decrease)
- Total memory in use decreases from 196MiB to 185MiB (5% decrease)
hledger bal -M -f examples/10000x1000x10.journal
- Total heap usage decreases from 16.8GB to 10.6GB (47% decrease)
- Total time decreases from 14.3s to 12.0s (16% decrease)
hledger bal -M -f examples/10000x10000x10.journal
- Total heap usage decreases from 108GB to 48GB (56% decrease)
- Total time decreases from 62s to 41s (33% decrease)
If you never directly use the constructor Mixed or pattern match against
it then you don't need to make any changes. If you do, then do the
following:
- If you really care about the individual Amounts and never normalise
your MixedAmount (for example, just storing `Mixed amts` and then
extracting `amts` as a pattern match, then use should switch to using
[Amount]. This should just involve removing the `Mixed` constructor.
- If you ever call `mixed`, `normaliseMixedAmount`, or do any sort of
amount arithmetic (+), (-), then you should replace the constructor
`Mixed` with the function `mixed`. To extract the list of Amounts, use
the function `amounts`.
- If you ever call `normaliseMixedAmountSquashPricesForDisplay`, you can
replace that with `mixedAmountStripPrices`. (N.B. this does something
slightly different from `normaliseMixedAmountSquashPricesForDisplay`,
but I don't think there's any use case for squashing prices and then
keeping the first of the squashed prices around. If you disagree let
me know.)
- Any remaining calls to `normaliseMixedAmount` can be removed, as that
is now the identity function.
- When displaying amounts on a single line, always display at least one amount, even if that would exceed the requested maximum width. Addresses #1526. (Stephen Morgan)
- timeclock: print shows timeclock amounts with just 2 decimals, like pre-1.21 (#1527)
- Do not round Decimal before applying JSON representation if existing representation is small enough. (Stephen Morgan)
Previously the JSON representation of Decimal was rounded to 10 points
of precision before serialising. This sometimes results in an
unnecessary increase of precision.
- bal: keep csv column and row labels consistently lower case
It was reported on #hledger that bal -O csv capitalises "account"
differently for single and multi-period reports. All lower case seems
to be the most common, so I have dropped the capitalisation. Also
the trailing colon from --transpose's "total:".
- Simplify the JSON representation of AmountPrecision. (Stephen Morgan)
It now uses the same JSON representation as Maybe Word8. This means that
the JSON serialisation is now broadly compatible with that used before the
commit f6fa76bba7530af3be825445a1097ae42498b1cd, differing only in
how it handles numbers outside Word8 and that it can now produce null
for NaturalPrecision.
- lib: Properly escape quotes in csv output. (Stephen Morgan)
- Do not call showAmount twice for every posting. (Stephen Morgan)
For print -f examples/10000x10000x10.journal, this results in
- A 7.7% reduction in heap allocations, from 7.6GB to 7.1GB.
- Some efficiency improvements in register reports. (Stephen Morgan)
Strip prices after valuing postings in PostingsReport.
Use renderRow interface for Register report.
For reg -f examples/10000x10000x10.journal, this results in:
- Heap allocations decreasing by 55%, from 68.6GB to 31.2GB
- Resident memory decreasing by 75%, from 254GB to 65GB
- Total (profiled) time decreasing by 55%, from 37s to 20s
- Clean up some references to old man pages. (Felix Yan)
- Add now-required lower bound on containers. (#1514)
- Added support for GHC 9.0. Dropped support for GHC 8.0, 8.2, 8.4;
we now require GHC 8.6 or greater.
# 1.21 2021-03-10 # 1.21 2021-03-10
## general ## general