diff --git a/src/doc/book/vectors.md b/src/doc/book/vectors.md index b09735c3feee6..f5a543d75b1b4 100644 --- a/src/doc/book/vectors.md +++ b/src/doc/book/vectors.md @@ -11,8 +11,8 @@ let v = vec![1, 2, 3, 4, 5]; // v: Vec ``` (Notice that unlike the `println!` macro we’ve used in the past, we use square -brackets `[]` with `vec!` macro. Rust allows you to use either in either situation, -this is just convention.) +brackets `[]` with `vec!` macro. Rust allows you to use either in either +situation, this is just convention.) There’s an alternate form of `vec!` for repeating an initial value: @@ -20,6 +20,12 @@ There’s an alternate form of `vec!` for repeating an initial value: let v = vec![0; 10]; // ten zeroes ``` +Vectors store their contents as contiguous arrays of `T` on the heap. This means +that they must be able to know the size of `T` at compile time (that is, how +many bytes are needed to store a `T`?). The size of some things can't be known +at compile time. For these you'll have to store a pointer to that thing: +thankfully, the [`Box`][box] type works perfectly for this. + ## Accessing elements To get the value at a particular index in the vector, we use `[]`s: @@ -113,6 +119,7 @@ Vectors have many more useful methods, which you can read about in [their API documentation][vec]. [vec]: ../std/vec/index.html +[box]: ../std/boxed/index.html [generic]: generics.html [panic]: concurrency.html#panics [get]: http://doc.rust-lang.org/std/vec/struct.Vec.html#method.get diff --git a/src/etc/tidy.py b/src/etc/tidy.py index fd3f4bf0b13b1..ea34a803ccb40 100644 --- a/src/etc/tidy.py +++ b/src/etc/tidy.py @@ -24,6 +24,15 @@ interesting_files = ['.rs', '.py', '.js', '.sh', '.c', '.h'] uninteresting_files = ['miniz.c', 'jquery', 'rust_android_dummy'] +stable_whitelist = { + 'src/bootstrap', + 'src/build_helper', + 'src/libcollectionstest', + 'src/libcore', + 'src/libstd', + 'src/rustc/std_shim', + 'src/test' +} def report_error_name_no(name, no, s): @@ -93,6 +102,7 @@ def interesting_file(f): file_counts = {ext: 0 for ext in interesting_files} all_paths = set() +needs_unstable_attr = set() try: for (dirpath, dirnames, filenames) in os.walk(src_dir): @@ -149,6 +159,9 @@ def interesting_file(f): else: if "SNAP " in line: report_warn("unmatched SNAP line: " + line) + search = re.search(r'^#!\[unstable', line) + if search: + needs_unstable_attr.discard(filename) if cr_flag in line: check_cr = False @@ -181,6 +194,9 @@ def interesting_file(f): check_cr = True check_tab = True check_linelength = True + if all(f not in filename for f in stable_whitelist) and \ + re.search(r'src/.*/lib\.rs', filename): + needs_unstable_attr.add(filename) # Put a reasonable limit on the amount of header data we use for # the licenseck @@ -195,6 +211,8 @@ def interesting_file(f): update_counts(current_name) assert len(current_contents) > 0 do_license_check(current_name, current_contents) + for f in needs_unstable_attr: + report_error_name_no(f, 1, "requires unstable attribute") except UnicodeDecodeError as e: report_err("UTF-8 decoding error " + str(e)) diff --git a/src/libcollections/vec.rs b/src/libcollections/vec.rs index 1bc9e6588adb3..270a01014c14b 100644 --- a/src/libcollections/vec.rs +++ b/src/libcollections/vec.rs @@ -8,8 +8,8 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. -//! A growable list type with heap-allocated contents, written `Vec` but -//! pronounced 'vector.' +//! A contiguous growable array type with heap-allocated contents, written +//! `Vec` but pronounced 'vector.' //! //! Vectors have `O(1)` indexing, amortized `O(1)` push (to the end) and //! `O(1)` pop (from the end). @@ -78,7 +78,7 @@ use borrow::{Cow, IntoCow}; use super::range::RangeArgument; -/// A growable list type, written `Vec` but pronounced 'vector.' +/// A contiguous growable array type, written `Vec` but pronounced 'vector.' /// /// # Examples /// diff --git a/src/librustc/session/config.rs b/src/librustc/session/config.rs index 28422989ea159..864ff40fe1074 100644 --- a/src/librustc/session/config.rs +++ b/src/librustc/session/config.rs @@ -510,7 +510,7 @@ options! {CodegenOptions, CodegenSetter, basic_codegen_options, link_args: Option> = (None, parse_opt_list, "extra arguments to pass to the linker (space separated)"), link_dead_code: bool = (false, parse_bool, - "let the linker strip dead coded (turning it on can be used for code coverage)"), + "don't let linker strip dead code (turning it on can be used for code coverage)"), lto: bool = (false, parse_bool, "perform LLVM link-time optimizations"), target_cpu: Option = (None, parse_opt_string, diff --git a/src/librustdoc/html/layout.rs b/src/librustdoc/html/layout.rs index ffcd22fa82096..975b4d3636f2d 100644 --- a/src/librustdoc/html/layout.rs +++ b/src/librustdoc/html/layout.rs @@ -122,7 +122,7 @@ r##"

Search functions by type signature (e.g. - vec -> usize) + vec -> usize or * -> vec)

diff --git a/src/librustdoc/html/static/main.js b/src/librustdoc/html/static/main.js index 8844ed82bb5e2..08f70ae9ce7a0 100644 --- a/src/librustdoc/html/static/main.js +++ b/src/librustdoc/html/static/main.js @@ -280,7 +280,7 @@ var parts = val.split("->").map(trimmer); var input = parts[0]; // sort inputs so that order does not matter - var inputs = input.split(",").map(trimmer).sort(); + var inputs = input.split(",").map(trimmer).sort().toString(); var output = parts[1]; for (var i = 0; i < nSearchWords; ++i) { @@ -296,8 +296,8 @@ // allow searching for void (no output) functions as well var typeOutput = type.output ? type.output.name : ""; - if (inputs.toString() === typeInputs.toString() && - output == typeOutput) { + if ((inputs === "*" || inputs === typeInputs.toString()) && + (output === "*" || output == typeOutput)) { results.push({id: i, index: -1, dontValidate: true}); } }