Debunking "Faster Than Rust": Malicious Benchmarks in Tov A Fyra Labs blog post debunks Tov's claims that its TypeScript-like language builds native binaries faster than Rust, showing that three of Tov's benchmarks — bigint_fib, dispatch, and map_insert — were crafted to slow Rust down. Because Tov transpiles TypeScript to C and hands it to clang, the post argues that claiming Tov beats Rust is effectively claiming C beats C, and re-benchmarked improved Rust programs matched or outperformed Tov on the author's three test machines. The post reports Tov's repository benchmarks showing gains over Rust of up to more than 10×, including a claimed 1.6× advantage on strings. Debunking "Faster than Rust": Malicious Benchmarks in Tov Tov is a programming language that claims to perform significantly better than Rust. This blog post debunks tricks used in their unfair benchmarks. Tov https://tov.sh/?ref=blog.fyralabs.com is a new programming language marketed to be " a programming language for coding agents. It reads like TypeScript and builds native binaries that beat Rust's." Benchmarks in their Git repository https://github.com/richiemcilroy/Tov/tree/c2048582de4e9468267f801313144d75c12e983f/bench?ref=blog.fyralabs.com show that they perform better than Rust, in some cases over 10× better. However, they also briefly mentioned the internals of Tov: Tov is a compiler. It checks the TypeScript your agent wrote, writes it out as C and hands that to clang, so what you ship is one native binary with nothing to install next to it. A sane engineer would immediately doubt the correctness of their benchmarks. Rust has pretty much the same performance as C, and if Tov transpiles to C, saying Tov beats Rust is mostly equivalent to saying C beats C . That's contradiction right there. Let's ignore the stats for axum , maybe tokio has some overhead, like maybe ; but clearly there's no way you get 1.6× faster than Rust in strings . You have to be lying. That's what a sane engineer would normally think. In this blog post, we check 3 of their "inflated" benchmarks: bigint fib , dispatch , and map insert . We show that these benchmarks are maliciously crafted to slow Rust down . We have also benchmarked the improved Rust programs with their Tov programs to show that Rust has equivalent or better performance than Tov . Set-ups cargo build --release was used to compile the Rust programs, and tov build which defaults to -O3 was used to compile the Tov programs. Here are our setups: "ram-buffet" root@8b4fcd497f61 ----------------- OS: Ultramarine Linux 44 Container Image x86 64 Host: PowerEdge R640 Kernel: Linux 7.0.0-31-generic Uptime: 36 days, 20 hours, 43 mins Packages: 1046 rpm Shell: bash 5.3.9 Display VGA-1 : 1024x768 External Cursor: Adwaita Terminal: /dev/pts/2 CPU: Intel R Xeon R Platinum 8251C 48 @ 4.20 GHz GPU: Matrox Electronics Systems Ltd. Integrated Matrox G200eW3 Graphics Controller Memory: 22.03 GiB / 247.25 GiB 9% Swap: Disabled Disk / : 3.62 TiB / 6.98 TiB 52% - overlay Local IP eth0 : redacted Locale: C "nukobook" mado@nukobook ------------- OS: Ultramarine Linux 44 Plasma Edition x86 64 Host: Vivobook ASUSLaptop K5404VA K5404VA 1.0 Kernel: Linux 7.2.9-cachyos1.fc44.x86 64 Uptime: 3 days, 22 hours, 18 mins Packages: 14 flatpak , 5804 rpm Shell: zsh 5.9 Display SDC416D : 2880x1800 in 14", 60 Hz Built-in Desktop Environment: KDE Plasma 6.7.5 Window Manager: KWin Wayland WM Theme: Klassy Theme: Klassy Dark Qt , Materia-dark GTK2/3/4 Icons: breeze-dark Qt , breeze-dark GTK2/3/4 Font: FakePearl 10pt Qt , FakePearl 10pt GTK2/3/4 Cursor: 茜マウスポインタ 32px Terminal: konsole 26.8.1 Terminal Font: CaskaydiaCove Nerd Font 10.8pt CPU: 13th Gen Intel R Core TM i9-13900H 12+8 @ 5.40 GHz GPU: Intel Iris Xe Graphics @ 1.50 GHz Integrated Memory: 5.81 GiB / 15.24 GiB 38% Swap: 2.23 GiB / 16.00 GiB 14% Disk / : 699.66 GiB / 752.28 GiB 93% - btrfs Local IP wlo1 : 10.7.7.163/17 Battery ASUS Battery : 58% Discharging Locale: en US.UTF-8 "makimaki" bash tsuru@makimaki ~ $ fastfetch -l none tsuru@makimaki -------------- OS: Fedora Linux 44 Cloud Edition x86 64 Host: KVM/QEMU Standard PC Q35 + ICH9, 2009 pc-q35-11.0 Kernel: Linux 7.2.10-200.fc44.x86 64 Uptime: 9 hours Packages: 927 rpm Shell: bash 5.3.9 Display Virtual-1 : 1280x800 Terminal: /dev/pts/0 10.2p1 CPU: QEMU Virtual version 2.5+ 6 @ 2.39 GHz GPU: QEMU Virtual Video Controller Memory: 1.80 GiB / 11.60 GiB 16% Swap: 868.00 KiB / 8.00 GiB 0% Disk / : 31.47 GiB / 139.90 GiB 22% - btrfs Local IP eth0 : redacted Locale: en US.UTF-8 bigint fib // The 300,000th Fibonacci number by repeated addition on num-bigint. use num bigint::BigUint; use num traits::{One, Zero}; const N: u32 = 300000; fn main { let mut a = BigUint::zero ; let mut b = BigUint::one ; for in 0..N { let t = &a + &b; a = std::mem::replace &mut b, t ; } let s = a.to string ; println "fib {N} has {} digits", s.len ; println "first 20: {}", &s ..20 ; println "last 20: {}", &s s.len - 20.. ; } This was the Rust code used in Tov's benchmark. Their benchmarking results showed that Rust used 501 ms · 4.5 MB, while Tov used 168 ms · 3.1 MB. However, we cannot reproduce their results on any of our setups : root@8b4fcd497f61 Tov hyperfine -w 10 -m 64 ./bigint fib tov ./bigint fib Benchmark 1: ./bigint fib tov Time mean ± σ : 451.3 ms ± 3.2 ms User: 449.6 ms, System: 1.6 ms Range min … max : 447.0 ms … 461.3 ms 64 runs Benchmark 2: ./bigint fib Time mean ± σ : 336.6 ms ± 6.1 ms User: 335.2 ms, System: 1.4 ms Range min … max : 328.2 ms … 368.4 ms 64 runs Warning: Statistical outliers were detected. Consider re-running this benchmark on a quiet system without any interferences from other programs. It might help to use the '--warmup' or '--prepare' options. Summary ./bigint fib ran 1.34 ± 0.03 times faster than ./bigint fib tov bash sh-5.3$ hyperfine -w 10 ./bigint fib tov ./target/release/bigint fib Benchmark 1: ./bigint fib tov Time mean ± σ : 260.5 ms ± 29.8 ms User: 258.4 ms, System: 1.3 ms Range min … max : 242.5 ms … 335.1 ms 11 runs Warning: Statistical outliers were detected. Consider re-running this benchmark on a quiet system without any interferences from other programs. It might help to use the '--warmup' or '--prepare' options. Benchmark 2: ./target/release/bigint fib Time mean ± σ : 285.2 ms ± 15.2 ms User: 283.8 ms, System: 0.7 ms Range min … max : 276.2 ms … 326.0 ms 10 runs Warning: The first benchmarking run for this command was significantly slower than the rest 326.0 ms . This could be caused by filesystem caches that were not filled until after the first run. You are already using the '--warmup' option which helps to fill these caches before the actual benchmark. You can either try to increase the warmup count further or re-run this benchmark on a quiet system in case it was a random outlier. Alternatively, consider using the '--prepare' option to clear the caches before each timing run. Summary ./bigint fib tov ran 1.09 ± 0.14 times faster than ./target/release/bigint fib bash tsuru@makimaki ~ $ hyperfine -w 10 ./bigint fib tov ./bigint fib Benchmark 1: ./bigint fib tov Time mean ± σ : 621.5 ms ± 6.3 ms User: 616.2 ms, System: 1.8 ms Range min … max : 614.8 ms … 632.2 ms 10 runs Benchmark 2: ./bigint fib Time mean ± σ : 460.3 ms ± 3.4 ms User: 456.0 ms, System: 1.9 ms Range min … max : 457.2 ms … 468.0 ms 10 runs Summary ./bigint fib ran 1.35 ± 0.02 times faster than ./bigint fib tov dispatch // Virtual method calls: an array of shapes of three classes, area called 50M times. trait Shape { fn area &self - f64; } struct Circle { r: f64, } struct Rect { w: f64, h: f64, } struct Tri { b: f64, h: f64, } impl Shape for Circle { fn area &self - f64 { std::f64::consts::PI self.r self.r } } impl Shape for Rect { fn area &self - f64 { self.w self.h } } impl Shape for Tri { fn area &self - f64 { 0.5 self.b self.h } } fn main { let mut state: i64 = 42; let mut shapes: Vec