Back to Blog
Inspired by Michael Kennedy's excellent blog post Python Numbers Every Programmer Should Know.
This post provides timing data for common operations in Kit. These numbers help developers make informed decisions about performance-sensitive code. All benchmarks were run with 100,000 iterations on compiled Kit binaries.
Test Environment
- Device: Mac mini
- CPU: Intel Core i7-8700B @ 3.20GHz (6 cores)
- Memory: 64 GB
- OS: macOS 15.7.3
Basic Operations
| Operation | Time |
|---|---|
| Integer addition | 40 ns |
| Integer multiplication | 30 ns |
| Integer division | 40 ns |
| Integer modulo | 30 ns |
| Float addition | 30 ns |
| Float multiplication | 40 ns |
| Float division | 30 ns |
| Comparison (==) | 40 ns |
| Comparison (<) | 40 ns |
String Operations
| Operation | Time |
|---|---|
| String concatenation | 120 ns |
| String interpolation | 120 ns |
| String length | 30 ns |
| String equality | 30 ns |
| String contains | 50 ns |
| String split | 24 us |
| String reverse | 100 ns |
List Operations
| Operation | Time |
|---|---|
| List creation [5 elements] | 390 ns |
| List.range 0..100 | 5 us |
| List.head (5 elements) | 130 ns |
| List.tail (5 elements) | 40 ns |
| List.length (100 elements) | 40 ns |
| List.nth 50 (100 elements) | 130 ns |
| List.last (100 elements) | 40 ns |
| List.cons (prepend) | 340 ns |
| List.append (5 + 5) | 1 us |
| List.reverse (100 elements) | 3 us |
| List.contains? (100 elements) | 380 ns |
Higher-Order List Operations
| Operation | Time |
|---|---|
| List.map (100 elements) | 4 us |
| List.filter (100 elements) | 6 us |
| List.fold (100 elements) | 4 us |
| List.find (100 elements) | 1 us |
| map |> filter |> fold (100) | 15 us |
Map Operations
| Operation | Time |
|---|---|
| Map.empty | 30 ns |
| Map.insert (single) | 50 ns |
| Map.get (small map) | 40 ns |
| Map.get (100 entries) | 30 ns |
| Map.contains? (100 entries) | 30 ns |
| Map.keys (100 entries) | 491 us |
| Map.size (100 entries) | 1 us |
Record Operations
| Operation | Time |
|---|---|
| Record creation (3 fields) | 50 ns |
| Record field access | 40 ns |
| Record update (spread) | 40 ns |
Pattern Matching
| Operation | Time |
|---|---|
| Match (first case) | 70 ns |
| Match (second case) | 70 ns |
| Match Result (Ok) | 40 ns |
| Match Result (Err) | 50 ns |
| Match Option (Some) | 60 ns |
| Match Option (None) | 90 ns |
Function Calls
| Operation | Time |
|---|---|
| Function call (1 arg) | 30 ns |
| Function call (3 args) | 60 ns |
| Closure (1 capture) | 50 ns |
| Closure (3 captures) | 40 ns |
| Recursive fib(10) | 3 us |
| Tail-recursive factorial(20) | 27 us |
JSON Serialization
| Operation | Time |
|---|---|
| JSON.stringify (object) | 1 us |
| JSON.parse (string) | 6 us |
| JSON.stringify (array) | 1 us |
| JSON.parse (array) | 3 us |
Option/Result Operators
| Operation | Time |
|---|---|
| ?? operator (Some) | 30 ns |
| ?? operator (None) | 40 ns |
| ?? operator (Ok) | 40 ns |
| ?? operator (Err) | 40 ns |
| Option.map (Some) | 280 ns |
| Option.and-then (Some) | 240 ns |
| Result.map (Ok) | 420 ns |
Time Operations
| Operation | Time |
|---|---|
| Time.now | 90 ns |
| Time.rdtsc | 30 ns |
| Time.format | 360 ns |
| Time.components | 1 us |
Math Operations
| Operation | Time |
|---|---|
| Math.sqrt | 40 ns |
| Math.pow | 30 ns |
| Math.sin | 40 ns |
| Math.cos | 40 ns |
| Math.log | 30 ns |
| Math.exp | 40 ns |
| Math.abs (int) | 40 ns |
| Math.max | 30 ns |
| Math.min | 30 ns |