docs / benchmarks / lang

Benchmarks index
  1. Overview
  1. Exemptions
  2. Methodology

aot

  1. Overview
  2. Components

codec

  1. Overview
  2. Base32
  3. Base64
  4. Deflate (dev.cajeta.codec)

codec / csv

  1. CSV

codec / json

  1. JSON

collection

  1. Overview
  2. ArrayList
  3. BPlusTree
  4. Cache
  5. Collectors
  6. HashMap
  7. HashSet
  8. Heap
  9. ImmutableList
  10. ImmutableMap
  11. ImmutableSet
  12. LinkedList
  13. RedBlackTree
  14. Sort

collection / ltm

  1. LtmBPlusTree

concurrent

  1. Overview
  2. AtomicInt32
  3. AtomicInt64
  4. Channel
  5. Fiber
  6. FiberLocal
  7. Lock
  8. Mutex
  9. RwLock
  10. Semaphore
  11. Tasks

gfx

  1. Overview
  2. Texture2D

hash

  1. Overview
  2. DefaultHasher
  3. Hash
  4. SipHash
  5. XXHash3

http

  1. Overview
  2. Client
  3. Server
  4. Server-sent events
  5. Start-up and footprint
  6. TLS
  7. WebSocket

io

  1. Overview
  2. Buffer

io / file

  1. Directory walk
  2. File
  3. FileInfo
  4. FileReader
  5. FileWriter
  6. Path
  7. Watcher

io / net

  1. BufferPool
  2. ByteBuffer
  3. Server
  4. TcpListener
  5. TcpStream
  6. UdpSocket

io / net / uri

  1. Uri
  2. UriBuilder

lang

  1. Overview
  2. Allocation and ownership
  3. Calls and dispatch
  4. Exceptions
  5. Guid
  6. Loops
  7. Math and SIMD
  8. Optional
  9. Pair
  10. Slice
  11. String
  12. StringBuilder
  13. Whole programs: the Benchmarks Game

lang / stream

  1. ArrayStream
  2. Stream

llm

  1. Overview
  2. Decode
  3. Kernel parity
  4. Load and first token
  5. Long context
  6. Memory
  7. Prefill

math

  1. Overview
  2. Ray
  3. Rotation
  4. Tensor
  5. Transform

math / fft

  1. Fft

math / linalg

  1. LinAlg

math / npio

  1. Npy

math / poly

  1. Poly

math / random

  1. Generator

math / stats

  1. Stats

ml

  1. Overview
  2. Classical models
  3. Neural models
  4. XGBoost

nucleo

  1. Overview
  2. Column
  3. Fuse
  4. Table
  5. Tape
  6. Transforms

primavera

  1. Overview
  2. Build time
  3. Dependency injection at scale
  4. REST endpoint
  5. Start-up and footprint
  6. Templated page

process

  1. Overview
  2. Command
  3. Process

reflect

  1. Overview
  2. Class

search

  1. Overview

search / distance

  1. Distance

search / fuzzy

  1. Matcher

search / ngram

  1. Index

time

  1. Overview
  2. Clock
  3. DateTimeFormatter
  4. Duration
  5. Instant
  6. LocalDate
  7. LocalDateTime
  8. LocalTime
  9. ZonedDateTime

toolchain

  1. Overview
  2. Binary size
  3. Build tool
  4. Compile time
  5. Debugger
  6. Notebook kernel start-up
  7. Start-up

toolchain / kernel-startup

  1. Overview
  2. Where cold-start time goes

wire

  1. Overview
  2. CompressStream
  3. Encoder
  4. SchemaEncoder

xpu

  1. Overview
  2. Device
  3. KernelBuffer
  4. KernelStream
  5. KernelTimer

xpu / mesh

  1. MeshSimplifier
Machine
no runs yet

String

cajeta.lang.String — immutable UTF-8 text, the single string type. Four rows date from the first suite and are kept as they were; the new rows walk codepoints, scan bytes, split and compare, which is where a UTF-8 string with byte-offset indexing differs from a UTF-16 one.

Benchmarks

idworkloadagainstcheck
lang/string-build-concatbuild 32 KB by repeated +C++ std::string, Rust String, Go, Java, Pythonlength
lang/string-searchindexOf of a 12-byte needle in a 1 MB haystack, 1e3 timesC++ find, Rust find, Go strings.Index, Java indexOf, Python findindex
lang/string-replacereplace every occurrence of a word in 1 MBsame librarieslength
lang/string-uppercasetoUpperCase of 1 MB ASCII and 1 MB mixed-script textsame librarieschecksum
lang/string-codepoint-walkdecode every codepoint of 1 MB mixed-script text from byteAt (there is no codepoint iterator; codepointAt is O(n))C++ hand-decoded, Rust chars(), Go range, Java codePoints(), Python for c in scount
lang/string-byteat-scanbyteAt over 1 MB counting newlinesC++ operator[], Rust bytes(), Go []byte, Java getBytes once then index, Python bytescount
lang/string-splitsplit 1 MB on commas with indexOfFrom and substringView, 1e2 times (String has no split)same librariespiece count
lang/string-compare1e7 comparisons of 32-byte strings, half equalsame librariesequal count

count() is codepoints; indexOf, substring and byteAt take byte offsets. The rows name which they use.

Results

One chart per benchmark, for the machine selected at the top of the page. Languages are the bars, best first; Cajeta’s bar is in color and the competitors’ are gray. A skipped competitor keeps its row with the reason in place of a bar. A benchmark with no row on the selected machine says so and shows nothing else.

lang/string-build-concat

Not yet measured on Proton.

lang/string-search

Not yet measured on Proton.

lang/string-replace

Not yet measured on Proton.

lang/string-uppercase

Not yet measured on Proton.

lang/string-codepoint-walk

Not yet measured on Proton.

lang/string-byteat-scan

Not yet measured on Proton.

lang/string-split

Not yet measured on Proton.

lang/string-compare

Not yet measured on Proton.

Reproduce

cd bench
./bench.sh --bench string-build-concat               # Cajeta
./bench.sh --bench string-build-concat --competitors # every pinned competitor

Every row records the compiler and competitor versions, flags, machine, OS and driver; METHODOLOGY states the rules a number must satisfy before it is published.

See also

  • Reference: String
  • Source: runtime/src/cajeta/lang/String.cajeta
  • Benchmark source: bench/src/main/cajeta/bench/lang/

Source: bench/lang/String.md · 2 min read · 369 words