# Xo 0.18 release notes


## Introduction

Xo 0.18 adds a profiler, debug line tables, and race checking, moves the
runtime's stress tests to Xo, and makes arm64 code faster.

## Tools

- Profiling: `XO_PROF=cpu,heap`, or `xo run` and `xo test` with
  `--profile=cpu,heap`, writes pprof output and a text summary, on the
  arm64 and LLVM backends, on macOS and Linux
  ([decision 0238](https://github.com/xo-lang/xo/blob/main/knowledgebase/decisions/0238-native-sampling-profiler.md)).
- Debug information: DWARF line tables from both native backends (a
  dSYM on macOS), so lldb stops at `.xo` lines and shows inlined calls,
  and the profiler names `.xo` lines. `XO_TRACEBACK` prints a fault's
  frames, and `xo test` sets it
  ([decision 0239](https://github.com/xo-lang/xo/blob/main/knowledgebase/decisions/0239-dwarf-line-tables.md)).
- Races: `xo build --backend=llvm --race` builds every function, the
  runtime's too, with ThreadSanitizer. The races it reported in the
  runtime are fixed.

## Runtime

- The scheduler has a monitor thread and defers wakes for channel hand
  offs and spawns, bounded by the waker's next runtime call. Real-time
  programs get none, `XO_DEFER_WAKE=0` turns it off, and mutex wakes
  stay direct
  ([decision 0077](https://github.com/xo-lang/xo/blob/main/knowledgebase/decisions/0077-native-scheduler-go-style.md)).
- The runtime's C stress tests are Xo programs
  ([decision 0241](https://github.com/xo-lang/xo/blob/main/knowledgebase/decisions/0241-runtime-tests-in-xo.md)).

## Compiler

- arm64: SHA-256 on the SHA instructions; add with carry chains with
  constant operands and the zero register; `bic`, `orn`, `eon` and
  `extr`; one more register for the allocator. RSA, P-256, P-521 and
  X25519 are faster on arm64.
- The WebAssembly backend passes its compiler build test again (it
  failed since 0.15).

## Ports

- macOS arm64 links with Xo's own linker by default again. The XProtect
  false positive and the stall at a program's first launch from each
  path are fixed. TLS loads Security and CoreFoundation only at the first
  certificate check.

