为什么像memchr这样的函数绑定到C实现而不是用纯Rust编写?

Pet*_*all 5 c rust

memchr看起来非常简单的函数,但Rust项目使用绑定到C代码只有一个Rust回退,而不是在Rust中实现它们.无法memchr在Rust中有效实现?

Zet*_*eta 10

他们能.如果你看看glibc的实现,它看起来会有点像fallback:memchr.然而,这只是故事的一部分.在一般的实现只用时没有提供更为适宜的.

例如,x68-64有一个用汇编语言编写的变体.所以做很多 其他的架构,提供先进的指令.

因此,为了达到相同的速度,Rust必须在指令级别上提供类似的东西,这基本上归结为相同(或更好)的程序集.那时你只是重复工作.它已经存在,无需重新创建所有内容.

  • 我认为我们需要来自glibc的经过验证和调整的低级功能才能参与竞争.对于memcpy,memchr等各种平台,它们实际上有数百个汇编实现. (4认同)

Mat*_* M. 8

这里假设链接到C库的唯一原因是效率.

我担心你在这里忘记了方便.仅仅因为一个函数可以像在C中一样有效地实现(可能利用unsafe代码和汇编)并不意味着这样做很方便.

不是试图为太阳下的每个平台生成优化的实现,而是能够回退到已经提供的C函数开始,然后在必要时逐渐调整您关注的平台.

生成专门针对硬件/操作系统定制的实现是一项冗长的工作,如果有人已经付出了努力,那么重用其结果可能是有意义的!