Live data from Hacker News

Show HN: Iceoryx2 – Fast IPC Library for Rust, C++, and C

ekxide.io

1–10 of 53 posts

Show HN: Iceoryx2 – Fast IPC Library for Rust, C++, and C

#1
Hello everyone,

Today we released iceoryx2 v0.4!

iceoryx2 is a service-based inter-process communication (IPC) library designed to make communication between processes as fast as possible - like Unix domain sockets or message queues, but orders of magnitude faster and easier to use. It also comes with advanced features such as circular buffers, history, event notifications, publish-subscribe messaging, and a decentralized architecture with no need for a broker.

For example, if you're working in robotics and need to process frames from a camera across multiple processes, iceoryx2 makes it simple to set that up. Need to retain only the latest three camera images? No problem - circular buffers prevent your memory from overflowing, even if a process is lagging. The history feature ensures you get the last three images immediately after connecting to the camera service, as long as they’re still available.

Another great use case is for GUI applications, such as window managers or editors. If you want to support plugins in multiple languages, iceoryx2 allows you to connect processes - perhaps to remotely control your editor or window manager. Best of all, thanks to zero-copy communication, you can transfer gigabytes of data with incredibly low latency.

Speaking of latency, on some systems, we've achieved latency below 100ns when sending data between processes - and we haven't even begun serious performance optimizations yet. So, there’s still room for improvement! If you’re in high-frequency trading or any other use case where ultra-low latency matters, iceoryx2 might be just what you need.

If you’re curious to learn more about the new features and what’s coming next, check out the full iceoryx2 v0.4 release announcement.

Elfenpiff

Links:

* GitHub: https://github.com/eclipse-iceoryx/iceoryx2 * iceoryx2 v0.4 release announcement: https://ekxide.io/blog/iceoryx2-0-4-release/ * crates.io: https://crates.io/crates/iceoryx2 * docs.rs: https://docs.rs/iceoryx2/0.4.0/iceoryx2/

Show HN: Iceoryx2 – Fast IPC Library for Rust, C++, and C
ekxide.io

Re: Show HN: Iceoryx2 – Fast IPC Library for Rust, C++, and C

#4
post #3

Congrats on the release. What's the difference between iceoryx and iceoryx2? I don't want to use Rust and want to stick to C++ if possible.

> Language bindings for C and C++ with CMake and Bazel support right out of the box. Python and other languages are coming soon.

Re: Show HN: Iceoryx2 – Fast IPC Library for Rust, C++, and C

#5
Looks great! From a quick glance it seems like it is a cross platform shared memory library. Maybe similar to this? [1].

Suggestion: would be cool to have a quick description of the system calls involved for each supported platform [2]. I'm guessing mmap on linux/osx and CreateFileMapping on Windows?

--

1: https://github.com/LiveAsynchronousVisualizedArchitecture/si...

2: https://github.com/eclipse-iceoryx/iceoryx2?tab=readme-ov-fi...

Re: Show HN: Iceoryx2 – Fast IPC Library for Rust, C++, and C

#6
post #3

Congrats on the release. What's the difference between iceoryx and iceoryx2? I don't want to use Rust and want to stick to C++ if possible.

Besides being written in Rust, the big difference is the decentralized approach. With iceoryx1 a central daemon is required but with iceoryx2 this in not the case anymore. Furthermore, more fine grained control over the resources like memory and endpoints like publisher. Overall the architecture is more modular and it should be easier to port iceoryx2 to even more platforms and customize it with 3rd party extension.

With this release we have initial support for C and C++. Not all features of the Rust version are supported yet, but the plan is to finish the bindings with the next release. Furthermore, with an upcoming release we will make it trivial to communicate between Rust, C and C++ applications and all the other language bindings we are going to provide, with Python being probably the next one.

Re: Show HN: Iceoryx2 – Fast IPC Library for Rust, C++, and C

#7
post #3

Congrats on the release. What's the difference between iceoryx and iceoryx2? I don't want to use Rust and want to stick to C++ if possible.

Looks like it has significantly lower latency.

> want to stick to C++ if possible

The answer to that concern is in the title of the submission.

Re: Show HN: Iceoryx2 – Fast IPC Library for Rust, C++, and C

#9
Been doing some IPC experiments recently following the 3tilley post[0], because there just isn't enough definitive information (even if it's a snapshot in time) out there.

Shared memory is crazy fast, and I'm surprised that there aren't more things that take advantage of it. Super odd that gRPC doesn't do shared memory, and basically never plans to?[1].

All that said, the constructive criticism I can offer for this post is that in mass-consumption announcements like this one for your project, you should:

- RPC throughput (with the usual caveats/disclaimers) - Comparison (ideally graphed) to an alternative approach (ex. domain sockets) - Your best/most concise & expressive usage snippet

100ns is great to know, but I would really like to know how much RPC/s this translates to without doing the math, or seeing it with realistic de-serialization on the other end.

[0]: https://3tilley.github.io/posts/simple-ipc-ping-pong/

[1]: https://github.com/grpc/grpc/issues/19959

Re: Show HN: Iceoryx2 – Fast IPC Library for Rust, C++, and C

#10

How does this compare to and/or integrate with OTOH Apache Arrow which had "arrow plasma IPC" and is supported by pandas with dtype_backend="pyarrow", lancedb/lancedb, and Serde.rs? https://serde.rs/#data-formats

https://github.com/apache/arrow/issues/34738

https://lists.apache.org/thread/lk277x3b9gjol42sjg27bst2ggm5...

Post reply on HN