Edge Rewrite
// HTMLRewriter · presentation

This page was redesigned at the edge.

Cloudflare fetched the original article and streamed it through HTMLRewriter to apply an entirely new visual system without rebuilding the source page.

// request.cf · coarse context

A page that knows where it met you.

Only coarse request metadata is shown. This demo does not display or persist visitor IP addresses.

Country
US
Cloudflare location
CMH
Connection
HTTP/2
Language
Not provided

Ray ID: a44c051d594b6483

Jump to content

Draft:Roc (programming language)

From Wikipedia, the free encyclopedia


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

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]

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

[edit]

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

[edit]

Performance and memory management

[edit]

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

[edit]

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

[edit]

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

[edit]

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

Functional patterns

[edit]

Roc supports standard functional programming patterns, including:

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

Error handling

[edit]

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

[edit]

References

[edit]
  1. ↑ "Funding the Roc Programming Language". NoRedInk. Retrieved 2024-01-17.
  2. ↑ https://www.techtarget.com/searchapparchitecture/tip/Understanding-Roc-Functional-and-separate-from-the-runtime
  3. 1 2 "Roc Programming Language". roc-lang.org. Retrieved 2023-10-27.
  4. ↑ "What You Need to Know About Roc Programming Language". SocPub. Retrieved 2024-01-17.
  5. ↑ "Intro to Roc: Innovation in Functional Programming". GOTOPIA. Retrieved 2023-10-27.
  6. ↑ "Roc – Richard Feldman, Creator of Roc". Rust in Production Podcast (Podcast). corrode Rust Consulting. 13 November 2025.
  7. ↑ Lamacraft, Robin. "Why Roc Could Be The First Mainstream Purely Functional Language". Retrieved 2023-10-27.
  8. ↑ https://gist.github.com/rtfeldman/77fb430ee57b42f5f2ca973a3992532f
  9. ↑ "Roc Plans and Roadmap". roc-lang.org. Retrieved 2023-10-27.
  10. 1 2 "Fast". roc-lang.org. Retrieved 2023-10-27.
  11. ↑ "Introduction to Roc Programming Language by Richard Feldman". Ada Beat. Astrid Dagny Alva Beat AB. May 8, 2024.
  12. ↑ https://www.roc-lang.org/platforms
  13. ↑ "Friendly". roc-lang.org. Retrieved 2023-10-27.
  14. ↑ "Roc Syntax Example". GitHub. Retrieved 2023-10-27.
  15. ↑ "Functional". roc-lang.org. Retrieved 2023-10-27.
  16. ↑ "Pattern Matching Example". roc-lang.org. Retrieved 2023-10-27.
  17. ↑ "Error Handling Basic". roc-lang.org. Retrieved 2023-10-27.
[edit]

Category:Programming languages Category:Functional programming languages Category:Statically typed programming languages