Live CEOing Ep 818: Language Design in Wolfram Language [Failsafe, Equal-bracket Styling, and More]

Stephen Wolfram and his team review language design decisions for Wolfram Language, including a new FailSafe function for handling missing values, equal-bracket styling in notebooks, and fixes for excessive trace diagnostics. They debate naming conventions, function arguments, and front-end behavior across multiple technical systems.
Chapters
Hello, everyone. Welcome to another Wolfram language design review covering a few different topics. First, we have Fail Safe. Is Christopher here?
Yep.
Yeah, I'm here.
Okay.
Right. So, you know, I'm a little bit surprised by pieces of the implementation and, and the implementation isn't in the build yet, but it's in a initial cell if you want to play with with it. And so, you know, my first sort of question is, you know, do we want the 1arg and 2arg forms to be so different?
And, you know, okay, represents a formula imposter. Why is it so different?
So it's, it's different because of the varargs use case, which we talked about a a while ago. I can actually, I can show the notebook that we have from that. But basically it's different because in general, you can pass it A if you passed more than one argument to the fail safe, like to the fail safe function.
I see.
Then all those arguments get passed to all three functions that you can give Fail Fail Safe. So the test as well. So actually that test, the not@star missingq, is in some ways a little malformed if you were to pass multiple arguments into it. Unless Missing Queue has some bear orgs form I'm not aware of. So the reason it does that is the reason it's different is because the, the default third argument, the G.
Right.
Now the. The default value. If you don't specify a test, the default value basically finds the first argument that fails the default test and propagates that on the logic. That's a safe thing to propagate because Fail safe can detect it's a failure. If you put an arbitrary test, though, then we don't really know what to return. We don't even know which argument was the culprit argument. So we can't just propagate it so it returns a failure object.
Okay, hold on, let me think about this for a second. So, so the point of G is to like, you know, make it zero or something if it was a failure. Is that the idea?
Not sure. You mean by make it zero, make the effective argument.
In other words.
G specifies what to return if there's a failure. So basically, if test succeeds, it applies F. If test fails, it applies G.
What's the default test? Is it automatic?
Actually, I don't think so, but it should be okay right now. I don't think there's an easy way to get the default test.
Great.
I don't understand that.
Try doing a positive number.
Right.
Oh, so that's the second considered A failure, as it says, are considered a failure.
Right, because you want to be able to pass things like.
Oh, now I'm totally confused.
Wait, wait, that's. That doesn't make it less to me.
I think it's the wrong way around. Look, hash less than zero.
Yeah, that's actually the second point on the agenda. If you scroll down. What is the sense of the test? Test?
I don't understand the test. Okay.
Right. So, yeah, so for. Right. So basically, things that give true are considered okay and fed to F, and things that give false are considered errors and given to G. That's the current implementation, which isn't to say we have to stick it. But, you know, I did bring that up as an actual discussion point because I was confused by this at first as well. It's certainly not. Not what you get from reading that definition box.
Right. The usage line, I think is not that. That was not a. That was not a serious usage line, I would say.
Okay, but which way around? Yeah, okay, so wait a minute, let's imagine. So the issue is, if this is vero, How do we test. You know, we're testing multiple arguments for failure.
I think that's a different. That's an orthogonal. Excuse me, that's an orthogonal question. But all the arguments are verargs.
Right. And you have. Actually, if you look at the next two examples that I have there, you see that it's sort of varargs in a somewhat confusing fashion.
Okay. But I mean, this is presumably correct because this is nice. If you want to test the first argument, it's hash one, you want to test all of them, it's hash. Hash.
That's all good.
Yes.
And I mean, I think that third argument is doing the right thing as well. Now, which the. What the sense of the second argument should be.
Right.
Pulling up your examples, this is the.
Notebook I think that we looked at a long time ago. It's maybe slightly modified, but it has some examples of like the verard case and stuff like that. Right. So there's a classic example in the vararg one about halfway down, which is when you want to call divide, but you only want to do it when the second argument isn't zero.
I must say, I. I think that having that be a test for failure is better than having it be a test for okayness.
So if it was a test for failure, it would say hash two equals.
Equals zero.
Equals zero. Yeah, I mean, well, okay, here, here's an argument. I'm not totally sure what direction it should be, but here's an argument for it being a test of okayness, which is that it's often safer to have people, I mean. Right. It's often safer to have people thinking about what does my F expect versus how do I avoid this one failure case I'm thinking about. Right. It's better to write that oh, my input must be a number than to write oh, my input must be cannot be a string.
Yes, that's a fair point.
And, and I guess and another question which is slightly independent but also related is if the test returns not a boolean, which, which way does that go?
Yes, that's a good question too.
I think not a boolean should be considered a failure no matter what the direction of the test is. Because if it doesn't return a boo, I mean, I think if it doesn't return a boolean, that suggests that F is really not going to work because the test didn't even work.
That's okay.
That's another argument for that second argument being a test of success.
You mean because then you can use true Q.
Yeah, yeah, but I mean, but also if it's a test of success and things just go astray.
You.
Know, if it's a test of success, you have to hit the nail right on the head to get it to go through.
Yeah, yeah.
Okay, so what's the other question about ferocs? I mean this is looking with, with that. I mean just the description of that second thing. Is.
Which arguments are valid? Right. We just need to rephrase it.
Yeah, that's whether the arguments are, are considered valid. I mean test were the arguments applies. To the arguments.
Here's actually a question because I remember when I was throwing this together. So it would be really nice if for operator forms or for things like test applied, which only live as operator forms, if the usage line you could write, you know, the bracket args or something like that. Like you could write or bracket, you know, ARG1, ARG2, if you get what I mean. Yeah, because I looked at examples. Nowhere do we do it.
I think we should do it. I think we should.
Otherwise all this dancing around, talking about the arguments, stuff like that.
Yeah, I think we should just do that. I thought we did do that in some places.
I couldn't find any.
Okay, well that's a question for Brian. I think he would know. I think we should do it for these operated pure operator forms because what does it mean it's argument unchanged? I mean you've got this thing where there's one missing, one missing three for Example what happens if I do this? If I say.
Yeah, if there's a dollar failed and then a missing, it does the first one. I. So that's the default. G.
Is first failure.
Is first failure. But the first failure as the default. Because the. It can only do that for the default test. Right. Because that requires knowledge of the internals of how the test works.
Yes.
Like think about in the. You know, hash two does not equal zero case with divide. What on earth. You know, what do you. What do you return?
Let's just review again where this is used. So the typical case is don't run this function if it's being fed garbage. Right. That's the most common.
Yeah. Or like. Or like I've got some code and some of my data is missing. I want you just to skip the missings.
Well, how do you do that here?
Well, you just do fail safe of F. Right.
So. So he's talking about the case where you're like mapping across. Right.
Yeah. Okay. Okay, fine. So, I mean, I see. Yeah, that's a. That's a really good case.
Right. So that's the one argument case.
But both, by the way, is a reason to not have the documentation have args right there because you're not actually putting the args in here. That's pretty nice. I mean, that should be like the first example, because obvious why you'd want that. All right, so. We'd say something like fail safe of F.
Right. I mean, what. I don't know that this is what we actually want to write, but. Right. The correct statement is that it represents an operator form of F that returns the first failed argument when past the failure.
Yes. I think that is the most correct way. Although actually it is the most correct for the single argument form. But then for the. For the two and three argument forms, you have to then re. Explain it no longer has that behavior. So.
Right. Which is. Which is how we got into this discussion in the first place.
Yes. Right. I mean, I don't really know what else it could do though, other than, you know, as long as the second and third arguments are VARs.
Right.
It's arc one, arc two or three.
Something like that.
That is. That's correct.
Yeah.
Okay, so then we could say.
Fail space is an interesting alternative name.
Wait a minute. Fail safe. Now what does it do? Computes. Oops.
Well, you need to add the test. Yeah.
Yeah. Right. Test evaluates. Test of X. Is it test of. Of all the xi.
Yes, of all the xis. Yeah.
To determine whether.
You could say this you could say runs F of X1 X2, so long as test of such and such returns true.
Okay.
But it doesn't really specify what it does when it doesn't return true.
Returns F of X. If returns true.
And then you could say like returning a failure object otherwise or something.
Right.
And the failure otherwise.
Returning a failure and a failure.
Okay. And then we've got.
It's a failure. Like uppercase failure though.
Right. So failure object.
Oh, okay.
Yeah.
Otherwise.
Yeah.
What do you mean dot dot dot org?
Yes, Like.
Oh, like that. Yeah, yeah.
For some reason, fails. That is a really hard word to type. I don't know why. Okay, so this one.
It's the same as the previous one, only it returns G of XI in the failure case.
Right.
Oops. Fail F. I'm kind of thinking it should be called FF or something here.
FF is the build F to ff. I feel like is a little weird.
Yeah.
All right. Okay. You think fail up is better?
Better, yeah.
Does not give true.
Correct.
Yep.
Okay. I mean, are we happy then with this? This functionality seems. Seems good. Otherwise. Is there any case which we have to deal with here?
I don't know if you tie anything else. There's one thing that I think Roman was asking about, but I think we somewhat resolved this on the. I don't know. I think we might have talked about this before. The thing about options, whether it should handle options. I think we decided basically no.
What do you mean by handle options?
So I think this is kind of impossible. The question is, suppose instead of F, you wrote plot. Now if I say fail safe of plot of some arguments and then some options, should the test function apply to the options as well? And I think the argument was maybe it could automatically figure out where the options are and not apply tests to them. But I think that just is like totally impossible.
I think it's really hard. Yeah. I mean, it'd be nice, I think, but. But.
I'm not even sure it'll be nice because I think you might if you had, like if you actually were using fail safe on a function that can take options. I think the test would want to be able to see the options too.
Or it might, you know, Right? It depends.
It depends. But then in general, it should give the options and you can strip them out yourself if you want to strip them out.
I just want to have one last iteration on the name.
Oh, this is such a good name we spent so long.
Okay, fine. It's safe under failure is basically the point, right?
Sure.
What did it mean in The Cold War. The. The. The. The term, you know, like. Like, you know, what did it. What did it mean in that. In that case where, like, you know, have your submarines or bombers or something in the. That meant if there's a failure, you want. I mean, that meant a different thing, right? That meant if.
I think it means if there's a failure, you can. You can recover from it. Like there's a last thing you can do to save yourself.
Well, I think what it meant in the Cold War was right, that, you know, even if they, you know, take out your other ways of destroying the world, you still have at least one way to destroy the world.
It's funny that the word safe was in there.
Yes.
Okay. But. But let me understand. Normally, fail safe means things like, you know, the bolt retracts if the power goes off. Is that true? Things like that.
I think so, yeah.
So is that the same meaning as what we have here?
Yeah, I mean, it says if something goes wrong, you're gonna. You're not gonna apply the function.
Fine. That's reasonable enough.
You're gonna jam. Jam the machinery if something goes wrong.
Right. Retract the bolt if the. You know, if the power goes out. All right, I guess I'm convinced. All right. Anything else to discuss on this?
Only one question. Any relation with missing fallback?
Missing fallback, what's that?
That's something that we designed for tabular. It's in the prototype. So function that takes the first argument. If it's missing, it goes to a second argument. If it's missing, it goes to the next one.
Oh. Oh, yes. I. I remember discussing this now in. In our very long tabular meetings.
What. What do you mean it goes to the first?
It.
It's like you give it five arguments and it picks the first one that isn't missing. Is that right?
Basically.
Exactly. It's a function that can be inserted in the operations of construct, columns, etc. And if it finds a missing input, it gives you the opportunity to decide what to do with it.
I see. So you'd say missing fallback of, you know, hash age, comma.
I see.
You know, two.
Right.
So if the age did not know, it replaces with two.
Right. And of course, you. Or if you had some other column which might be meaningful. Right.
So if you exactly. # Age, comma, # Approximate Age, comma, 2 or something.
What about.
What about. Does it have any way of specifying what to.
Consider missing? No, it's a. It's a fully missing.
Dedicated function. I see. Okay. So I can Divide by zero situations. You'd probably use like replace or something like if I wanted to say, turn zeros into ones. That's probably a bad behavior.
To have. But. Does it look like this?
I mean. Well, I assume that ampersand is on.
The.
Outside. It. It doesn't take functions. It takes the, the. The names of the. I mean the hash column one, hash.
Column two and then the Ampersand is on the outside if you're.
Using.
It. Exactly. So. The problem for failsafe is it doesn't know it's just being given one thing, but its fallback is.
Essentially.
Failaf. Yes. I was looking at check, which is a similar spirit and it's also documented. Expert. Fail Expert, which is very nice with.
F. Failaf. Yeah. Okay. Missing fallback, by the way, it's not a bad name. Missing fallback is not a.
Bad name. Although one. One question would be are there any other things we can imagine it falling back on in the future, like dollar failed and stuff.
Like that? I think the idea in Tabura was that other cases would be first converted into missings by the input mechanism and you would have missing various types. And then once you are in that situation, you have everything converted into missings. You manipulate.
The.
Missings. Okay. Because the fact is this is getting applied to a thing. There's no point in applying this to anything unless you are being given. What is it? The whole. The whole row, basically. Right. The whole association.
Like row. Exactly. But the functions that construct columns, etc get. Are functions of rows. And so they have the opportunity to manipulate the.
Whole row. And they say that this, this particular thing is. You know, this would be a. I mean one could imagine using this for. I mean I could imagine using this as a. As a thing.
Like lookup.
Yes.
Absolutely. Yeah. This, this is a construction that will exist outside tabular. It was created for.
Tabular.
But. Right.
It's independent. Which might mean that you would want a. Some kind of criterion option or something here. Like a same test, but not the same test to determine what you should. Because I, you know, I can imagine using it outside of tabular that the test for failure. Let me think. I mean one could imagine just a thing called fallback.
I see. I mean one. I think it's nice that it's vargs. It looks nice, but if we want to make a more flexible function, I think it probably kind of has to take a list in the first argument or something.
Like.
That. Yeah. Just because otherwise we're going to have weird options and.
Like.
Yeah. Yep. Ethan, on our Live stream is commenting when you're mapping. You might want to fall back to one of the arguments of the list of elements of an association. Yeah, but we can't do that when it's, when it's mapping. It's just seeing the local thing until we have supplied. Let one see more things. I mean, so here, This is really. Well, you're saying. That you think it, that it has to be something like this where. And then we have criterion which defaults to missing Q. Something like that. So.
You'Re saying. Yeah, I would say that's what has been proposed. But I don't know which consequences this would have.
In tabular. Let's investigate. Yeah, I think we should suggest this. We should bring this up in the next.
Tabular meeting. Okay, Carl, I'll make a note.
Of that. Yeah, I mean the varargs is pretty though. I don't know, it's. And most of the time that's what.
You want. I mean, we could introduce missing fallback and then maybe in the future we introduce fallback as a more general thing. A little confusing. Let's. Let's explore this. Let's see the use cases for tabular for missing fallback and see how it's used with other things. Okay. And for example. Yeah. All right. Should we.
Move.
On? Yep. Equal.
Bracket.
Styling.
Right. So. There are a couple of issues here. The first is the, the. The coloring of the, the brackets. So, you know, basically what we've done up till now is, you know, operators are always black. If and Right. You look at the string, you know, even though the string is gray, the operators are black. That's.
An argument. I think this should be more of a ligature. I think the equal sign should get a lot closer to the.
Bracket here. Maybe, maybe not. But that's. Although I don't, I actually don't necessarily disagree on, on that point, but. Right. You know, there's sort of a counter argument to the coloring to coloring them black, which is for comments. We do color the delimiters comment colored. So maybe that's.
An argument. I strongly think these delimiters should be colored. I don't think these delimiters should look like they're part of the usual flow of the syntax, but they.
Are part of the usual flow of.
The syntax. I.
Know, but. Yeah, that is exactly the point. It's input form. You could type this into a.
Raw terminal.
Yeah, so.
So they. I'm more objecting to the brown of the, of the type.
Inside it. Ah, that. Well, that, that's point that's point number two. But I think. Right. I think. I think the. Let's settle the delimiters before we. We get there. So. So one argument is that the delimiters should be black. The other argument is we should change the double quotes to be gray. Just like comment delimiters are comment colored and make, you know, the equal brackets the.
Same color. That would be what I would favor. I think the quotes, like saying it's a quote isn't really what we're trying to.
Go.
For. Right. Yeah. And we've talked about doing that in user assistance. It just, you know, independently of any discussion with itai. It's just not something that we've done yet because it should be said virtually every programming editor out there colors the quotes the same as.
The.
Contents.
Okay. Yeah. So I propose that we move the equals close to the bracket, that we keep the grayness of the brackets and that we change the color of the. I'm.
Sorry, Dave. To be the. The gray of.
The brackets. No. Well, maybe. I mean that might not be totally stupid. Do we have anybody from.
Design here? Well, the. I mean the gray of the brackets is pretty close to the gray of strings. I would have thought we might want to distinguish strings from.
Equal brackets. It's rather a stringy thing. I mean, it.
Is so. So, so my argument, it.
Is a. It is stringy, but it's not.
A string.
I agree. Although I will point out that message tags which are auto stringified are colored. I believe in the same. It's. They're certainly gray. And I believe it's the same gray as strings. And so, you know, to my point of view, that's.
An argument. Sorry, what is. What is gray? Sorry, I missed what.
You said. Message tags. So if you do blue, colon, colon, bar and you know, one of themselves that's really big, you will see that the bar is. You're missing a colon.
Two colons. Can you do a string right next to it just so.
We can. I. I think it is intentionally the.
Same color. It is a string like thing. I.
Mean, what. Exactly. I mean, I mean that. That's why this is colored to begin with because it was supposed to be.
A string. I think that's much more reasonable. I hate.
The brown. According to Noah, you are the one who picked that brown. But all of us who have looked at it have been very confused by.
It. So. Well, I think it's just wrong. I mean, I made.
A.
Mistake. Okay. Assuming I picked it, I made.
A mistake. Yeah, well, fix.
It then. I think probably gray is the right color. I don't think that introducing another color is.
Terribly useful. Okay, then we'll just use the string color.
For everything. Yeah. Anybody want to suggest something else? I just don't think any color that is on the reddish spectrum is going to look like.
An.
Error. Yep. I just wanted to ask.
Should the colon, colon for message tags be gray.
As well? I. I.
Feel.
Like. No. I think no. Right. Because it's not part of the string. Right. The colon, colon is the head, which is a.
Symbol. It's. By.
The logic. By that logic.
The quotes.
Are we. Are we able. John, are we able to fix this in zero day.
Packlet.
As. Yes. Okay, so then we also should make sure that the blog gets appropriately fixed.
Yeah. Okay. Yeah, no, that. No, that's a good point. I didn't have that at the top of my mind, but yes, that's a.
Good point. Okay, let's.
Keep going. Okay, so. So Lou, unfortunately is out today, but we still think we can have the discussion, which is, you know, part of the idea of introducing notebook cell data was that.
It would. Is that we could just get rid of this.
Menu item. So I think we can just get rid.
Of.
It. Or. Or maybe for a version or two, we can have something that basically says go to the notebook. Go to notebook.
Cell data. Well, I mean, it's not go to notebook cell data. It's write a little program with notebook.
Cell data. Well, do we want to.
Do that? What does that menu item even do? I've never seen.
It before. It's been there.
For years. My God. So this GUI would. Would.
Die if. Yeah, this GUI.
Would die. Yeah, but. But the skui's always been a bit.
Problematic anyway. And yeah, the fashion of the time that it actually works is, you know, not as high as you.
Would like. So does notebook cell data.
Also cover the stuff that's in the second section of.
This dialogue? Yes. Okay. Some of that. Some of that stuff might not be in the zero argument form, but there are ways to get to all of it. Because that's the part I use.
Most frequently. I never trust opening this menu item because I think it's going to.
Crash things.
What is. Because it often goes pink and.
Gets better. Well.
Yeah.
It'S. It. I mean, it's not crashy, but it.
Is pinky. Okay. I always worry when I see pinking. I worry about crashing. But you're telling me it will only pink and it will not crash. I didn't.
Know that. I've never seen any crashing reports.
On this. What is really the value. I mean, I don't even know what the value of all this notebook history.
Stuff is. Kind of convenient for the provenance of things. It's kind of interesting to know, you know, I've used it with some frequency to know when did I edit this notebook and make this change? Was it a year ago, five years ago? Whatever. Like where.
The hell. I mean, it feels like very, very poor.
Man'S git. Yes, A lot of us who use git just turned us off and then rely on git blame to give us.
That information. And, and it is certainly the case, by the way, that Gitlens type functionality is in the roadmap. It's not sadly right around the corner, but it is on.
The roadmap. Okay, look in, in 14.1. Wait, this, this menu item is here anyway, so we're not, we're not removing it.
From that? Yeah, no, no, we're not changing. This is basically a question.
For 14.2. Let's let notebook cell data cook for a month or so and then let's.
Readdress.
This. Okay. And I mean, I think the options are, You know, to replicate this with notebook cell data or to dump this. Ethan on our live stream makes a request. Could you make it easier to input key map shortcuts? Isn't that changing menu setup? Where are the keyboard shortcuts? They're in menu setup tr.
Aren'T they? That's not the only place. That is one of the places. And yeah, that's, that's a frequent request but you know, that's, that's with and not nothing that we're opposed to. It's just a matter.
Of priorities. And, and let, let me just offer the example of Firefox that promised 20 years ago that they would allow customizable shortcuts. And I think at some point they just decided, well actually we're not going to do that. And they certainly haven't delivered it to this day. So user customizable shortcuts are not super easy.
To do. I also don't.
Think it's. Amusingly, amusingly Ethan's remark is small request. And just to emphasize the request is small, but the feature.
Is not. Yeah, but also, also it's like one of these things about, you know, let's allow people to modify the syntax, which is like the syntax is quite complicated and you can't just modify pieces of it. And it's just like we just had this issue with command quote which got co opted by someone in some development version and then people Are upset. Where.
Is it? Yeah, it was, it was Etai actually who discovered.
That. So. Yes, well, I, I noticed it being said that it had been co opted. I just didn't know. Yeah, I mean I think that the challenge is, you know, where are the free keyboard shortcuts that you're going to use and if you.
Grab one and that's, you know, one of the complexities of implementing this feature properly is being able to do things like, you know, help you understand what it is you're stomping on when you make a.
Given assignment. Yes. I mean I'm just remembering.
And there are good systems out there. I mean, you know, like, you know, Visual Studio has a good system and I sort of imagine, you know, in the Microsoft sort of way that there is one individual somewhere who's just full time job is doing nothing more than keyboard customization. That person does it day in, day out, 52 weeks a year defining a single keyboard. No, a keyboard shortcut manager for the.
Whole system.
I see. And the one in Visual Studio, it's got a lot of functionality. It's also very complex. Well, I'm still remembering they deal with things like grouping functionality by context so that you can assign the same keyboard shortcut to be two different things in two different contexts.
For example. Right. Well, I was put off user definable syntax by an experience in 1981 which you've probably all heard about the famous SMP SXSET syntax set function that allowed you to redefine syntax so that you could. The great use case was aub you could redefine to be union. Okay. The problem was when you redefined things so that functions that included things like quit were redefined away and the parser basically wouldn't ever let you get to them. And people, you know, would report this to bug all the time because people didn't foresee the consequences of various kinds of, you know, resetting that they did. Yeah, that put me off syntax resetting for a long time. I guess it's 45 years now, give or take. Okay, rethinking.
On. Yes. So on bracket. Bracket is documented to turn on trace for every symbol which you know, used to make sense but really doesn't make sense anymore. And so I, I have here in gray a comment from a pull request where we're trying to make it less bad. And you know, if you just do plot of x between 0 and 1 in a standalone kernel with on turned on, you get 70,000 lines of output with comprising 2.6. And I do not Recommend evaluating this in the front.
End because.
Oh.
No. Yeah. Even just on before it's done.
It'S already. Well, particularly after my comments about SMP and how one should. Oh.
No, help. Quit.
The.
Kernel.
Yeah. Valuation. I can't get.
To it. Yeah, finished.
Anyway. Right. If you want to keep the front end session, you could bring up the activity monitor and quit the kernel from there. Otherwise, maybe just force quit and.
Start.
Again. Okay. Some of these are ridiculous. Like not. Not is printing every time.
It runs. Well, you've turned on trace for every single.
Symbol, so. Oh, it turns on. Oh, I see. It doesn't just turn on all the messages. It turns on. Oh, geez. Okay. Yeah. That is a.
Little bit. This is crazy. This is really crazy. What the heck is it doing here? What is this? I mean, maybe we should have a play. Should look at some of these things because. Because this looks completely crazy. What is all.
This stuff? Maybe that's the.
Predictive interface, but you have it.
Turned off. Or the code that.
Computes messages. What the heck is it doing.
With this? Why is.
It dump. Okay, let me. Let me just quit the. Let me get to the.
Activity monitor. I think the kernel is done though, right? Doesn't say it's running anymore.
Does it? I think it doesn't know whether it's running. It still.
Look, it's. I think if you just delete.
The bracket. Yeah.
The. The. I.
Want to. Well, the pro. The problem is that the shift enter evaluation has finished, but there are probably asynchronous computations dumping.
These things. Okay. What do I kill here.
Looking at? Well, want to look for instances of Wolm, Wol, or. Oh, oh, sorry.
Wolom Colonel. I actually have a better idea. This is complicated to do because I've got multiple kernels running and so on. Why don't we see if we can use the technology to.
Do this? Yeah. No. You want Wolfram Colonel Camel.
Cased. Okay. The parent process ID was something I believe. I just. I'm just trying to not kill my.
Other stuff. The activity monitor not show.
Wolfram kernel. Right, right, right. Well, there are only two kernels there that have been running for an hour and a half, so it has to be one of those. And you can safely kill both of them because one of them is your kernel and the other is the helper kernel that the front end uses and which it will restart automatically if you.
Kill it. Wait a minute. Which one am I killing? I'm killing these ones on July.
7Th.
Correct?
Correct.
Yep. Okay. I'm not sure that will Work? Yeah, I think kill process only kills processes which have been started by the kernel using, you know, launch process.
And whatnot. All right, let's go to the activity monitor. 32849. Can.
We source? This is a.
Great.
Like.
What? Yeah, I was just saying, I mean, this is like. This is like, you know, fork bomb.
Or something.
Yeah, right. 32849. There it is. Kill it. I probably have to do.
A full. I assume something like this also wouldn't be like a security vulnerability, like, if you could, you know, if you had some sort of sandboxed kernel, but then the person can run on Open Close. Does that. You know, I'm not sure it breaks out of a sandbox, but it might.
Break things. Yes. Okay, let's see if we can get to this now. Oh, God. Okay, we're here. Okay, I think QA should take a look at these, because I think there's a lot of stuff here that's just freaking crazy. What the heck.
Is this? Wavelength.
Lifting filter. There's no stack.
Trace there. Well, you kill the kernel, the.
Stack trace. Yeah, yeah. What is all this junk? I think it's. It's establishing that things are not this, that, and the.
Other. Okay. Oh, oh, oh. Well, at least some of that stuff is coming from percent reference. I. I see the elisions context, but yeah, I'm not sure what all of this is. Right. It's. It's some, you know, it's some dynamic evaluation of, you know, predictive interface or FE kernel.
Communication elisions. Okay. Okay. The case is clearly made that on Open Close should.
Be.
Disabled. Okay. It should take more than four keystrokes to completely torch.
Everything, but. So in a command line, does it also torch things or is.
It really just the.
Front end? It. I mean, it's much more usable, but like I said, if you. If you do that plot, that simple plot, you get 70,000 lines of output and 2.6 mega, comprising 2.6 megabyte of data. So it's not.
Like it. Well, here's a naive question. If I run like, cloud evaluative on Open Close, do those messages go somewhere? Actually, maybe cloud evaluates the wrong. If I had an API function that I. That I call from the web, and in the source of it, it says on Open Close is. Is there some log file or something that's building up hundreds of megabytes of. Of messages? I don't think so, but I could.
Be wrong. I can. I.
Can elaborate, but I'm.
Not sure that this is the forum in which to elaborate. Saying that he's used ON for debugging things and he doesn't think it should be disabled. Perhaps it should be an internal context of.
Some kind. Well, I mean, on. On. I mean, obviously we can't disable ON in general. It's the zero argument form and we could. Right. We could. We could check. Right. So one of my proposals there is. Well, maybe we restrict it to things.
In the. Before you hit shift enter there. Before you hit shift.
Enter there. Let me give you the incantation that I just tried. And this was in. Was. And it didn't work. And I should have used.
With cleanup, but I wasn't sure that the kernel predated. I'm not going to do it.
Okay.
Okay. I'll. I'll throw it here for you anyway, just.
In case. Okay. Well, I mean, we could.
Disable it, right? So. So one possibility is to just eliminate the zero argument form. Another possibility is to restrict it and, you know, we could restrict it to global. We could restrict it to the current context. We could restrict.
It to. I think it seems like our node needs to be consulted. He seems to have opinions about it. Get this discussion with him. I mean, he's. He's asking for more debugging capabilities and I think disabling it. I mean, clearly all this stuff that is front endery just needs to go in on whatever ON is doing. It should absolutely not report itself for the.
Front end. Well, I mean, but. Right. And an evaluation is an evaluation. Right?
I mean. Well, but this is reporting a lot of subsidiary stuff that isn't the core evaluation. This. All this stuff looks like it's predictive interface or some other, you know, preparatory stuff. It looks like ON was effectively switched on even as it's passing through front.
End stuff. Right. Because when the symbol evaluates, it evaluates. Right. It's not like the front. Right. I mean, there's a different entry point for the evaluation, but it's not as if, you know, front end, you know, request to evaluate when the front.
End sends. I understand, I understand. I mean, the statement on.
Mean, one could imagine disabling on, you know, maybe by default in cases where like dollar synchronous evaluation is true and dollar dynamic or dollar dynamic evaluation is true, that wouldn't seal up all the front end cases, but it would seal up most.
Of.
Them. Right. And that would. I mean, the thing is, when it's inside the kernel, it's okay to have ON be running really inside the kernel. Like it's. It's.
Doing well. Well, like I said, In a standalone kernel plot, did 70,000 lines of output.
And took. Yeah, I know. Which our node is claiming.
Is useful. Where is he.
Claiming this? On Rocket Chat.
Our nodes. Yeah, but I, Okay, well.
It'S, let's get Arnod into this discussion and let's also consider other telemetry stuff. Okay. And maybe there's a mechanism for this telemetry that makes more sense. I don't understand whether on, you know, whether there's a version of on, maybe with a string argument that can switch on, you know, useful things and the, the pure on everything becomes.
Something different. Right. Well, yes, I mean, right, I, you know, I, I, Right. I believe, I believe on takes patterns. So even if we, you know, did, you know, change to the on bracket bracket, we could still. Right. We could, you know, if Arnold really wants to shoot himself into foot, he can do, you know, on a star backtick. Star. I, I'd have to double check that. But, you know, right. The, the, the zero. Like I said, the documented zero argument form should not be, should not be this thing. And this is, I mean, unless you're prepared to go for at least another 20 minutes, I, I, this is not something we can get into today, so we'll have to punt that for.
Next time. I just want to know roughly what we're talking about here. I mean, this is a complaint I've made.
I think. Yes. And we just think.
You'Re wrong. No, I mean, it's.
Not that. A bit more nuanced than.
That. But. When are we going to have those charts that are, what are they called? I don't know even.
What they. The.
Syncing.
Diagrams. Yes. Not.
14, two, but we have a, we have them as a, as a.
WFI.
Yes.
Yes. Okay. There's some form of them.
In WFRs. And what's happened to the color picking thing? Color, the thing that was going to be the color.
Palette repository. Nothing.
Too recently. We really need to get that done. We had a path. We really need to get.
It done. We did not have.
A path. You know, every time we.
We kept presenting things and then we'd present A and be like, no, let's.
Do B and then we do B.
And then let's do C, Then we.
Do C and we, let's do a, let's get another meeting about.
That, please. And the cycle.
Begins again. No, I don't think it's a cycle. I mean, we had a direction which we realized wasn't a good direction. So let's, you know, let's pick that up. Again, rather than letting it die, which we don't want to do. Okay, so I'm trying to understand why. I mean, tree form has a.
Plot style. Let's, let's not get in, let's not get into this, Stephen.
All.
Right? Okay. It's a, it's a big discussion. You know, I, I, I spent at least an hour preparing this agenda item, so let's, let's.
Save this. Okay, Fair enough. But, but let's also make sure that color picking thing gets picked.
Up, please. Color picking? I, The. Brett, do you know what that means? Because.
I.
Don'T. Yes. It's not so much a kernel.
Thing.
It's. Okay. I mean, there's probably.
But, yeah. Which we certainly could do as part of a design review. All right. Okay, fair enough.
Anything.
Else? No. Thanks a lot, guys. Thanks to folks on the live stream. See you all soon.
More from Guy

Cheryl Strauss Einhorn | The Human Edge: Smarter Decisions in the Age of AI | Talks at Google

Rachel Glennerster | Innovation and the Center for Global Development | Talks at Google

Rebecca Winthrop | Rethinking the Purpose of Education in the Age of AI | Talks at Google

Dr. Robert Wachter | A Giant Leap: How AI Is Transforming Healthcare... | Talks at Google






