Releases: r-lib/bit64
4.8.0
What's Changed
- mark NEWS as markdown-formatted by @MichaelChirico in #132
- Set up pkgdown by @MichaelChirico in #134
- Remove .onAttach hook by @MichaelChirico in #133
- migrate ANNOUNCEMENT files into old NEWS files by @MichaelChirico in #136
- Remove if(FALSE) regions by @MichaelChirico in #138
- Coding style upkeep by @MichaelChirico in #139
- Cleaner includes (iwyu) by @MichaelChirico in #140
- Activate undesirable_function_linter and undesirable_operator_linter by @MichaelChirico in #141
- Enable brace-related linters: brace_linter, paren_body_linter by @MichaelChirico in #143
- Enable line_length_linter enforcing 120-width lines by @MichaelChirico in #144
- Document that range just matches integer in a sensible way by @MichaelChirico in #145
- Move bit to Imports by @MichaelChirico in #146
- Unexport unused s3 methods by @MichaelChirico in #147
- Un-export special primitives' S3 methods completely by @MichaelChirico in #148
- Restore S3method directives for primitives by @MichaelChirico in #151
- Begin deprecation of `as.integer64.bitstring by @MichaelChirico in #153
- Add some coverage tests targeting sort64.c by @MichaelChirico in #155
- Correct Rboolean usage --> int by @MichaelChirico in #157
- shellorder, shellsortorder tests, and tests of ties by @MichaelChirico in #158
- Add an escape valve for false positive warnings of direct calls to exported S3 methods by @MichaelChirico in #160
- Use {patrick} parameterized tests to reduce repetition by @MichaelChirico in #161
- Rapidly expand the number of tests on similar methods by @MichaelChirico in #162
- Tests of is.sorted, sortfin by @MichaelChirico in #163
- Activate commas_linter by @MichaelChirico in #165
- More coverage tests of order* in sortuse64.R by @MichaelChirico in #169
- ns-qualify for methods-free build by @MichaelChirico in #172
- Add "Supported By Posit" badge to bit64 website by @jeroenjanssens in #183
- median(NA_integer64_) returns now NA_integer64_ by @ben-schwen in #186
- fixed max(), min(), range() for multiple inputs if one is non-finite by @hcirellu in #181
- support zero length input in match.integer64 by @hcirellu in #191
- Remove CI from 3.6.0, add one for 3.4.0 instead by @MichaelChirico in #196
- Bump R requirement to 3.5.0 by @MichaelChirico in #197
- Don't warn for calling table.integer64, which lacks a generic by @MichaelChirico in #198
- as.integer64.integer64 now strips all atributes by @hcirellu in #194
- Use testthat native R version skip by @MichaelChirico in #200
- Further robustness to false positives when checking direct method calls by @MichaelChirico in #201
- Fix spurious warning in log(empty) by @MichaelChirico in #203
- Use current codecov GHA by @MichaelChirico in #204
- Fix sortfin segfault by @MichaelChirico in #205
- Fix orderfin segfault by @MichaelChirico in #206
- Fix ordertab() segfault when nunique is incorrectly supplied by @MichaelChirico in #207
- Improve quality of failure on ancient R by @MichaelChirico in #210
- replace patrick:: too by @MichaelChirico in #212
- re-roxygenize under 7.3.3 by @MichaelChirico in #213
- Fix failed link to external topics with '%' by @MichaelChirico in #214
- Overhaul seq() to be more full-featured and less buggy by @MichaelChirico in #202
- Some coverage tests by @MichaelChirico in #215
- Switch to = assignment at 0 or 1 level of indentation in one source file by @MichaelChirico in #216
- Also use '=' for setter assignments in R/integer64.R by @MichaelChirico in #217
- New coercion methods by @hcirellu in #192
- Use '=' for assignment in two more source files by @MichaelChirico in #218
- Coverage tests for sort64 by @MichaelChirico in #219
- Coverage tests for sortuse64 by @MichaelChirico in #221
- Add some coverage tests of highlevel64.R by @MichaelChirico in #222
- More coverage tests for sort64 by @MichaelChirico in #223
- Starting a script recording the revdep testing process by @MichaelChirico in #225
- Out of range warning for as.integer64.character and hex support by @hcirellu in #228
- Exit early for trivial sort cases to avoid segfault by @MichaelChirico in #229
- Use = for assignment in cache.R by @MichaelChirico in #230
- Add na.last in sortcache, sortordercache and ordercache by @hcirellu in #227
- Add matrix, array and matrix multiplication for integer64 by @hcirellu in #195
- New test for fixed out-of-range coercion warning by @MichaelChirico in #231
- remove
basefrom S3method call in NAMESPACE by @hcirellu in #235 - Allow leading/trailing whitespace in char->i64 conversion by @MichaelChirico in #237
- Correctly coerce 2^63 (double) to NA by @dipterix in #20
- Use = more in highlevel64.R by @MichaelChirico in #239
- Use = more in highlevel64.R (part II) by @MichaelChirico in #240
- Use = more in highlevel64.R (part III) by @MichaelChirico in #241
- Use = more in highlevel64 (part IV) by @MichaelChirico in #242
- Drop wontfix TODO by @MichaelChirico in #243
- Remove WONTFIX TODO around log10() numerical accuracy by @MichaelChirico in #244
- Add a skip for r-universe issue by @MichaelChirico in #245
- Add @hcirellu as 'ctb' by @MichaelChirico in #246
- Add a generic for table by @hcirellu in #209
- consistent use of Rboolean by @hcirellu in #251
- R consistent integer division and modulo operation by @hcirellu in #250
- Remove duplicate definition of [.integer64 by @MichaelChirico in https://github.com//pull/258
- Style changes to benchmarking code by @MichaelChirico in #259
- add factor and ordered for integer64 by @hcirellu in #255
- remove CMD check NOTE about missing list.names by @hcirellu in #261
- change extraction and replace methods to be more consistent to base R by @hcirellu in #193
- add set operations by @hcirellu in #238
- fix intdiv and modulo by @hcirellu in #263
- move ops methods to ops64.R by @hcirellu in #266
- Use = in ops64.R by @MichaelChirico in #268
- Infix spacing style in test-ops64 by @MichaelChirico in #269
- Remove xor.integer64 by @MichaelChirico in #270
- remove x,y arguments no longer used in ?ops64 by @MichaelChirico in #271
- no warning for empty
xortablein%in%by @hcirellu in #265 - ops64 dispatch with both arguments having classes by @hcirellu in #249
- Treat '...' like missing() in AST by @hcirellu in #276
- Use setOldClass to register difftime for S4 by @MichaelChirico in #279
- Un-export unused generics by @MichaelChirico in #281
- Overwrite argument in factor() to avoid re-sampling by @MichaelChirico in #277
- Don't set sys.call to NULL in table(NULL) by @MichaelChirico in #282
- Update revdep script by @MichaelChirico in #28...
bit64 4.6.0-1
bit64 4.6.0-1
NOTICE OF PLANNED BREAKING CHANGES
- {bit64} exports many S3 methods directly. Calling S3 methods directly is generally bad form; we should rely on the S3 dispatch system for this. Needing to export an S3 method is usually indicative of some deep issue that's otherwise hard to work around.
I plan to un-export most if not all S3 methods in future versions. In this release, there will be no change in behavior besides this notice in the NEWS. Going forward, I see two types of S3 exports: (1) exports that have no discoverable direct usage (that is, a global GitHub search, which includes the CRAN mirror, turned up no R code calling them directly, except perhaps in ::: form, which would be unaffected by un-export); and (2) exports that are observed to be called directly by some number of downstreams. With the former, I am more comfortable un-exporting more aggressively; with the latter, I will take a more gradual approach.
Here are the S3 methods that are currently exported, for which I found no record of them being called directly:
-.integer64, :.default, :.integer64, !.integer64, !=.integer64, [.integer64, [[.integer64, [[<-.integer64, *.integer64, /.integer64, &.integer64, %/%.integer64, %%.integer64, %in%.default, %in%.integer64, ^.integer64, +.integer64, <.integer64, <=.integer64, ==.integer64, >.integer64, >=.integer64, |.integer64, all.equal.integer64, as.bitstring.integer64, as.integer64.factor, as.integer64.integer64, as.integer64.NULL, as.list.integer64, as.logical.integer64, cbind.integer64, ceiling.integer64, cummax.integer64, cummin.integer64, cumprod.integer64, cumsum.integer64, diff.integer64, duplicated.integer64, floor.integer64, hashdup.cache_integer64, hashfin.cache_integer64, hashfun.integer64, hashmap.integer64, hashmaptab.integer64, hashmapuni.integer64, hashmapupo.integer64, hashpos.cache_integer64, hashrev.cache_integer64, hashrin.cache_integer64, hashtab.cache_integer64, hashuni.cache_integer64, hashupo.cache_integer64, is.double.default, is.double.integer64, is.finite.integer64, is.infinite.integer64, is.nan.integer64, is.sorted.integer64, is.vector.integer64, keypos.integer64, length<-.integer64, log10.integer64, log2.integer64, match.default, match.integer64, mean.integer64, median.integer64, mergeorder.integer64, mergesort.integer64, mergesortorder.integer64, na.count.integer64, nties.integer64, nunique.integer64, nvalid.integer64, order.default, order.integer64, orderdup.integer64, orderfin.integer64, orderkey.integer64, ordernut.integer64, orderpos.integer64, orderqtl.integer64, orderrnk.integer64, ordertab.integer64, ordertie.integer64, orderuni.integer64, orderupo.integer64, prank.integer64, print.bitstring, prod.integer64, qtile.integer64, quantile.integer64, quickorder.integer64, quicksort.integer64, quicksortorder.integer64, radixorder.integer64, radixsort.integer64, radixsortorder.integer64, ramorder.integer64, ramsort.integer64, ramsortorder.integer64, range.integer64, rank.default, rbind.integer64, round.integer64, scale.integer64, shellorder.integer64, shellsort.integer64, shellsortorder.integer64, sign.integer64, signif.integer64, sort.integer64, sortfin.integer64, sortnut.integer64, sortorderdup.integer64, sortorderkey.integer64, sortorderpos.integer64, sortorderrnk.integer64, sortordertab.integer64, sortordertie.integer64, sortorderuni.integer64, sortorderupo.integer64, sortql.integer64, sorttab.integer64, sortuni.integer64, sqrt.integer64, summary.integer64, table.integer64, tiepos.integer64, trunc.integer64, unipos.integer64
Here are the S3 methods that are currently exported for which I do find record of them being called directly:
abs.integer64, as.character.integer64, as.data.frame.integer64, as.double.integer64, as.integer.integer64, as.integer64.bitstring, as.integer64.character, as.integer64.double, as.integer64.integer, as.integer64.logical, c.integer64, format.integer64, identical.integer64, is.na.integer64, lim.integer64, max.integer64, min.integer64, print.integer64, rank.integer64, seq.integer64, str.integer64, sum.integer64, unique.integer64
In the next release (provisionally, 4.7.0), I will add a warning() to any S3 method in the former classification, while nothing will change for the latter classification. I may reach out to authors observed to call the methods directly.
In the subsequent release (provisionally, 4.8.0), I will un-export any S3 method in the former classification, and add a warning() to any S3 method in the latter classification.
In the sub-subsequent release (provisionally, 4.9.0), I will un-export any S3 method in the latter classification.
Please reach out (e.g., the GitHub log for #76) if you have any concerns about this plan.
- {bit64} lists {bit} as
Depends:. IMO this form of dependency should be deprecated by R now thatImports:is widely available and well-supported for many years.
In the next release (provisionally, 4.7.0), I will move bit to Imports. The practical implication is that currently, library(bit64) will make {bit} objects like is.bit() available for use without namespace-qualification. This practice makes code harder to read and maintain.
Users relying on this in scripts can (1) write library(bit) to attach {bit} explicitly or (2) namespace-qualify all {bit} calls with bit::.
Package authors relying on this can (1) add import(bit) to make the full {bit} namespace available or (2) namespace-qualify all {bit} calls with bit::; adding {bit} to Imports: or Suggests: will also be necessary.
I will reach out to CRAN authors with any required changes. Depending on the impact size, I might make this transition more gradual (e.g. starting by re-exporting some or all {bit} functions from {bit64}, with warning, before un-exporting them in a subsequent release).
NEW FEATURES
- Implemented S3 methods for
rowSums()andcolSums(). Importantly they handleNAvalues correctly, #38. Thanks @vlulla for the request. Note that these are implemented as wrappers toapply()calls, so they may not be as efficient. PRs welcome for implementing the efficient equivalents.
Note that by necessity, this grows the set of base exports overwritten to include rowSums() and colSums(), which are exported as S3 generics dispatching to base::rowSums() and base::colSums() by default.
-
Partially powering this is a new
aperm()method for integer64 which allowsapply()to work as intended. Usingapply()directly may still strip the integer64 class; that may be supported later (see #87). -
is.na()is supported for long vector input (more than2^31elements), #30. Thanks @ilia-kats for the request. Long vector support will be added on an as-needed basis as I don't have a great machine for testing these features -- PRs welcome!
BUG FIXES
-
all.equal.integer64()gets the same fix for vectorscale=to work as intended thatall.equal.numeric()got in R 4.1.3, #23. -
Made edits to
match()to handleis.integer64(table)better for older versions of R, including a newmtfrm()method for integer64 objects in R>=4.2.0, #85 and #111.
NOTES
- After creating, developing, and maintaining {bit64} for about 13 years, Jens Oehlschlägel has decided to step down as maintainer of the package. Michael Chirico will take over in this duty. Thank you Jens for creating such a wonderful & important part of the R ecosystem!
I don't have any major plans for new features, and mostly hope to keep the package running and up to date. Contributors most welcome! I am also trying to freshen up the code base to make contribution easier.
- The R version dependency has increased from 3.0.1 (May 2013) to 3.4.0 (April 2017). We plan to keep roughly the same R dependency as {data.table}, i.e., as old as possibly for as long as possible, with some bias towards gradually bringing in new R features to reduce the maintenance overhead of a growing nest of workarounds to keep the package "fresh" for users of the latest R versions.
Required package {bit} already requires R 3.4.0, so the old 3.0.1 requirement was effectively impossible anyway.
- Default packages {methods}, {stats}, and {utils} are now
Imports:, notDepends:, dependencies.Depends:is an out-dated mode of dependency in R. This will only affect the small audience of users that run R withR_DEFAULT_PACKAGES=NULL(or some other subset excluding some of these three), and who are relying (perhaps implicitly) on {bit64} being responsible for attaching those packages.
It is my intention to move {bit} from Depends: to Imports: as well, but this migration will be done more gingerly -- it is more conceivable that this will constitute a breaking change for some use cases, therefore it will be done in phases. Nothing is done in this release, but here is your earliest warning that from the next release, it will be a warning to rely on {bit64} to attach {bit} functions for you.
-
Package documentation is now managed with {roxygen2}, #61. I tried to retain everything in the original documentation, but the diff required to do so was quite unmanageable (5,000+ lines), so please alert me if anything looks amiss. Most importantly, I ensured the NAMESPACE remains unchanged.
-
The signature of
identical.integer64()losesextptr.as.ref=, which is unavailable for R<4.2.0, but gains...to allow this argument in newer versions, #37. This retains the transparency of having all arguments named in the signature (and thus in?identical.integer64as well as available for tab-completion) while also retai...