擅长:python、mysql、java
<p>当我将set building移出循环,只重复交集时,当然,对于这两种情况,Rust比python2.7快。在</p>
<p>我只阅读了python3<a href="https://github.com/python/cpython/blob/master/Objects/setobject.c#L1274">(setobject.c)</a>,但是Python的实现有一些优点。在</p>
<p>它使用这样一个事实,即两个Python set对象使用相同的哈希函数,因此不重新计算哈希。Rust<code>HashSet</code>的哈希函数有实例唯一的键,因此在交集期间,它们必须用另一个集的哈希函数重新散列键。在</p>
<p>另一方面,Python必须为每个匹配的散列调用一个动态键比较函数,比如<code>PyObject_RichCompareBool</code>,而Rust代码使用泛型并将<code>i32</code>的哈希函数和比较代码进行专门化。{4}的哈希算法比cd3}的哈希处理要便宜得多。在</p>
<hr/>
<p>似乎是集合的构造把Python和Rust分开了。事实上,不仅仅是构造,还有一些重要的代码在运行以破坏Rust <code>HashSet</code>s。(这是可以改进的,在这里输入错误:<a href="https://github.com/rust-lang/rust/issues/31711">#31711</a>)</p>