State of the crates.io - Sean Griffin
36:20
Пікірлер
@hanyanglee9018
@hanyanglee9018 29 күн бұрын
I'm recently waiting for some dnd or coc game in real life, and, I found one here.....
@maximus1172
@maximus1172 4 ай бұрын
Finally grasped the mechanical steps I need to pay attention to when dealing with the borrow checker in today's rust code!! This needs to be documented in the rust book the way it was explained here, the best explanation of borrow checker yet !!
@CrapE_DM
@CrapE_DM 5 ай бұрын
I don't get it. How does a typical OO background make traits hard to understand? Also, for a "deep dive", this doesn't dive very deep. I was hoping to learn the differences between using generics on a trait and having a type field.
@konstantinrebrov675
@konstantinrebrov675 7 ай бұрын
The video game example is really good for understanding traits.
@asitisj
@asitisj 7 ай бұрын
This is a lot like nix build
@NonTwinBrothers
@NonTwinBrothers 8 ай бұрын
I wouldn't exactly consider myself a rustaceon, but I found this to be a nice talk
@shailendrajadhav8603
@shailendrajadhav8603 9 ай бұрын
I came across this video today and I think this is the best explanation of Traits in Rust on the internet!
@teeI0ck
@teeI0ck 9 ай бұрын
👀
@GrahamTodd-ca
@GrahamTodd-ca 9 ай бұрын
In _raku_ (`raku_lang`) the type hierarchy starts with "Mu" - which puts "the developer" in the realm of logical philosophy and Buddhist metaphysics right from the get go.
@aakarshanraj1176
@aakarshanraj1176 11 ай бұрын
18:41 should be Vec<Box<dyn Cast>>
@sergesolkatt
@sergesolkatt Жыл бұрын
@GrandpaRanOverRudolf
@GrandpaRanOverRudolf Жыл бұрын
isn't it Box<dyn Cast>
@minandychoi8597
@minandychoi8597 Жыл бұрын
omg let him hit the spacebar!!
@minandychoi8597
@minandychoi8597 Жыл бұрын
wow mathematicians couldn’t be bothered to type out Natural and succeed or increment but would/expect me to say ‘suck suck naturals’ with a straight face
@minandychoi8597
@minandychoi8597 Жыл бұрын
actually a brilliant talk. thanks for making this understandable for those of us who aren’t type theorists!! i’ve always been really bothered by how i have to check the lengths of vectors and such at runtime, learnt something really cool from this talk, and i’m gonna try and apply this idea in my code later. i still stand by my point that mathematicians should get over themselves and stop with the silly symbol business already. computers have been around for decades. just learn to type faster ffs. it’s 2023 and it’s ur fault if you type so slowly that you still have to Nat this and suc that.
@JCake
@JCake Жыл бұрын
I wish this project resumes development, because I actually really like KDevelop, and I think it's just a shame that it doesn't see much use because of the lack of language support in general. That being said, C/C++ support is fantastic.
@SweetPotatoTim
@SweetPotatoTim Жыл бұрын
Dang, unfortunately the project the become stagnant:(
@EngineerNick
@EngineerNick Жыл бұрын
I just wish slice::Windows could produce `Item`s of known length so that they could be unpacked. This would seem to be a solution. But there has got to be a limit somewhere; I think the typescript type system has been shown to be Turing complete. Maybe rust can beat it by being the first to run Doom on a type system.
@JorgetePanete
@JorgetePanete Жыл бұрын
Google it, Rust's is too.
@jonaskoelker
@jonaskoelker Жыл бұрын
Without defining what "0.999..." means or what operations you can do on that object, one can hardly consider this a proof. Here's one definition: "0.999..." is shorthand for the sequence 0.9, 0.99, 0.999, 0.9999 and so on(*). When we say that "1 = 0.999..." what we really mean is that 1 is the limit of this sequence. If this is what we mean, the proof should follow easily from the kind of real analysis I expect first-year math students to learn at most universities. I guess we can call the sequence X, and let 10X be the component-wise scaling by 10, i.e. 9, 0.9, 0.99, etc.; then the component-wise difference (= 9X) is 8.1, 0.81, 0.081 and so on. We can then divide by 9 and get back X = 0.9, 0.99, 0.999 and so on, i.e. we can go back to where we started. But this doesn't prove that the sequence has a limit. (*) Note: we can define the sequence recursively: x_0 = 0.9 and x_{n+1} = 1 - (1 - x_n)/10. This recurrence has a single fixpoint, at 1, the iterated function is continuous and the distance to the fixpoint decreases by a constant factor. Together these facts imply convergence to the fixpoint.
@parlor3115
@parlor3115 Жыл бұрын
Mayb you should achieve volume first
@ZiggyGrok
@ZiggyGrok Жыл бұрын
The question I had that wasn't answered: what prevents this from being the way we do borrow checking today?
@shekhinah5985
@shekhinah5985 Жыл бұрын
it's expensive to type check. the current implementation in rustc can be very slow and memory expensive. you can use it with the nightly compiler and RUSTFLAGS="-Zpolonius".
@porky1118
@porky1118 Жыл бұрын
Will this solve this problem: - case that doesn't work: object.call(object.value()); - case that works: let value = object.value(); object.call(value);
@erikwg3814
@erikwg3814 Жыл бұрын
Great talk! Cool timeline :)
@haystackdmilith
@haystackdmilith Жыл бұрын
The difference is in HOW you write an unsafe code. If the programmer has to do something too advanced for the Rust compiler to comprehend, you can take over control. There's nothing wrong in calling unsafe function that has no flaws (aka is "pure")
@warwolt
@warwolt Жыл бұрын
Hadn't seed that thing about dependent types moving up one universe level, very cool
@tf_d
@tf_d 2 жыл бұрын
lmao this is wonderful
@kolskytraveller1369
@kolskytraveller1369 2 жыл бұрын
That's not dependent types, but rather an overengineered, hardcoded, typed nightmare bullshit. Imagine trying to use this in a production code. Actual dependent types don't depend on types (pun not intended) and can be inferred automatically by proof checker from context.
@warwolt
@warwolt Жыл бұрын
The talk was clearly framed as bending the rust type system, this is just a demo and not meant for prod
@user-uf4rx5ih3v
@user-uf4rx5ih3v Ай бұрын
Dependent types cannot always be inferred by the proof assistant unfortunately. I think dependent types are better understood as a kind of macro, since (almost) all of the type information is completely deleted at compile time.
@dionysis_
@dionysis_ 2 жыл бұрын
Great talk!!
@Chris-on5bt
@Chris-on5bt 2 жыл бұрын
TBH, Most pragmatically useful content is at the beginning and end. IMO, the content in the middle while nice background information is a little light on utility. @ ~ 1:20 Ms. Manning points out difference between string.len() & string.char().count() @ ~ 15:40 Ms. Manning talks over UTF-8, UTF-16, & UTF-32
@Bravo-oo9vd
@Bravo-oo9vd 2 жыл бұрын
28:00 couldn't we save some space in Dashed variant by making it Option<NonZeroU32> and the resulting Option would have the same size as u32, 4 bytes? Dashed with zero spacing should theoretically look the same as Solid.
@rodelias9378
@rodelias9378 2 жыл бұрын
Thanks a lot for such an impressive talk!!
@alwaysradical1613
@alwaysradical1613 2 жыл бұрын
Wait, what happens if vector length is already usize::MAX, and then we push again? I don't see how the code presented deals with this potential problem.
@mbartelsm
@mbartelsm 2 жыл бұрын
It panics, it said so in the docs. Push panics if pushing would overflow a usize integer.
@alwaysradical1613
@alwaysradical1613 2 жыл бұрын
Dangers of C++ starts at 5:10; Unsafe Rust intro starts at 14:47; Title slide at 19:50
@johnwilliams7999
@johnwilliams7999 2 жыл бұрын
I love this video makes it so clear
@kanglei7807
@kanglei7807 2 жыл бұрын
I also like rust, especially the rust compiler. I want to contribute. I don’t know where to start?
@OpenGL4ever
@OpenGL4ever 2 жыл бұрын
That was interesting. Thanks.
@stevenfletcher3389
@stevenfletcher3389 2 жыл бұрын
I think I'm missing the point here. What I took away from this talk is that I can replace a primitive or a Vec with a Trait for no reason. I feel like I understood traits better before I watched this, but everyone else is saying this talk was great. I realize she chose simple examples on purpose, but these are cases where traits shouldn't be used.
@MMABeijing
@MMABeijing 2 жыл бұрын
good job on not laughing each time she said "castrate"
@origamibulldoser1618
@origamibulldoser1618 2 жыл бұрын
"You forgot to initialize the variable". Lol. Close. Noob.
@mehedirifat9072
@mehedirifat9072 2 жыл бұрын
I also found rust when i ways thinking about learning C++
@jonathanmoore5619
@jonathanmoore5619 2 жыл бұрын
Great presentation.
@VivekYadav-ds8oz
@VivekYadav-ds8oz 2 жыл бұрын
As a Rust learner, I think it is being sold wrongly. The word "undefined behaviour" is thrown around too casually. The CPP conference people tend to abstract away hardware and concrete implementations, hence they just label anything not specified by the C++ specs as "undefined behaviour" because they cannot be sure how the implementations will handle such situations. But, almost all popular compilers do the most reasonable thing when it comes to these situations. Printing uninitialised memory will print whatever bits were stored in its place, overflowing an integer will result in it wrapping down to the smallest storable number, etc. This is not something CPP programmers would worry about while coding. This is fear-mongering. I fear I'm getting myself into a community full of these people, but damn the promise is too great not to give it a shot, and so far, I like it.
@AbelShields
@AbelShields Жыл бұрын
I'd like to respond to that: in all these situations, is wrapping behaviour and printing undefined bits what you want? You can achieve all of that in Rust too, but it forces you to explicitly say that that behaviour is what you want. If I'm summing positive integers in an array and get a negative result, is that what I wanted, or will this cause a problem with some assumption I make further on? Rust doesn't forbid this behaviour, there's a wrapping add, which let's you say that you're sure you want this behaviour. If you don't want to worry about that every time, there's specific wrapping integer classes that will do that every time if that's what you want. You can read uninitialized memory, or even memory from an arbitrarily specified pointer inside an unsafe block. I feel like the purpose of Rust is to help you not get bitten by these things when you're not expecting it, making it easier to do the right thing.
@Neme112
@Neme112 3 ай бұрын
All those things *are* undefined behavior, by the standard.
@joelmontesdeoca6572
@joelmontesdeoca6572 3 жыл бұрын
I wish more Rust talks were like this! The visuals really sold it for me.
@pauloviniciuscoral1128
@pauloviniciuscoral1128 3 жыл бұрын
Very informative and inspirational
@megumin4625
@megumin4625 3 жыл бұрын
So basically, don't use C/C++ lol
@OdinRu1es
@OdinRu1es 3 жыл бұрын
Next: how to fight and vanquish the borrow checker with half orc barbarian and elf wizard
@lolilollolilol7773
@lolilollolilol7773 3 жыл бұрын
I've had the same error with copy_from_slice, and it's bad, because it's basically memory corruption, something Rust is supposed to guarantee against.
@honne23
@honne23 3 жыл бұрын
im lookin for the same energy as the guy who shouted ‘woo!’
@PrettyGrossMKay
@PrettyGrossMKay 3 жыл бұрын
AHHHH that's why a Rust enum is a SUM-type; A FruitSnack so to speak; A variable can have enum-value 1 OR enum-value 2 OR ...; e.g. The Option enum can be either Some(x) or None.
@JosiahWarren
@JosiahWarren 3 жыл бұрын
Short and accurate. Thanks
@DmitryRomanov
@DmitryRomanov 3 жыл бұрын
Kudos to you, and good luck ))) !
@SaHaRaSquad
@SaHaRaSquad 3 жыл бұрын
Wow, I'm glad I watched this talk, it's super interesting and makes me want to learn more about the whole thing.