What is being worked on

Just started using Odin this week, I’ve been wondering what features/fixes are being worked on currently and what are the plans for the language/toolchain in the future. Asking here as I could not find a roadmap or something similar (didn’t search much).

Thanks. :slight_smile:

1 Like
  • Replacing os with os2. One major blocker to this that I’m slowly overcoming.
  • Considering new data structures for inclusion into core after having read some interesting papers… If only I had more time.
  • Vectorizing memory operations. Have to get back to that PR one day.
  • core:archive/tar, currently way back in the queue.

The start of core:archive/tar led me down an Alice in Wonderland-class rabbit hole of all of the above, truly.

There’s a bit in the TAR spec where you check for a big chunk of zeros, right. So that got me interested in SIMD vectorization for fast compares. That led to vectorizing index_byte (with much thanks and help from @yawning), which also led to investigating vectorizing memory ops. All of this led up to finding bugs in core:io which resulted in the test suite which found a handful of bugs. All of that built up to investigating the state of os2 which led to my current struggle.

All for a tape archive.

7 Likes

In terms of packages i can remember a discussion thread on what kind of packages could be added but its from 2020. Some of them have been added already. I’m not sure if an updated version of the wanted package list exist (or if its been private only).

That’s the place from where I got the idea to write core:text/regex and also start on core:archive/tar. I believe @Jeroen is working on core:archive/zip.

1 Like

What kind of new data structures are being considered?

More synchronization constructs, possibly, like core:sync/chan, or maybe even improvements to Chan itself. I haven’t allocated the time for much thought on the planning phase yet.

Don’t know of any but i’d love to have jakubs static size containers in the core lib. we have core:container/small_array but we could use more.

1 Like

Im slowly chipping away at improving core package’s documentation. Right now working on core:simd, but taking a small break from Odin work to learn some vulkan.

2 Likes

Correct: ZIP read/write support, PNG write support, JPEG read/write support. GIF read support. LZ4 (de)compression.

And with streaming support such that you can for example load a PNG file from within a ZIP file without first having to unpack it to disk or memory.

4 Likes

I’ve been keeping track of my general plans for core:crypto (in no particular order of priority) at core/crypto design/planning/thoughts · odin-lang/Odin · Discussion #1275 · GitHub

Once I’m done with my current PR, I’m most likely going to get started on adding support for the NIST curves (secp256r1, secp384r1).

1 Like

Maybe roaring bitmaps at some point, for very large (sparse) bit arrays.

1 Like

I’ve been planning to implement a Chase-Lev lock-free deque lately, I could try to generalize it enough for core:sync if that would be considered. Might be a good candidate for use in core:thread.Pool too, which currently just uses a Mutex-locked dynamic array.

Simple things like an atomic stack, queue, etc. might also be nice to have. Maybe a QSBR GC or something too? Depends on how much we want in core, I suppose.

I also have some small SIMD-related contributions (an intrinsic and a possible core:simd proc) that I might PR at some point, but I’m planning to discuss them in the Discord server a bit first.

Unfortunately, I share your laments about time, so I can’t make any promises on contributions.

1 Like

You’d probably still need some sort of lock for channels to work correctly. But a different data structure might benefit from such a thing in certain cases.