Use memchr to speed up line splitting

This improves performance up to 1.5 times, with no downside.

           no-op-short     rust-sed     is similarly fast as   rust-sed-f0
      access-log-no-op     rust-sed is   1.5 times faster than rust-sed-f0
   access-log-no-subst     rust-sed     is similarly fast as   rust-sed-f0
      access-log-subst     rust-sed     is similarly fast as   rust-sed-f0
     access-log-no-del     rust-sed is   1.1 times faster than rust-sed-f0
    access-log-all-del     rust-sed     is similarly fast as   rust-sed-f0
   access-log-translit     rust-sed is   1.2 times faster than rust-sed-f0
access-log-complex-sub     rust-sed     is similarly fast as   rust-sed-f0
             remove-cr     rust-sed     is similarly fast as   rust-sed-f0
          genome-subst     rust-sed     is similarly fast as   rust-sed-f0
            number-fix     rust-sed is   1.1 times faster than rust-sed-f0
           long-script     rust-sed     is similarly fast as   rust-sed-f0
                 hanoi     rust-sed     is similarly fast as   rust-sed-f0
             factorial     rust-sed     is similarly fast as   rust-sed-f0
This commit is contained in:
Diomidis Spinellis
2025-05-24 12:56:18 +03:00
parent f7365fa422
commit b31d9d15db
4 changed files with 12 additions and 4 deletions
Generated
+2
View File
@@ -703,6 +703,7 @@ dependencies = [
"ctor",
"fancy-regex",
"libc",
"memchr",
"memmap2",
"phf",
"phf_codegen",
@@ -896,6 +897,7 @@ version = "0.0.1"
dependencies = [
"clap",
"fancy-regex",
"memchr",
"memmap2",
"regex",
"tempfile",
+2
View File
@@ -38,6 +38,7 @@ clap_complete = "4.5"
clap_mangen = "0.2"
fancy-regex = "0.14.0"
libc = "0.2.153"
memchr = "2.7.4"
memmap2 = "0.9"
phf = "0.11.2"
phf_codegen = "0.11.2"
@@ -56,6 +57,7 @@ clap_complete = { workspace = true }
clap_mangen = { workspace = true }
ctor = "0.4.1"
fancy-regex = { workspace = true }
memchr = { workspace = true }
memmap2.workspace = true
phf = { workspace = true }
sed = { optional = true, version = "0.0.1", package = "uu_sed", path = "src/uu/sed" }
+1
View File
@@ -15,6 +15,7 @@ categories = ["command-line-utilities"]
[dependencies]
clap = { workspace = true }
fancy-regex = { workspace = true }
memchr = { workspace = true }
regex = { workspace = true }
tempfile = { workspace = true }
memmap2 = { workspace = true }
+7 -4
View File
@@ -14,6 +14,7 @@
// For the full copyright and license information, please view the LICENSE
// file that was distributed with this source code.
use memchr::memchr;
#[cfg(unix)]
use memmap2::Mmap;
@@ -69,10 +70,12 @@ impl<'a> MmapLineCursor<'a> {
}
let start = self.pos;
let mut end = start;
while end < self.data.len() && self.data[end] != b'\n' {
end += 1;
}
let mut end = if let Some(pos) = memchr(b'\n', &self.data[start..]) {
pos + start
} else {
self.data.len()
};
if end < self.data.len() {
end += 1; // include \n in full span