Add note about string indexing.

Thanks @chris-morgan!
Change method lookup to require invariance for mutable references

Fixes #17033.
Fixes #15965.
ignore uninitialized submodules when checking if ./configure should be re-run
fixes for Box<[T]>

The pointer in the slice must not be null, because enum representations
make that assumption. The `exchange_malloc` function returns a non-null
sentinel for the zero size case, and it must not be passed to the
`exchange_free` lang item.

Since the length is always equal to the true capacity, a branch on the
length is enough for most types. Slices of zero size types are
statically special cased to never attempt deallocation. This is the same
implementation as `Vec<T>`.

Closes #14395
Decouple string and argument pieces
Optimize for the most common cases of `format!`

Format specs are ignored and not stored in case they're all default.
Restore default formatting parameters during iteration.
Pass `None` instead of empty slices of format specs to take advantage
of non-nullable pointer optimization.

Generate a call to one of two functions of `fmt::Argument`.
coretest: Ensure that pointer formatting flags are cleaned up
Add links to forums in README.md, including discuss.rust-lang.org
Fix snapshot.py for win64
Fix naming of windows installer
Implement tuple and tuple struct indexing

This allows code to access the fields of tuples and tuple structs:

    let x = (1i, 2i);
    assert_eq!(x.1, 2);

    struct Point(int, int);
    let origin = Point(0, 0);
    assert_eq!(origin.0, 0);
    assert_eq!(origin.1, 0);
Avoid ever constructing cyclic types in the first place, rather than detecting them in resolve. This simplifies logic elsewhere in the compiler. cc #5527
Be explicit with rustdoc.

I missed some annotations, and some were in a different style.
Add section about Str trait
auto merge of #16662 : pczarn/rust/format-fmtstr-opt, r=brson

Based on an observation that strings and arguments are always interleaved, thanks to #15832. Additionally optimize invocations where formatting parameters are unspecified for all arguments, e.g. `"{} {:?} {:x}"`, by emptying the `__STATIC_FMTARGS` array. Next, `Arguments::new` replaces an empty slice with `None` so that passing empty `__STATIC_FMTARGS` generates slightly less machine code when `Arguments::new` is inlined. Furthermore, formatting itself treats these cases separately without making redundant copies of formatting parameters.

All in all, this adds a single mov instruction per `write!` in most cases. That's why code size has increased.
Prefer lualatex, xelatex, pdflatex, in that order. #12804
librustc: Obsolete the old external crate renaming syntax.

Instead of `extern crate foo = bar`, write `extern crate bar as foo`.
Instead of `extern crate baz = "quux"`, write `extern crate "quux" as
baz`.

Closes #16461.

[breaking-change]
auto merge of #16824 : steveklabnik/rust/string_guide_improvements, r=alexcrichton

A few steps toward https://github.com/rust-lang/rust/issues/15994
auto merge of #17048 : pcwalton/rust/remove-old-import-renaming-syntax, r=brson

Instead of `extern crate foo = bar`, write `extern crate bar as foo`.
Instead of `extern crate baz = "quux"`, write `extern crate "quux" as
baz`.

Closes #16461.

[breaking-change]

r? @brson
Don't ICE on macros with -Z show-span

Closes #17115