Servo: Building a Parallel Browser [video]
youtube.com
youtube.com
He said something along the lines of: "By the time we update the codebase for a syntax update, there would be a library API change and vice versa."
I recommend checking out the rest of the LCA2015 talks; very informative if they apply to your area, IMHO. Dave Chinner's talk about how important "knowledge transfer between humans" was to kernel development and software engineering in general resonated strongly with me.
The standard library is still in rapid iteration mode in the preparation for 1.0.0 beta, and thus large portions of it are marked unstable and so only available if you opt-in via a feature gate, but the plan is to stabilize that through the alpha and beta period and have a usable, stable standard library at 1.0.0, which is planned to come out within a few 6-week release cycles from now. And things which are not ready, or not really appropriate for a core standard library, are being moved out into separate Cargo crates that can iterate independently from the core language.
So yes, Rust has been iterating rapidly on the road to 1.0, which makes keeping up with the treadmill painful, but it's finally settling down; very soon you should be able to use it without constant breaking changes.
As much as I want this to be true, it's not. `io` is one of those libraries. That's going to break a lot of stuff, probably.
Beta is the 'your code will almost absolutely not break' release.
It seems like it could seal Rust as a player if Servo became "A Thing" for real. What's the plan?
Anyways they shouldn't replace gecko but instead make a new browser with it's own branding like the Internet Explorer team is doing with Spartan. Because no matter what Mozilla does with Firefox it will never gain market share because they've lost momentum and don't have resources it takes to brute force users to their product like the big guys have.
Afaik, XUL is already replaced on the mobile Firefox version. Would not expect it in Rust at all.
The facts are Firefox has not only lost momentum (as in stopped gaining market share) it's been losing market share.
stability, security, etc
having no more page corruption issues would be nice
If it's really that good (and so much safer, as Firefox tends to be the browser with the most vulnerabilities) then it would be crazy for them not to build it into a full browser eventually. Microsoft is doing it, so they should do it as well.
Maybe with a new browser they can make Electrolysis be much more optimized as well. I think the main reason it takes them so long to get multi-process to work is because they have to optimize around Firefox's quirks, and I'm worried it still won't end up as safe or as quick as Chrome's multi-process system, which was built for Chrome from day one. In a new browser it might work much better.
At the moment there is plenty of steam behind Servo, and it's growing all the time. So an optimistic outlook is that it will mature, and have a chance of becoming a full-fledged product. However problems might prick up, maybe Rust isn't quite as good for this as they think, maybe the experimental parallel architecture doesn't fully pan out. You can only make these kinds of observations when you've implemented most, if not all of the features required for the final product.
One plan was to first replace easy parts, like image decoders (bmp/ico formats). https://github.com/servo/servo/wiki/Mozlandia-Rust-In-Gecko#...
It won't be a one big replacement, more like a gradual take over.
This is what happens to any language that builds on C's compatibility.
In sane languages an out-of-bounds error causes program termination, unless it was disabled on purpose (assuming it can be disabled). In C anything goes.
An out of bounds can cause the program to be injured, but not die, and eventually have some kind of inconsistent state.
> use-after-free happens in almost every language that is not gc'ed.
Yes, true if we are speaking about Modula-2 or Extended Pascal dialects. The most notable alternatives to C with manual memory management.
Everything else has at very least reference counting support.
object = create_object() // RC 1
object.release() // RC 0 => will be released
// ...
object.doSomething() // Used after object was released
?