Oxidation2: Difference between revisions

939 bytes added ,  20 November 2017
no edit summary
(Created page with "'''Oxidation''' is a project to integrate [https://www.rust-lang.org/ Rust] code in and around Firefox. Rust support has been required on all platforms since Firefox 54, and...")
 
No edit summary
Line 12: Line 12:


Rust has the following strengths.
Rust has the following strengths.
* Memory safety.
* Memory safety, which prevents crashes and security vulnerabilities.
* Thread safety, which enables parallel performance.
* Thread safety, which enables parallel performance.
* Highly expressive.
* Highly expressive.
* A great community.


Rust has the following challenges.
Rust has the following challenges.
Line 25: Line 26:
** Android is currently not a Tier 1 platform
** Android is currently not a Tier 1 platform
*** https://forge.rust-lang.org/platform-support.html
*** https://forge.rust-lang.org/platform-support.html
** For components shared with Servo, Gecko/Servo integration is painful.
*** rillian: "As I understand it, the problem is no one has set up tests on a cloud service, so there's no way for upstream to gate work on Android regressions. Qemu emulation is too slow. There aren't many services with arm support, but there are a couple of new options. If someone does the work of setting something up we should be able to get the Rust team to adopt it."
** Often requires adding wrapper/glue code
*** But this is typically valuable/reusable
** Sharing components between Gecko and Servo is difficult
*** The workflow is annoying
*** There are continuous integration mismatches
*** Phabricator/Lando should fix this?
*** This is not relevant for Gecko-only Rust components, however.
*** This is not relevant for Gecko-only Rust components, however.


Line 38: Line 45:
* For components where parallelism can provide big performance wins.
* For components where parallelism can provide big performance wins.
* For components where Servo has demonstrated success.
* For components where Servo has demonstrated success.
When should a code component be made into an external crate?
* XXX: suggest being conservative
** heapsize is a cautionary tale


= Documentation and Education =
= Documentation and Education =
Line 51: Line 62:
- basics on learning Rust, e.g. links to Rust stuff
- basics on learning Rust, e.g. links to Rust stuff
- Gecko-specific stuff, e.g. how to deal with crates
- Gecko-specific stuff, e.g. how to deal with crates
- #rust, #servo, #rust-internals, #rustc


[https://public.etherpad-mozilla.org/p/stylo Stylo workflow] (applies to any changes that straddle Gecko and Servo)
[https://public.etherpad-mozilla.org/p/stylo Stylo workflow] (applies to any changes that straddle Gecko and Servo)
Line 135: Line 147:
* Shared Gecko/Servo components are painful
* Shared Gecko/Servo components are painful
** Landing/merging process
** Landing/merging process
* Debugging?
* IDE/symbol lookup support?
* Code coverage?
* Profiling?
* Test integration?


== Things blocking new components from being written in Rust ==
== Things blocking new components from being written in Rust ==
Line 141: Line 159:
** No IPDL binding generator
** No IPDL binding generator
** No WebIDL binding generator for dom components (Servo must have something here?)
** No WebIDL binding generator for dom components (Servo must have something here?)
** No XPIDL binding generator
** No XPIDL binding generator ({{bug|1293362}}
** Immature rust-bindgen and cheddar/cbindgen tools for general cross-language support.
** Immature rust-bindgen and cheddar/cbindgen tools for general cross-language support.
* Slow compile times
* Slow compile times
Line 163: Line 181:
* mystor?: bindings
* mystor?: bindings
* qdot?: webauthn integration
* qdot?: webauthn integration
* rust compiler folks?
* rust compiler folks? acrichto, mwoerister


= Meetings =
= Meetings =
Confirmed users
1,345

edits