4 ms·
The compiler will outright remove bounds checks that are implied by previous bounds checks. It is a common low level optimization to add a wide boundary check
by eska 3y ago
The compiler will outright remove bounds checks that are implied by previous bounds checks.
It is a common low level optimization to add a wide boundary check in the beginning to avoid successive smaller bounds checks.
- josephg 3y agoTrue. But if binary size is anything to go by, an awful lot of bounds checks still end up in the code.
- tomsmeding 3y agoDoesn't a rust binary also include a whole lot of standard library? C compilers assume that libc is available, a rust compiler is hardly going to assume that rust's libstd is installed on a random user's machine.
- josephg 3y agoYeah it does, but that’s not enough to explain how large rust programs tend to get. The equivalent C programs, even statically linked, are usually several times smaller than their equivalents in rust. And the “compile in the standard library” pattern will probably never be changed in rust due to monomorphization. Lots of types in the standard library need to be specialised based on the types of your structs. Even if rust had an ABI for dynamic linking (it doesn’t), structs and functions which take generic type parameters will probably never be able to be loaded from a shared library. Same as C++.