roc/src
Jared Ramirez 0428f06b38
Merge pull request #8274 from FabHof/type_cleanup
Remove Types from Canonicalization
2025-10-19 18:20:37 -04:00
..
base Merge branch 'main' of github.com:roc-lang/roc into upgrade-to-zig-0.15.1 2025-10-19 12:33:25 +02:00
base58 Give base58 its own module 2025-08-13 08:20:06 -04:00
build Merge branch 'main' of github.com:roc-lang/roc into upgrade-to-zig-0.15.1 2025-10-19 12:33:25 +02:00
builtins Merge branch 'main' of github.com:roc-lang/roc into upgrade-to-zig-0.15.1 2025-10-17 11:38:36 +02:00
bundle fix windows bundle_test failures 2025-10-17 19:42:57 +02:00
canonicalize Merge pull request #8274 from FabHof/type_cleanup 2025-10-19 18:20:37 -04:00
check Merge branch 'main' into type_cleanup 2025-10-19 10:52:20 -04:00
cli Merge branch 'main' of github.com:roc-lang/roc into upgrade-to-zig-0.15.1 2025-10-19 12:33:25 +02:00
collections Typo in safe_list.zig 2025-10-19 21:11:08 +02:00
compile Merge branch 'main' into type_cleanup 2025-10-19 10:52:20 -04:00
eval Merge remote-tracking branch 'origin/main' into constant-folding 2025-10-19 15:22:54 -04:00
fmt Merge branch 'main' of github.com:roc-lang/roc into upgrade-to-zig-0.15.1 2025-10-17 11:38:36 +02:00
fs Merge branch 'main' of github.com:roc-lang/roc into upgrade-to-zig-1.15.1 2025-10-14 15:48:33 +02:00
interpreter_shim Clean up Interpreter init 2025-10-18 20:13:47 -04:00
ipc fix test/str/app.roc test 2025-10-17 18:18:38 +02:00
layout Merge branch 'main' of github.com:roc-lang/roc into upgrade-to-zig-1.15.1 2025-10-14 15:48:33 +02:00
parse fix zig build + fmt 2025-10-17 16:15:59 +02:00
playground_wasm Merge branch 'main' of github.com:roc-lang/roc into upgrade-to-zig-0.15.1 2025-10-17 11:38:36 +02:00
PROFILING Clean up some comments 2025-10-18 19:00:30 -04:00
repl Merge remote-tracking branch 'origin/main' into constant-folding 2025-10-19 15:22:54 -04:00
reporting fix all the things 2025-10-15 14:03:23 +02:00
roc_src get rid of all deprecated things 2025-10-01 15:52:56 +02:00
snapshot_tool Merge branch 'main' into type_cleanup 2025-10-19 10:52:20 -04:00
types Merge branch 'main' into type_cleanup 2025-10-19 10:52:20 -04:00
unbundle fmt 2025-10-01 20:09:06 +02:00
watch Update alignedAlloc and other functions to use std.mem.Alignment instead of ints 2025-09-07 02:29:16 -05:00
flake.lock upgrade to zig 0.15.2 2025-10-18 20:30:45 +02:00
flake.nix update flake 2025-09-22 15:47:07 +02:00
README.md upgrade to zig 0.15.2 2025-10-18 20:30:45 +02:00

Roc Compiler (Zig Implementation)

Navigation

Core compiler directories:

  • base/ - Core data structures and utilities shared across the compiler
  • check/ - Main compilation pipeline (parsing, canonicalization, type checking)
  • types/ - Type system definitions and utilities
  • builtins/ - Built-in types, functions, and operations
  • reporting/ - Error reporting and diagnostic formatting
  • collections/ - Efficient data structures used throughout the compiler
  • cache/ - Compilation caching system for faster incremental builds
  • coordinate/ - Cross-module compilation coordination and dependency management
  • eval/ - Runtime evaluation and interpretation system
  • fs/ - Filesystem operations and file I/O utilities
  • layout/ - Memory layout computation and management for code generation
  • serialization/ - Serialization utilities for compiler data structures
  • snapshots/ - Snapshot tests validating compiler behavior across all stages

Status

This table provides a summary of progress for the zig compiler re-write and should be updated with the PR that includes new features.

Str & Num Functions Modules Collections Records & Tuples Recursive Types Static Dispatch
Parse 🔋 🔋 🪫 🪫 🔋 🪫 🚧
Canonicalize 🪫 🪫 🪫 🪫 🪫 🪫 🚧
Resolve Imports 🚧 🚧 🪫 🚧 🚧 🚧 🚧
Check Types 🪫 🚧 🚧 🚧 🚧 🚧
Interpreter
Specialize Types
Lift Functions
Solve Functions
Specialize Functions
Reference Counting
Lower IR
Gen LLVM
  • N/A Not applicable
  • 🚧 Work Started
  • 🪫 Tests Passing
  • 🔋 Polished

Fast Feedback Loop

The roc zig compiler can have a very fast feedback loop. We support zigs incremental compilation and watch mode. By avoiding generating final executables, we can build and typecheck much much faster.

Try it with zig build -Dno-bin -fincremental --watch

Expanding to ZLS

This fast config can also be used with zls. Simply follow these steps:

  1. run zls --version and make sure it is 0.15.0 (this is still used for zig 0.15.2).
  2. run zls env and grab the config_file path.
  3. Edit the config file to include
{
  "enable_build_on_save": true,
  "build_on_save_args": ["-Dno-bin", "-fincremental"]
}
  1. Advised, also changing the cache dir, I use --cache-dir .zig-cache/zls. Otherwise, zig commands run manually can lead to the lsp breaking and requiring a restart.
  2. Optionally, add -Dfuzz above as well to get type checking of fuzz scripts as well.
  3. Note, I had to fully delete my .zig-cache to get zls to start. Make sure to check the logs if you aren't getting type failures.
  4. Enjoy better lsp results.

Simply testing feedback loop

Sadly, this is not nearly as fast due to building binaries. One day, we will get dev zig backends, and it should be fast.

Try it with zig build test -fincremental --watch

Overview

Zig Dependency Graph