Skip to content
This repository was archived by the owner on Sep 30, 2020. It is now read-only.

Commit 13bddcf

Browse files
committed
Move the rust project faqs to the top of the faq
1 parent 2a5ae99 commit 13bddcf

File tree

1 file changed

+114
-113
lines changed

1 file changed

+114
-113
lines changed

faq.md

Lines changed: 114 additions & 113 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ If there is some common or important question you feel is wrongly left unanswere
1616
<div id="toc">
1717
<h2>Table of Contents</h2><a href="#toggle-toc"></a>
1818
<ol id="toc-contents">
19+
<li><a href="#project">The Rust Project</a></li>
1920
<li><a href="#performance">Performance</a></li>
2021
<li><a href="#syntax">Syntax</a></li>
2122
<li><a href="#numerics">Numerics</a></li>
@@ -36,11 +37,123 @@ If there is some common or important question you feel is wrongly left unanswere
3637
<li><a href="#design-patterns">Design Patterns</a></li>
3738
<li><a href="#other-languages">Other Languages</a></li>
3839
<li><a href="#documentation">Documentation</a></li>
39-
<li><a href="#project">The Rust Project</a></li>
4040

4141
</ol>
4242
</div>
4343

44+
45+
<h2 id="project">The Rust Project</h2>
46+
47+
<h3><a href="#what-is-this-projects-goal" name="what-is-this-projects-goal">
48+
What is this project's goal?
49+
</a></h3>
50+
51+
To design and implement a safe, concurrent, practical systems language.
52+
53+
Rust exists because other languages at this level of abstraction and efficiency are unsatisfactory. In particular:
54+
55+
1. There is too little attention paid to safety.
56+
2. They have poor concurrency support.
57+
3. There is a lack of practical affordances.
58+
4. They offer limited control over resources.
59+
60+
Rust exists as an alternative that provides both efficient code and a comfortable level of abstraction, while improving on all four of these points.
61+
62+
<h3><a href="#is-this-project-controlled-by-mozilla" name="is-this-project-controlled-by-mozilla">
63+
Is this project controlled by Mozilla?
64+
</a></h3>
65+
66+
No. Rust started as Graydon Hoare's part-time side project in 2006 and remained so for over 3 years. Mozilla got involved in 2009 once the language was mature enough to run basic tests and demonstrate its core concepts. Though it remains sponsored by Mozilla, Rust is developed by a diverse community of enthusiasts from many different places around the world. The [Rust Team](https://www.rust-lang.org/team.html) is composed of both Mozilla and non-Mozilla members, and `rustc` (Rust's compiler) has had over [1,000 unique contributors](https://github.com/rust-lang/rust/) so far.
67+
68+
As far as [project governance](https://github.com/rust-lang/rfcs/blob/master/text/1068-rust-governance.md) goes, Rust is managed by a core team that sets the vision and priorities for the project, and accepts input on the design of the language via RFC proposals. There are also subteams to guide and foster development of particular areas of interest, including Rust libraries, Rust tools, and moderation of the official Rust communities. For changes which do not require an RFC, decisions are made through pull requests on the [`rustc` repository](https://github.com/rust-lang/rust).
69+
70+
<h3><a href="#what-are-some-non-goals" name="what-are-some-non-goals">
71+
What are some non-goals of Rust?
72+
</a></h3>
73+
74+
1. We do not employ any particularly cutting-edge technologies. Old, established techniques are better.
75+
2. We do not prize expressiveness, minimalism or elegance above other goals. These are desirable but subordinate goals.
76+
3. We do not intend to cover the complete feature-set of C++, or any other language. Rust should provide majority-case features.
77+
4. We do not intend to be 100% static, 100% safe, 100% reflective, or too dogmatic in any other sense. Trade-offs exist.
78+
5. We do not demand that Rust run on "every possible platform". It must eventually work without unnecessary compromises on widely-used hardware and software platforms.
79+
80+
<h3><a href="#how-does-mozilla-use-rust" name="how-does-mozilla-use-rust">
81+
In which projects is Mozilla using Rust?
82+
</a></h3>
83+
84+
The main project is [Servo](https://github.com/servo/servo), an experimental browser engine Mozilla is working on. They are also working to [integrate Rust components](https://bugzilla.mozilla.org/show_bug.cgi?id=1135640) into Firefox.
85+
86+
<h3><a href="#what-examples-are-there-of-large-rust-projects" name="what-examples-are-there-of-large-rust-projects">
87+
What examples are there of large Rust projects?
88+
</a></h3>
89+
90+
The two biggest open source Rust projects right now are [Servo](https://github.com/servo/servo) and the [Rust compiler](https://github.com/rust-lang/rust) itself.
91+
92+
<!--
93+
### What projects are good examples of idiomatic Rust code?
94+
95+
TODO: Write this answer.
96+
-->
97+
98+
<h3><a href="#how-can-i-try-rust-easily" name="how-can-i-try-rust-easily">
99+
How can I try Rust easily?
100+
</a></h3>
101+
102+
The easiest way to try Rust is through the [playpen](https://play.rust-lang.org/), an online app for writing and running Rust code. If you want to try Rust on your system, [install it](https://www.rust-lang.org/install.html) and go through the ["Learn Rust"](https://doc.rust-lang.org/stable/book/learn-rust.html) section of the book.
103+
104+
<h3><a href="#how-do-i-get-help-with-rust-issues" name="how-do-i-get-help-with-rust-issues">
105+
How do I get help with Rust issues?
106+
</a></h3>
107+
108+
There are several ways. You can:
109+
110+
- Post in [users.rust-lang.org](https://users.rust-lang.org/), the official Rust forum
111+
- Ask in the official [Rust IRC channel](https://chat.mibbit.com/?server=irc.mozilla.org&channel=%23rust) (#rust on irc.mozilla.org)
112+
- Ask on [StackOverflow](http://stackoverflow.com/questions/tagged/rust) with the "rust" tag
113+
- Post in [/r/rust](https://www.reddit.com/r/rust), the official Rust subreddit
114+
115+
<h3><a href="#why-has-rust-changed-so-much" name="why-has-rust-changed-so-much">
116+
Why has Rust changed so much over time?
117+
</a></h3>
118+
119+
Rust started with a goal of creating a safe but usable systems programming language. In pursuit of this goal it explored a lot of ideas, some of which it kept (lifetimes, traits) while others were discarded (the typestate system, green threading). Also, in the run up to 1.0 a lot of the standard library was rewritten as early designs were updated to best use Rust's features and provide quality, consistent cross-platform APIs.
120+
121+
<h3><a href="#how-does-rust-language-versioning-work" name="how-does-rust-language-versioning-work">
122+
How does Rust language versioning work?
123+
</a></h3>
124+
125+
Rust's language versioning follows [SemVer](http://semver.org/), with backwards incompatible changes of stable APIs only allowed in minor versions if those changes fix compiler bugs, patch safety holes, or change type inference to require additional annotation.
126+
127+
Rust maintains three "release channels": stable, beta, and nightly. Stable and beta are updated every six weeks, with the current nightly becoming the new beta, and the current beta becoming the new stable. Language and standard library features marked unstable or hidden behind feature gates may only be used on the nightly channel.
128+
129+
For details, read the Rust blog post ["Stability as a Deliverable."](http://blog.rust-lang.org/2014/10/30/Stability.html)
130+
131+
<h3><a href="#can-i-use-unstable-features-on-the-beta-or-stable-channel" name="can-i-use-unstable-features-on-the-beta-or-stable-channel">
132+
Can I use unstable features on the beta or stable channel?
133+
</a></h3>
134+
135+
No, you cannot. Rust works hard to provide strong guarantees about the stability of the features provided on the beta and stable channels. When something is unstable, it means that we can't provide those guarantees for it yet, and don't want people relying on it staying the same. This gives us the opportunity to try changes in the wild on the nightly channel, while still maintaining strong guarantees for people seeking stability.
136+
137+
Things stabilize all the time, and the beta and stable channels update every six weeks. If you're waiting for a feature to be available without using the nightly channel, you can locate its tracking issue by checking the [`B-unstable`](https://github.com/rust-lang/rust/issues?q=is%3Aissue+is%3Aopen+tracking+label%3AB-unstable) tag on the issue tracker.
138+
139+
<h3><a href="#what-ide-should-i-use" name="what-ide-should-i-use">
140+
What IDE should I use?
141+
</a></h3>
142+
143+
There are a number of options for development environment with Rust, all of which are detailed on the official [IDE support page](https://www.rust-lang.org/ides.html).
144+
145+
<h3><a href="#why-a-dual-mit-asl2-license" name="why-a-dual-mit-asl2-license">
146+
Why a dual MIT/ASL2 License?
147+
</a></h3>
148+
149+
The Apache license includes important protection against patent aggression, but it is not compatible with the GPL, version 2. To avoid problems using Rust with GPL2, it is alternately MIT licensed.
150+
151+
<h3><a href="#why-a-permissive-license" name="why-a-permissive-license">
152+
Why a BSD-style permissive license rather than MPL or tri-license?
153+
</a></h3>
154+
155+
This is partly due to preference of the original developer (Graydon), and partly due to the fact that languages tend to have a wider audience and more diverse set of possible embeddings and end-uses than products such as web browsers. We'd like to appeal to as many of those potential contributors as possible.
156+
44157
<h2 id="performance">Performance</h2>
45158

46159
<h3><a href="#how-fast-is-rust" name="how-fast-is-rust">
@@ -1269,118 +1382,6 @@ How do I view rustdoc documentation for a library my project depends on?
12691382

12701383
When you use `cargo doc` to generate documentation for your own project, it also generates docs for the active dependency versions. These are put into the `target/doc` directory of your project. Use `cargo doc --open` to open the docs after building them, or just open up `target/doc/index.html` yourself.
12711384

1272-
<h2 id="project">The Rust Project</h2>
1273-
1274-
<h3><a href="#what-is-this-projects-goal" name="what-is-this-projects-goal">
1275-
What is this project's goal?
1276-
</a></h3>
1277-
1278-
To design and implement a safe, concurrent, practical systems language.
1279-
1280-
Rust exists because other languages at this level of abstraction and efficiency are unsatisfactory. In particular:
1281-
1282-
1. There is too little attention paid to safety.
1283-
2. They have poor concurrency support.
1284-
3. There is a lack of practical affordances.
1285-
4. They offer limited control over resources.
1286-
1287-
Rust exists as an alternative that provides both efficient code and a comfortable level of abstraction, while improving on all four of these points.
1288-
1289-
<h3><a href="#is-this-project-controlled-by-mozilla" name="is-this-project-controlled-by-mozilla">
1290-
Is this project controlled by Mozilla?
1291-
</a></h3>
1292-
1293-
No. Rust started as Graydon Hoare's part-time side project in 2006 and remained so for over 3 years. Mozilla got involved in 2009 once the language was mature enough to run basic tests and demonstrate its core concepts. Though it remains sponsored by Mozilla, Rust is developed by a diverse community of enthusiasts from many different places around the world. The [Rust Team](https://www.rust-lang.org/team.html) is composed of both Mozilla and non-Mozilla members, and `rustc` (Rust's compiler) has had over [1,000 unique contributors](https://github.com/rust-lang/rust/) so far.
1294-
1295-
As far as [project governance](https://github.com/rust-lang/rfcs/blob/master/text/1068-rust-governance.md) goes, Rust is managed by a core team that sets the vision and priorities for the project, and accepts input on the design of the language via RFC proposals. There are also subteams to guide and foster development of particular areas of interest, including Rust libraries, Rust tools, and moderation of the official Rust communities. For changes which do not require an RFC, decisions are made through pull requests on the [`rustc` repository](https://github.com/rust-lang/rust).
1296-
1297-
<h3><a href="#what-are-some-non-goals" name="what-are-some-non-goals">
1298-
What are some non-goals of Rust?
1299-
</a></h3>
1300-
1301-
1. We do not employ any particularly cutting-edge technologies. Old, established techniques are better.
1302-
2. We do not prize expressiveness, minimalism or elegance above other goals. These are desirable but subordinate goals.
1303-
3. We do not intend to cover the complete feature-set of C++, or any other language. Rust should provide majority-case features.
1304-
4. We do not intend to be 100% static, 100% safe, 100% reflective, or too dogmatic in any other sense. Trade-offs exist.
1305-
5. We do not demand that Rust run on "every possible platform". It must eventually work without unnecessary compromises on widely-used hardware and software platforms.
1306-
1307-
<h3><a href="#how-does-mozilla-use-rust" name="how-does-mozilla-use-rust">
1308-
In which projects is Mozilla using Rust?
1309-
</a></h3>
1310-
1311-
The main project is [Servo](https://github.com/servo/servo), an experimental browser engine Mozilla is working on. They are also working to [integrate Rust components](https://bugzilla.mozilla.org/show_bug.cgi?id=1135640) into Firefox.
1312-
1313-
<h3><a href="#what-examples-are-there-of-large-rust-projects" name="what-examples-are-there-of-large-rust-projects">
1314-
What examples are there of large Rust projects?
1315-
</a></h3>
1316-
1317-
The two biggest open source Rust projects right now are [Servo](https://github.com/servo/servo) and the [Rust compiler](https://github.com/rust-lang/rust) itself.
1318-
1319-
<!--
1320-
### What projects are good examples of idiomatic Rust code?
1321-
1322-
TODO: Write this answer.
1323-
-->
1324-
1325-
<h3><a href="#how-can-i-try-rust-easily" name="how-can-i-try-rust-easily">
1326-
How can I try Rust easily?
1327-
</a></h3>
1328-
1329-
The easiest way to try Rust is through the [playpen](https://play.rust-lang.org/), an online app for writing and running Rust code. If you want to try Rust on your system, [install it](https://www.rust-lang.org/install.html) and go through the ["Learn Rust"](https://doc.rust-lang.org/stable/book/learn-rust.html) section of the book.
1330-
1331-
<h3><a href="#how-do-i-get-help-with-rust-issues" name="how-do-i-get-help-with-rust-issues">
1332-
How do I get help with Rust issues?
1333-
</a></h3>
1334-
1335-
There are several ways. You can:
1336-
1337-
- Post in [users.rust-lang.org](https://users.rust-lang.org/), the official Rust forum
1338-
- Ask in the official [Rust IRC channel](https://chat.mibbit.com/?server=irc.mozilla.org&channel=%23rust) (#rust on irc.mozilla.org)
1339-
- Ask on [StackOverflow](http://stackoverflow.com/questions/tagged/rust) with the "rust" tag
1340-
- Post in [/r/rust](https://www.reddit.com/r/rust), the official Rust subreddit
1341-
1342-
<h3><a href="#why-has-rust-changed-so-much" name="why-has-rust-changed-so-much">
1343-
Why has Rust changed so much over time?
1344-
</a></h3>
1345-
1346-
Rust started with a goal of creating a safe but usable systems programming language. In pursuit of this goal it explored a lot of ideas, some of which it kept (lifetimes, traits) while others were discarded (the typestate system, green threading). Also, in the run up to 1.0 a lot of the standard library was rewritten as early designs were updated to best use Rust's features and provide quality, consistent cross-platform APIs.
1347-
1348-
<h3><a href="#how-does-rust-language-versioning-work" name="how-does-rust-language-versioning-work">
1349-
How does Rust language versioning work?
1350-
</a></h3>
1351-
1352-
Rust's language versioning follows [SemVer](http://semver.org/), with backwards incompatible changes of stable APIs only allowed in minor versions if those changes fix compiler bugs, patch safety holes, or change type inference to require additional annotation.
1353-
1354-
Rust maintains three "release channels": stable, beta, and nightly. Stable and beta are updated every six weeks, with the current nightly becoming the new beta, and the current beta becoming the new stable. Language and standard library features marked unstable or hidden behind feature gates may only be used on the nightly channel.
1355-
1356-
For details, read the Rust blog post ["Stability as a Deliverable."](http://blog.rust-lang.org/2014/10/30/Stability.html)
1357-
1358-
<h3><a href="#can-i-use-unstable-features-on-the-beta-or-stable-channel" name="can-i-use-unstable-features-on-the-beta-or-stable-channel">
1359-
Can I use unstable features on the beta or stable channel?
1360-
</a></h3>
1361-
1362-
No, you cannot. Rust works hard to provide strong guarantees about the stability of the features provided on the beta and stable channels. When something is unstable, it means that we can't provide those guarantees for it yet, and don't want people relying on it staying the same. This gives us the opportunity to try changes in the wild on the nightly channel, while still maintaining strong guarantees for people seeking stability.
1363-
1364-
Things stabilize all the time, and the beta and stable channels update every six weeks. If you're waiting for a feature to be available without using the nightly channel, you can locate its tracking issue by checking the [`B-unstable`](https://github.com/rust-lang/rust/issues?q=is%3Aissue+is%3Aopen+tracking+label%3AB-unstable) tag on the issue tracker.
1365-
1366-
<h3><a href="#what-ide-should-i-use" name="what-ide-should-i-use">
1367-
What IDE should I use?
1368-
</a></h3>
1369-
1370-
There are a number of options for development environment with Rust, all of which are detailed on the official [IDE support page](https://www.rust-lang.org/ides.html).
1371-
1372-
<h3><a href="#why-a-dual-mit-asl2-license" name="why-a-dual-mit-asl2-license">
1373-
Why a dual MIT/ASL2 License?
1374-
</a></h3>
1375-
1376-
The Apache license includes important protection against patent aggression, but it is not compatible with the GPL, version 2. To avoid problems using Rust with GPL2, it is alternately MIT licensed.
1377-
1378-
<h3><a href="#why-a-permissive-license" name="why-a-permissive-license">
1379-
Why a BSD-style permissive license rather than MPL or tri-license?
1380-
</a></h3>
1381-
1382-
This is partly due to preference of the original developer (Graydon), and partly due to the fact that languages tend to have a wider audience and more diverse set of possible embeddings and end-uses than products such as web browsers. We'd like to appeal to as many of those potential contributors as possible.
1383-
13841385
[Vec]: https://doc.rust-lang.org/stable/std/vec/struct.Vec.html
13851386
[HashMap]: https://doc.rust-lang.org/stable/std/collections/struct.HashMap.html
13861387
[Into]: https://doc.rust-lang.org/stable/std/convert/trait.Into.html

0 commit comments

Comments
 (0)