For macos apple silicon devices:
Nightlies created from tomorrow on will require you to have llvm installed using brew install llvm@13
. This is still required if you previously installed llvm 13 through brew install llvm
.
This will make install instructions simpler in the future.
huh, llvm doesn't get bundled in the binary? :astonished:
I'll make an issue to look into static linking
awesome, thank you!
Specifically we are missing llvm/lib/libc++abi.1.dylib
when executing the c hello world. This may be the only "part of llvm" that is dyn linked. I'm also not sure what code relies on libc++abi.1
When does that error message pop up? Is this just due to us tryin to build a c host with. clang and libc++, or is this a roc app building issue?
I don't know yet, this was an error encountered by @doubledup. Probably the easiest way to reproduce this would be to temporarily move libc++abi.1.dylib
from /opt/homebrew/opt/llvm/lib
on an apple silicon device.
I wonder if that happens on all hosts, or only on some
:magnifying_glass: FYI :magnifying_glass: Opaque booleans have landed! If you have programs using True
or False
for booleans, the only changes you should need to make are:
True
to Bool.true
and False
to Bool.false
Thanks to @Kilian Vounckx for landing this! And let us know if you have any trouble with the new booleans.
looks like the repl hasn't been updated yet :big_smile:
Screen-Shot-2022-09-21-at-12.25.45-PM.png
I bet that would be a nice first issue if anyone wants to contribute it!
FYI, a restriction in what kinds of values are allowed to be polymorphic has been added to Roc, as described in this thread: https://roc.zulipchat.com/#narrow/stream/304641-ideas/topic/Let-generalization.20-.20let's.20not.3F
TL;DR only the following assignments can now be used polymorphically:
pi = 3.14
can be used as a Dec
or F64
)id = \x -> x
can be used as a Str -> Str
or Nat -> Nat
)If you have an assignment that you'd like to use polymorphically but is not a function or number literal, you can always transform it to a thunk that can be then used polymorphically. For example,
emptyState = { list : [] }
emptyStrState : { list : List Str }
emptyStrState = emptyState
emptyNatState : { list : List Nat }
emptyNatState = emptyState # ❌ type error today!
can be written as
emptyState = \{} -> { list : [] }
emptyStrState : { list : List Str }
emptyStrState = emptyState {}
emptyNatState : { list : List Nat }
emptyNatState = emptyState {} # ✅ okay!
Builtin API changes:
Dict.empty
is now a thunk, so you'll need to call Dict.empty {}
Set.empty
is now a thunk, so you'll need to call Set.empty {}
If you suspect you've run into a bug related to the above behavior, please file an issue or let me know.
We are working on better error messages for the kind of type errors that happen in the first example presented above.
Last updated: Jul 06 2025 at 12:14 UTC