fast_float VS draft

Compare fast_float vs draft and see what are their differences.

fast_float

Fast and exact implementation of the C++ from_chars functions for number types: 4x to 10x faster than strtod, part of GCC 12 and WebKit/Safari (by fastfloat)
Our great sponsors
  • InfluxDB - Power Real-Time Data Analytics at Scale
  • WorkOS - The modern identity platform for B2B SaaS
  • SaaSHub - Software Alternatives and Reviews
fast_float draft
15 24
1,269 5,523
2.0% 1.0%
8.7 9.6
about 1 month ago 2 days ago
C++ TeX
Apache License 2.0 -
The number of mentions indicates the total number of mentions that we've tracked plus the number of user suggested alternatives.
Stars - the number of stars that a project has on GitHub. Growth - month over month growth in stars.
Activity is a relative number indicating how actively a project is being developed. Recent commits have higher weight than older ones.
For example, an activity of 9.0 indicates that a project is amongst the top 10% of the most actively developed projects that we are tracking.

fast_float

Posts with mentions or reviews of fast_float. We have used some of these posts to build our list of alternatives and similar projects. The last one was on 2023-04-03.
  • Parquet: More than just “Turbo CSV”
    7 projects | news.ycombinator.com | 3 Apr 2023
    > Google put in significant engineering effort into "Ryu", a parsing library for double-precision floating point numbers: https://github.com/ulfjack/ryu

    It's not a parsing library, but a printing one, i.e., double -> string. https://github.com/fastfloat/fast_float is a parsing library, i.e., string -> double, not by Google though, but was indeed motivated by parsing JSON fast https://lemire.me/blog/2020/03/10/fast-float-parsing-in-prac...

  • What do number conversions (from string) cost?
    1 project | /r/cpp | 20 Mar 2023
    For those that don't know, gcc 12.x updated its float parsing logic to something similar to fast_float and it's about 1/6 of the cost presented here (sub 100 in the graph presented here). Strongly suggest using that library or upgrading the compiler if you need the performance.
  • Can sanitizers find the two bugs I wrote in C++?
    11 projects | news.ycombinator.com | 8 Feb 2023
    This makes sense for integers but betware floating point from_chars - libc++ still doesn't implement it and libstdc++ implements it by wrapping locale-dependent libc functions which involves temporarily changing the thread locale and possibly memory allocation to make the passed string 0-terminated. IMO libstdc++'s checkbox "solution" is worse than not implementing it at all - user's are better off using Lemire's API-compatible fast_float implementation [0].

    [0] https://github.com/fastfloat/fast_float

  • Passing Programs To A Stack Machine
    1 project | /r/cpp_questions | 11 Nov 2021
    I'm a bit stuck on how to do the same thing in c++, due to containers only having a single type. The very inefficient way I'm currently doing it is by passing a program as a vector of strings, and then converting the string constants to doubles with the fast_float library.
  • Parsing can become accidentally quadratic because of sscanf
    2 projects | /r/programming | 3 Oct 2021
    Just above this comment is a merged PR, which references fast_float library: https://github.com/fastfloat/fast_float
  • Making Rust Float Parsing Fast: libcore Edition
    10 projects | /r/rust | 17 Jul 2021
    Daniel Lemire @lemire (creator of the algorithm, author of the C++ implementation, and provided constant feedback to help guide the PR).
  • RapidObj v0.1 - A fast, header-only, C++17 library for parsing Wavefront .obj files.
    4 projects | /r/cpp | 28 Jun 2021
    And out of 6,000 lines in the file, at least 3000 are other people's code: earcut for polygon triangulation and fast_float because .obj files typically contain a lot of floating point numbers so it's important to parse them quickly.
  • First release of dragonbox, a fast float-to-string conversion algorithm, is available
    3 projects | /r/cpp | 22 May 2021
    How this compares to https://github.com/fastfloat/fast_float ?
  • Why is std::from_chars<float> slow?
    1 project | /r/cpp | 11 May 2021
    I tried to compare it against Daniel Lemire's excellent fast_float library. Fast float took about 180ms for the same program, and all I did was change "std" namespace prefix to "fast_float". It's a factor of 12 difference, at least my machine. I tried MSVC next, and it is a lot better, but it is still ~4 times slower than fast float. AFAIK, clang currently does not implement the feature at all.
  • Iterator invalidation of std::string_view
    1 project | /r/cpp | 12 Feb 2021
    If you don't mind a 3rd party lib until your stdlib updates, https://github.com/fastfloat/fast_float is best-in-class.

draft

Posts with mentions or reviews of draft. We have used some of these posts to build our list of alternatives and similar projects. The last one was on 2023-07-11.
  • C++23: The Next C++ Standard
    8 projects | news.ycombinator.com | 11 Jul 2023
    I should have said the "latest standard", not "spec", if we're being technical. But EVERY bit of official material is very clear about asserting that C++23 is still a preview/in-progress, not a standard. Saying otherwise is, strictly speaking, incorrect.

    https://isocpp.org/std/the-standard

    https://www.iso.org/standard/79358.html

    https://github.com/cplusplus/draft/blob/main/papers/n4951.md

  • Never trust a programmer who says they know C++
    2 projects | news.ycombinator.com | 5 Jun 2023
    [3] https://github.com/cplusplus/draft/releases/tag/n4917

    *This is a joke, but only barely so.

  • How to become a C++ Chad ?
    2 projects | /r/cpp | 3 Jun 2023
    pdf
  • Why is the token "designator brace-or-equal-initializer" not defined in the C++ 20 standard document?
    1 project | /r/cpp | 17 Mar 2023
    I'm currently going through Annex A of C++20, but I can't find the definition of "designator brace-or-equal-initializer", and couldn't find much formal information on it in an obvious way. The newest source on [decl] (https://github.com/cplusplus/draft/blob/main/source/declarations.tex) also doesn't seem to have it. Am I missing anything, or is this a missing definition in the standard grammar?
  • Can sanitizers find the two bugs I wrote in C++?
    11 projects | news.ycombinator.com | 8 Feb 2023
    > I don't have a copy of the standard at hand, can anyone quote the relevant section?

    The C++ (draft) standard is on GitHub! [0] Compiling it needs Perl and some LaTeX packages, but is reasonably straightforwards otherwise. In addition, links to specific draft standards can be found on cppreference [1].

    But anyways, in the first C++20 post-publication draft (N4868), the wording you're interested in is in multiple sections. Section 22.2.3 Sequence Containers [sequence.reqmts] has Table 78: Optional sequence container operations [tab:container.seq.opt] (starting on page 815), which states that a precondition of pop_back() is that empty() returns false. Section 16.3.2.4 Detailed Specifications [structure.specifications] (page 481) states:

    > Preconditions: the conditions that the function assumes to hold whenever it is called; violation of any preconditions results in undefined behavior.

    Therefore, calling pop_back() on an empty vector results in undefined behavior.

    > Is this something that in practice is implemented in different (exception-throwing) ways?

    Based on a quick glance at the major implementations (libc++ 15.0.7 at [2], MSVC at [3], libstdc++ at [4]), it looks like asserts are used. Whether those result in exceptions probably depends on whether the asserts are compiled in in the first place and how they are implemented, but it's definitely not a guaranteed exception.

    [0]: https://github.com/cplusplus/draft

    [1]: https://en.cppreference.com/w/cpp/links

    [2]: https://github.com/llvm/llvm-project/blob/llvmorg-15.0.7/lib...

    [3]: https://github.com/llvm/llvm-project/blob/8dfdcc7b7bf66834a7...

    [4]: https://gcc.gnu.org/git/?p=gcc.git;a=blob;f=libstdc%2B%2B-v3...

  • How does Rust handle bounds checks that are incorrect in C/C++ due to signed integer conversion?
    1 project | /r/rust | 19 Dec 2022
    Which standard specifically are you quoting there? I checked an old and a new C++ draft in https://github.com/cplusplus/draft/tree/main/papers, and in neither one did 6.3 have anything like that.
  • Rust and C++
    3 projects | /r/programming | 14 Nov 2022
    https://github.com/cplusplus/draft/releases/download/n4917/n4917.pdf (page 1, chapter 1 scope):
  • WG21, aka C++ Standard Committee, October 2022 Mailing
    1 project | /r/cpp | 19 Oct 2022
    PRs for C++ are at https://github.com/cplusplus/draft But the discussion for a PR is via https://isocpp.org/std/submit-a-proposal
  • My programming language history
    10 projects | dev.to | 26 Aug 2022
    C/C++
  • How to overload function parameter to accept either raw pointer or c-array
    1 project | /r/cpp_questions | 14 Aug 2022
    By the way, https://github.com/cplusplus/draft/releases/tag/n4910 , says

What are some alternatives?

When comparing fast_float and draft you can also consider the following projects:

dragonbox - Reference implementation of Dragonbox in C++

team - Rust teams structure

rapidobj - A fast, header-only, C++17 library for parsing Wavefront .obj files.

LLVMSharp - LLVM bindings for .NET Standard written in C# using ClangSharp

C++ Format - A modern formatting library

papers

fast-float-rust - Super-fast float parser in Rust (now part of Rust core)

Asciidoctor - :gem: A fast, open source text processor and publishing toolchain, written in Ruby, for converting AsciiDoc content to HTML 5, DocBook 5, and other formats.

RapidJSON - A fast JSON parser/generator for C++ with both SAX/DOM style API

cppwp - HTML version of the current C++ working paper

simdutf8 - SIMD-accelerated UTF-8 validation for Rust.

libhal - A collection of interfaces and abstractions for embedded peripherals and devices using modern C++