Draft:Roc (programming language)

Programming language From Wikipedia, the free encyclopedia

Roc is a purely functional, statically typed, general-purpose programming language that compiles to binary.[2] It aims to bring purely functional programming to areas traditionally dominated by imperative languages, such as command-line tools, web servers, and scripts.[3][4]


DesignedbyRichard Feldman
DeveloperRoc Team
Firstappeared2018[1]
Quick facts Roc, Paradigm ...
Roc
ParadigmPurely functional, statically typed
Designed byRichard Feldman
DeveloperRoc Team
First appeared2018[1]
Stable release
Alpha 4
Typing disciplineInferred, static, strong
Implementation languageRust, Zig
LicenseUniversal Permissive License (UPL-1.0)
Websitewww.roc-lang.org
Major implementations
Roc Compiler
Influenced by
Elm
Close

Created by Richard Feldman, the language features a unique architecture that separates the application logic from the underlying runtime environment (referred to as the "Platform").[5]

History

Roc was created by Richard Feldman, who is also known for his work in the Elm community and as the author of Elm in Action from Manning Publications.[6] The language began development to address the lack of a purely functional language that offered both the developer experience of Elm and the performance characteristics required for backend and systems software.[7]

The language is in an alpha state. In early 2025, Feldman announced that the team had begun rewriting the compiler from Rust to Zig.[8] The development roadmap focuses on stabilizing the compiler, expanding the ecosystem of platforms, and implementing an editor-agnostic language server.[9]

Design and features

Performance and memory management

Roc compiles directly to machine code (or WebAssembly) rather than running on a virtual machine (VM) or transpiling to another high-level language.[10]

Unlike many functional languages (such as Haskell or OCaml) or managed languages (like Java), Roc does not use a tracing garbage collector. Instead, it utilizes automatic reference counting. The compiler inserts instructions to free memory immediately when a variable is no longer in use. To optimize performance, Roc employs "in-place mutation" optimizations: if the compiler detects that a data structure is being updated and its reference count is one (meaning it is unique), it will mutate the memory in place rather than allocating a new copy. This allows the language to remain purely functional semantically while potentially achieving performance characteristics similar to imperative languages.[10]

Platforms and Applications

A distinctive feature of Roc is its separation of code into "Applications" and "Platforms."[3]

  • The Application contains the core logic of the program. It is written in Roc and is purely functional.
  • The Platform is a domain-specific compilation framework. It acts as as interface between the application and the operating system and allows code compilation to be optimised for the given domain. It provides low-level primitives for I/O, memory management entry points, and standard library features appropriate for the target.[11] So far the two main supported platforms are a web server platform and a CLI platform, and potential future platforms may include a game engine platform and a GUI platform.[12]

Platforms are often written in low-level languages like Rust, Zig, or C, though they expose a Roc interface to the application.

Developer experience

Roc places a heavy emphasis on "friendliness," largely inspired by Elm. This includes helpful compiler error messages that suggest fixes, a built-in test runner, and a formatter. The type system uses type inference, allowing developers to omit type annotations in most cases while maintaining static type safety.[13]

Syntax and semantics

Roc's syntax was influenced by Elm but has now developed its own distinctive functional style.[14]

Functional patterns

Roc supports standard functional programming patterns, including:

  • Immutability: All values are immutable by default.
  • Pattern Matching[15][16]

Error handling

Roc does not use exceptions. Instead, it uses an algebraic data type (containing either an `Ok` value or an `Err` value) for operations that can fail.[17]

See also

References

Related Articles

Wikiwand AI