├── .DS_Store
├── .gitignore
├── Advanced Lifetimes.key
├── LICENSE
├── Ownership and Borrowing.key
├── Ownership and Borrowing.pdf
├── Ownership-and-Borrowing-Script.html
├── Ownership-and-Borrowing-Script.md
├── Structs and such.key
├── Threading.key
├── Traits.key
└── other
├── Lang Next.key
├── Data
│ ├── mt0@2x-1998.jpg
│ ├── mt1@2x-2000.jpg
│ ├── mt3@2x-2001.jpg
│ ├── pasted-image-2042.png
│ ├── pasted-image-4491.png
│ ├── pasted-image-small-2044.png
│ ├── pasted-image-small-4492.png
│ ├── st0-10432.jpg
│ ├── st1-2009.jpg
│ ├── st10-9817.jpg
│ ├── st11-9902.jpg
│ ├── st13-6503.jpg
│ ├── st14-5774.jpg
│ ├── st14-6267.jpg
│ ├── st15-9904.jpg
│ ├── st16-9913.jpg
│ ├── st17-8733.jpg
│ ├── st17-9916.jpg
│ ├── st19-5773.jpg
│ ├── st19-9929.jpg
│ ├── st2-7836.jpg
│ ├── st21-8309.jpg
│ ├── st22-10429.jpg
│ ├── st22-9239.jpg
│ ├── st24-10344.jpg
│ ├── st24-8700.jpg
│ ├── st25-9245.jpg
│ ├── st26-10251.jpg
│ ├── st29-10175.jpg
│ ├── st29-9454.jpg
│ ├── st3-8035.jpg
│ ├── st30-9467.jpg
│ ├── st34-8903.jpg
│ ├── st34-9957.jpg
│ ├── st35-8969.jpg
│ ├── st35-9962.jpg
│ ├── st37-5654.jpg
│ ├── st37-6873.jpg
│ ├── st38-5716.jpg
│ ├── st38-8819.jpg
│ ├── st39-5718.jpg
│ ├── st4-10437.jpg
│ ├── st41-10436.jpg
│ ├── st41-5729.jpg
│ ├── st41-6687.jpg
│ ├── st41-8772.jpg
│ ├── st42-5169.jpg
│ ├── st45-5179.jpg
│ ├── st45-8127.jpg
│ ├── st46-10186.jpg
│ ├── st47-10192.jpg
│ ├── st48-5247.jpg
│ ├── st48-6874.jpg
│ ├── st5-10330.jpg
│ ├── st50-5768.jpg
│ ├── st50-9977.jpg
│ ├── st51-10352.jpg
│ ├── st55-10010.jpg
│ ├── st57-6324.jpg
│ ├── st6-10359.jpg
│ ├── st8-4012.jpg
│ ├── st8-9813.jpg
│ └── st9-9814.jpg
├── Index.zip
├── Metadata
│ ├── BuildVersionHistory.plist
│ ├── DocumentIdentifier
│ └── Properties.plist
├── preview-micro.jpg
├── preview-web.jpg
└── preview.jpg
└── Rust Tutorial.key
├── Data
├── mt0@2x-1998.jpg
├── mt1@2x-2000.jpg
├── pasted-image-2006.png
├── pasted-image-2073.png
├── pasted-image-2298.png
├── pasted-image-3917.png
├── pasted-image-5220.png
├── pasted-image-small-2007.png
├── pasted-image-small-2074.png
├── pasted-image-small-2299.png
├── pasted-image-small-3918.png
├── pasted-image-small-5221.png
├── st0-3384.jpg
├── st1-3907.jpg
├── st10-6932.jpg
├── st11-2075.jpg
├── st11-3406.jpg
├── st11-6776.jpg
├── st12-2076.jpg
├── st12-4805.jpg
├── st13-3536.jpg
├── st17-4875.jpg
├── st19-4395.jpg
├── st19-4594.jpg
├── st2-3875.jpg
├── st20-4646.jpg
├── st21-4656.jpg
├── st23-3404.jpg
├── st23-4678.jpg
├── st24-4752.jpg
├── st25-4758.jpg
├── st29-5018.jpg
├── st3-3504.jpg
├── st30-5016.jpg
├── st31-5043.jpg
├── st33-5070.jpg
├── st34-6934.jpg
├── st35-6935.jpg
├── st36-5163.jpg
├── st37-5230.jpg
├── st37-6127.jpg
├── st38-5431.jpg
├── st39-5467.jpg
├── st39-5584.jpg
├── st39-5869.jpg
├── st39-6013.jpg
├── st4-2011.jpg
├── st4-3910.jpg
├── st4-4145.jpg
├── st41-6048.jpg
├── st42-6029.jpg
├── st43-6125.jpg
├── st45-6076.jpg
├── st45-6135.jpg
├── st46-6126.jpg
├── st48-6129.jpg
├── st48-6226.jpg
├── st49-6262.jpg
├── st5-4011.jpg
├── st50-6917.jpg
├── st51-6928.jpg
├── st54-6523.jpg
├── st55-6586.jpg
├── st55-6639.jpg
├── st57-6727.jpg
├── st58-6772.jpg
├── st6-3942.jpg
├── st6-4152.jpg
├── st7-2072.jpg
├── st7-4115.jpg
├── st8-4138.jpg
├── st9-2238.jpg
└── st9-4140.jpg
├── Index.zip
├── Metadata
├── BuildVersionHistory.plist
├── DocumentIdentifier
└── Properties.plist
├── preview-micro.jpg
├── preview-web.jpg
└── preview.jpg
/.DS_Store:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nikomatsakis/rust-tutorials-keynote/e56b23f5af8a118f06afd94d6536456238f6b4ac/.DS_Store
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | *~
2 | .DS_Store
--------------------------------------------------------------------------------
/Advanced Lifetimes.key:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nikomatsakis/rust-tutorials-keynote/e56b23f5af8a118f06afd94d6536456238f6b4ac/Advanced Lifetimes.key
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | These tutorials were created by Nicholas Matsakis but are freely
2 | licensed under the CC0 terms described here:
3 |
4 | http://creativecommons.org/publicdomain/zero/1.0/
5 |
6 | That is, I have dedicated the work to the public domain by waiving all
7 | of my rights to the work worldwide under copyright law, including all
8 | related and neighboring rights, to the extent allowed by law.
9 |
10 | Note that I make no warranties about the work, and disclaims liability
11 | for all uses of the work, to the fullest extent permitted by
12 | applicable law.
13 |
14 | You can copy, modify, distribute and perform the work, even for
15 | commercial purposes, all without asking permission. See the URL above
16 | for further details.
17 |
--------------------------------------------------------------------------------
/Ownership and Borrowing.key:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nikomatsakis/rust-tutorials-keynote/e56b23f5af8a118f06afd94d6536456238f6b4ac/Ownership and Borrowing.key
--------------------------------------------------------------------------------
/Ownership and Borrowing.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nikomatsakis/rust-tutorials-keynote/e56b23f5af8a118f06afd94d6536456238f6b4ac/Ownership and Borrowing.pdf
--------------------------------------------------------------------------------
/Ownership-and-Borrowing-Script.html:
--------------------------------------------------------------------------------
1 |
Slide 1
2 |
3 | Hello and welcome to this Rust tutorial. We'll be focusing on
4 | Ownership and Borrowing, which are the core ideas that make Rust
5 | Rust. It lays the foundation for all the other tutorials out there.
6 |
7 | My name is Nicholas Matsakis and I'll be your humble narrator
8 | today. I'm a member of the core team and I've been working on Rust
9 | since around 2011.
10 |
11 | Slide 2
12 |
13 | So if you're here you're probably got some idea what Rust is all
14 | about, but let me just give you the elevator pitch. Rust is a language
15 | that aims to offer you comparable power and convenience to what you
16 | would find in a high-level language, like Python, Ruby, or Java, but
17 | with all the efficiency that you can wring out of a language like C or
18 | C++. If you're wondering how this is possible, that's exactly what
19 | this tutorial is all about. Ownership and borrowing are the core
20 | concepts that lets us pull together these two ends of the spectrum.
21 |
22 | So, this slogan is an accurate summary of what Rust offers, but
23 | frankly I find it a bit dry. So let me offer you something
24 | a bit more dramatic.
25 |
26 | Slide 3
27 |
28 | Ah yes, that's better! You're feeling it now, right?
29 |
30 | click.
31 |
32 | Wait for it...
33 |
34 | click.
35 |
36 | There we go. "Hack without fear." This is a slogan coined by Felix
37 | Klock a few years back and I find it very apt. The idea is that Rust
38 | makes it easy to do awesome feats that, in the past, might have seemed
39 | too risky. Let me give you two example scenarios.
40 |
41 | Imagine you've got some Ruby code and it's running too slow. The usual
42 | solution to this is to rewrite your inner loop in C++ as a Ruby
43 | plugin, but that carries a lot of risk -- now even a small mistake,
44 | like an out of bounds array index, can carry catastrophic
45 | consequences, like a crash or a security vulnerability. But you can
46 | use Rust to write that plugin instead -- we offer a C ABI and we don't
47 | require a garbage collector or other runtime, so you can just plug
48 | Rust code right in where you would have used C. Now you get the
49 | performance boost you were looking for, but without the risk.
50 |
51 | Or perhaps you've got a bit of code dominated by some sequential loop
52 | and you're finding it's too slow. You'd like to use your multicore
53 | laptop to run those loop iterations in parallel. But you're afraid: it
54 | seems like that should be safe, but maybe you've forgotten about a
55 | shared counter or something that's going to lead to an occasional and
56 | hard to track down problem like a data-race. In Rust, you don't have
57 | to worry: the type system guarantees no data races, so you can add
58 | parallelism freely, secure in the knowledge that, if your code
59 | compiles, it is data-race free. This is something that even GC-based
60 | languages like Java can't offer.
61 |
62 | Interestingly, you may also find that you have more opportunities for
63 | parallelism in the first place. This is because the ownership and
64 | borrowing system that Rust uses encourages you to write well-factored
65 | code and avoid the deeply entangled object graphs that cause such
66 | trouble with threading -- and frankly which make code hard to
67 | understand even without threading.
68 |
69 | Slide 4
70 |
71 | All right, that was a lot of abstract talking, so let try to make
72 | things a bit more concrete. I'm going to walk you very briefly through
73 | some code examples here. The idea is just to give you a feeling of
74 | what Rust has to offer; I'm not going to go into depth -- that will
75 | come later.
76 |
77 | This first example computes the dot-product of two vectors. In case
78 | you, like me, have done your best to forget everything you learned in
79 | High School, let me remind you that you compute a dot product by
80 | multiplying corresponding indices from each vector. So the 0th and the
81 | 0th, 1th and the 1th, etc, and then summing up each of those products.
82 |
83 | This code is written using Rust's iterators. If you've done any
84 | Python coding, this will feel pretty familiar -- in fact, this code
85 | could almost be Python. We start out iterating over vec1
and then
86 | zip
that with vec2
, which means we are now iterating over a series
87 | of pairs -- we can then map each of those pairs to multiply the two
88 | elements together. You see that map
takes a closure, which is
89 | basically an anonymous function. We then sum the resulting numbers to
90 | get the final result.
91 |
92 | So, this looks like Python, but it doesn't run like Python. If
93 | you compile this example with full optimizations, what you get is some
94 | pretty tight assembly.
95 |
96 | Slide 5
97 |
98 | Here is what I got the last time I tried it -- in fact, what's
99 | happened is the compiler has even vectorized the loop, which means
100 | that it's using SIMD instructions to multiple several elements of the
101 | vector simultaneously!
102 |
103 | Slide 6
104 |
105 | OK, that was cool, but let me show you something even cooler. Here
106 | I've added a declaration to the program that it would like to use the
107 | external library rayon
-- in Rust speak, we call libraries "crates".
108 | Rayon is something that I wrote to allow for easy, drop-in
109 | parallelism. In particular, it allows me to simply change that call to
110 | iter
into par_iter
in order to enable parallel execution of this
111 | iterator chain. So now I get the same computation but executed in
112 | parallel.
113 |
114 | There are a couple of cool things here. First, note that Rayon is just
115 | a library -- it's not part of the core language. In fact, it wasn't
116 | even a particularly hard library to write: I think I wrote the first
117 | version of Rayon in about a weekend. And yet it is able to do these
118 | very powerful and fundamental extensions. Rust is very much a language
119 | that is designed to have a minimal core extended by powerful
120 | libraries.
121 |
122 | Second, Rayon isn't really your only choice for this sort of work. There
123 | are other options available.
124 |
125 | So what does it feel like to use Rust? Before I get into the tutorial
126 | proper, I want to skim through some example bits of Rust code. I don't
127 | expect you to understand the syntax yet if you haven't done any Rust
128 | programming before.
129 |
130 | Here is a function called sum_pos
that iterates over an array
131 | of integers. It will filter that array to select just the positive
132 | integers and sum them up. What I want to point out is that we are able
133 | to use these pretty high-level concepts, like iterator chains and closures,
134 | which you would normally get from high-level languages like Ruby or Python,
135 | but you get assembly code like this.
136 |
137 | Slide 4
138 |
139 | This is that same function compiled and optimized, and you can see that it's
140 | very tight.
141 |
142 | Slide 5
143 |
144 | In fact, even that version of the function was kind of low-level from
145 | my point-of-view. I'd probably write it more like this, which uses an
146 | iterator chain. What we try to shoot for in Rust is that high-level
147 | abstractions generate code which is as good -- or even better than! --
148 | the low-level code you would get if you wrote things by hand. In the case
149 | of iterators, for example, we can do better than a while loop iterating over
150 | an array, since we can elide bounds checks.
151 |
152 | Slide 6
153 |
154 | This brings us to safety. The key selling point of Rust is that you
155 | get not only low-level control but high-level safety. So here is an
156 | example of a function iterating over a vector and pushing onto it.
157 | This is generally suspicious, even in a GC'd language, but in C++ it's
158 | particularly dangerous. The problem is that you can get what's called
159 | iterator invalidation, where you wind up freeing the underlying
160 | buffer as you're iterating.
161 |
162 | But if you try to write this in Rust, this just won't compile. The
163 | message below is basically saying "you can't mutate a vector while
164 | you're iterating over it". In this tutorial we'll see the Rust type
165 | system rules that lead to this error and come to understand them at a
166 | deeper level.
167 |
168 | Slide 7
169 |
170 | I mentioned parallel programming. This is an example of simple parallel
171 | programming in Rust. I should add it's using one my libraries, rayon,
172 | and there are other libraries you might use. What it does -- well, it does
173 | what quicksort does. It partitions into two halves and uses helper rayon::join,
174 | which will run in parallel if there are enough resources. Very easy,
175 | just addone function call.
176 |
177 | Slide 8
178 |
179 | What's even better is, if I make a mistake, say I accidentally recurse
180 | and process the same data in both threads, I will get a compilation
181 | error. This protection also falls out from the rules we'll be covering
182 | today.
183 |
184 | Slide 9
185 |
186 | Now, a language is about more than just its syntax. Part of being a
187 | modern language these days is making it trivial to incorporate
188 | third-party libraries. Rust offers a central repository of packages,
189 | called crates.io
, and also a powerful build tool called cargo
that
190 | can automatically download and build all of your dependencies for you.
191 | cargo
basically replaces make
as the build tool of choice.
192 |
193 | Slide 10
194 |
195 | Something else we have tried very hard to do with Rust is to build an
196 | open and welcoming community. We have an open governance model where
197 | all new features are publicly discussed and debated, and a lot of
198 | forums and so forth where you can go to ask for help or raise
199 | questions. And of course the project is all open source, so you can
200 | also take part in the development and leadership of Rust itself.
201 |
202 | Slide 11
203 |
204 | All right, so let's get started! I'm going to start out with Hello
205 | World and we'll see that just from this simple example we can branch
206 | off into a lot of interesting questions about how Rust handles
207 | memory management, safety, and so forth.
208 |
209 | Slide 12
210 |
211 | Here is "Hello, World" in Rust. Now, rather than talk about this
212 | program here on the slide, I want to take you over to this website.
213 | We'll be going here throughout the tutorials to do exercises and so
214 | forth. So you can see the URL on your screen. When you enter that into
215 | your browser, you should see a website like this.
216 |
217 | Rust tutorials website
218 |
219 | Each of these headings corresponds to one of the exercises we are
220 | going to do in this tutorial. So let's click on the first one.
221 |
222 | play
223 |
224 | This takes me over to a website called play
. play
lets you edit
225 | code and then execute it right away, in your browser. So here I have
226 | hello world, and I can click and you see it prints "Hello,
227 | world". Great!
228 |
229 | So now let's take a look at the program itself. Rust, like C, begins
230 | execution at a global function called main
, which takes no
231 | arguments. Inside there, it has some statements. This one is a call to
232 | println
. println
is not a regular function. It's a macro. It
233 | acts a lot like printf
in C -- it composes and creates a string. I
234 | say composes because you don't have to call it with a constant
235 | string, you can actually give it placeholders.
236 |
237 | So, for example, I might modify this to take a placeholder here.
238 |
239 |
240 | edit to: "Hello, {}", "world"
241 |
242 |
243 | and then I get the same output, but it was dynamically substituted.
244 |
245 | Of course usually these values aren't all constants, we'd probably use
246 | variables. So for example I can modify it to greet me by name by introducing
247 | a variable called name
:
248 |
249 |
250 | let name = "Niko";
251 |
252 |
253 | You see that in Rust you usually don't have to add type annotations
254 | for variables yourself, the compiler can figure it out. Then I can
255 | supply it and change println
to print the value of the variable in
256 | that spot:
257 |
258 |
259 | println!("Hello, {}!", name);
260 |
261 |
262 | OK, cool. What I'd like you all to do now is to take 5 minutes and go
263 | through this exercise yourself, just to get your feet wet. Go to the
264 | URL you see on your screen, select the "Hello, World" example, and
265 | then edit it so that it greets you by name. Go ahead and come back
266 | when you are done.
267 |
268 | play
269 |
270 | OK, great, I'm going to guess you've done that by now, or decided that
271 | you just can't wait to hear what else I have to say. Either way is
272 | fine, let's keep going. I will say though I really recommend you do
273 | the later exercises for sure, since I think it is very helpful for
274 | really understanding what is happening.
275 |
276 | Let's go a little future. We've declared some local variables, but
277 | now I'd like to make a helper function called greet
that can greet people
278 | by name:
279 |
280 | rust
281 | fn greet(name: String) {
282 | println("Hello, {}!", name);
283 | }
284 |
285 |
286 | Remember I told you that Rust can infer the types for local variables.
287 | But we don't infer the types for function arguments and return types.
288 | So at function boundary, type definitions and so forth, those are the
289 | places where you find explicit type annotations. This helps not only
290 | to make compilation more tractable, but also to make your code more
291 | readable later.
292 |
293 | So here I am saying I take one argument, it's a string, and I am
294 | implicitly saying that I return nothing. If I wanted to return
295 | something, I would type it like this:
296 |
297 |
298 | fn greet(name: String) -> i32 {
299 |
300 |
301 | Arrow then the type I want to return. This would mean I return a
302 | 32-bit integer. But I don't have anything to return right now, so we
303 | can just leave that off.
304 |
305 | OK, so this looks great -- but what happens when we run it. Huh! You
306 | see we get a compilation error. As an aside, these little E0308
307 | messages are called error codes -- often you can click on them and get
308 | taken to a detailed message explaining how to fix a particular error.
309 |
310 | But what's happening here anyway? Why are we getting a type mismatch
311 | error? After all, we're supplying a string constant, and we said we're
312 | expecting a string. The thing is, Rust takes allocation very
313 | seriously. What's happening here is that a constant string doesn't
314 | require any allocation: it's a statically allocated value that's in
315 | our executable automatically when we link it in, and hence it also
316 | never needs to get freed. So to get a constant string, we just need to
317 | have a pointer into that memory. But the capital String
type is
318 | actually a heap allocator buffer, kind of like StringBuffer
in
319 | Java. So we need to convert between the two by allocating some heap
320 | memory and copying the string constant into it. One way to do that is
321 | to call String::from("Niko")
. But I often prefer to use this
322 | format!("Niko")
macro. It works exactly like println!
-- so it can
323 | take placeholders and so forth -- but it writes the result into a
324 | memory buffer and returns it to you, rather than printing it to the
325 | screen. So once we make this change, we can call greet
, and things
326 | will work.
327 |
328 |
329 | Click play. It works!
330 |
331 |
332 | Now the type of this variable name
is actually going to be a
333 | heap-allocated string, like String
. This has some advantages. For
334 | example, we can now grow the string by calling push_str
, which
335 | pushes some more information on the end, such as my last name:
336 |
337 |
338 | let mut name: String = format("Niko");
339 | name.push_str(" Matsakis");
340 |
341 |
342 | You'll notice I also declared the variable as mut
. That's because in
343 | Rust, local variables are immutable unless you declare otherwise. When
344 | you say that a variable is mut
then all the data in that variable
345 | becomes mutable.
346 |
347 | So let's go back to what we had before:
348 |
349 |
350 | delete the name.push_str
call, but leave the mut
keyword, click play
351 |
352 |
353 | Ah, that's an interesting point. Note that if you declare something as
354 | mutable, but you don't actually mutate it, Rust will warn you. We've
355 | found that these sort of lints that detect small inconsistencies in
356 | your program -- such as unused mutability, or unread variables, etc --
357 | are often good indicators of bugs. For example, I commonly forget to
358 | increment a counter when I am iterating, and that generally results in
359 | a warning, since I declare the counter variable as being mutable, but
360 | never modify it. So Rust tends to be a bit heavy on the warnings, but
361 | over time I think you will find they prevent a lot of bugs. You can
362 | actually turn these off by annotating your program.
363 |
364 | OK, so, now that we have this heap-allocated string buffer, what would
365 | happen if we wanted to greet ourselves twice? That's kind of the point
366 | of making a helper method, right? So we can call it more than once?
367 |
368 | If we execute this, now we get another compilation failure: "use of
369 | moved value name
". So what's going on here? This turns out to be a
370 | little more complicated. This is kind of The Key Thing about
371 | understanding Rust: ownership and borrowing. So let's go back to the
372 | slides now.
373 |
374 | Slide 13
375 |
--------------------------------------------------------------------------------
/Ownership-and-Borrowing-Script.md:
--------------------------------------------------------------------------------
1 | # Slide 1
2 |
3 | Hello and welcome to this Rust tutorial. We'll be focusing on
4 | Ownership and Borrowing, which are the core ideas that make Rust
5 | Rust. It lays the foundation for all the other tutorials out there.
6 |
7 | My name is Nicholas Matsakis and I'll be your humble narrator
8 | today. I'm a member of the core team and I've been working on Rust
9 | since around 2011.
10 |
11 | But before we get started, I want to set the mood.
12 |
13 | # Slide 2
14 |
15 | All right -- hopefully you've got a sense of adventure now. If you're
16 | listening, you've probably got some idea what Rust is all about, but
17 | let me just give you the elevator pitch: "Hack without fear." This is
18 | a slogan coined by Felix Klock a few years back and I find it very
19 | apt. The idea is that Rust makes it easy to do awesome feats that, in
20 | the past, might have seemed too risky or too difficult to consider.
21 | Let me give you some examples to show you what I mean.
22 |
23 | # Slide 4
24 |
25 | Here you see some Ruby code. This is a Ruby method that checks whether
26 | a string is blank. It does so with a regular expression. As you can
27 | see, it can process about 1 million iterations per second. That might
28 | seem like enough, but at some point it was found that this function in
29 | fact shows up fairly high on the profiles for Ruby-on-Rails
30 | applications.
31 |
32 | # Slide 5
33 |
34 | In response, Sam Saffron decided to rewrite the function in C. This
35 | is what it looks like. As you can see, it's a lot more complicated,
36 | but that pays off: we can now get about a 10-x performance
37 | improvement. So, if you use Ruby, you might want to try the
38 | `fast_blank` package.
39 |
40 | But writing C code like this is actually kind of a big investment.
41 | Not only is the code quite complex -- and note that it has a lot of
42 | special cases here to handle Unicode correctly -- but it's a big risk.
43 | After all, this is raw C pointer handling: if you make a mistake, you
44 | could go poking at arbitrary memory, which might have catastrophic
45 | consequences.
46 |
47 | # Slide 6
48 |
49 | So maybe you wouldn't thing it's worth it to try to micro-optimize
50 | code like that. But what if we tried to use Rust instead? This is what
51 | the Rust code looks like. You can see it's a lot more high-level than
52 | the C code was. It starts out by getting a "string slice" from the raw
53 | Ruby data and then getting an iterator that will look at each unicode
54 | character, one by one. Next it calls this function `all`, giving it a
55 | closure that will test whether all the characters are whitespace.
56 |
57 | So you might think that since this code is so much prettier, it has to
58 | be slower, right? Wrong. In fact, it runs ever so slightly faster than
59 | the corresponding C code, clocking in at 11 million iterations per
60 | second. Even better, since this is Rust, we know that if we made a
61 | mistake somewhere, it won't trigger a security vulnerability.
62 |
63 | # Slide 7
64 |
65 | All right, let's look at one more example. You may have heard that
66 | parallel programming is very hard to get right. Rust aims to change
67 | that, both by APIs that make it easy to write simple parallel loops,
68 | and by a type system that can prevent common mistakes.
69 |
70 | Let's start with some sequential code. Here is an iterator that
71 | iterates ove a list of paths and loads an image for each one. It then
72 | creates and returns a vector of these images.
73 |
74 | Now, loading images is totally independent, so it'd be nice if we could
75 | do this in parallel.
76 |
77 | # Slide 8
78 |
79 | Here I've added a declaration to the program that it would like to use
80 | the external library `rayon` -- in Rust speak, we call libraries
81 | "crates". Rayon is something that I wrote to allow for easy, drop-in
82 | parallelism. In particular, it allows me to simply change that call to
83 | `iter` into `par_iter` in order to enable parallel execution.
84 |
85 | There are a couple of cool things here. First, note that Rayon is just
86 | a library -- it's not part of the core language. And yet it is able to
87 | do these very powerful and fundamental extensions. Rust is designed to
88 | have a minimal core extended by powerful libraries.
89 |
90 | For parallelism in particular, we worked hard to ensure that the core
91 | Rust language can support a wide range of parallel programming
92 | paradigms. This is because parallelism isn't really a "one-size fits
93 | all" affair. So Rust offers support for parallel iterators, as shown
94 | here, but also tasks and channels, rather like Go, shared data with
95 | mutexes, and a number of other things.
96 |
97 | # Slide 9
98 |
99 | But making parallelism accessible is about more than slick-looking
100 | APIs. You can find this in many languages. What makes Rust different
101 | is that the type system helps to find and detect subtle bugs before
102 | they make your code go haywire.
103 |
104 | To see what I mean, imagine that we tried to add some code to this
105 | image loader to count up the jpegs. We might do it like this. The
106 | problem is that this code would be wrong: adding numbers without any
107 | synchronization like this is actually a data race. In fact, this code
108 | probably represents one of the worst kinds of data race, because it
109 | likely won't fail in any obvious way, you'll just have a count that is
110 | sometimes wrong. But probably not when you're running your tests.
111 |
112 | So what happens in Rust? The answer is that this code won't compile.
113 | You can fix this either by moving the count out of the parallel loop,
114 | or by using some kind of shared counter that is safe across threads.
115 |
116 | # Slide 10
117 |
118 | Now, a language is about more than just its syntax. Part of being a
119 | modern language these days is making it trivial to incorporate
120 | third-party libraries. Rust offers a central repository of packages,
121 | called `crates.io`, and also a powerful build tool called `cargo` that
122 | can automatically download and build all of your dependencies for you.
123 | `cargo` basically replaces `make` as the build tool of choice.
124 |
125 | # Slide 11
126 |
127 | Something else we have tried very hard to do with Rust is to build an
128 | open and welcoming community. We have an open governance model where
129 | all new features are publicly discussed and debated, and a lot of
130 | forums and so forth where you can go to ask for help or raise
131 | questions. And of course the project is all open source, so you can
132 | also take part in the development and leadership of Rust itself.
133 |
134 | # Slide 12
135 |
136 | All right, so let's get started! I'm going to start out with Hello
137 | World and we'll see that just from this simple example we can branch
138 | off into a lot of interesting questions about how Rust handles
139 | memory management, safety, and so forth.
140 |
141 | # Slide 13
142 |
143 | Here is "Hello, World" in Rust. Now, rather than talk about this
144 | program here on the slide, I want to take you over to this website.
145 | We'll be going here throughout the tutorials to do exercises and so
146 | forth. So you can see the URL on your screen. When you enter that into
147 | your browser, you should see a website like this.
148 |
149 | # Rust tutorials website
150 |
151 | Each of these headings corresponds to one of the exercises we are
152 | going to do in this tutorial. So let's click on the first one.
153 |
154 | # play
155 |
156 | This takes me over to a website called `play`. `play` lets you edit
157 | code and then execute it right away, in your browser. So here I have
158 | hello world, and I can click and you see it prints "Hello,
159 | world". Great!
160 |
161 | So now let's take a look at the program itself. Rust, like C, begins
162 | execution at a global function called `main`, which takes no
163 | arguments. Inside there, it has some statements. This one is a call to
164 | `println`. `println` is not a regular function. It's a *macro*. It
165 | acts a lot like `printf` in C -- it composes and creates a string. I
166 | say *composes* because you don't have to call it with a constant
167 | string, you can actually give it placeholders.
168 |
169 | So, for example, I might modify this to take a placeholder here.
170 |
171 | ```
172 | edit to: "Hello, {}", "world"
173 | ```
174 |
175 | and then I get the same output, but it was dynamically substituted.
176 |
177 | Of course usually these values aren't all constants, we'd probably use
178 | variables. So for example I can modify it to greet me by name by introducing
179 | a variable called `name`:
180 |
181 | ```
182 | let name = "Niko";
183 | ```
184 |
185 | You see that in Rust you usually don't have to add type annotations
186 | for variables yourself, the compiler can figure it out. Then I can
187 | supply it and change `println` to print the value of the variable in
188 | that spot:
189 |
190 | ```
191 | println!("Hello, {}!", name);
192 | ```
193 |
194 | OK, cool. What I'd like you all to do now is to take 5 minutes and go
195 | through this exercise yourself, just to get your feet wet. Go to the
196 | URL you see on your screen, select the "Hello, World" example, and
197 | then edit it so that it greets *you* by name. Go ahead and come back
198 | when you are done.
199 |
200 | # play
201 |
202 | OK, great, I'm going to guess you've done that by now, or decided that
203 | you just can't wait to hear what else I have to say. Either way is
204 | fine, let's keep going. I will say though I really recommend you do
205 | the later exercises for sure, since I think it is very helpful for
206 | really understanding what is happening.
207 |
208 | Let's go a little future. We've declared some local variables, but
209 | now I'd like to make a helper function called `greet` that can greet people
210 | by name:
211 |
212 | ```rust
213 | fn greet(name: String) {
214 | println("Hello, {}!", name);
215 | }
216 | ```
217 |
218 | Remember I told you that Rust can infer the types for local variables.
219 | But we don't infer the types for function arguments and return types.
220 | So at function boundary, type definitions and so forth, those are the
221 | places where you find explicit type annotations. This helps not only
222 | to make compilation more tractable, but also to make your code more
223 | readable later.
224 |
225 | So here I am saying I take one argument, it's a string, and I am
226 | implicitly saying that I return nothing. If I wanted to return
227 | something, I would type it like this:
228 |
229 | ```
230 | fn greet(name: String) -> i32 {
231 | ```
232 |
233 | Arrow then the type I want to return. This would mean I return a
234 | 32-bit integer. But I don't have anything to return right now, so we
235 | can just leave that off.
236 |
237 | OK, so this looks great -- but what happens when we run it. Huh! You
238 | see we get a compilation error. As an aside, these little E0308
239 | messages are called error codes -- often you can click on them and get
240 | taken to a detailed message explaining how to fix a particular error.
241 |
242 | But what's happening here anyway? Why are we getting a type mismatch
243 | error? After all, we're supplying a string constant, and we said we're
244 | expecting a string. The thing is, Rust takes allocation very
245 | seriously. What's happening here is that a constant string doesn't
246 | require any allocation: it's a statically allocated value that's in
247 | our executable automatically when we link it in, and hence it also
248 | never needs to get freed. So to get a constant string, we just need to
249 | have a pointer into that memory. But the capital `String` type is
250 | actually a heap allocator buffer, kind of like `StringBuffer` in
251 | Java. So we need to convert between the two by allocating some heap
252 | memory and copying the string constant into it. One way to do that is
253 | to call `String::from("Niko")`. But I often prefer to use this
254 | `format!("Niko")` macro. It works exactly like `println!` -- so it can
255 | take placeholders and so forth -- but it writes the result into a
256 | memory buffer and returns it to you, rather than printing it to the
257 | screen. So once we make this change, we can call `greet`, and things
258 | will work.
259 |
260 | > Click play. It works!
261 |
262 | Now the type of this variable `name` is actually going to be a
263 | heap-allocated string, like `String`. This has some advantages. For
264 | example, we can now grow the string by calling `push_str`, which
265 | pushes some more information on the end, such as my last name:
266 |
267 | ```
268 | let mut name: String = format("Niko");
269 | name.push_str(" Matsakis");
270 | ```
271 |
272 | You'll notice I also declared the variable as `mut`. That's because in
273 | Rust, local variables are immutable unless you declare otherwise. When
274 | you say that a variable is `mut` then all the data in that variable
275 | becomes mutable.
276 |
277 | So let's go back to what we had before:
278 |
279 | > delete the `name.push_str` call, but leave the `mut` keyword, click play
280 |
281 | Ah, that's an interesting point. Note that if you declare something as
282 | mutable, but you don't actually *mutate* it, Rust will warn you. We've
283 | found that these sort of lints that detect small inconsistencies in
284 | your program -- such as unused mutability, or unread variables, etc --
285 | are often good indicators of bugs. For example, I commonly forget to
286 | increment a counter when I am iterating, and that generally results in
287 | a warning, since I declare the counter variable as being mutable, but
288 | never modify it. So Rust tends to be a bit heavy on the warnings, but
289 | over time I think you will find they prevent a lot of bugs. You can
290 | actually turn these off by annotating your program.
291 |
292 | OK, so, now that we have this heap-allocated string buffer, what would
293 | happen if we wanted to greet ourselves twice? That's kind of the point
294 | of making a helper method, right? So we can call it more than once?
295 |
296 | If we execute this, now we get another compilation failure: "use of
297 | moved value `name`". So what's going on here? This turns out to be a
298 | little more complicated. This is kind of The Key Thing about
299 | understanding Rust: *ownership and borrowing*. So let's go back to the
300 | slides now.
301 |
302 | # Slide 14
303 |
304 |
305 |
306 |
307 |
--------------------------------------------------------------------------------
/Structs and such.key:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nikomatsakis/rust-tutorials-keynote/e56b23f5af8a118f06afd94d6536456238f6b4ac/Structs and such.key
--------------------------------------------------------------------------------
/Threading.key:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nikomatsakis/rust-tutorials-keynote/e56b23f5af8a118f06afd94d6536456238f6b4ac/Threading.key
--------------------------------------------------------------------------------
/Traits.key:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nikomatsakis/rust-tutorials-keynote/e56b23f5af8a118f06afd94d6536456238f6b4ac/Traits.key
--------------------------------------------------------------------------------
/other/Lang Next.key/Data/mt0@2x-1998.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nikomatsakis/rust-tutorials-keynote/e56b23f5af8a118f06afd94d6536456238f6b4ac/other/Lang Next.key/Data/mt0@2x-1998.jpg
--------------------------------------------------------------------------------
/other/Lang Next.key/Data/mt1@2x-2000.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nikomatsakis/rust-tutorials-keynote/e56b23f5af8a118f06afd94d6536456238f6b4ac/other/Lang Next.key/Data/mt1@2x-2000.jpg
--------------------------------------------------------------------------------
/other/Lang Next.key/Data/mt3@2x-2001.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nikomatsakis/rust-tutorials-keynote/e56b23f5af8a118f06afd94d6536456238f6b4ac/other/Lang Next.key/Data/mt3@2x-2001.jpg
--------------------------------------------------------------------------------
/other/Lang Next.key/Data/pasted-image-2042.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nikomatsakis/rust-tutorials-keynote/e56b23f5af8a118f06afd94d6536456238f6b4ac/other/Lang Next.key/Data/pasted-image-2042.png
--------------------------------------------------------------------------------
/other/Lang Next.key/Data/pasted-image-4491.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nikomatsakis/rust-tutorials-keynote/e56b23f5af8a118f06afd94d6536456238f6b4ac/other/Lang Next.key/Data/pasted-image-4491.png
--------------------------------------------------------------------------------
/other/Lang Next.key/Data/pasted-image-small-2044.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nikomatsakis/rust-tutorials-keynote/e56b23f5af8a118f06afd94d6536456238f6b4ac/other/Lang Next.key/Data/pasted-image-small-2044.png
--------------------------------------------------------------------------------
/other/Lang Next.key/Data/pasted-image-small-4492.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nikomatsakis/rust-tutorials-keynote/e56b23f5af8a118f06afd94d6536456238f6b4ac/other/Lang Next.key/Data/pasted-image-small-4492.png
--------------------------------------------------------------------------------
/other/Lang Next.key/Data/st0-10432.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nikomatsakis/rust-tutorials-keynote/e56b23f5af8a118f06afd94d6536456238f6b4ac/other/Lang Next.key/Data/st0-10432.jpg
--------------------------------------------------------------------------------
/other/Lang Next.key/Data/st1-2009.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nikomatsakis/rust-tutorials-keynote/e56b23f5af8a118f06afd94d6536456238f6b4ac/other/Lang Next.key/Data/st1-2009.jpg
--------------------------------------------------------------------------------
/other/Lang Next.key/Data/st10-9817.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nikomatsakis/rust-tutorials-keynote/e56b23f5af8a118f06afd94d6536456238f6b4ac/other/Lang Next.key/Data/st10-9817.jpg
--------------------------------------------------------------------------------
/other/Lang Next.key/Data/st11-9902.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nikomatsakis/rust-tutorials-keynote/e56b23f5af8a118f06afd94d6536456238f6b4ac/other/Lang Next.key/Data/st11-9902.jpg
--------------------------------------------------------------------------------
/other/Lang Next.key/Data/st13-6503.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nikomatsakis/rust-tutorials-keynote/e56b23f5af8a118f06afd94d6536456238f6b4ac/other/Lang Next.key/Data/st13-6503.jpg
--------------------------------------------------------------------------------
/other/Lang Next.key/Data/st14-5774.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nikomatsakis/rust-tutorials-keynote/e56b23f5af8a118f06afd94d6536456238f6b4ac/other/Lang Next.key/Data/st14-5774.jpg
--------------------------------------------------------------------------------
/other/Lang Next.key/Data/st14-6267.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nikomatsakis/rust-tutorials-keynote/e56b23f5af8a118f06afd94d6536456238f6b4ac/other/Lang Next.key/Data/st14-6267.jpg
--------------------------------------------------------------------------------
/other/Lang Next.key/Data/st15-9904.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nikomatsakis/rust-tutorials-keynote/e56b23f5af8a118f06afd94d6536456238f6b4ac/other/Lang Next.key/Data/st15-9904.jpg
--------------------------------------------------------------------------------
/other/Lang Next.key/Data/st16-9913.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nikomatsakis/rust-tutorials-keynote/e56b23f5af8a118f06afd94d6536456238f6b4ac/other/Lang Next.key/Data/st16-9913.jpg
--------------------------------------------------------------------------------
/other/Lang Next.key/Data/st17-8733.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nikomatsakis/rust-tutorials-keynote/e56b23f5af8a118f06afd94d6536456238f6b4ac/other/Lang Next.key/Data/st17-8733.jpg
--------------------------------------------------------------------------------
/other/Lang Next.key/Data/st17-9916.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nikomatsakis/rust-tutorials-keynote/e56b23f5af8a118f06afd94d6536456238f6b4ac/other/Lang Next.key/Data/st17-9916.jpg
--------------------------------------------------------------------------------
/other/Lang Next.key/Data/st19-5773.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nikomatsakis/rust-tutorials-keynote/e56b23f5af8a118f06afd94d6536456238f6b4ac/other/Lang Next.key/Data/st19-5773.jpg
--------------------------------------------------------------------------------
/other/Lang Next.key/Data/st19-9929.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nikomatsakis/rust-tutorials-keynote/e56b23f5af8a118f06afd94d6536456238f6b4ac/other/Lang Next.key/Data/st19-9929.jpg
--------------------------------------------------------------------------------
/other/Lang Next.key/Data/st2-7836.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nikomatsakis/rust-tutorials-keynote/e56b23f5af8a118f06afd94d6536456238f6b4ac/other/Lang Next.key/Data/st2-7836.jpg
--------------------------------------------------------------------------------
/other/Lang Next.key/Data/st21-8309.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nikomatsakis/rust-tutorials-keynote/e56b23f5af8a118f06afd94d6536456238f6b4ac/other/Lang Next.key/Data/st21-8309.jpg
--------------------------------------------------------------------------------
/other/Lang Next.key/Data/st22-10429.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nikomatsakis/rust-tutorials-keynote/e56b23f5af8a118f06afd94d6536456238f6b4ac/other/Lang Next.key/Data/st22-10429.jpg
--------------------------------------------------------------------------------
/other/Lang Next.key/Data/st22-9239.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nikomatsakis/rust-tutorials-keynote/e56b23f5af8a118f06afd94d6536456238f6b4ac/other/Lang Next.key/Data/st22-9239.jpg
--------------------------------------------------------------------------------
/other/Lang Next.key/Data/st24-10344.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nikomatsakis/rust-tutorials-keynote/e56b23f5af8a118f06afd94d6536456238f6b4ac/other/Lang Next.key/Data/st24-10344.jpg
--------------------------------------------------------------------------------
/other/Lang Next.key/Data/st24-8700.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nikomatsakis/rust-tutorials-keynote/e56b23f5af8a118f06afd94d6536456238f6b4ac/other/Lang Next.key/Data/st24-8700.jpg
--------------------------------------------------------------------------------
/other/Lang Next.key/Data/st25-9245.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nikomatsakis/rust-tutorials-keynote/e56b23f5af8a118f06afd94d6536456238f6b4ac/other/Lang Next.key/Data/st25-9245.jpg
--------------------------------------------------------------------------------
/other/Lang Next.key/Data/st26-10251.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nikomatsakis/rust-tutorials-keynote/e56b23f5af8a118f06afd94d6536456238f6b4ac/other/Lang Next.key/Data/st26-10251.jpg
--------------------------------------------------------------------------------
/other/Lang Next.key/Data/st29-10175.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nikomatsakis/rust-tutorials-keynote/e56b23f5af8a118f06afd94d6536456238f6b4ac/other/Lang Next.key/Data/st29-10175.jpg
--------------------------------------------------------------------------------
/other/Lang Next.key/Data/st29-9454.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nikomatsakis/rust-tutorials-keynote/e56b23f5af8a118f06afd94d6536456238f6b4ac/other/Lang Next.key/Data/st29-9454.jpg
--------------------------------------------------------------------------------
/other/Lang Next.key/Data/st3-8035.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nikomatsakis/rust-tutorials-keynote/e56b23f5af8a118f06afd94d6536456238f6b4ac/other/Lang Next.key/Data/st3-8035.jpg
--------------------------------------------------------------------------------
/other/Lang Next.key/Data/st30-9467.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nikomatsakis/rust-tutorials-keynote/e56b23f5af8a118f06afd94d6536456238f6b4ac/other/Lang Next.key/Data/st30-9467.jpg
--------------------------------------------------------------------------------
/other/Lang Next.key/Data/st34-8903.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nikomatsakis/rust-tutorials-keynote/e56b23f5af8a118f06afd94d6536456238f6b4ac/other/Lang Next.key/Data/st34-8903.jpg
--------------------------------------------------------------------------------
/other/Lang Next.key/Data/st34-9957.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nikomatsakis/rust-tutorials-keynote/e56b23f5af8a118f06afd94d6536456238f6b4ac/other/Lang Next.key/Data/st34-9957.jpg
--------------------------------------------------------------------------------
/other/Lang Next.key/Data/st35-8969.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nikomatsakis/rust-tutorials-keynote/e56b23f5af8a118f06afd94d6536456238f6b4ac/other/Lang Next.key/Data/st35-8969.jpg
--------------------------------------------------------------------------------
/other/Lang Next.key/Data/st35-9962.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nikomatsakis/rust-tutorials-keynote/e56b23f5af8a118f06afd94d6536456238f6b4ac/other/Lang Next.key/Data/st35-9962.jpg
--------------------------------------------------------------------------------
/other/Lang Next.key/Data/st37-5654.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nikomatsakis/rust-tutorials-keynote/e56b23f5af8a118f06afd94d6536456238f6b4ac/other/Lang Next.key/Data/st37-5654.jpg
--------------------------------------------------------------------------------
/other/Lang Next.key/Data/st37-6873.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nikomatsakis/rust-tutorials-keynote/e56b23f5af8a118f06afd94d6536456238f6b4ac/other/Lang Next.key/Data/st37-6873.jpg
--------------------------------------------------------------------------------
/other/Lang Next.key/Data/st38-5716.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nikomatsakis/rust-tutorials-keynote/e56b23f5af8a118f06afd94d6536456238f6b4ac/other/Lang Next.key/Data/st38-5716.jpg
--------------------------------------------------------------------------------
/other/Lang Next.key/Data/st38-8819.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nikomatsakis/rust-tutorials-keynote/e56b23f5af8a118f06afd94d6536456238f6b4ac/other/Lang Next.key/Data/st38-8819.jpg
--------------------------------------------------------------------------------
/other/Lang Next.key/Data/st39-5718.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nikomatsakis/rust-tutorials-keynote/e56b23f5af8a118f06afd94d6536456238f6b4ac/other/Lang Next.key/Data/st39-5718.jpg
--------------------------------------------------------------------------------
/other/Lang Next.key/Data/st4-10437.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nikomatsakis/rust-tutorials-keynote/e56b23f5af8a118f06afd94d6536456238f6b4ac/other/Lang Next.key/Data/st4-10437.jpg
--------------------------------------------------------------------------------
/other/Lang Next.key/Data/st41-10436.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nikomatsakis/rust-tutorials-keynote/e56b23f5af8a118f06afd94d6536456238f6b4ac/other/Lang Next.key/Data/st41-10436.jpg
--------------------------------------------------------------------------------
/other/Lang Next.key/Data/st41-5729.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nikomatsakis/rust-tutorials-keynote/e56b23f5af8a118f06afd94d6536456238f6b4ac/other/Lang Next.key/Data/st41-5729.jpg
--------------------------------------------------------------------------------
/other/Lang Next.key/Data/st41-6687.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nikomatsakis/rust-tutorials-keynote/e56b23f5af8a118f06afd94d6536456238f6b4ac/other/Lang Next.key/Data/st41-6687.jpg
--------------------------------------------------------------------------------
/other/Lang Next.key/Data/st41-8772.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nikomatsakis/rust-tutorials-keynote/e56b23f5af8a118f06afd94d6536456238f6b4ac/other/Lang Next.key/Data/st41-8772.jpg
--------------------------------------------------------------------------------
/other/Lang Next.key/Data/st42-5169.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nikomatsakis/rust-tutorials-keynote/e56b23f5af8a118f06afd94d6536456238f6b4ac/other/Lang Next.key/Data/st42-5169.jpg
--------------------------------------------------------------------------------
/other/Lang Next.key/Data/st45-5179.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nikomatsakis/rust-tutorials-keynote/e56b23f5af8a118f06afd94d6536456238f6b4ac/other/Lang Next.key/Data/st45-5179.jpg
--------------------------------------------------------------------------------
/other/Lang Next.key/Data/st45-8127.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nikomatsakis/rust-tutorials-keynote/e56b23f5af8a118f06afd94d6536456238f6b4ac/other/Lang Next.key/Data/st45-8127.jpg
--------------------------------------------------------------------------------
/other/Lang Next.key/Data/st46-10186.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nikomatsakis/rust-tutorials-keynote/e56b23f5af8a118f06afd94d6536456238f6b4ac/other/Lang Next.key/Data/st46-10186.jpg
--------------------------------------------------------------------------------
/other/Lang Next.key/Data/st47-10192.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nikomatsakis/rust-tutorials-keynote/e56b23f5af8a118f06afd94d6536456238f6b4ac/other/Lang Next.key/Data/st47-10192.jpg
--------------------------------------------------------------------------------
/other/Lang Next.key/Data/st48-5247.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nikomatsakis/rust-tutorials-keynote/e56b23f5af8a118f06afd94d6536456238f6b4ac/other/Lang Next.key/Data/st48-5247.jpg
--------------------------------------------------------------------------------
/other/Lang Next.key/Data/st48-6874.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nikomatsakis/rust-tutorials-keynote/e56b23f5af8a118f06afd94d6536456238f6b4ac/other/Lang Next.key/Data/st48-6874.jpg
--------------------------------------------------------------------------------
/other/Lang Next.key/Data/st5-10330.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nikomatsakis/rust-tutorials-keynote/e56b23f5af8a118f06afd94d6536456238f6b4ac/other/Lang Next.key/Data/st5-10330.jpg
--------------------------------------------------------------------------------
/other/Lang Next.key/Data/st50-5768.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nikomatsakis/rust-tutorials-keynote/e56b23f5af8a118f06afd94d6536456238f6b4ac/other/Lang Next.key/Data/st50-5768.jpg
--------------------------------------------------------------------------------
/other/Lang Next.key/Data/st50-9977.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nikomatsakis/rust-tutorials-keynote/e56b23f5af8a118f06afd94d6536456238f6b4ac/other/Lang Next.key/Data/st50-9977.jpg
--------------------------------------------------------------------------------
/other/Lang Next.key/Data/st51-10352.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nikomatsakis/rust-tutorials-keynote/e56b23f5af8a118f06afd94d6536456238f6b4ac/other/Lang Next.key/Data/st51-10352.jpg
--------------------------------------------------------------------------------
/other/Lang Next.key/Data/st55-10010.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nikomatsakis/rust-tutorials-keynote/e56b23f5af8a118f06afd94d6536456238f6b4ac/other/Lang Next.key/Data/st55-10010.jpg
--------------------------------------------------------------------------------
/other/Lang Next.key/Data/st57-6324.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nikomatsakis/rust-tutorials-keynote/e56b23f5af8a118f06afd94d6536456238f6b4ac/other/Lang Next.key/Data/st57-6324.jpg
--------------------------------------------------------------------------------
/other/Lang Next.key/Data/st6-10359.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nikomatsakis/rust-tutorials-keynote/e56b23f5af8a118f06afd94d6536456238f6b4ac/other/Lang Next.key/Data/st6-10359.jpg
--------------------------------------------------------------------------------
/other/Lang Next.key/Data/st8-4012.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nikomatsakis/rust-tutorials-keynote/e56b23f5af8a118f06afd94d6536456238f6b4ac/other/Lang Next.key/Data/st8-4012.jpg
--------------------------------------------------------------------------------
/other/Lang Next.key/Data/st8-9813.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nikomatsakis/rust-tutorials-keynote/e56b23f5af8a118f06afd94d6536456238f6b4ac/other/Lang Next.key/Data/st8-9813.jpg
--------------------------------------------------------------------------------
/other/Lang Next.key/Data/st9-9814.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nikomatsakis/rust-tutorials-keynote/e56b23f5af8a118f06afd94d6536456238f6b4ac/other/Lang Next.key/Data/st9-9814.jpg
--------------------------------------------------------------------------------
/other/Lang Next.key/Index.zip:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nikomatsakis/rust-tutorials-keynote/e56b23f5af8a118f06afd94d6536456238f6b4ac/other/Lang Next.key/Index.zip
--------------------------------------------------------------------------------
/other/Lang Next.key/Metadata/BuildVersionHistory.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Template: White (2014-02-28 09:41)
6 | M6.2-1861-1
7 |
8 |
9 |
--------------------------------------------------------------------------------
/other/Lang Next.key/Metadata/DocumentIdentifier:
--------------------------------------------------------------------------------
1 | 8DEEB1FD-1F4C-43DD-988D-BA294D0463ED
--------------------------------------------------------------------------------
/other/Lang Next.key/Metadata/Properties.plist:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nikomatsakis/rust-tutorials-keynote/e56b23f5af8a118f06afd94d6536456238f6b4ac/other/Lang Next.key/Metadata/Properties.plist
--------------------------------------------------------------------------------
/other/Lang Next.key/preview-micro.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nikomatsakis/rust-tutorials-keynote/e56b23f5af8a118f06afd94d6536456238f6b4ac/other/Lang Next.key/preview-micro.jpg
--------------------------------------------------------------------------------
/other/Lang Next.key/preview-web.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nikomatsakis/rust-tutorials-keynote/e56b23f5af8a118f06afd94d6536456238f6b4ac/other/Lang Next.key/preview-web.jpg
--------------------------------------------------------------------------------
/other/Lang Next.key/preview.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nikomatsakis/rust-tutorials-keynote/e56b23f5af8a118f06afd94d6536456238f6b4ac/other/Lang Next.key/preview.jpg
--------------------------------------------------------------------------------
/other/Rust Tutorial.key/Data/mt0@2x-1998.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nikomatsakis/rust-tutorials-keynote/e56b23f5af8a118f06afd94d6536456238f6b4ac/other/Rust Tutorial.key/Data/mt0@2x-1998.jpg
--------------------------------------------------------------------------------
/other/Rust Tutorial.key/Data/mt1@2x-2000.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nikomatsakis/rust-tutorials-keynote/e56b23f5af8a118f06afd94d6536456238f6b4ac/other/Rust Tutorial.key/Data/mt1@2x-2000.jpg
--------------------------------------------------------------------------------
/other/Rust Tutorial.key/Data/pasted-image-2006.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nikomatsakis/rust-tutorials-keynote/e56b23f5af8a118f06afd94d6536456238f6b4ac/other/Rust Tutorial.key/Data/pasted-image-2006.png
--------------------------------------------------------------------------------
/other/Rust Tutorial.key/Data/pasted-image-2073.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nikomatsakis/rust-tutorials-keynote/e56b23f5af8a118f06afd94d6536456238f6b4ac/other/Rust Tutorial.key/Data/pasted-image-2073.png
--------------------------------------------------------------------------------
/other/Rust Tutorial.key/Data/pasted-image-2298.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nikomatsakis/rust-tutorials-keynote/e56b23f5af8a118f06afd94d6536456238f6b4ac/other/Rust Tutorial.key/Data/pasted-image-2298.png
--------------------------------------------------------------------------------
/other/Rust Tutorial.key/Data/pasted-image-3917.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nikomatsakis/rust-tutorials-keynote/e56b23f5af8a118f06afd94d6536456238f6b4ac/other/Rust Tutorial.key/Data/pasted-image-3917.png
--------------------------------------------------------------------------------
/other/Rust Tutorial.key/Data/pasted-image-5220.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nikomatsakis/rust-tutorials-keynote/e56b23f5af8a118f06afd94d6536456238f6b4ac/other/Rust Tutorial.key/Data/pasted-image-5220.png
--------------------------------------------------------------------------------
/other/Rust Tutorial.key/Data/pasted-image-small-2007.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nikomatsakis/rust-tutorials-keynote/e56b23f5af8a118f06afd94d6536456238f6b4ac/other/Rust Tutorial.key/Data/pasted-image-small-2007.png
--------------------------------------------------------------------------------
/other/Rust Tutorial.key/Data/pasted-image-small-2074.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nikomatsakis/rust-tutorials-keynote/e56b23f5af8a118f06afd94d6536456238f6b4ac/other/Rust Tutorial.key/Data/pasted-image-small-2074.png
--------------------------------------------------------------------------------
/other/Rust Tutorial.key/Data/pasted-image-small-2299.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nikomatsakis/rust-tutorials-keynote/e56b23f5af8a118f06afd94d6536456238f6b4ac/other/Rust Tutorial.key/Data/pasted-image-small-2299.png
--------------------------------------------------------------------------------
/other/Rust Tutorial.key/Data/pasted-image-small-3918.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nikomatsakis/rust-tutorials-keynote/e56b23f5af8a118f06afd94d6536456238f6b4ac/other/Rust Tutorial.key/Data/pasted-image-small-3918.png
--------------------------------------------------------------------------------
/other/Rust Tutorial.key/Data/pasted-image-small-5221.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nikomatsakis/rust-tutorials-keynote/e56b23f5af8a118f06afd94d6536456238f6b4ac/other/Rust Tutorial.key/Data/pasted-image-small-5221.png
--------------------------------------------------------------------------------
/other/Rust Tutorial.key/Data/st0-3384.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nikomatsakis/rust-tutorials-keynote/e56b23f5af8a118f06afd94d6536456238f6b4ac/other/Rust Tutorial.key/Data/st0-3384.jpg
--------------------------------------------------------------------------------
/other/Rust Tutorial.key/Data/st1-3907.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nikomatsakis/rust-tutorials-keynote/e56b23f5af8a118f06afd94d6536456238f6b4ac/other/Rust Tutorial.key/Data/st1-3907.jpg
--------------------------------------------------------------------------------
/other/Rust Tutorial.key/Data/st10-6932.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nikomatsakis/rust-tutorials-keynote/e56b23f5af8a118f06afd94d6536456238f6b4ac/other/Rust Tutorial.key/Data/st10-6932.jpg
--------------------------------------------------------------------------------
/other/Rust Tutorial.key/Data/st11-2075.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nikomatsakis/rust-tutorials-keynote/e56b23f5af8a118f06afd94d6536456238f6b4ac/other/Rust Tutorial.key/Data/st11-2075.jpg
--------------------------------------------------------------------------------
/other/Rust Tutorial.key/Data/st11-3406.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nikomatsakis/rust-tutorials-keynote/e56b23f5af8a118f06afd94d6536456238f6b4ac/other/Rust Tutorial.key/Data/st11-3406.jpg
--------------------------------------------------------------------------------
/other/Rust Tutorial.key/Data/st11-6776.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nikomatsakis/rust-tutorials-keynote/e56b23f5af8a118f06afd94d6536456238f6b4ac/other/Rust Tutorial.key/Data/st11-6776.jpg
--------------------------------------------------------------------------------
/other/Rust Tutorial.key/Data/st12-2076.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nikomatsakis/rust-tutorials-keynote/e56b23f5af8a118f06afd94d6536456238f6b4ac/other/Rust Tutorial.key/Data/st12-2076.jpg
--------------------------------------------------------------------------------
/other/Rust Tutorial.key/Data/st12-4805.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nikomatsakis/rust-tutorials-keynote/e56b23f5af8a118f06afd94d6536456238f6b4ac/other/Rust Tutorial.key/Data/st12-4805.jpg
--------------------------------------------------------------------------------
/other/Rust Tutorial.key/Data/st13-3536.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nikomatsakis/rust-tutorials-keynote/e56b23f5af8a118f06afd94d6536456238f6b4ac/other/Rust Tutorial.key/Data/st13-3536.jpg
--------------------------------------------------------------------------------
/other/Rust Tutorial.key/Data/st17-4875.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nikomatsakis/rust-tutorials-keynote/e56b23f5af8a118f06afd94d6536456238f6b4ac/other/Rust Tutorial.key/Data/st17-4875.jpg
--------------------------------------------------------------------------------
/other/Rust Tutorial.key/Data/st19-4395.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nikomatsakis/rust-tutorials-keynote/e56b23f5af8a118f06afd94d6536456238f6b4ac/other/Rust Tutorial.key/Data/st19-4395.jpg
--------------------------------------------------------------------------------
/other/Rust Tutorial.key/Data/st19-4594.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nikomatsakis/rust-tutorials-keynote/e56b23f5af8a118f06afd94d6536456238f6b4ac/other/Rust Tutorial.key/Data/st19-4594.jpg
--------------------------------------------------------------------------------
/other/Rust Tutorial.key/Data/st2-3875.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nikomatsakis/rust-tutorials-keynote/e56b23f5af8a118f06afd94d6536456238f6b4ac/other/Rust Tutorial.key/Data/st2-3875.jpg
--------------------------------------------------------------------------------
/other/Rust Tutorial.key/Data/st20-4646.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nikomatsakis/rust-tutorials-keynote/e56b23f5af8a118f06afd94d6536456238f6b4ac/other/Rust Tutorial.key/Data/st20-4646.jpg
--------------------------------------------------------------------------------
/other/Rust Tutorial.key/Data/st21-4656.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nikomatsakis/rust-tutorials-keynote/e56b23f5af8a118f06afd94d6536456238f6b4ac/other/Rust Tutorial.key/Data/st21-4656.jpg
--------------------------------------------------------------------------------
/other/Rust Tutorial.key/Data/st23-3404.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nikomatsakis/rust-tutorials-keynote/e56b23f5af8a118f06afd94d6536456238f6b4ac/other/Rust Tutorial.key/Data/st23-3404.jpg
--------------------------------------------------------------------------------
/other/Rust Tutorial.key/Data/st23-4678.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nikomatsakis/rust-tutorials-keynote/e56b23f5af8a118f06afd94d6536456238f6b4ac/other/Rust Tutorial.key/Data/st23-4678.jpg
--------------------------------------------------------------------------------
/other/Rust Tutorial.key/Data/st24-4752.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nikomatsakis/rust-tutorials-keynote/e56b23f5af8a118f06afd94d6536456238f6b4ac/other/Rust Tutorial.key/Data/st24-4752.jpg
--------------------------------------------------------------------------------
/other/Rust Tutorial.key/Data/st25-4758.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nikomatsakis/rust-tutorials-keynote/e56b23f5af8a118f06afd94d6536456238f6b4ac/other/Rust Tutorial.key/Data/st25-4758.jpg
--------------------------------------------------------------------------------
/other/Rust Tutorial.key/Data/st29-5018.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nikomatsakis/rust-tutorials-keynote/e56b23f5af8a118f06afd94d6536456238f6b4ac/other/Rust Tutorial.key/Data/st29-5018.jpg
--------------------------------------------------------------------------------
/other/Rust Tutorial.key/Data/st3-3504.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nikomatsakis/rust-tutorials-keynote/e56b23f5af8a118f06afd94d6536456238f6b4ac/other/Rust Tutorial.key/Data/st3-3504.jpg
--------------------------------------------------------------------------------
/other/Rust Tutorial.key/Data/st30-5016.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nikomatsakis/rust-tutorials-keynote/e56b23f5af8a118f06afd94d6536456238f6b4ac/other/Rust Tutorial.key/Data/st30-5016.jpg
--------------------------------------------------------------------------------
/other/Rust Tutorial.key/Data/st31-5043.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nikomatsakis/rust-tutorials-keynote/e56b23f5af8a118f06afd94d6536456238f6b4ac/other/Rust Tutorial.key/Data/st31-5043.jpg
--------------------------------------------------------------------------------
/other/Rust Tutorial.key/Data/st33-5070.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nikomatsakis/rust-tutorials-keynote/e56b23f5af8a118f06afd94d6536456238f6b4ac/other/Rust Tutorial.key/Data/st33-5070.jpg
--------------------------------------------------------------------------------
/other/Rust Tutorial.key/Data/st34-6934.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nikomatsakis/rust-tutorials-keynote/e56b23f5af8a118f06afd94d6536456238f6b4ac/other/Rust Tutorial.key/Data/st34-6934.jpg
--------------------------------------------------------------------------------
/other/Rust Tutorial.key/Data/st35-6935.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nikomatsakis/rust-tutorials-keynote/e56b23f5af8a118f06afd94d6536456238f6b4ac/other/Rust Tutorial.key/Data/st35-6935.jpg
--------------------------------------------------------------------------------
/other/Rust Tutorial.key/Data/st36-5163.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nikomatsakis/rust-tutorials-keynote/e56b23f5af8a118f06afd94d6536456238f6b4ac/other/Rust Tutorial.key/Data/st36-5163.jpg
--------------------------------------------------------------------------------
/other/Rust Tutorial.key/Data/st37-5230.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nikomatsakis/rust-tutorials-keynote/e56b23f5af8a118f06afd94d6536456238f6b4ac/other/Rust Tutorial.key/Data/st37-5230.jpg
--------------------------------------------------------------------------------
/other/Rust Tutorial.key/Data/st37-6127.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nikomatsakis/rust-tutorials-keynote/e56b23f5af8a118f06afd94d6536456238f6b4ac/other/Rust Tutorial.key/Data/st37-6127.jpg
--------------------------------------------------------------------------------
/other/Rust Tutorial.key/Data/st38-5431.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nikomatsakis/rust-tutorials-keynote/e56b23f5af8a118f06afd94d6536456238f6b4ac/other/Rust Tutorial.key/Data/st38-5431.jpg
--------------------------------------------------------------------------------
/other/Rust Tutorial.key/Data/st39-5467.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nikomatsakis/rust-tutorials-keynote/e56b23f5af8a118f06afd94d6536456238f6b4ac/other/Rust Tutorial.key/Data/st39-5467.jpg
--------------------------------------------------------------------------------
/other/Rust Tutorial.key/Data/st39-5584.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nikomatsakis/rust-tutorials-keynote/e56b23f5af8a118f06afd94d6536456238f6b4ac/other/Rust Tutorial.key/Data/st39-5584.jpg
--------------------------------------------------------------------------------
/other/Rust Tutorial.key/Data/st39-5869.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nikomatsakis/rust-tutorials-keynote/e56b23f5af8a118f06afd94d6536456238f6b4ac/other/Rust Tutorial.key/Data/st39-5869.jpg
--------------------------------------------------------------------------------
/other/Rust Tutorial.key/Data/st39-6013.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nikomatsakis/rust-tutorials-keynote/e56b23f5af8a118f06afd94d6536456238f6b4ac/other/Rust Tutorial.key/Data/st39-6013.jpg
--------------------------------------------------------------------------------
/other/Rust Tutorial.key/Data/st4-2011.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nikomatsakis/rust-tutorials-keynote/e56b23f5af8a118f06afd94d6536456238f6b4ac/other/Rust Tutorial.key/Data/st4-2011.jpg
--------------------------------------------------------------------------------
/other/Rust Tutorial.key/Data/st4-3910.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nikomatsakis/rust-tutorials-keynote/e56b23f5af8a118f06afd94d6536456238f6b4ac/other/Rust Tutorial.key/Data/st4-3910.jpg
--------------------------------------------------------------------------------
/other/Rust Tutorial.key/Data/st4-4145.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nikomatsakis/rust-tutorials-keynote/e56b23f5af8a118f06afd94d6536456238f6b4ac/other/Rust Tutorial.key/Data/st4-4145.jpg
--------------------------------------------------------------------------------
/other/Rust Tutorial.key/Data/st41-6048.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nikomatsakis/rust-tutorials-keynote/e56b23f5af8a118f06afd94d6536456238f6b4ac/other/Rust Tutorial.key/Data/st41-6048.jpg
--------------------------------------------------------------------------------
/other/Rust Tutorial.key/Data/st42-6029.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nikomatsakis/rust-tutorials-keynote/e56b23f5af8a118f06afd94d6536456238f6b4ac/other/Rust Tutorial.key/Data/st42-6029.jpg
--------------------------------------------------------------------------------
/other/Rust Tutorial.key/Data/st43-6125.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nikomatsakis/rust-tutorials-keynote/e56b23f5af8a118f06afd94d6536456238f6b4ac/other/Rust Tutorial.key/Data/st43-6125.jpg
--------------------------------------------------------------------------------
/other/Rust Tutorial.key/Data/st45-6076.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nikomatsakis/rust-tutorials-keynote/e56b23f5af8a118f06afd94d6536456238f6b4ac/other/Rust Tutorial.key/Data/st45-6076.jpg
--------------------------------------------------------------------------------
/other/Rust Tutorial.key/Data/st45-6135.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nikomatsakis/rust-tutorials-keynote/e56b23f5af8a118f06afd94d6536456238f6b4ac/other/Rust Tutorial.key/Data/st45-6135.jpg
--------------------------------------------------------------------------------
/other/Rust Tutorial.key/Data/st46-6126.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nikomatsakis/rust-tutorials-keynote/e56b23f5af8a118f06afd94d6536456238f6b4ac/other/Rust Tutorial.key/Data/st46-6126.jpg
--------------------------------------------------------------------------------
/other/Rust Tutorial.key/Data/st48-6129.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nikomatsakis/rust-tutorials-keynote/e56b23f5af8a118f06afd94d6536456238f6b4ac/other/Rust Tutorial.key/Data/st48-6129.jpg
--------------------------------------------------------------------------------
/other/Rust Tutorial.key/Data/st48-6226.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nikomatsakis/rust-tutorials-keynote/e56b23f5af8a118f06afd94d6536456238f6b4ac/other/Rust Tutorial.key/Data/st48-6226.jpg
--------------------------------------------------------------------------------
/other/Rust Tutorial.key/Data/st49-6262.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nikomatsakis/rust-tutorials-keynote/e56b23f5af8a118f06afd94d6536456238f6b4ac/other/Rust Tutorial.key/Data/st49-6262.jpg
--------------------------------------------------------------------------------
/other/Rust Tutorial.key/Data/st5-4011.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nikomatsakis/rust-tutorials-keynote/e56b23f5af8a118f06afd94d6536456238f6b4ac/other/Rust Tutorial.key/Data/st5-4011.jpg
--------------------------------------------------------------------------------
/other/Rust Tutorial.key/Data/st50-6917.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nikomatsakis/rust-tutorials-keynote/e56b23f5af8a118f06afd94d6536456238f6b4ac/other/Rust Tutorial.key/Data/st50-6917.jpg
--------------------------------------------------------------------------------
/other/Rust Tutorial.key/Data/st51-6928.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nikomatsakis/rust-tutorials-keynote/e56b23f5af8a118f06afd94d6536456238f6b4ac/other/Rust Tutorial.key/Data/st51-6928.jpg
--------------------------------------------------------------------------------
/other/Rust Tutorial.key/Data/st54-6523.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nikomatsakis/rust-tutorials-keynote/e56b23f5af8a118f06afd94d6536456238f6b4ac/other/Rust Tutorial.key/Data/st54-6523.jpg
--------------------------------------------------------------------------------
/other/Rust Tutorial.key/Data/st55-6586.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nikomatsakis/rust-tutorials-keynote/e56b23f5af8a118f06afd94d6536456238f6b4ac/other/Rust Tutorial.key/Data/st55-6586.jpg
--------------------------------------------------------------------------------
/other/Rust Tutorial.key/Data/st55-6639.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nikomatsakis/rust-tutorials-keynote/e56b23f5af8a118f06afd94d6536456238f6b4ac/other/Rust Tutorial.key/Data/st55-6639.jpg
--------------------------------------------------------------------------------
/other/Rust Tutorial.key/Data/st57-6727.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nikomatsakis/rust-tutorials-keynote/e56b23f5af8a118f06afd94d6536456238f6b4ac/other/Rust Tutorial.key/Data/st57-6727.jpg
--------------------------------------------------------------------------------
/other/Rust Tutorial.key/Data/st58-6772.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nikomatsakis/rust-tutorials-keynote/e56b23f5af8a118f06afd94d6536456238f6b4ac/other/Rust Tutorial.key/Data/st58-6772.jpg
--------------------------------------------------------------------------------
/other/Rust Tutorial.key/Data/st6-3942.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nikomatsakis/rust-tutorials-keynote/e56b23f5af8a118f06afd94d6536456238f6b4ac/other/Rust Tutorial.key/Data/st6-3942.jpg
--------------------------------------------------------------------------------
/other/Rust Tutorial.key/Data/st6-4152.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nikomatsakis/rust-tutorials-keynote/e56b23f5af8a118f06afd94d6536456238f6b4ac/other/Rust Tutorial.key/Data/st6-4152.jpg
--------------------------------------------------------------------------------
/other/Rust Tutorial.key/Data/st7-2072.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nikomatsakis/rust-tutorials-keynote/e56b23f5af8a118f06afd94d6536456238f6b4ac/other/Rust Tutorial.key/Data/st7-2072.jpg
--------------------------------------------------------------------------------
/other/Rust Tutorial.key/Data/st7-4115.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nikomatsakis/rust-tutorials-keynote/e56b23f5af8a118f06afd94d6536456238f6b4ac/other/Rust Tutorial.key/Data/st7-4115.jpg
--------------------------------------------------------------------------------
/other/Rust Tutorial.key/Data/st8-4138.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nikomatsakis/rust-tutorials-keynote/e56b23f5af8a118f06afd94d6536456238f6b4ac/other/Rust Tutorial.key/Data/st8-4138.jpg
--------------------------------------------------------------------------------
/other/Rust Tutorial.key/Data/st9-2238.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nikomatsakis/rust-tutorials-keynote/e56b23f5af8a118f06afd94d6536456238f6b4ac/other/Rust Tutorial.key/Data/st9-2238.jpg
--------------------------------------------------------------------------------
/other/Rust Tutorial.key/Data/st9-4140.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nikomatsakis/rust-tutorials-keynote/e56b23f5af8a118f06afd94d6536456238f6b4ac/other/Rust Tutorial.key/Data/st9-4140.jpg
--------------------------------------------------------------------------------
/other/Rust Tutorial.key/Index.zip:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nikomatsakis/rust-tutorials-keynote/e56b23f5af8a118f06afd94d6536456238f6b4ac/other/Rust Tutorial.key/Index.zip
--------------------------------------------------------------------------------
/other/Rust Tutorial.key/Metadata/BuildVersionHistory.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Template: White (2014-02-28 09:41)
6 | M6.2-1861-1
7 | M6.2.2-1878-1
8 |
9 |
10 |
--------------------------------------------------------------------------------
/other/Rust Tutorial.key/Metadata/DocumentIdentifier:
--------------------------------------------------------------------------------
1 | FBBC0704-70F4-474C-BE14-1C9DBDCCB008
--------------------------------------------------------------------------------
/other/Rust Tutorial.key/Metadata/Properties.plist:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nikomatsakis/rust-tutorials-keynote/e56b23f5af8a118f06afd94d6536456238f6b4ac/other/Rust Tutorial.key/Metadata/Properties.plist
--------------------------------------------------------------------------------
/other/Rust Tutorial.key/preview-micro.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nikomatsakis/rust-tutorials-keynote/e56b23f5af8a118f06afd94d6536456238f6b4ac/other/Rust Tutorial.key/preview-micro.jpg
--------------------------------------------------------------------------------
/other/Rust Tutorial.key/preview-web.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nikomatsakis/rust-tutorials-keynote/e56b23f5af8a118f06afd94d6536456238f6b4ac/other/Rust Tutorial.key/preview-web.jpg
--------------------------------------------------------------------------------
/other/Rust Tutorial.key/preview.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nikomatsakis/rust-tutorials-keynote/e56b23f5af8a118f06afd94d6536456238f6b4ac/other/Rust Tutorial.key/preview.jpg
--------------------------------------------------------------------------------