Add note about string indexing.

Thanks @chris-morgan!
ignore uninitialized submodules when checking if ./configure should be re-run
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
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.
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
auto merge of #17108 : steveklabnik/rust/explicitness, r=alexcrichton

I missed some annotations, and some were in a different style.
micro-optimize dynamic allocation alignment

Previously, some parts of this optimization were impossible because the
alignment passed to the free function was not correct. That was fully
fixed by #17012.

Closes #17092
implement sized deallocation

Closes #13994
auto merge of #17095 : thestinger/rust/alloc, r=alexcrichton

Previously, some parts of this optimization were impossible because the
alignment passed to the free function was not correct. That was fully
fixed by #17012.

Closes #17092
auto merge of #17109 : brson/rust/win64snap, r=alexcrichton
auto merge of #17129 : epdtry/rust/misc/llvm-root-reconfig, r=brson

Currently `./configure --llvm-root=...` and similar flags will break incremental builds by forcing reconfiguration on every `make`.  This happens because `reconfig.mk` incorrectly treats submodules in the `-` (uninitialized) state as requiring reconfiguration, and `./configure` deliberately deinitializes unneeded submodules.  The fix is to reconfigure only when submodules are in the `+` state (wrong commit checked out).