> It uses the exact same assembly language.> The profiler showed that the identical assembly language itself was taking more cycles when called from C.
No, again, it showed that using a certain wrapper type around the same assembly had more overhead. My argument is that there's no reason to assume that this single type is representative of the entire ecosystem. I don't understand what you could possibly mean if that's not what you're saying.
> The point is that they did the absolute normal expected thing in Rust, and it slowed down the external assembly language library, and after a _lot_ of digging and debugging, they changed the Rust code to be a lot less flexible and more convoluted, and now the assembly language is almost as fast as when it is called from C.
> Look, the people doing this _obviously_ know Rust, and it took them a _long_ time, and some _really_ ugly concrete low-level concrete code, to take external code and make it perform almost as well as if it had been called from C++.
Sure, and you'd probably need a lot of similar ugliness to do the same in reverse to call a random Rust library that wasn't explicitly designed to be called from C/C++. You seem to be inferring that Rust on the whole can't be performant because the boundary between C/C++ isn't as easy as staying on the same side of the boundary, but that works both ways. If your argument is "I only want to use a language that lets me call all of these C/C++ libraries I want", that's totally reasonable. That's not the same as "Rust doesn't have zero cost abstractions" though, unless you think "calling a C/C++ library directly" is what abstraction means.
> Look, the people doing this _obviously_ know Rust, and it took them a _long_ time, and some _really_ ugly concrete low-level concrete code, to take external code and make it perform almost as well as if it had been called from C++.
> To me, that looks like a high-cost non-abstraction.
I don't understand this argument at all. You don't think that a type called `WithOffset` that wraps a pointer to provide an offset is an abstraction? From what I can tell, they were using an abstraction that was implemented inefficiently, and they switched to one written efficiently. I guess we just have completely incompatible definitions of what "abstraction" means, given that from my perspective, you genuinely seem to be arguing that the presence of this one abstraction that someone wrote being inefficient happens to be representative of the entire language and ecosystem.