From e94ae5a87d5bec44654e75ead3efbc7b663da34a Mon Sep 17 00:00:00 2001 From: John Kerl Date: Sun, 1 Feb 2026 11:56:13 -0500 Subject: [PATCH] Timings misc (#1945) --- .../early-multi-language-timings/catrust2.rs | 14 +++++++++++ scripts/early-multi-language-timings/ff1.rs | 24 +++++++++++++++++++ scripts/early-multi-language-timings/ff2.rs | 21 ++++++++++++++++ scripts/early-multi-language-timings/ff3.rs | 21 ++++++++++++++++ scripts/early-multi-language-timings/ff4.rs | 24 +++++++++++++++++++ .../new-timings.sh | 9 +++++++ .../new-timings.txt | 24 +++++++++++++++++++ 7 files changed, 137 insertions(+) create mode 100644 scripts/early-multi-language-timings/catrust2.rs create mode 100644 scripts/early-multi-language-timings/ff1.rs create mode 100644 scripts/early-multi-language-timings/ff2.rs create mode 100644 scripts/early-multi-language-timings/ff3.rs create mode 100644 scripts/early-multi-language-timings/ff4.rs create mode 100644 scripts/early-multi-language-timings/new-timings.sh create mode 100644 scripts/early-multi-language-timings/new-timings.txt diff --git a/scripts/early-multi-language-timings/catrust2.rs b/scripts/early-multi-language-timings/catrust2.rs new file mode 100644 index 000000000..bc242183d --- /dev/null +++ b/scripts/early-multi-language-timings/catrust2.rs @@ -0,0 +1,14 @@ +//use std::fs::File; +use std::io::{self, prelude::*, BufReader}; + +fn main() -> io::Result<()> { + //let file = File::open("foo.txt")?; + let file = io::stdin(); + let reader = BufReader::new(file); + + for line in reader.lines() { + println!("{}", line?); + } + + Ok(()) +} diff --git a/scripts/early-multi-language-timings/ff1.rs b/scripts/early-multi-language-timings/ff1.rs new file mode 100644 index 000000000..cda208f0b --- /dev/null +++ b/scripts/early-multi-language-timings/ff1.rs @@ -0,0 +1,24 @@ +// Claude + +use std::fs::File; +use std::io::{self, BufRead, BufReader}; + +// Method 1: Using BufReader with lines() - Good balance of speed and memory +fn read_lines_buf_reader(path: &str) -> io::Result<()> { + let file = File::open(path)?; + let reader = BufReader::new(file); + + let mut n = 0; + for line in reader.lines() { + let _line = line?; + // Process line here + n += 1; + } + println!("line count {}", n); + + Ok(()) +} + +fn main() { + let _ = read_lines_buf_reader("/Users/kerl/tmp/big"); +} diff --git a/scripts/early-multi-language-timings/ff2.rs b/scripts/early-multi-language-timings/ff2.rs new file mode 100644 index 000000000..c83baecbc --- /dev/null +++ b/scripts/early-multi-language-timings/ff2.rs @@ -0,0 +1,21 @@ +// Claude + +use std::fs::File; +use std::io::{self, BufRead, BufReader}; + +// Method 2: Using BufReader with read_line - More control, similar performance +fn read_lines_manual(path: &str) -> io::Result<()> { + let file = File::open(path)?; + let mut reader = BufReader::new(file); + let mut line = String::new(); + + while reader.read_line(&mut line)? > 0 { + // Process line here + line.clear(); // Reuse the string buffer + } + Ok(()) +} + +fn main() { + let _ = read_lines_manual("/Users/kerl/tmp/big"); +} diff --git a/scripts/early-multi-language-timings/ff3.rs b/scripts/early-multi-language-timings/ff3.rs new file mode 100644 index 000000000..835df7c40 --- /dev/null +++ b/scripts/early-multi-language-timings/ff3.rs @@ -0,0 +1,21 @@ +// Claude + +use std::fs::File; +use std::io::{self, BufRead, BufReader}; + +// Method 3: Using custom buffer size for larger files +fn read_lines_custom_buffer(path: &str) -> io::Result<()> { + const BUFFER_SIZE: usize = 128 * 1024; // 128KB buffer + let file = File::open(path)?; + let reader = BufReader::with_capacity(BUFFER_SIZE, file); + + for line in reader.lines() { + let _line = line?; + // Process line here + } + Ok(()) +} + +fn main() { + let _ = read_lines_custom_buffer("/Users/kerl/tmp/big"); +} diff --git a/scripts/early-multi-language-timings/ff4.rs b/scripts/early-multi-language-timings/ff4.rs new file mode 100644 index 000000000..4ee3224ee --- /dev/null +++ b/scripts/early-multi-language-timings/ff4.rs @@ -0,0 +1,24 @@ +// Claude + +use std::fs::File; +use std::io::{self, BufRead, BufReader}; + +// Method 4: Memory mapped files for very large files +fn read_lines_memmap(path: &str) -> io::Result<()> { + use memmap2::Mmap; + + let file = File::open(path)?; + let mmap = unsafe { Mmap::map(&file)? }; + + // Convert memory map to string and iterate over lines + if let Ok(contents) = std::str::from_utf8(&mmap) { + for line in contents.lines() { + // Process line here + } + } + Ok(()) +} + +fn main() { + let _ = read_lines_custom_buffer("/Users/kerl/tmp/big"); +} diff --git a/scripts/early-multi-language-timings/new-timings.sh b/scripts/early-multi-language-timings/new-timings.sh new file mode 100644 index 000000000..ec9345a07 --- /dev/null +++ b/scripts/early-multi-language-timings/new-timings.sh @@ -0,0 +1,9 @@ +justtime ./catc < ~/tmp/big > /dev/null +justtime ./catc0 < ~/tmp/big > /dev/null +justtime ./catm < ~/tmp/big > /dev/null +justtime ./catrust < ~/tmp/big > /dev/null +justtime ./catrust2 < ~/tmp/big > /dev/null +justtime ./ff1 < ~/tmp/big > /dev/null +justtime ./ff2 < ~/tmp/big > /dev/null +justtime ./ff3 < ~/tmp/big > /dev/null +justtime ./catgo < ~/tmp/big > /dev/null diff --git a/scripts/early-multi-language-timings/new-timings.txt b/scripts/early-multi-language-timings/new-timings.txt new file mode 100644 index 000000000..bd095e95e --- /dev/null +++ b/scripts/early-multi-language-timings/new-timings.txt @@ -0,0 +1,24 @@ + +bash ./new-timings.sh +TIME IN SECONDS 9.691 -- ./catc +TIME IN SECONDS 8.137 -- ./catc0 +TIME IN SECONDS 0.005 -- ./catm +TIME IN SECONDS 12.975 -- ./catrust +TIME IN SECONDS 52.282 -- ./catrust2 +TIME IN SECONDS 7.488 -- ./ff1 +TIME IN SECONDS 4.646 -- ./ff2 +TIME IN SECONDS 6.932 -- ./ff3 +TIME IN SECONDS 6.412 -- ./catgo + +TIME IN SECONDS 0.005 -- ./catm +TIME IN SECONDS 4.646 -- ./ff2 +TIME IN SECONDS 6.412 -- ./catgo +TIME IN SECONDS 6.932 -- ./ff3 +TIME IN SECONDS 7.488 -- ./ff1 +TIME IN SECONDS 8.137 -- ./catc0 +TIME IN SECONDS 9.691 -- ./catc +TIME IN SECONDS 12.975 -- ./catrust +TIME IN SECONDS 52.282 -- ./catrust2 + +$ justtime mlr cat ~/tmp/big > /dev/null +TIME IN SECONDS 79.106 -- mlr cat /Users/kerl/tmp/big