Other options include bpftrace[1] or C, Python or Lua via BCC[2]
In redbpf we let you write the kernel code in Rust as well, and then we have our own LLVM based toolchain to compile that to BPF bytecode.
bpftrace is similar to redbpf in approach, in that it lets you use a DSL instead of C.