The State of Servo, Mozilla's parallelized Rust browser
groups.google.com
groups.google.com
http://www.2ality.com/2012/02/servo.html
Tl;dr: A brand new browser, implemented with a language called Rust, aims to be small and good at utilizing CPU cores.
This was about a month ago, so perhaps the state of the art[1] has progressed since then.
Yes, I'm pretty excited to watch Servo develop. :)
[1] https://github.com/mozilla/servo/commit/ea53b5e800bcf31a95f8...
dev-servo: https://lists.mozilla.org/listinfo/dev-servo
rust-dev: https://mail.mozilla.org/listinfo/rust-dev
The latter is by far the livelier one, but I don't think they'd have any complaints if you used it to ask about helping out on Servo. :)
make -C src/rust-harfbuzz RUSTFLAGS="-L ../harfbuzz/src/.libs/"
make[1]: Entering directory `/tmp/servo/build/src/rust-harfbuzz'
rustc -L ../harfbuzz/src/.libs/ /tmp/servo/src/rust-harfbuzz/harfbuzz.rc -o libharfbuzz.dummy
make[1]: Leaving directory `/tmp/servo/build/src/rust-harfbuzz'
RUSTFLAGS="-L ../mozjs/" CFLAGS="-I../mozjs/dist/include" \
make -C src/rust-mozjs
make[1]: Entering directory `/tmp/servo/build/src/rust-mozjs'
rustc -L ../mozjs/ /tmp/servo/src/rust-mozjs/js.rc -o libjs.dummy
/tmp/servo/src/rust-mozjs/rust.rs:16:0: 16:8 error: expected item but found 'resource'
/tmp/servo/src/rust-mozjs/rust.rs:16 resource rt_rsrc(self: {ptr: *JSRuntime}) {
^~~~~~~~
make[1]: *** [libjs.dummy] Error 101
make[1]: Leaving directory `/tmp/servo/build/src/rust-mozjs'
make: *** [src/rust-mozjs/libmozjs.dummy] Error 2http://news.ycombinator.com/item?id=3501980 (v0.1, January '12)
http://news.ycombinator.com/item?id=3792403 (March '12)
http://news.ycombinator.com/item?id=3774075 (v0.2, March '12)
> I think it is important that these libraries get rewritten in Rust over time, starting with the most Web-facing code --- Harfbuzz and stb_image.
Text shaping is _hard_ and not something you want to NIH on.
I guess what it comes down to is whether what Servo is justifies that lack of pragmatism: That's what it'll have to prove.
(I worked on relevant pieces of Chrome, which has has a bunch of security issues due to bugs in the older, presumably more vetted, Harfbuzz, so I don't have a lot of confidence of code in this area. Lots of indexing into arrays.)
* = I hail from KDE, and am good friends with some of the people who originally made the browser engine you're using today in Chrome :).
> in Rust to ensure the language can do it
When creating a language you want to write as many things as possible in it to vet the design. See Go, e.g. http://golang.org/src/pkg/image/jpeg/fdct.go.
Project FAQ (most applicable to your question): https://github.com/mozilla/rust/wiki/Doc-project-FAQ
Language FAQ: https://github.com/mozilla/rust/wiki/Doc-language-FAQ
That's kindof the big picture.
AFAICT IE has a somewhat different design; it seems to really be much closer to "one process per tab", which presumably means that they incur some IPC overhead when different tabs in the same unit of related browsing context have to communicate.
[1] http://www.whatwg.org/specs/web-apps/current-work/#unit-of-r...
Even if you have only one main event loop per process, spinning nested event loops (e.g. the way Firefox does for alert and sync XHR) would let you do things in one tab while another is blocked on an alert or whatnot. I just don't know whether Chrome does that.