roc-lang / book-of-examples

Software Design by Example in Roc
Other
24 stars 15 forks source link

topic: packing and unpacking binary data #14

Open gvwilson opened 3 months ago

gvwilson commented 3 months ago
FabHof commented 3 months ago

Roc has encoding and decodin abilities. Do you think It would be a good idea to write a simple en-/decoder using those abilities?

gvwilson commented 3 months ago

That would be a great place to start, and then we could see how to expand it (e.g., show readers what we would do if we didn't already have those capabilities and had to implement some parts ourselves). Would you like to take this one?

FabHof commented 3 months ago

Yes please add me. I think we currently don't even have a binary encode formatter, just json, so this might even lead to an actual usable package.

lukewilliamboswell commented 3 months ago

It's been on my todo list for a while to build one of these. Folkert suggested I look at https://postcard.jamesmunns.com/wire-format.html as that is something similar and works well with rust. It's not something I have spent much time investigating, just thought I would share in case that helps.

lukewilliamboswell commented 3 months ago

Also for reference here is a conversation topic about some missing functions we need to implement in builtins to build out the full functionality. Basically we can't do floats rn, but I guess for the sake of the book article those could be left unimplemented.

https://roc.zulipchat.com/#narrow/stream/383402-API-Design/topic/reading.20integers.20from.20bytes/near/418549425

FabHof commented 3 months ago

Thank you for the links. I am aware of the current limitations, but maybe we can implement the missing methods by the time the book is released. On the other hand, dec and float don't have to be part of the chapter.

I was also thinking of doing a BSON encode formatter. Like "We have this for JSON, let's see how we would do this in a similar binary format".

gvwilson commented 3 months ago

Thanks @FabHof - please create a subdirectory under the project root called binary and put your code there, along with an index.md file with notes to yourself. Cheers - Greg