Add a meeting Rate this page

A

So I think we could keep going a little bit to the paper dock, but I also wanted to talk what I'm hoping will.

A

Kind of get to overall is this sort of menses here things around and help us figure out our priorities. One of the things I started experimenting with just last few minutes is.

A

I.

A

Started messing around with a.

A

Even after quitting all the apps and disabling everything there we go I, don't like sharing my school. Why is it not.

A

Okay, I created this you'd have a project thing which I always try to use and I always fail to find a lot of value in, but I was thinking that, maybe to help us track the overall like and overall view of what's going on, it may actually not be the worst UI. um Obviously, I just put a dummy thing in here, but.

A

We've talked a lot about having sort of a place where people can go and get an overview. What's going on, I think it'd be helpful for us to to be able to say like here are the projects that are active near some that are stalled out, or you know, and with links it's kind of a tracking issue. I guess so. Maybe it's better to just make tracking issues named today, but um I wanted to go and toss it out there for thought.

A

I think we should be able to would make it if we kind of had a good list like this. Here's, the things and here's the ones we're focusing on and here's the ones we're not right now and and some notes on why I think we sort of don't at the moment have a central place where we can observe that information I.

A

Know I'm always discovering new things along the way.

B

So that interface, you showed the project you, um the main benefit I see of it is that it gives you a sort of two dimensional view of the status of many things at once in terms of the the issues themselves, without the ability to encode much metadata about, like you know, discussion or those supporting text describing the status, because that would perhaps defeat the purpose um is that accurate, I think.

A

That's right: yeah we could debate what these columns are like I think you could imagine them being people and organized.

B

By liaison.

A

And maybe another column of like doesn't have a liaison and therefore you know that would sort of help to visualize the sometimes talked about about giving people a way to visualize it. In.

B

The limit you jump to a spreadsheet right, whether like height with the pivot tables and stuff I.

A

Started with don't go over to this, wasn't enjoying that's, not I! Guess that's not go too far down this. This probably better discuss Aysen, something to think about.

A

So coming back to the addition planning he got down through when we're around type description, I guess we were talking a bit about implied balance I forget exactly how far we go.

A

I.

C

Believe we got through the entirety of what was under economics, initiative and other unfinished business, except for things that got added after that meeting to be discussed.

A

Yeah, we definitely got through um medium Linse and so forth.

A

I think.

C

We may not have discussed the section labeled other candidates, the where there's like minor bullet points that didn't really get thorough of its debts in there. You.

A

Know and then.

C

We discussed one or two of the items under new or other items. That's part.

A

So when I okay do.

C

We want to discuss RFC, 21, 15 and 21 45, or do we want to move on to the other item?.

A

Let's discuss these briefly but not spend too much time, I'm gonna, put a say, 15 minutes and then start looking at the new or other aims. So I did look a little bit in band bindings and life time. The elision- I refresh my memory here a little bit so the in band bindings their own doesn't remember, is you didn't have to declare a lifetimes explicitly, we kind of inferred their scope from where they were used and there were various details.

A

I've got implemented, but not it's not I, don't know nothing widely used, I think, and there were some concerns about the design. That's the way it stood then lifetime illusion. This was Scott's RFC right.

A

Basically saying in associated types, you could use tick underscore to refer to one of the one of the implied lifetimes from this like. If the inputs of the input, input, types, enable header or like function, parameter types.

D

Basically, making all of the the self type and the arguments there be to the input in the sense of like function, arguments and then associated types or outputs like function, return, type position and then just copy over the same rules.

A

The main concern here was, if you scroll down, there's and that comment summarizing it that there's a sort of surprising ish interaction, I mean elision at the function level, where this return type refers to one of the parameters and elision. But you might, you might expect if you wrote self code like. Basically, if you write self : : item, you get this type, and this allusion refers to that lifetime and everything works.

A

But if you inline the definition, then this ampersand T now refers to here and not to here, and so you get an error about having the wrong world lifetimes here and I can attest that we've been working. Someone I know like Esteban, has been working on trying to get the error messages in the compiler better. In scenarios like this, and it's really hard I kind of explain to people what's happening in a concise way um and I guess it would be I, don't know if this I guess I wouldn't make that harder or easier.

A

Just to say this isn't point of concern. um I.

A

Don't know, but it's not like this has been highly controversial. It's not like a big huge implementation challenge. Mostly a design question is.

C

It theoretically possible that this could be done in a edition compatible way or only.

A

Component yeah.

D

Right now, it's so right now anything where this is. What happened is an error because you didn't specify a lifetime and you have to okay, so.

C

Then this is a valuable feature. Is there any specific reason? We should tie this to the addition.

C

As opposed to just doing it, and when it's done everybody has it I suppose.

D

None of these lifetime things are actually addition tied in band, wouldn't be either right. That's.

A

Right I think I think for the matically. Like is this the kind of work we want to be doing at this moment in our lives? I definitely feel mine to do smaller. Things like this and leave out the more aggressive in banned lifetime bindings, which doesn't even know that was.

D

That's sort of why I ended up writing that RFC, actually, because the conversation and in band was got to the point where my biggest feeling was, we should try and allied more and then, if, after we've successfully elided more, we go man. This is still a pain than we do in band or something.

A

Yeah I, don't think it's gonna, really I, guess I. Don't think this scenario is that common that it's gonna really dramatically change my desire for a lighter wave solution, but I also kind of feel like the most pressing problems. I, don't know. I'm not trying to get in beyond, doesn't feel like it's solving the most. It's neither the most pressing ergonomic problem nor a particular enabler to my mind, I guess: that's what it comes down to so and then claim to hold off a little bit. Yeah.

D

The the only place where a lifetime illusion is particularly common as anytime. You write into iterator impulse I.

D

Don't know how many people actually do that.

A

I.

A

Guess there is a question mark here of like it's, my hypothesis, that.

A

That I feel like this ergonomic I, guess I'd like to understand better what we think around borrowing and so on. The most pressing economic problems are to address and it would be nice if we had a strategy like we want to make at some point. I did have a a I'm like I want to make it so that writing a you know reader! Well, look at that!

A

Look at what's required in that and make that as easy and painless and as possible, because I feel, like that's a common use case of about that level of complexity. I hold a reference to a bar to a collection and I'm walking through or something um yeah.

D

I'd love to find something to make me I have one reference in a struct saying, not quite so, at Japan and.

A

That, notably, is not really addressed that much.

D

It could I, don't remember if that proposal took it out of the struct header. There.

A

So, like I mean religion case in particular,.

D

Remember.

E

If.

D

You had to put TK in the header still for struct definition contained a reference. You.

A

Did because otherwise that was there is the idea was that in function, signatures and impulse. Those are cases where you don't. You don't write those lifetimes because they're not types all.

D

Right, since those aren't introducing it, the definition of the thing introduced the lifetime yeah.

A

And like they're doing were connecting pieces of the definition together, but in the case of a struct you're gonna write somewhere else, you're gonna have to write like you know. You're gonna have to acknowledge this this this this lifetime.

B

Cap so.

A

It's really weird: what word is it going? You can, sir, just infer it from the ether right all right. So it's nice. If you try to move on so I guess a certain one. We didn't meet your conclusion except we're like not exactly sure what the.

A

Prioritization here is but small steps.

A

It's not really type of the additional.

A

One thing I might bring up it's more of an implementation thing, but we had some existing RFC's most notably, um he gets to two to nine that uh that the talks about capturing of actually this is edition related like enclosures.

A

Yes,.

C

Please, why is this addiction related? Why is this or see additionally quite and then need to be tied to an addition? What's the backward compatibility concern some.

D

Unresolved question says: drop order.

A

So if you have today, let's say you write this code.

A

What happens is that the closure captures all of foo, and so when, when the closure is dropped, then foo will be dropped, but you could imagine a version where the closure captured I think you probably would want it to be that the closure captured food bar only and that's the rest of foo is dropped.

A

Sort of when it ordinarily would have been.

C

So, in addition, we could change that drop order, which is unlikely to be readily observed. I mean you could tell, but code is unlikely to care. It's doing something like this, but in a non edition. Technically there might be code out there, especially unsafe code, which might be paying close attention to this. Yes,.

A

I mean I would be I would definitely not be okay, with changing the visible semantics outside of an edition. Let's say inside I think I'm. Definitely, okay with it, but I do have not not entirely sure what what we would like. We probably how much like less fix to war that or something yeah they could go upgrade yeah like I, might want that when you upgrade we up, we change your code to something like this and actually for some other weird constructs.

A

It actually preserves the semantics by like kind of separating out the path so that you're accessing first foo and then buddhabar I, don't know, that's, probably not what we would actually do. It probably be like les fous equals foo or something um right, and then that would be. That would preserve the actual semantics, but any new code you wrote, would work the new way, and maybe you can go back after and clean up these on your own.

A

You know to make it since you probably don't care most of the time we could be a little more selective like we could look for places where the type. Actually, you know where we see a drop that we might have side effects. Oh I.

B

Think we'd have to yeah I, don't know at least orally something that has a destructor right because I, don't we just injected a little replaced? People would go nuts right, agreed.

A

We couldn't do it for like every capture for sure so I, don't know exactly how selective we can get, but I think we would want to get some ones like.

D

So that would be hard to find a way to silence the warning to say that this case, where it's technically gonna change, behavior I, don't care because of because it's only dropping a string and whatever.

A

Yeah I mean I think we would special case. We would know, for example, that box and string in Beck I feel like we would have a list of things that we know and that are just freeing memory and we don't consider them to have side effects and we would I would even waitlist those, in other words, that.

D

Give me text or something and they exist, try it well.

A

That would yes, if we see a mutex, if we see a new text card or like will recursively walk down, basically yeah.

B

Found data there something would be other way, but.

A

The hard problem is going to be like BEC of T, where you don't know what T is because then you have to be conservative.

C

Do we feel like we need to automatically translate this in rust bits or do we? Is there any possibility? We could.

B

Just say.

C

This is the new semantics in the Edition that 99.9% of code.

B

Is not going to care and.

C

It would actually be intrusive to have rust they do this when you probably just want to leave it and make sure your code still where.

A

You don't know, I feel a little uncomfortable, telling people they can upgrade and then silently introducing a really weird bug, because now now some mutex is being dropped at a different time and we.

B

Have flags to rust, fixed, like people like opt-in, to say, look this particular transformation. Don't don't apply this one, so it's not gonna decide and their local. You know that they're willing to take the risk if no honey applied on their code base. What.

A

I, don't know I, don't know if you do, but we could imagine it. One thing I want to add is I think we do in the sense that you can specify like links with that rust fix will be applying, and one thing I want to add is on there are some people really interested in pursuing this implementation?

A

Right now is a group of undergrads who came, and so I did have this on the D prioritized but I'm sort of thinking about saying, okay, oh I will work with you guys because I would really like to see it implemented. I think it'd be a big economic win.

C

And.

A

Maybe maybe we'll get if you probably want to go much further into these details now, but these are the just about prioritize, like figuring out exactly what the options are and what we can figure out. I'm.

C

Curious is there value in considering a more general change if we're thinking of doing this anyway, something along the lines of please stop caring about drop order already is. Would there be value if we're going to make a change like this anyway, in just gratuitously, saying you're no longer allowed to care what order things get dropped in if you care call drop.

A

That's obviously not tenable, like that, would be a massive change to the language, but I think there might be more other variants that we could consider like. You could have a opt-in trait. That indicates that the compiler can reorder your drops, for example, that makes sense, and then we can implement that for all our standard library types this is this came up around they sink because we were having the problem that you remember. We made temporaries lifetimes in a sink match, temporary look times everywhere, and then that started introducing some cases where now yeah.

C

There was a question of like we had stabilized this, and then we needed to slightly change. It is anybody.

B

Going.

C

To notice I remember that discussion about a sink we hadn't stabilized.

A

The end but yeah was you're coming up on stabilization right.

C

People were wondering if it was going to be breakage, though one other question on this one. If we're talking about improving capturing enclosures, would a similar approach allow us to handle.

C

Capturing in methods like not capturing all of self, just because you call a helper method that takes, though I.

D

Think that has different some of her things and closures Durant. It.

C

Does but in particular, the pop I was considering the possibility of what, if it's a private method as opposed to a public method, I would.

A

Dearly love to solve that problem, I, don't like why's the technique, it's a different problem like so here. What we plan to do is basically change how closures these figure themselves, so it doesn't really change the borrowed checker in some sense anyway, whereas the method problem does because it requires to barter, doesn't look outside of a single function right now and you could have to think about how does that here in the function? Signature effective are technically.

C

Couldn't it be a B sugar as well? You could say that you have written this, takes ampersand, mute self, but really you're, taking these two things and you're just internally changing the calling convention of the private method to pass a couple of private beautiful, borrows and then a caller just has to know that and say: oh I'm, really passing ampersand mute, Southby and ampersand mute self dot, D and then the borrow checker will just do the right thing with that D sugar, I, considered.

A

That at some point, um I think it could be potentially done. It's tricky because of recursive functions and yes, I think it wouldn't be my preferred solution. I would, rather, that we try to solve it in a way that we at least explore what it wouldn't look like to solve it. You know a first-class way where the user could explicitly declare it without overhauling their signatures, but.

C

It would be very nice to solve, if you think, it's too different from capturing enclosures, that we won't be able to do it in a tissue and that's another question. But if there's any chance, we could do that by this addition, because then it be a coherent story of. In general, we made the borrow checker better.

A

Yeah, which were basically raises a point, I think it's it sufficiently different that it should be thought of as follow-up work, but I think it's an interesting point, another bit of work, which I don't really want to go much into, but polonius sort of NL 2.0. So to speak, it's making some like me. A lot of progress, I haven't really been following.

A

I mean we've been kind of slow moving forward and I haven't been as involved, but um it does fix certain problems like returning mutable references. There's. Definitely like.

C

Does this I saw a reference on a slide where you talked about this? What are the chances that this would also allow you to have references elsewhere in your same structure,.

C

Yeah.

A

It doesn't like directly enable that a lot of foundational ships that enables them essentially no anyway, where.

C

Do you know where, on the spectrum from basically done but needs more performance work to have you know bugs that need fixing that affected semantically? This is.

A

It doesn't have any we're current we're currently in the phase of trying to like completely we implement the borrow checker that this approach loads to bear, but it's not there. So we, the first step, was get all those stuff working and the next step was going to be optimized I think it's a significant amount of work that remains, but there aren't like a lot of I. Don't think, there's really that many complex sort of theoretical questions, it's more of an engineering.

A

All right, let's skip down a little bit type privacy, private and public lands actually want to skip over this. Although unless we below and talk about it, lunch I didn't look at the status I want you to talk a little bit about like these. Maybe some of these bigger questions, there's a variety of things, we're big and similar. Nothing we're at 30 minutes.

C

Well, we discussed unsafe up in unsafe fun last time, so we can skip over that one I think yeah. Perhaps we should talk a little about temporary lifetimes, which I think got added since the previous time, yeah.

A

So there's this traditional quirk in our temporary lifetime rules that basically the gist of it, is that in general, when you make a temporary, it gets freed within the statement so sort of by the next semicolon. Unless, with a special case, that somebody is, if that temporary is immediately being assigned.

A

To a variable, then, it gets extended to the end of the block and then there's one other interesting quirk, which is that the tail expression of a block is sort of considered to be outside the block for the purposes of where the temporary goes right. So the next semi, in other words, if this were to get freed by the next semicolon. That would be here after the variables in the block are freed.

A

So this Veck gets freed after the block, and that means that, for example, if it has a reference to Y as it does here, that would be an error this.

A

This is kind of perennial e comes up as confusing, causing weird error. Surprising error messages from time to time.

A

Probably I was.

C

About to ask what is the case where this is the behavior, you want I mean? Was this entirely unintentional, or did we do this for a reason to enable some useful case this.

A

Was intentional because I thought at the time that you would like this let's say year and this to kind of be equivalent in terms of how they behaved? They can go to temporary legs names, but I think you know actually I wonder that equivalents. Correct I mean there are some differences like.

A

For example, breaking can do enable where they wouldn't otherwise have been I. Don't know. If there's a good example of here's, an error you don't get I can take some artificial ones. I, don't know how a rising I.

A

Guess well, I guess you could look at this one and already something.

A

I'm thinking this vector I think if you wrote something like this.

A

That would compile today, but it might not, depending presumably.

C

This would compile since 22 is copy. Oh wait, you're talking about creating a reference at the end of the block that you expect to outlive the block or I guess.

A

Yeah I actually think we. This could continue to compile depending on what rules we did, because the idea is. If we can see sort of by the structure of the program that this reference is going to end up in the variable X, we will extend it to the end of the block that encloses X and that's exactly why it works today, and it's probably what would happen um there was. There is the one other thing that's relevant, which is RFC number 66 point of the oldest completely unimplemented RC.

A

Is that I know of and still kind of a good idea, though massively underspecified, a or C itself proposed a change where it said, roughly speaking, it said if you were calling a function whose return type is, let's say: ampersand take a.

A

And today, well, let me let me not give it all spiky and instead try to give the intention. The intention was that something like this would compile. I.

A

Don't know what's the actual example from the RFC anymore, but let me think.

A

Something like that, but and reason for that this doesn't compile today is because you make a temporary here. The temporary is parameter this function, so it's going to get freed at the semicolon, which means that it can't live as long as the variable X get a lifetime error. But what this RFC said was if you're calling a function like trim that sort of returns a reference and that reference is getting assigned to X and the reference comes from a parameter and we look for the parameter it comes from and we extend that temporary as well.

A

So this would then live till the end of the block. There's.

C

Another really common case where this comes up, which is builder patterns. Yes,.

A

Right, we have like builder new and the methods all taken yourself in.

C

And the problem here being that builder new, creates something that isn't named so it dies at the semicolon and then ampersand mute returned by thing too. Doesn't last long enough, yeah.

A

So I could definitely see any nice effects at least doing rc6 degrade these maybe investigating this other change and seeing what its impact would be. I think I've seen over 66 as far as I know, is backwards. Compatible tweaking temporary lifetimes, wouldn't be for the same reasons. You know the effects when destructors run there.

C

Is definitely a theme here, though, of like RFC 66, the closure thing several of these could very easily be told as one coherent story of we made, the borrow checker accept more correct programs. Yes,.

A

I think it's like targeting scenarios. We we did a ball with nll, now we're looking at like okay, here's specific pain points we want to address right.

C

Yeah I think this would be welcomed if we managed to tell one big coherent story with it, even if some of them are not necessarily tied to. In addition, if we use the addition to say we did, you know eight things related to making the borrowed checker accept more correct programs bonus. If those things include polonius phrasing.

B

Though, except more correct programs implies that we aren't, including any breaking changes which some of these things were so I. You know I just wanna be clear upfront about whether we are actually like it's a mystery. Witness end is, you know, we're just so I strike something more correct programs then.

C

The.

B

Scope accordingly line of what we do sure.

C

It may be that in doing so yet tweaks things like drop order, which with and potentially affect some unusual cases. We have the document and explain that and why we thought it was important, but I think there's still value in telling a coherent story here.

A

My feeling is we'll come back, I, guess and look at resources, but I'm gonna guess we can probably at most do one sort of wave breaking exchange if even in this direction, so like the closure stuff might be the only thing we can realistically try to do because there's people who want to do it and it's relatively well specified and temporary light times might not just be in their cards.

A

Once we look at next increase, if people have any pets, they want to talk about. Well, we can go down the list. I would sort of like to talk about racing a little bit. It's a big time as.

C

A very minor one I'm wondering how hard it would be and how much support there would be for changing the behavior of Const inside of a function.

C

Effectively, Const inside of a function is very much a foot gun because it is the really unusual case that something is can be used before it's declared when it looks like it's not a top-level item. Yes, exactly also.

D

Also types of things aren't it's go yeah.

A

So I am.

A

Mixed mines here, I mean in the reasoning, is like: why use a constant on the legs.

B

That's a good question it's my reading of this is that, like you, can have inner FN items and they can appear after their usage points and I thought constants, like you said, not flat top a little item, but it's it is a top little item in sense of it's like FM. It just happens to appear in the scope of it out or FM right.

C

No, that's good, I mean it's not appearing at the top level and the behavior of forward references is unexpected inside a function and I was actually going to.

B

Trying to say, but I'm trying to say is that likewise, you can have an inner FN and that could have be declared or defined at the end of the function. Then you have references to it above its definition point. So why is that and I would want that to keep working. So why would we change Const.

C

Here, it's not different than the thing I was about to say was that's confusing to. Could we fix that? That's.

B

Not a fix, in my opinion, that's a break. That's a serious word.

C

What I was trying to find out is if somebody thought that I.

B

Think really important.

C

Oh I.

B

Just read something interesting.

C

I'm so.

B

In that.

C

Incredibly confusing to read in code, but that's a different problem for.

D

What it's worth, I, put at least in c-sharp I, put inter functions after their call site all the time interesting, I.

C

Even write what I see.

D

In them it's the undocumented, for that now it doesn't say anything about rest, Sara, Lee, but no.

C

That's an interesting observation, and if that is commonly used in other languages, then that is something people may expect to work. I would find that fairly confusing, but it sounds like that's not a good enough reason to change this I also.

A

Put in error functions after because usually they're like helper details and I'd rather have them or at the end, the person's up front. It's kind of like bottom-up, but I also tend to avoid inner functions nowadays, but I don't know, I don't have a lot of appetite, but I I would be more I. Guess I'd like to I.

A

Would probably want to address the question of inner things more generally,.

C

The second possibility that I could suggest here, which is perhaps the correct answer, is what I think was it Scott? You said why not just use a let here, maybe that's an opportunity for a lent of some kind like. Why did you make this a constant? You could have made it a wet I.

C

Don't think that was me, but I agree with that statement. There might be value in reminding people hey. Let is not let mute. Perhaps you want a let here if you're going to try to redefine it, I mean at the minimum. If you do something like Const, X and then later constant X, if you get a redefinition error, perhaps they can say, maybe you wanted a limp, considering you're inside a function if.

B

Your intention is to have a console. You want this kind of scope and you put it, we could introduce it. Let constant socks to get the scoping. You want their appetite for such a thing, but me.

C

I think that would be extra confusing, given that let is already constant.

D

So what's are there any the one case that I can think of where I, really, where someone did one a Const, is that they want to say matched on that actual Const? Is there any other situation that anyone can come up with where a.

B

Railing a let.

D

Would not work move.

B

Let's work with railings this.

A

I'm.

C

One of these days, I'd like that to work with non Const now.

A

One a table this getting too far into the weeds here: yeah.

C

It sounds like there is not consensus on this one, so I'm happy to drop it.

A

Yeah.

D

I we haven't noted that weird nesting down below do. We want to no.

A

Way.

D

This conversation into that one we.

A

Could I was gonna mention that one reason to limit nested items, especially impulse, as is murder here, is to make IDs jobs easier, but I feel like um I, don't know the most we would do is probably like. This is an easy thing to implement and the most you would do is leant against it right. You probably wouldn't go straight to a hard error or something.

B

Thank you for the Lynch says sure the Lynch says you're, making IDs work harder than they should have to work. I.

A

Mean you know, the hope would be that IDs in the future can like. We can migrate this enough. That ID is just if you have been pulled in the wrong places and okay, that's going like autocomplete and stuff doesn't work, and you probably want to migrate to the newer edition room. Stop doing that. But that may or may not be a viable plan and immature to me, but.

C

It sounds like this may break more than it will help I.

A

Guess the only thing we really have to worry about is impulse. It specifically imposed four types that are externally visible right. So it's something like.

A

As opposed to.

A

um

E

Something that I actually do quite often is to have a type defined in one module and then involves for that type defined in another module. Yeah.

A

That's a little bit different, but I'm not convinced it's that much different I! Think that's! Why I also do that a lot? You know it's useful and basically I think it's a little premature like we should. We should try hard to implement the language and ideas efficiently. Well,.

C

Side of this is, if we were going to try to handle this, it seems like it would be a special case of a more general problem should Impuls have scope like. Should there be such a thing as a pub in Pole versus a non pub in PO versus a pub pray temple inside this crate you're allowed to use this as debug or display or I'm, not suggesting you should be able to, but if we were gonna try to solve this, perhaps it's by more generally making hempel and scopes incorrect more reasonably sister. How about Nico.

A

Well, there was a period where must have importable ingles all.

B

Right: okay, I.

A

Think we could do I think like private impulse as long as you still respect the coherence rules without great undue difficulty, so you be able to like have a nimble that you can use, but others can't, but you want to avoid this situation, where two people can implement the same in pull and write. Definitely, yes and intermix.

A

One thing I would add. Is that really I think also someone pointed this out before, but that this problem of info flew inside of a function bar is not nearly as bad as a macro use that expands to an info fool, because you can kind of see where the impulse for foo are relatively easily, then relatively lightweight fashion, but having to expand all the macros out is much worse. That.

C

Kind of sounds like the point where your IDE either uses rust analyzer under the hood, or it just doesn't work no.

A

I mean the Chrome analysers doesn't can't handle this okay I mean it can handle it just had just to go, expand Becker's, which is very time-consuming. So your your dog, your dog, is slow, but I. Think all of these things are cases of like this. One I, especially like macros, are complicated and not a short fix. I think you should wait. You don't have any clear.

A

Wait until we have done with roast de la Luzerne, or we feel like it's really working well and it has been forced to make some compromises and we can review what those compromises are.

A

Which one next delegation I think I saw this cargo feature resolution I feel like that's kind of out of our scope. Is there a language interaction here, especially it's.

C

Not a lung interaction so much as the cargo team wants to do this, and if there's going to be a notable 2021 edition, that would probably be a good time to tie it to so we'd like to coordinate it. If they're, for example, isn't going to be a 2021 Edition which, at the time this was added. That was a question. Then cargo would need to handle this itself somehow. What does it mean for a future.

D

Resolver to be different when you can have the same feature in different edition crates, so.

E

From what I've seen of the current implementation cargo, it just has the route crate it the route crate base. He chooses to feature resolution exactly.

D

Feature.

C

Resolver and Edition 21 would be considered. Opting Edition 2021 would be considered opting in.

E

So the basically the new resolver selects fewer features than the old one. So in a sense it's a backward-compatible change.

A

There's probably no way: okay, it will be really hard for us to like migrate this in any automatically. Yes,.

A

Bring up something about its kind of only half bus, but I saw some other mentions of things like this.

A

One thing, I think we should think about is.

A

But I wrote here about into impulse. I would be curious to sync up with the little bit but like there are a certain set of for a while. It was pretty standard, I'm sure it's still true. We just had what we called acceptable breakage from adding in Bulls, especially as working tools, and they came from basically the rust tree, resolver kind of in doing extra inference um being a little too smart. So people would write things like I.

A

Don't know they would write like I think it would very kind of a example but partially specified types with as ref call, and it would be unambiguous that we would figure out how to resolve it. So do they let x equals food out as breath or something I. Don't know, um that's not a great example book and one then, when you add a new as riffing bull suddenly there would be two choices for what the target type might be and you get breakage right and affixes to kind of manually specify the type.

A

My opinion that this decision to do aggressive infants here hasn't aged that well, but it's not a highly informed opinion. I, don't know, but it feels like it's bad that we regularly our people are breaking and I thought we could consider that we might add annotations to traits like, as we ran into to limit that inference, at least in at least in a new edition right, like maybe that isn't Asians are ignored in earlier editions. There.

C

Is a common pattern here where people are hesitant to make something more general because they will get inference breakage and if there are ways we could help with that, that would be nice. This is one example: changing from I accept, stir to I, accept it as wrath or similar kinds of things, switching to accepting a cow into, or anything similar.

C

That kind of thing. It would be nice if we had the whole default type parameters thing whenever.

D

The canonical implementation of this trait or whatever that inference would fall back to right, so nice so often accept the farms understand it's evil. One.

C

Case I've run into a poor example. We have I want to accept a slice of strings because I had made an array of them and I would be willing to accept a stir or a path or a path buff for a beast or any number of other things, and that works beautifully every single time. Unless you want to specify an empty slice which turns out to be the common case, in which case what kind of an empty slice is it I don't care.

A

Yeah.

C

That would be really lovely to fix. There is I think a proposal for default type parameter. All that how feasible is that it's.

A

Worth knowing these are sort of different problems, they're related like in one case, I, want to do less inference and in the other case you want to do more um right, but I mean the fallback I guess we've been around and around this I I think that the most general version, the main problem, is conflicting, fall backs.

A

So that's one main problem and the there are some variants where we make conflicting fall backs kind of impossible. Basically, by limiting the kinds of places fall back can be added so that you can't add it in more than one photos. So if you allow that you can have, for example, this reminds me so we have defaults in structures.

A

That's not what I wanted to say. What's the I don't know if you I, don't remember the details, but I remember that we had some variants where we would kind of limit the fall back to cases where its value was implied by struct defaults. I think that was it so the usual example, if, like a box a they have a allocator type standard outlet or something- and you want to say you want to make a function. Generic over the box.

A

But you want this to fall back to standard outlet in the event that it's not specified, probably because it's being returned, there were some proposals where the idea was to guarantee that the only defaults were ones that were already coming from a struct definition and therefore like they can't disagree is no matter how many of them you have they'll all be the same as whatever is in the struct. In fact, maybe you don't even have to write it for that reason that doesn't really solve the right.

C

Box handled as rep stir, I guess.

A

I would say some study needed. I would be not terribly keen on just I'm nervous about just sort of most general forms of this, because it really reveals details of how the type inference error works. That would make it harder to switch to new implementations and those details are already revealed in ways I more than I wish they were, but we'd be making them significantly more revealed, but maybe forget it example, I think having some examples, and these are the exact kinds of cases we want to enable right.

C

The specific case of I want to generalize the contents of this slice, while not breaking everybody who write EMP flights would be a really common case. We went to address.

C

Option as well, actually what type is your none yeah.

D

I.

C

Think we're about to type the same thing: they're going.

A

I.

D

Often wish that the none was an option of option of never and then it just did the right thing or something.

A

Okay, well, we feel, like we did a reasonable job of going over these things not covered everything we haven't really. The other side of this conversation that I want to think about is the like.

A

What do we think is rusts is the biggest problem that we're trying. What are the big themes that we're trying to address and do that inform our prioritization of our efforts, like you know, does that make any of these things more important than any other issue, I. Think for sure, some of the work we've been doing around.

A

Addressing will be once called C parity and stuff kind of implies, a certain theme that it's really important to interact with keeper system software and smoother ways. um I, don't know, I think that would be helpful for me. I would find that useful if we could stay our goal in some way like that.

A

But I also wanted to kind of start when I'm up and down.

A

Maybe we'll keep talking about.

D

That's good, alright,.

A

Thanks everybody thanks.
youtube image
From YouTube: 2020-04-27 Design Meeting (more edition planning)

Description

No description was provided for this meeting.
If this is YOUR meeting, an easy way to fix this is to add a description to your video, wherever mtngs.io found it (probably YouTube).