Skip to content

Commit c59f192

Browse files
committed
---
yaml --- r: 222974 b: refs/heads/master c: 4e9300c h: refs/heads/master v: v3
1 parent a8ec8c8 commit c59f192

File tree

531 files changed

+12508
-10088
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

531 files changed

+12508
-10088
lines changed

[refs]

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
---
2-
refs/heads/master: fc3df01eee84f5684bca4403dd501e08a3025035
2+
refs/heads/master: 4e9300c02b62cc8cc5ca909e8b867b5202e1e167
33
refs/heads/snap-stage3: a5c12f4e39d32af3c951b66bd2839bc0b5a1125b
44
refs/heads/try: b53c0f93eedcdedd4fd89bccc5a3a09d1c5cd23e
55
refs/tags/release-0.1: 1f5c5126e96c79d22cb7862f75304136e204f105

trunk/.gitattributes

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,4 @@
66
*.rs rust
77
src/etc/pkg/rust-logo.ico binary
88
src/etc/pkg/rust-logo.png binary
9-
src/rt/msvc/* -whitespace
10-
src/rt/valgrind/* -whitespace
119
*.woff binary

trunk/.travis.yml

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,7 @@ sudo: false
2020
before_script:
2121
- ./configure --enable-ccache
2222
script:
23-
- make tidy
24-
- make rustc-stage1 -j4
23+
- make tidy check -j4
2524

2625
env:
2726
- CXX=/usr/bin/g++-4.7

trunk/RELEASES.md

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,12 @@ Highlights
1616
jobs). It's not enabled by default, but will be "in the near
1717
future". It can be activated with the `-C codegen-units=N` flag to
1818
`rustc`.
19+
* This is the first release with [experimental support for linking
20+
with the MSVC linker and lib C on Windows (instead of using the GNU
21+
variants via MinGW)][win]. It is yet recommended only for the most
22+
intrepid Rusticians.
23+
* Benchmark compilations are showing a 30% improvement in
24+
bootstrapping over 1.1.
1925

2026
Breaking Changes
2127
----------------
@@ -31,6 +37,10 @@ Breaking Changes
3137
* [The `#[packed]` attribute is no longer silently accepted by the
3238
compiler][packed]. This attribute did nothing and code that
3339
mentioned it likely did not work as intended.
40+
* Associated type defaults are [now behind the
41+
`associated_type_defaults` feature gate][ad]. In 1.1 associated type
42+
defaults *did not work*, but could be mentioned syntactically. As
43+
such this breakage has minimal impact.
3444

3545
Language
3646
--------
@@ -46,12 +56,11 @@ Libraries
4656
`LinkedList`, `VecDeque`, `EnumSet`, `BinaryHeap`, `VecMap`,
4757
`BTreeSet` and `BTreeMap`. [RFC][extend-rfc].
4858
* The [`iter::once`] function returns an iterator that yields a single
49-
element.
50-
* The [`iter::empty`] function returns an iterator that yields no
59+
element, and [`iter::empty`] returns an iterator that yields no
5160
elements.
5261
* The [`matches`] and [`rmatches`] methods on `str` return iterators
5362
over substring matches.
54-
* [`Cell`] and [`RefCell`] both implement [`Eq`].
63+
* [`Cell`] and [`RefCell`] both implement `Eq`.
5564
* A number of methods for wrapping arithmetic are added to the
5665
integral types, [`wrapping_div`], [`wrapping_rem`],
5766
[`wrapping_neg`], [`wrapping_shl`], [`wrapping_shr`]. These are in
@@ -70,7 +79,7 @@ Libraries
7079
are used by code generators to emit implementations of [`Debug`].
7180
* `str` has new [`to_uppercase`][strup] and [`to_lowercase`][strlow]
7281
methods that convert case, following Unicode case mapping.
73-
* It is now easier to handle to poisoned locks. The [`PoisonError`]
82+
* It is now easier to handle poisoned locks. The [`PoisonError`]
7483
type, returned by failing lock operations, exposes `into_inner`,
7584
`get_ref`, and `get_mut`, which all give access to the inner lock
7685
guard, and allow the poisoned lock to continue to operate. The
@@ -144,6 +153,8 @@ Misc
144153
[dst]: https://github.com/rust-lang/rfcs/blob/master/text/0982-dst-coercion.md
145154
[parcodegen]: https://github.com/rust-lang/rust/pull/26018
146155
[packed]: https://github.com/rust-lang/rust/pull/25541
156+
[ad]: https://github.com/rust-lang/rust/pull/27382
157+
[win]: https://github.com/rust-lang/rust/pull/25350
147158

148159
Version 1.1.0 (June 2015)
149160
=========================

trunk/configure

Lines changed: 41 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -601,7 +601,9 @@ valopt llvm-root "" "set LLVM root"
601601
valopt python "" "set path to python"
602602
valopt jemalloc-root "" "set directory where libjemalloc_pic.a is located"
603603
valopt build "${DEFAULT_BUILD}" "GNUs ./configure syntax LLVM build triple"
604-
valopt android-cross-path "/opt/ndk_standalone" "Android NDK standalone path"
604+
valopt android-cross-path "/opt/ndk_standalone" "Android NDK standalone path (deprecated)"
605+
valopt arm-linux-androideabi-ndk "" "arm-linux-androideabi NDK standalone path"
606+
valopt aarch64-linux-android-ndk "" "aarch64-linux-android NDK standalone path"
605607
valopt release-channel "dev" "the name of the release channel to build"
606608
valopt musl-root "/usr/local" "MUSL root installation directory"
607609

@@ -1003,11 +1005,9 @@ then
10031005
(''|*clang)
10041006
CFG_CLANG_REPORTED_VERSION=$($CFG_CC --version | grep version)
10051007

1006-
if [[ $CFG_CLANG_REPORTED_VERSION == *"(based on LLVM "* ]]
1007-
then
1008+
if echo $CFG_CLANG_REPORTED_VERSION | grep -q "(based on LLVM "; then
10081009
CFG_CLANG_VERSION=$(echo $CFG_CLANG_REPORTED_VERSION | sed 's/.*(based on LLVM \(.*\))/\1/')
1009-
elif [[ $CFG_CLANG_REPORTED_VERSION == "Apple LLVM"* ]]
1010-
then
1010+
elif echo $CFG_CLANG_REPORTED_VERSION | grep -q "Apple LLVM"; then
10111011
CFG_OSX_CLANG_VERSION=$(echo $CFG_CLANG_REPORTED_VERSION | sed 's/.*version \(.*\) .*/\1/')
10121012
else
10131013
CFG_CLANG_VERSION=$(echo $CFG_CLANG_REPORTED_VERSION | sed 's/.*version \(.*\) .*/\1/')
@@ -1112,20 +1112,24 @@ do
11121112
fi
11131113

11141114
case $i in
1115-
arm-linux-androideabi)
1116-
1117-
if [ ! -f $CFG_ANDROID_CROSS_PATH/bin/arm-linux-androideabi-gcc ]
1118-
then
1119-
err "NDK $CFG_ANDROID_CROSS_PATH/bin/arm-linux-androideabi-gcc not found"
1120-
fi
1121-
if [ ! -f $CFG_ANDROID_CROSS_PATH/bin/arm-linux-androideabi-g++ ]
1115+
*android*)
1116+
upper_snake_target=$(echo "$i" | tr '[:lower:]' '[:upper:]' | tr '\-' '\_')
1117+
eval ndk=\$"CFG_${upper_snake_target}_NDK"
1118+
if [ -z "$ndk" ]
11221119
then
1123-
err "NDK $CFG_ANDROID_CROSS_PATH/bin/arm-linux-androideabi-g++ not found"
1124-
fi
1125-
if [ ! -f $CFG_ANDROID_CROSS_PATH/bin/arm-linux-androideabi-ar ]
1126-
then
1127-
err "NDK $CFG_ANDROID_CROSS_PATH/bin/arm-linux-androideabi-ar not found"
1120+
ndk=$CFG_ANDROID_CROSS_PATH
1121+
eval "CFG_${upper_snake_target}_NDK"=$CFG_ANDROID_CROSS_PATH
1122+
warn "generic/default Android NDK option is deprecated (use --$i-ndk option instead)"
11281123
fi
1124+
1125+
# Perform a basic sanity check of the NDK
1126+
for android_ndk_tool in "$ndk/bin/$i-gcc" "$ndk/bin/$i-g++" "$ndk/bin/$i-ar"
1127+
do
1128+
if [ ! -f $android_ndk_tool ]
1129+
then
1130+
err "NDK tool $android_ndk_tool not found (bad or missing --$i-ndk option?)"
1131+
fi
1132+
done
11291133
;;
11301134

11311135
arm-apple-darwin)
@@ -1177,8 +1181,13 @@ do
11771181
# INCLUDE and LIB variables for MSVC so we can set those in the
11781182
# build system as well.
11791183
install=$(reg QUERY \
1180-
'HKLM\SOFTWARE\Wow6432Node\Microsoft\VisualStudio\12.0' \
1184+
'HKLM\SOFTWARE\Wow6432Node\Microsoft\VisualStudio\14.0' \
11811185
-v InstallDir)
1186+
if [ -z "$install" ]; then
1187+
install=$(reg QUERY \
1188+
'HKLM\SOFTWARE\Wow6432Node\Microsoft\VisualStudio\12.0' \
1189+
-v InstallDir)
1190+
fi
11821191
need_ok "couldn't find visual studio install root"
11831192
CFG_MSVC_ROOT=$(echo "$install" | grep InstallDir | sed 's/.*REG_SZ[ ]*//')
11841193
CFG_MSVC_ROOT=$(dirname "$CFG_MSVC_ROOT")
@@ -1460,12 +1469,22 @@ do
14601469

14611470
msg "configuring LLVM with:"
14621471
msg "$CMAKE_ARGS"
1472+
case "$CFG_MSVC_ROOT" in
1473+
*14.0*)
1474+
generator="Visual Studio 14 2015"
1475+
;;
1476+
*12.0*)
1477+
generator="Visual Studio 12 2013"
1478+
;;
1479+
*)
1480+
err "can't determine generator for LLVM cmake"
1481+
;;
1482+
esac
14631483
case "$t" in
14641484
x86_64-*)
1465-
generator="Visual Studio 12 2013 Win64"
1485+
generator="$generator Win64"
14661486
;;
14671487
i686-*)
1468-
generator="Visual Studio 12 2013"
14691488
;;
14701489
*)
14711490
err "can only build LLVM for x86 platforms"
@@ -1667,7 +1686,8 @@ putvar CFG_HOST
16671686
putvar CFG_TARGET
16681687
putvar CFG_LIBDIR_RELATIVE
16691688
putvar CFG_DISABLE_MANAGE_SUBMODULES
1670-
putvar CFG_ANDROID_CROSS_PATH
1689+
putvar CFG_AARCH64_LINUX_ANDROID_NDK
1690+
putvar CFG_ARM_LINUX_ANDROIDEABI_NDK
16711691
putvar CFG_MANDIR
16721692

16731693
# Avoid spurious warnings from clang by feeding it original source on

trunk/mk/cfg/aarch64-linux-android.mk

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
# aarch64-linux-android configuration
22
# CROSS_PREFIX_aarch64-linux-android-
3-
CC_aarch64-linux-android=$(CFG_ANDROID_CROSS_PATH)/bin/aarch64-linux-android-gcc
4-
CXX_aarch64-linux-android=$(CFG_ANDROID_CROSS_PATH)/bin/aarch64-linux-android-g++
5-
CPP_aarch64-linux-android=$(CFG_ANDROID_CROSS_PATH)/bin/aarch64-linux-android-gcc -E
6-
AR_aarch64-linux-android=$(CFG_ANDROID_CROSS_PATH)/bin/aarch64-linux-android-ar
3+
CC_aarch64-linux-android=$(CFG_AARCH64_LINUX_ANDROID_NDK)/bin/aarch64-linux-android-gcc
4+
CXX_aarch64-linux-android=$(CFG_AARCH64_LINUX_ANDROID_NDK)/bin/aarch64-linux-android-g++
5+
CPP_aarch64-linux-android=$(CFG_AARCH64_LINUX_ANDROID_NDK)/bin/aarch64-linux-android-gcc -E
6+
AR_aarch64-linux-android=$(CFG_AARCH64_LINUX_ANDROID_NDK)/bin/aarch64-linux-android-ar
77
CFG_LIB_NAME_aarch64-linux-android=lib$(1).so
88
CFG_STATIC_LIB_NAME_aarch64-linux-android=lib$(1).a
99
CFG_LIB_GLOB_aarch64-linux-android=lib$(1)-*.so

trunk/mk/cfg/arm-linux-androideabi.mk

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
# arm-linux-androideabi configuration
2-
CC_arm-linux-androideabi=$(CFG_ANDROID_CROSS_PATH)/bin/arm-linux-androideabi-gcc
3-
CXX_arm-linux-androideabi=$(CFG_ANDROID_CROSS_PATH)/bin/arm-linux-androideabi-g++
4-
CPP_arm-linux-androideabi=$(CFG_ANDROID_CROSS_PATH)/bin/arm-linux-androideabi-gcc -E
5-
AR_arm-linux-androideabi=$(CFG_ANDROID_CROSS_PATH)/bin/arm-linux-androideabi-ar
2+
CC_arm-linux-androideabi=$(CFG_ARM_LINUX_ANDROIDEABI_NDK)/bin/arm-linux-androideabi-gcc
3+
CXX_arm-linux-androideabi=$(CFG_ARM_LINUX_ANDROIDEABI_NDK)/bin/arm-linux-androideabi-g++
4+
CPP_arm-linux-androideabi=$(CFG_ARM_LINUX_ANDROIDEABI_NDK)/bin/arm-linux-androideabi-gcc -E
5+
AR_arm-linux-androideabi=$(CFG_ARM_LINUX_ANDROIDEABI_NDK)/bin/arm-linux-androideabi-ar
66
CFG_LIB_NAME_arm-linux-androideabi=lib$(1).so
77
CFG_STATIC_LIB_NAME_arm-linux-androideabi=lib$(1).a
88
CFG_LIB_GLOB_arm-linux-androideabi=lib$(1)-*.so

trunk/mk/ctags.mk

Lines changed: 5 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -15,24 +15,11 @@
1515

1616
.PHONY: TAGS.emacs TAGS.vi
1717

18-
# This is using a blacklist approach, probably more durable than a whitelist.
19-
# We exclude: external dependencies (llvm, rt/{msvc,vg}),
20-
# tests (compiletest, test) and a couple of other things (rt/arch, etc)
21-
CTAGS_LOCATIONS=$(patsubst ${CFG_SRC_DIR}src/llvm,, \
22-
$(patsubst ${CFG_SRC_DIR}src/compiletest,, \
23-
$(patsubst ${CFG_SRC_DIR}src/test,, \
24-
$(patsubst ${CFG_SRC_DIR}src/etc,, \
25-
$(patsubst ${CFG_SRC_DIR}src/rt,, \
26-
$(patsubst ${CFG_SRC_DIR}src/rt/arch,, \
27-
$(patsubst ${CFG_SRC_DIR}src/rt/msvc,, \
28-
$(patsubst ${CFG_SRC_DIR}src/rt/vg,, \
29-
$(wildcard ${CFG_SRC_DIR}src/*) $(wildcard ${CFG_SRC_DIR}src/rt/*) \
30-
))))))))
31-
CTAGS_OPTS=--options="${CFG_SRC_DIR}src/etc/ctags.rust" --languages=-javascript --recurse ${CTAGS_LOCATIONS}
32-
# We could use `--languages=Rust`, but there is value in producing tags for the
33-
# C++ parts of the code base too (at the time of writing, those are .h and .cpp
34-
# files in src/rt, src/rt/sync and src/rustllvm); we mainly just want to
35-
# exclude the external dependencies.
18+
CTAGS_LOCATIONS=$(wildcard ${CFG_SRC_DIR}src/lib*)
19+
CTAGS_LOCATIONS=$(patsubst ${CFG_SRC_DIR}src/librust%,, \
20+
$(patsubst ${CFG_SRC_DIR}src/lib%test,, \
21+
$(wildcard ${CFG_SRC_DIR}src/lib*))) ${CFG_SRC_DIR}src/libtest
22+
CTAGS_OPTS=--options="${CFG_SRC_DIR}src/etc/ctags.rust" --languages=Rust --recurse ${CTAGS_LOCATIONS}
3623

3724
TAGS.emacs:
3825
ctags -e -f $@ ${CTAGS_OPTS}

trunk/mk/docs.mk

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,7 @@ ERR_IDX_GEN = $(RPATH_VAR2_T_$(CFG_BUILD)_H_$(CFG_BUILD)) $(ERR_IDX_GEN_EXE)
7777

7878
D := $(S)src/doc
7979

80-
DOC_TARGETS := trpl style error-index
80+
DOC_TARGETS := trpl nomicon style error-index
8181
COMPILER_DOC_TARGETS :=
8282
DOC_L10N_TARGETS :=
8383

@@ -287,6 +287,13 @@ doc/book/index.html: $(RUSTBOOK_EXE) $(wildcard $(S)/src/doc/trpl/*.md) | doc/
287287
$(Q)rm -rf doc/book
288288
$(Q)$(RUSTBOOK) build $(S)src/doc/trpl doc/book
289289

290+
nomicon: doc/nomicon/index.html
291+
292+
doc/nomicon/index.html: $(RUSTBOOK_EXE) $(wildcard $(S)/src/doc/nomicon/*.md) | doc/
293+
@$(call E, rustbook: $@)
294+
$(Q)rm -rf doc/nomicon
295+
$(Q)$(RUSTBOOK) build $(S)src/doc/nomicon doc/nomicon
296+
290297
style: doc/style/index.html
291298

292299
doc/style/index.html: $(RUSTBOOK_EXE) $(wildcard $(S)/src/doc/style/*.md) | doc/

trunk/mk/main.mk

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
######################################################################
1414

1515
# The version number
16-
CFG_RELEASE_NUM=1.3.0
16+
CFG_RELEASE_NUM=1.4.0
1717

1818
# An optional number to put after the label, e.g. '.2' -> '-beta.2'
1919
# NB Make sure it starts with a dot to conform to semver pre-release

trunk/mk/tests.mk

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -162,7 +162,8 @@ $(foreach doc,$(DOCS), \
162162
$(eval $(call DOCTEST,md-$(doc),$(S)src/doc/$(doc).md)))
163163
$(foreach file,$(wildcard $(S)src/doc/trpl/*.md), \
164164
$(eval $(call DOCTEST,$(file:$(S)src/doc/trpl/%.md=trpl-%),$(file))))
165-
165+
$(foreach file,$(wildcard $(S)src/doc/nomicon/*.md), \
166+
$(eval $(call DOCTEST,$(file:$(S)src/doc/nomicon/%.md=nomicon-%),$(file))))
166167
######################################################################
167168
# Main test targets
168169
######################################################################

trunk/src/doc/nomicon/README.md

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
% The Rustonomicon
2+
3+
#### The Dark Arts of Advanced and Unsafe Rust Programming
4+
5+
# NOTE: This is a draft document, and may contain serious errors
6+
7+
> Instead of the programs I had hoped for, there came only a shuddering blackness
8+
and ineffable loneliness; and I saw at last a fearful truth which no one had
9+
ever dared to breathe before — the unwhisperable secret of secrets — The fact
10+
that this language of stone and stridor is not a sentient perpetuation of Rust
11+
as London is of Old London and Paris of Old Paris, but that it is in fact
12+
quite unsafe, its sprawling body imperfectly embalmed and infested with queer
13+
animate things which have nothing to do with it as it was in compilation.
14+
15+
This book digs into all the awful details that are necessary to understand in
16+
order to write correct Unsafe Rust programs. Due to the nature of this problem,
17+
it may lead to unleashing untold horrors that shatter your psyche into a billion
18+
infinitesimal fragments of despair.
19+
20+
Should you wish a long and happy career of writing Rust programs, you should
21+
turn back now and forget you ever saw this book. It is not necessary. However
22+
if you intend to write unsafe code -- or just want to dig into the guts of the
23+
language -- this book contains invaluable information.
24+
25+
Unlike [The Book][trpl] we will be assuming considerable prior knowledge. In
26+
particular, you should be comfortable with basic systems programming and Rust.
27+
If you don't feel comfortable with these topics, you should consider [reading
28+
The Book][trpl] first. Though we will not be assuming that you have, and will
29+
take care to occasionally give a refresher on the basics where appropriate. You
30+
can skip straight to this book if you want; just know that we won't be
31+
explaining everything from the ground up.
32+
33+
To be clear, this book goes into deep detail. We're going to dig into
34+
exception-safety, pointer aliasing, memory models, and even some type-theory.
35+
We will also be spending a lot of time talking about the different kinds
36+
of safety and guarantees.
37+
38+
[trpl]: ../book/

trunk/src/doc/nomicon/SUMMARY.md

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
# Summary
2+
3+
* [Meet Safe and Unsafe](meet-safe-and-unsafe.md)
4+
* [How Safe and Unsafe Interact](safe-unsafe-meaning.md)
5+
* [Working with Unsafe](working-with-unsafe.md)
6+
* [Data Layout](data.md)
7+
* [repr(Rust)](repr-rust.md)
8+
* [Exotically Sized Types](exotic-sizes.md)
9+
* [Other reprs](other-reprs.md)
10+
* [Ownership](ownership.md)
11+
* [References](references.md)
12+
* [Lifetimes](lifetimes.md)
13+
* [Limits of Lifetimes](lifetime-mismatch.md)
14+
* [Lifetime Elision](lifetime-elision.md)
15+
* [Unbounded Lifetimes](unbounded-lifetimes.md)
16+
* [Higher-Rank Trait Bounds](hrtb.md)
17+
* [Subtyping and Variance](subtyping.md)
18+
* [Drop Check](dropck.md)
19+
* [PhantomData](phantom-data.md)
20+
* [Splitting Borrows](borrow-splitting.md)
21+
* [Type Conversions](conversions.md)
22+
* [Coercions](coercions.md)
23+
* [The Dot Operator](dot-operator.md)
24+
* [Casts](casts.md)
25+
* [Transmutes](transmutes.md)
26+
* [Uninitialized Memory](uninitialized.md)
27+
* [Checked](checked-uninit.md)
28+
* [Drop Flags](drop-flags.md)
29+
* [Unchecked](unchecked-uninit.md)
30+
* [Ownership Based Resource Management](obrm.md)
31+
* [Constructors](constructors.md)
32+
* [Destructors](destructors.md)
33+
* [Leaking](leaking.md)
34+
* [Unwinding](unwinding.md)
35+
* [Exception Safety](exception-safety.md)
36+
* [Poisoning](poisoning.md)
37+
* [Concurrency](concurrency.md)
38+
* [Races](races.md)
39+
* [Send and Sync](send-and-sync.md)
40+
* [Atomics](atomics.md)
41+
* [Implementing Vec](vec.md)
42+
* [Layout](vec-layout.md)
43+
* [Allocating](vec-alloc.md)
44+
* [Push and Pop](vec-push-pop.md)
45+
* [Deallocating](vec-dealloc.md)
46+
* [Deref](vec-deref.md)
47+
* [Insert and Remove](vec-insert-remove.md)
48+
* [IntoIter](vec-into-iter.md)
49+
* [RawVec](vec-raw.md)
50+
* [Drain](vec-drain.md)
51+
* [Handling Zero-Sized Types](vec-zsts.md)
52+
* [Final Code](vec-final.md)
53+
* [Implementing Arc and Mutex](arc-and-mutex.md)
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
% Implementing Arc and Mutex
2+
3+
Knowing the theory is all fine and good, but the *best* way to understand
4+
something is to use it. To better understand atomics and interior mutability,
5+
we'll be implementing versions of the standard library's Arc and Mutex types.
6+
7+
TODO: ALL OF THIS OMG

0 commit comments

Comments
 (0)