Filesystem-oriented flags: sad, messy and not going away
Filesystem-oriented flags: sad, messy and not going away
Posted Mar 17, 2020 1:56 UTC (Tue) by wahern (subscriber, #37304)In reply to: Filesystem-oriented flags: sad, messy and not going away by areilly
Parent article: Filesystem-oriented flags: sad, messy and not going away
Posted Mar 17, 2020 2:19 UTC (Tue)
by tux3 (subscriber, #101245)
[Link] (11 responses)
Afaik, Debian ships rust programs, and if I know anything about Debian packaging, static linking is not even close to being an option =]
Posted Mar 17, 2020 2:34 UTC (Tue)
by Conan_Kudo (subscriber, #103240)
[Link] (10 responses)
Unfortunately, you'd be wrong. Debian ships packages with piles of source code, just as Fedora does. Applications statically link everything, because otherwise every rebuild of the compiler would necessitate rebuilding everything. It's just not practical. Maybe one day, the Rust community will care about us and work toward defining a native stable ABI. But I won't hold my breath. The Rust community thinks it's okay to have to constantly build everything for every change, despite the huge downsides.
Posted Mar 17, 2020 10:25 UTC (Tue)
by roc (subscriber, #30627)
[Link] (4 responses)
In theory we could escape the dilemma by creating a stable ABI for shared libraries that you opt into at build time that would mostly be only for Linux distros. But even that would constrain language and library evolution as well as being a ton of work that no-one is really motivated to do.
Posted Mar 17, 2020 11:53 UTC (Tue)
by Wol (subscriber, #4433)
[Link]
That way, you can extend the function to fill the state table as and when, without having to redesign the interface.
Cheers,
Posted Mar 17, 2020 21:21 UTC (Tue)
by quotemstr (subscriber, #45331)
[Link] (2 responses)
COM solved that problem decades ago. We should seriously consider adopting something a lot like it. A stable object ABI that allows for both efficient intraprocess calling and extensible interprocess remoting is extremely powerful.
Posted Mar 18, 2020 8:53 UTC (Wed)
by roc (subscriber, #30627)
[Link] (1 responses)
Posted Mar 18, 2020 11:07 UTC (Wed)
by k3ninho (subscriber, #50375)
[Link]
*: common object request broker isn't a model, it's an architecture ;-)
K3n.
Posted Mar 17, 2020 21:33 UTC (Tue)
by rvolgers (guest, #63218)
[Link] (4 responses)
Rust does link dynamically to libc, and many Rust programs link to e.g. OpenSSL because Rust has good support for using dynamically linked C libraries. In fact, there are dynamic libraries with a C ABI that are implemented in Rust (librsvg comes to mind).
Rust has really good support for dynamic linking! It just doesn't have good support for dynamic linking using its *native ABI*. You could look at this as discouraging dynamic linking, but you can also look at it as encouraging dynamic linking that integrates well with the rest of the open source ecosystem by using the C ABI as a universal interface.
Also, a ton of Rust code is just not desirable to dynamically link, ever. We could do a cute experiment and compile some popular Rust programs while absolutely forbidding the compiler to inline functions between different crates (i.e. "libraries"). Pretty sure that will cause a code size explosion and speed reduction that will make people scream a lot louder than using a couple more kb of disk space.
Posted Mar 17, 2020 21:44 UTC (Tue)
by rvolgers (guest, #63218)
[Link] (2 responses)
Consider for example the Iterator trait in Rust. People expect code written using iterators to compile down to something that you would find hard to distinguish from a C for loop in disassembly, which requires the compiler to inline a whole bunch of calls to tiny functions and remove some intermediate values. And not all those tiny functions have to come from the same library, they can come from many different ones, and many will have generic arguments or callbacks with generic arguments from still other libraries.
And it's not just Iterator, the same goes for asynchronous I/O using Futures, and probably more absolutely core functionality that I'm forgetting about right now. As soon as parts of that become dynamically linked, you start having to make some really tough calls about what the compiler can statically assume and optimize out.
Posted Mar 17, 2020 21:47 UTC (Tue)
by areilly (subscriber, #87829)
[Link]
Posted Mar 20, 2020 10:15 UTC (Fri)
by jezuch (subscriber, #52988)
[Link]
(Disclaimer: I speak from theory, not practice, so I may be more than a little wrong :) )
Posted Mar 17, 2020 21:45 UTC (Tue)
by areilly (subscriber, #87829)
[Link]
Filesystem-oriented flags: sad, messy and not going away
This is notably more unstable than the C++ ABI, which (visual studio excepted) only breaks for major events like the C++11 release.
Filesystem-oriented flags: sad, messy and not going away
Afaik, Debian ships rust programs, and if I know anything about Debian packaging, static linking is not even close to being an option =]
Filesystem-oriented flags: sad, messy and not going away
Filesystem-oriented flags: sad, messy and not going away
Wol
Filesystem-oriented flags: sad, messy and not going away
Filesystem-oriented flags: sad, messy and not going away
Filesystem-oriented flags: sad, messy and not going away
"Do you speak the ABI of versions in this range?"
"Not all of them, I can fall back to v.A.B.C as most recent. Is that OK?"
"Confirmed OK."
Filesystem-oriented flags: sad, messy and not going away
Filesystem-oriented flags: sad, messy and not going away
Filesystem-oriented flags: sad, messy and not going away
Filesystem-oriented flags: sad, messy and not going away
Filesystem-oriented flags: sad, messy and not going away
I view this trend as a good thing, btw. The modern languages have a lot going for them, and shared libraries really don't.