roc/crates/glue
2024-11-19 11:28:33 +01:00
..
platform update glue platform files to new syntax 2024-05-05 16:46:34 +02:00
src add doc comment 2024-11-19 11:28:33 +01:00
static Have RustGlue bundle roc_std 2023-06-26 09:48:27 -04:00
templates REVERT ME - add some debug info 2022-11-16 17:07:04 -05:00
tests deleted erroneous host.c files 2024-11-19 11:28:32 +01:00
Cargo.toml refactoring progress, use valgrind on exe 2024-10-09 20:04:36 +02:00
README.md Fix typos in creates/glue/README.md 2024-10-26 15:37:07 +02:00

Glue

Glue is a bit of tooling built into Roc to help with platform development. Roc platforms are written in a different language than Roc, and it requires some finesse to let other languages read and write Roc types like records and unions in a way that's compatible with how Roc uses those types.

The roc glue command generates code in other languages for interacting with the Roc types used by your platform. It takes three arguments:

  1. A 'glue spec', this is a Roc file specifying how to output type helpers for a particular language. You can find some examples in the src/ subdirectory:

    • RustGlue.roc: Generates Roc bindings for rust platforms.
    • ZigGlue.roc: Generates Roc bindings for zig platforms (out of date).
    • DescribeGlue.roc: Does not generate Roc bindings, but outputs some information about the types that assist writing compatible types in other languages by hand.
  2. A 'glue dir', specifying where glue should place generated files. Pass any directory you want here.

  3. A .roc file exposing some types that glue should generate code for. You can extend the template below.

platform "glue-types"
    requires {} { main : _ }
    exposes []
    packages {}
    imports []
    provides [mainForHost]

GlueTypes : {
    a : SomeType,
    b : AnotherType,
}

mainForHost : GlueTypes
mainForHost = main