Revive Float+Real in no_std thanks to libm#99
Revive Float+Real in no_std thanks to libm#99bors[bot] merged 19 commits intorust-num:masterfrom yoanlcq:libm_no_std
Conversation
|
That should do; hopefully I didn't forget anything :) |
|
CI fails because of overflow issues with |
|
Thanks for doing this - it looks great! But yes, the |
|
Hi, any progress on this? cc @cuviper |
142: Make libm optional r=Ogeon a=Ogeon I decided to do this to avoid having it as an unused dependency and also to hopefully be compatible with a future release of `num_traits`, where they seem to be planning the same kind of construct, judging by rust-num/num-traits#99. A transition to using `num_trait` for both cases will hopefully be seamless for the users after this. I think this also fixes #116. Co-authored-by: Erik Hedvall <erikwhedvall@gmail.com>
|
I'd like to see this move forward too, as there's quite a few crates that I'd like to send PRs to for no_std support that depend on this. |
|
I think it's pretty much ready now; the only problem seems to be that (Edit: For information, I'm not really planning to investigate these errors from |
|
Awesome, thanks for doing the work! |
I'm OK with that -- this is new functionality for |
|
That should do, I hope :) Sorry for the delay. |
|
What's the status of this? This would unblock a lot of PRs / releases for other crates. |
|
It should be ready for merge, so I think we are waiting for the maintainers |
Needed for some additional methods and correct overflow behavior.
|
I rebased and tweaked a few things, e.g. |
|
The single guard in Anyway, I couldn't find anything "wrong" in these last changes. I would pretty confidently say "ship it"! |
I think because you had the trait itself unguarded at first, only the impl depending on std/libm. So all those doctests had to be guarded whether there was any useful type available to test. bors r+ |
99: Revive Float+Real in no_std thanks to libm r=cuviper a=yoanlcq Greetings, This is a hopeful fix for #75. Basically: Add `libm` as an optional dependency, and handle three possible cases depending on which features are enabled: - std and libm: std is used; - std and not libm: std is used; - libm and not std: libm and FloatCore are used. It was briefly mentioned that `libm` wasn't ready yet, but this was months ago, and I believe it is better not to wait for too long. If anything, bugs in `libm` should be fixed in `libm`; `num-traits` is only delegating its implementations to it; not to mention that the more `libm` is used, the likelier issues are to be found and hopefully fixed. Thanks in advance! Co-authored-by: Yoan Lecoq <yoanlecoq.io@gmail.com> Co-authored-by: Josh Stone <cuviper@gmail.com>
Build succeeded |
62: Bump num-traits from 0.2.8 to 0.2.9 r=sopium a=dependabot-preview[bot] Bumps [num-traits](https://github.com/rust-num/num-traits) from 0.2.8 to 0.2.9. <details> <summary>Changelog</summary> *Sourced from [num-traits's changelog](https://github.com/rust-num/num-traits/blob/master/RELEASES.md).* > # Release 0.2.9 (2019-11-12) > > - [A new optional `libm` dependency][99] enables the `Float` and `Real` traits > in `no_std` builds. > - [The new `clamp_min` and `clamp_max`][122] limit minimum and maximum values > while preserving input `NAN`s. > - [Fixed a panic in floating point `from_str_radix` on invalid signs][126]. > - Miscellaneous documentation updates. > > **Contributors**: [@​cuviper](https://github.com/cuviper), [@​dingelish](https://github.com/dingelish), [@​HeroicKatora](https://github.com/HeroicKatora), [@​jturner314](https://github.com/jturner314), [@​ocstl](https://github.com/ocstl), > [@​Shnatsel](https://github.com/Shnatsel), [@​termoshtt](https://github.com/termoshtt), [@​waywardmonkeys](https://github.com/waywardmonkeys), [@​yoanlcq](https://github.com/yoanlcq) > > [99]: [rust-num/num-traits#99](https://github-redirect.dependabot.com/rust-num/num-traits/pull/99) > [122]: [rust-num/num-traits#122](https://github-redirect.dependabot.com/rust-num/num-traits/pull/122) > [126]: [rust-num/num-traits#126](https://github-redirect.dependabot.com/rust-num/num-traits/pull/126) </details> <details> <summary>Commits</summary> - [`8eb83e2`](rust-num/num-traits@8eb83e2) Merge [#142](https://github-redirect.dependabot.com/rust-num/num-traits/issues/142) - [`b61498a`](rust-num/num-traits@b61498a) Release 0.2.9 - [`6408853`](rust-num/num-traits@6408853) Remove unused #[inline] attributes - [`4cbc27d`](rust-num/num-traits@4cbc27d) Merge [#137](https://github-redirect.dependabot.com/rust-num/num-traits/issues/137) - [`da66427`](rust-num/num-traits@da66427) Merge [#140](https://github-redirect.dependabot.com/rust-num/num-traits/issues/140) - [`da19eaf`](rust-num/num-traits@da19eaf) Compatible with cargo --remap-path-prefix - [`fdb4181`](rust-num/num-traits@fdb4181) ToPrimitive: document when `to_` methods can return `None` - [`27e3f85`](rust-num/num-traits@27e3f85) NumCast: document when `from` can return `None` - [`16cdce3`](rust-num/num-traits@16cdce3) FromPrimitive: fix some comments - [`2f0cffd`](rust-num/num-traits@2f0cffd) Merge [#99](https://github-redirect.dependabot.com/rust-num/num-traits/issues/99) - Additional commits viewable in [compare view](rust-num/num-traits@num-traits-0.2.8...num-traits-0.2.9) </details> <br /> [](https://dependabot.com/compatibility-score.html?dependency-name=num-traits&package-manager=cargo&previous-version=0.2.8&new-version=0.2.9) Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`. [//]: # (dependabot-automerge-start) [//]: # (dependabot-automerge-end) --- <details> <summary>Dependabot commands and options</summary> <br /> You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot merge` will merge this PR after your CI passes on it - `@dependabot squash and merge` will squash and merge this PR after your CI passes on it - `@dependabot cancel merge` will cancel a previously requested merge and block automerging - `@dependabot reopen` will reopen this PR if it is closed - `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually - `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself) - `@dependabot use these labels` will set the current labels as the default for future PRs for this repo and language - `@dependabot use these reviewers` will set the current reviewers as the default for future PRs for this repo and language - `@dependabot use these assignees` will set the current assignees as the default for future PRs for this repo and language - `@dependabot use this milestone` will set the current milestone as the default for future PRs for this repo and language - `@dependabot badge me` will comment on this PR with code to add a "Dependabot enabled" badge to your readme Additionally, you can set the following in your Dependabot [dashboard](https://app.dependabot.com): - Update frequency (including time of day and day of week) - Pull request limits (per update run and/or open at any time) - Out-of-range updates (receive only lockfile updates, if desired) - Security updates (receive only security updates, if desired) </details> Co-authored-by: dependabot-preview[bot] <27856297+dependabot-preview[bot]@users.noreply.github.com>
62: Bump num-traits from 0.2.8 to 0.2.9 r=sopium a=dependabot-preview[bot] Bumps [num-traits](https://github.com/rust-num/num-traits) from 0.2.8 to 0.2.9. <details> <summary>Changelog</summary> *Sourced from [num-traits's changelog](https://github.com/rust-num/num-traits/blob/master/RELEASES.md).* > # Release 0.2.9 (2019-11-12) > > - [A new optional `libm` dependency][99] enables the `Float` and `Real` traits > in `no_std` builds. > - [The new `clamp_min` and `clamp_max`][122] limit minimum and maximum values > while preserving input `NAN`s. > - [Fixed a panic in floating point `from_str_radix` on invalid signs][126]. > - Miscellaneous documentation updates. > > **Contributors**: [@​cuviper](https://github.com/cuviper), [@​dingelish](https://github.com/dingelish), [@​HeroicKatora](https://github.com/HeroicKatora), [@​jturner314](https://github.com/jturner314), [@​ocstl](https://github.com/ocstl), > [@​Shnatsel](https://github.com/Shnatsel), [@​termoshtt](https://github.com/termoshtt), [@​waywardmonkeys](https://github.com/waywardmonkeys), [@​yoanlcq](https://github.com/yoanlcq) > > [99]: [rust-num/num-traits#99](https://github-redirect.dependabot.com/rust-num/num-traits/pull/99) > [122]: [rust-num/num-traits#122](https://github-redirect.dependabot.com/rust-num/num-traits/pull/122) > [126]: [rust-num/num-traits#126](https://github-redirect.dependabot.com/rust-num/num-traits/pull/126) </details> <details> <summary>Commits</summary> - [`8eb83e2`](rust-num/num-traits@8eb83e2) Merge [#142](https://github-redirect.dependabot.com/rust-num/num-traits/issues/142) - [`b61498a`](rust-num/num-traits@b61498a) Release 0.2.9 - [`6408853`](rust-num/num-traits@6408853) Remove unused #[inline] attributes - [`4cbc27d`](rust-num/num-traits@4cbc27d) Merge [#137](https://github-redirect.dependabot.com/rust-num/num-traits/issues/137) - [`da66427`](rust-num/num-traits@da66427) Merge [#140](https://github-redirect.dependabot.com/rust-num/num-traits/issues/140) - [`da19eaf`](rust-num/num-traits@da19eaf) Compatible with cargo --remap-path-prefix - [`fdb4181`](rust-num/num-traits@fdb4181) ToPrimitive: document when `to_` methods can return `None` - [`27e3f85`](rust-num/num-traits@27e3f85) NumCast: document when `from` can return `None` - [`16cdce3`](rust-num/num-traits@16cdce3) FromPrimitive: fix some comments - [`2f0cffd`](rust-num/num-traits@2f0cffd) Merge [#99](https://github-redirect.dependabot.com/rust-num/num-traits/issues/99) - Additional commits viewable in [compare view](rust-num/num-traits@num-traits-0.2.8...num-traits-0.2.9) </details> <br /> [](https://dependabot.com/compatibility-score.html?dependency-name=num-traits&package-manager=cargo&previous-version=0.2.8&new-version=0.2.9) Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`. [//]: # (dependabot-automerge-start) [//]: # (dependabot-automerge-end) --- <details> <summary>Dependabot commands and options</summary> <br /> You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot merge` will merge this PR after your CI passes on it - `@dependabot squash and merge` will squash and merge this PR after your CI passes on it - `@dependabot cancel merge` will cancel a previously requested merge and block automerging - `@dependabot reopen` will reopen this PR if it is closed - `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually - `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself) - `@dependabot use these labels` will set the current labels as the default for future PRs for this repo and language - `@dependabot use these reviewers` will set the current reviewers as the default for future PRs for this repo and language - `@dependabot use these assignees` will set the current assignees as the default for future PRs for this repo and language - `@dependabot use this milestone` will set the current milestone as the default for future PRs for this repo and language - `@dependabot badge me` will comment on this PR with code to add a "Dependabot enabled" badge to your readme Additionally, you can set the following in your Dependabot [dashboard](https://app.dependabot.com): - Update frequency (including time of day and day of week) - Pull request limits (per update run and/or open at any time) - Out-of-range updates (receive only lockfile updates, if desired) - Security updates (receive only security updates, if desired) </details> Co-authored-by: dependabot-preview[bot] <27856297+dependabot-preview[bot]@users.noreply.github.com>
25: Bump num-traits from 0.2.8 to 0.2.9 r=tommilligan a=dependabot-preview[bot] Bumps [num-traits](https://github.com/rust-num/num-traits) from 0.2.8 to 0.2.9. <details> <summary>Changelog</summary> *Sourced from [num-traits's changelog](https://github.com/rust-num/num-traits/blob/master/RELEASES.md).* > # Release 0.2.9 (2019-11-12) > > - [A new optional `libm` dependency][99] enables the `Float` and `Real` traits > in `no_std` builds. > - [The new `clamp_min` and `clamp_max`][122] limit minimum and maximum values > while preserving input `NAN`s. > - [Fixed a panic in floating point `from_str_radix` on invalid signs][126]. > - Miscellaneous documentation updates. > > **Contributors**: [@​cuviper](https://github.com/cuviper), [@​dingelish](https://github.com/dingelish), [@​HeroicKatora](https://github.com/HeroicKatora), [@​jturner314](https://github.com/jturner314), [@​ocstl](https://github.com/ocstl), > [@​Shnatsel](https://github.com/Shnatsel), [@​termoshtt](https://github.com/termoshtt), [@​waywardmonkeys](https://github.com/waywardmonkeys), [@​yoanlcq](https://github.com/yoanlcq) > > [99]: [rust-num/num-traits#99](https://github-redirect.dependabot.com/rust-num/num-traits/pull/99) > [122]: [rust-num/num-traits#122](https://github-redirect.dependabot.com/rust-num/num-traits/pull/122) > [126]: [rust-num/num-traits#126](https://github-redirect.dependabot.com/rust-num/num-traits/pull/126) </details> <details> <summary>Commits</summary> - [`8eb83e2`](rust-num/num-traits@8eb83e2) Merge [#142](https://github-redirect.dependabot.com/rust-num/num-traits/issues/142) - [`b61498a`](rust-num/num-traits@b61498a) Release 0.2.9 - [`6408853`](rust-num/num-traits@6408853) Remove unused #[inline] attributes - [`4cbc27d`](rust-num/num-traits@4cbc27d) Merge [#137](https://github-redirect.dependabot.com/rust-num/num-traits/issues/137) - [`da66427`](rust-num/num-traits@da66427) Merge [#140](https://github-redirect.dependabot.com/rust-num/num-traits/issues/140) - [`da19eaf`](rust-num/num-traits@da19eaf) Compatible with cargo --remap-path-prefix - [`fdb4181`](rust-num/num-traits@fdb4181) ToPrimitive: document when `to_` methods can return `None` - [`27e3f85`](rust-num/num-traits@27e3f85) NumCast: document when `from` can return `None` - [`16cdce3`](rust-num/num-traits@16cdce3) FromPrimitive: fix some comments - [`2f0cffd`](rust-num/num-traits@2f0cffd) Merge [#99](https://github-redirect.dependabot.com/rust-num/num-traits/issues/99) - Additional commits viewable in [compare view](rust-num/num-traits@num-traits-0.2.8...num-traits-0.2.9) </details> <br /> [](https://dependabot.com/compatibility-score.html?dependency-name=num-traits&package-manager=cargo&previous-version=0.2.8&new-version=0.2.9) Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`. [//]: # (dependabot-automerge-start) [//]: # (dependabot-automerge-end) --- <details> <summary>Dependabot commands and options</summary> <br /> You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot merge` will merge this PR after your CI passes on it - `@dependabot squash and merge` will squash and merge this PR after your CI passes on it - `@dependabot cancel merge` will cancel a previously requested merge and block automerging - `@dependabot reopen` will reopen this PR if it is closed - `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually - `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself) - `@dependabot use these labels` will set the current labels as the default for future PRs for this repo and language - `@dependabot use these reviewers` will set the current reviewers as the default for future PRs for this repo and language - `@dependabot use these assignees` will set the current assignees as the default for future PRs for this repo and language - `@dependabot use this milestone` will set the current milestone as the default for future PRs for this repo and language - `@dependabot badge me` will comment on this PR with code to add a "Dependabot enabled" badge to your readme Additionally, you can set the following in your Dependabot [dashboard](https://app.dependabot.com): - Update frequency (including time of day and day of week) - Pull request limits (per update run and/or open at any time) - Automerge options (never/patch/minor, and dev/runtime dependencies) - Out-of-range updates (receive only lockfile updates, if desired) - Security updates (receive only security updates, if desired) </details> Co-authored-by: dependabot-preview[bot] <27856297+dependabot-preview[bot]@users.noreply.github.com>
Greetings,
This is a hopeful fix for #75.
Basically: Add
libmas an optional dependency, and handle three possible cases depending on which features are enabled:It was briefly mentioned that
libmwasn't ready yet, but this was months ago, and I believe it is better not to wait for too long.If anything, bugs in
libmshould be fixed inlibm;num-traitsis only delegating its implementations to it; not to mention that the morelibmis used, the likelier issues are to be found and hopefully fixed.Thanks in advance!