#parser #no-std

no-std minimal-lexical

快速浮点解析转换例程

7 个版本

0.2.1 2021年10月4日
0.2.0 2021年9月10日
0.1.4 2021年10月4日
0.1.3 2021年9月4日
0.1.0 2021年4月27日

#16 in 解析器工具

Download history 1352332/week @ 2024-03-14 1384661/week @ 2024-03-21 1394741/week @ 2024-03-28 1503378/week @ 2024-04-04 1409205/week @ 2024-04-11 1549548/week @ 2024-04-18 1392606/week @ 2024-04-25 1559770/week @ 2024-05-02 1508459/week @ 2024-05-09 1538195/week @ 2024-05-16 1445793/week @ 2024-05-23 1616404/week @ 2024-05-30 1541507/week @ 2024-06-06 1744057/week @ 2024-06-13 1563083/week @ 2024-06-20 1257321/week @ 2024-06-27

6,403,450 每月下载量
用于 10,665 个包 (2 个直接使用)

MIT/Apache

200KB
3.5K SLoC

minimal-lexical

这是 rust-lexical 的一个最小版本,旨在允许高效的浮点解析往返。minimal-lexical 实现了一个正确且快速的浮点解析器。

由于 minimal-lexical 的体积小且稳定,它也很好地适应了私有分支。如果您私有地分支 minimal-lexical,我建议您通过 电子邮件Twitter 联系我,这样我可以通知您功能更新、错误修复或安全漏洞,以及帮助您实现自定义功能请求。我不会将您的信息用于任何其他目的,包括但不限于披露您的项目或组织对 minimal-lexical 的使用。

minimal-lexical 设计用于快速编译时间和小的二进制文件大小,但牺牲了一点点性能。为了提高性能,您可以随意以更激进的内联方式分支 minimal-lexical。

类似项目

对于高级、一揽子的数字转换例程,请参阅 rust-lexical

目录

入门

首先,将以下内容添加到您的 Cargo.toml

[dependencies]
minimal-lexical = "0.2"

接下来,要解析一个简单的浮点数,请使用以下内容

extern crate minimal_lexical;

// Let's say we want to parse "1.2345".
// First, we need an external parser to extract the integer digits ("1"),
// the fraction digits ("2345"), and then parse the exponent to a 32-bit
// integer (0). 
// Warning:
// --------
//  Please note that leading zeros must be trimmed from the integer,
//  and trailing zeros must be trimmed from the fraction. This cannot
//  be handled by minimal-lexical, since we accept iterators
let integer = b"1";
let fraction = b"2345";
let float: f64 = minimal_lexical::parse_float(integer.iter(), fraction.iter(), 0);
println!("float={:?}", float);    // 1.235

食谱

您可能会问:实际的解析器在哪里?由于浮点格式的不一致,以及将集成各种数据交换语言解析器实用程序的目标,这种功能将超出本库的范围。

例如,以下浮点数在 Rust 字符串中是有效的,但在 JSON 或 TOML 中是无效的

1.e7

因此,要使用本库,您需要能够提取有效数字并传递给 create_float 的功能。请参阅 简单示例,了解如何将 minimal-lexical 作为解析器使用。

算法

有关 minimal-lexical 使用的算法的详细说明,请参阅 lexical-core#string-to-float

平台支持

minimal-lexical 在包括大端和小端系统在内的各种平台上进行了测试,以确保代码的可移植性。支持的架构包括

  • x86_64 Linux、Windows、macOS、Android、iOS、FreeBSD 和 NetBSD。
  • x86 Linux、macOS、Android、iOS 和 FreeBSD。
  • aarch64 (ARM8v8-A) Linux、Android 和 iOS。
  • armv7 (ARMv7-A) Linux、Android 和 iOS。
  • ARM (ARMv6) Linux和Android。
  • MIPS (MIPS) Linux。
  • mipsel (MIPS LE) Linux。
  • mips64 (MIPS64 BE) Linux。
  • mips64el (MIPS64 LE) Linux。
  • powerpc (PowerPC) Linux。
  • powerpc64 (PPC64) Linux。
  • powerpc64le (PPC64LE) Linux。
  • s390x (IBM Z) Linux。

Minimal-lexical也应在各种其他架构和指令集架构(ISA)上正常工作。如果您在任意架构上编译Minimal-lexical时遇到任何问题,请提交错误报告。

最低版本支持

Minimal-lexical经过测试,支持Rustc 1.36+,包括稳定版、测试版和夜间版。如果您在兼容的Rustc版本上编译支持的词法版本时遇到任何错误,请报告。请注意,我们可能会为18个月前的编译器版本增加MSRV,以支持至少当前的Debian稳定版本,而不会造成破坏性更改。

变更日志

所有更改均在CHANGELOG中进行记录。

许可

Minimal-lexical同时采用Apache 2.0许可协议和MIT许可协议进行双重许可。有关完整许可协议详情,请参阅LICENSE.md文件。

贡献

除非您明确说明,否则您提交给Minimal-lexical作为Apache-2.0许可协议定义的故意贡献,应按上述方式双重许可,而不附加任何额外条款或条件。

无运行时依赖

功能