3 ms·
We just seen a news that Firefox is reusing Chromes regex c++ code, so from my point of view Firefox is barley pushing for Rust components but Rust fans expect
by simion314 6y ago
We just seen a news that Firefox is reusing Chromes regex c++ code, so from my point of view Firefox is barley pushing for Rust components but Rust fans expect the kernel to push harder. IMO when Firefox and all it's componetns/dependencies are Rustifed then I think we can ask for the kernel to attempt the same.
- cma 6y agoIf Firefox wrote a new regex module and didn't use Rust that would contradict the poster's advice, but them using an existing mature bit of coded doesn't seem to prove much.
- simion314 6y agoWhat Firefox done makes sense, but it does not look good to the idea you can just rewrite in Rust function by function. A regex engine seems to me a thing that is easy to TDD, so I would expect if rewriting in Rust is that easy Firefox would rewrite the most dangerous parts in Rust already (I assume regex is used with untrusted input but I am clueless so i could be wrong). IMO the giant army of Rust fans should put their energy working on Firefox or donating to have Firefox rewriten before 2030, because the story that is heavily promoted is that you can rewrite shit in Rust super easy, function by function, etc but the reality is different.
- zozbot234 6y agoC code can be rewritten function-by-function, even programmatically via c2rust. C++ is a bit messier and even the FFI interoperability story wrt. Rust is not quite complete.
- frenchy 6y agoFirefox didn't choose the C++ regex implementation because rewriting pieces of code with well defined interfaces is hard. It was for a few reasons: 1) at the time they made the decision, there was no existing rust regex library that matched the way that JavaScript worked, 2) they didn't want to write their own/rewrite existing code because regex libraries are complicated beasts, 3) the C++ code is mature and well tested, so the primary benefit of a rust implementation would be more speed (because it's easier to safetly reason about shared data) they didn't think that optimizing the regex engine was a priority.
- simion314 6y agoIt makes sense, I am still a bit disappointed (so is a subjective thing) hopefully the RIR crowd gets more rational and reads your explanation and see that is not so easy.
- FuckButtons 6y ago>. A regex engine seems to me a thing that is easy to TDD Why go to all that effort when the thing you need is already available? I don't think there are that many people that argue that everything, even the stuff that works fine and doesn't have issues, should be re-written just because rust exists.
- gpm 6y agoOne component choosing to use a mature implementation in another browser instead of a rewrite from scratch in rust means very little. We can look at actually statistics instead of just one random anecdote. For instance, according to [1], there are 2 million lines of rust code in firefox, 6 million lines of C++, and 3 million lines of C. Very roughly speaking that's 20% of the lines of low level language being in Rust. Firefox only started requiring rust to be built about 3 years ago, this is a pretty breakneck pace of replacing C/C++ with rust. [1] https://www.openhub.net/p/firefox/analyses/latest/languages_summary https://www.openhub.net/p/firefox/analyses/latest/languages_...
- asjw 6y agoFirefox JS engine is in C++ even though rust has been available for years now, they've said more than once that they have no plans on porting Spidermonkey to Rust. The most recent information I've found is from a Spidermonkey Dev here on HN who said they might even port the Regex engine to Rust That didn't happen either https://news.ycombinator.com/item?id=18988024 https://news.ycombinator.com/item?id=18988024 Something tells me that there's more than meets the eye.
- gpm 6y agoIt seems unlikely that there is any great conspiracy at play here to me... they found a good solution to a problem, they implemented it. Spidermonkey is a highly optimized carefully examined code base, it's not easy to replace wholesale or particularly low hanging fruit to be replaced with rust. Mozilla is working on replacing the wasm compiler, and eventually the compiler for "ion MIR" (an intermediate langauge that js is compiled to), with cranelift, a rust implementation of a compiler backend. See [1] for pretty pictures of this. It's been possible to use this backend to some extent since 2018 [2]. The best place I was able to find in the last 5 minutes to describe the current state of the integration is the doc comment at the top of this file [3]. In other words it looks like spidermonkey is not not being ported, it's just not being entirely ported yet. [1] https://github.com/bytecodealliance/wasmtime/blob/master/cranelift/spidermonkey.md#phase-1-webassembly https://github.com/bytecodealliance/wasmtime/blob/master/cra... [2] https://old.reddit.com/r/rust/comments/9mvnrk/in_firefox_nightly_an_option_has_arrived_to_use/ https://old.reddit.com/r/rust/comments/9mvnrk/in_firefox_nig... [3] https://github.com/mozilla/gecko-dev/blob/master/js/src/wasm/cranelift/src/lib.rs https://github.com/mozilla/gecko-dev/blob/master/js/src/wasm... Edit: Another component of spidermonkey that is being rewritten in rust is the JS parser, that project is called smooshmonkey. You can read about it in the spidermonkey news letters [4] [5] [6], and there's an nice comment describing it at the top of this reddit thread [7] [4] https://mozilla-spidermonkey.github.io/blog/2020/01/10/newsletter-2.html https://mozilla-spidermonkey.github.io/blog/2020/01/10/newsl... [5] https://mozilla-spidermonkey.github.io/blog/2020/03/12/newsletter-3.html https://mozilla-spidermonkey.github.io/blog/2020/03/12/newsl... [6] https://mozilla-spidermonkey.github.io/blog/2020/05/11/newsletter-4.html https://mozilla-spidermonkey.github.io/blog/2020/05/11/newsl... [7] https://old.reddit.com/r/rust/comments/h0ddpi/smooshmonkey_new_rust_js_parser_for_firefox/ https://old.reddit.com/r/rust/comments/h0ddpi/smooshmonkey_n...