├── .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 --------------------------------------------------------------------------------