Live CEOing Ep 707: Language Design in the Wolfram Language [RealValuedNumericQ and more]

Stephen Wolfram leads a design review of the Wolfram Language, discussing RealValuedNumericQ behavior, overdot glyph synthesis, grid spacing inconsistencies between ems and points, and how styling wrappers like Emphasized should behave on input.
Chapters
Okay. Hello, everyone. Welcome to another orphan language design review, part of our Language Completeness and Consistency series. And we have a variety of topics today. Okay. Real value number Q. Real numeric Q.
Right. So this is, I mean, there, there's, you know, I just wanted to bring. This is mostly doc review and I, you know, there couple of points I wanted to just emphasize, you know, that became a bit clearer from our discussion last time.
But why was it called real valued rather than just real number queue? I thought we were calling it real.
Number queue before we decided against that. Because it won't necessarily have head real.
Oh, God. Okay. Yeah. Well, exact results that require simplification may be missed. Yeah. Well, welcome to. It's like the possible 0q and so on.
Right. I mean, this is, you know, this isn't a. Right. So basically, you know, this is documented as a possible issue and I just wanted to make sure we're all okay with that.
Undecidability is a thing. We have to live with it. I mean.
However, I do have a quick question about this, if that's okay.
Sure.
So I think Rob and I have slightly different opinions about this. So the way it works now is real valid. Numeric queue just does a low precision approximation of the quantity checks if what it gets is a number and if that number is real, floating point real. But that's kind of, that's kind of a very weak kind of notion of a numeric object. I mean, some time ago, Stephen, you wanted equal to try harder in the cases where it couldn't be decided with a simple numeric evaluation. And it does other things like call root reduce, for example, to try and do some sort of what, at least what it can do to do some kind of symbolic simplification of the thing to actually uncover whether it is right.
So it's easy to tell if. If you evaluated low precision, it has a great big whopping complex, you know.
Imaginary, then fine, then find the point here.
Yeah.
What do we do when we fall back? We could do something a little bit more elaborate when we fall back. So if we do a numerical evaluation and it is zero, then we could do a bit more work like we do with equal. So I could add a test to say, try and find the imaginary part of this thing, this numeric object, and see if that's an exact zero.
Yeah, yeah, I don't think that would be bad.
So. So I have a branch that does that.
But.
But the question is, do we want to try harder? Do you think that's a reasonable thing to do? And I mean reasonable thing to do.
So long as it doesn't burn a lot of time.
It won't burn time. In the case where it's definitely not, you know, like you said, where the imaginary part is non zero, then it won't burn time.
Okay, what about the, what about the case where it's symbolic?
Well, you can tell it won't do anything because you check the numeric flag. So it will do the same work as if you did like m of something equals. Equals zero. That's the kind of fallback case that it goes to. So it won't be any more complicated than that or any more expensive than that.
Well, then I think it's worth doing.
Okay.
I mean it's, I mean, I kind of like that because it also. If somebody puts like an up, like they make a, a constant or something, their own constant and they define in, they write an up value that's saying like the imaginary part of this constant is zero, they want to make it real value, then this will pick that because it will go through the evaluator and it will go and call the imagination.
It won't because it won't have a numeric flag. Unless they got that right.
Yeah, but they would have to set the numeric flag on their constant. If they've done that properly. They set it up properly so it would pick up some sort of up value definition on the thing.
This is actually doing a little less work than M whatever equals zero because that will make us some effort in the symbolic case. Right?
Right. So it's kind of circumventing any symbolic stuff and only doing the numeric stuff by pretesting. It's a numeric expression, right? Yeah, that's a good point.
Sounds pretty safe.
Yeah, it sounds sensible to me. Okay, but wait a minute, does it. What's its criterion for when it gives up? I mean, because we have dollar. What is it called the thing that. The equal max.
Extra precision. Oh yeah, right. Yeah.
I mean that's, that's what it's going to try internally. It will try fine and then, then.
It will give up in the same way. And if you reset extra precision, then you can get this to have more stuff out.
Exactly.
Fine. Sounds sensible to me.
Okay. Okay, so give me a day or two and I'll set up a PR that does.
That sounds good. I don't think I really need to read the documentation. I assume you'll knit it on doc on. On guide pages or maybe that will have to come back to me in a separate meeting. You can click on those links and it'll open the page. Well, I tried that and it didn't work. That's unfortunate. This should surely link to real. Okay, unreal. Should link back to it. Okay. Probably should say is determined to be a number with a real value or something. But it should make it clear that it actually might do something that isn't completely trivial. That is, you know, I mean, well, you, You.
You clicked on number Q, which is something completely trivial. Right. I mean, it checks that it's a number and it has.
Oh, I see. I see. Sorry. Yeah, yeah.
Numeric Q is the.
Oh, it did work. That link did work. Well, that's it. Yeah. All right. Seems reasonable. I mean, it could settle a bit more clearly, I think there.
Okay.
Okay. All right, on to the next item. Which means Robin and Mark could depart if they. No, they can't.
Yeah, I don't think there's anything else for me. Unless I'm mistaken.
Well, actually, there is one there.
Okay, I missed that. I'll hang around. I'll go and get something to eat and come back in a minute.
Yeah, that's fine. Right, so overdot was kind of funky and I fixed some bugs in it. And there's this undocumented second argument. And now that everything's working correctly, I figure maybe we should document it.
You mean the multi. The very dotty dotted. Right.
So you can do over dot of, you know, x comma 2, and it'll give you two dots. And you can do x comma 3 and it'll give you three dots for it does not know about.
Oh, Number of dots only goes up to three. That's absolutely bizarre.
Well, I mean, there's no character that has. I don't believe there's any character with four dots, so.
Oh, but I mean. But there's a fourth fluxion derivative. How is this being made? Is this a character? Surely not.
Yes, this is absolutely a character. That's the character called triple dot. Just like this.
Oh, gosh. And it's not just a. An assembly of dots.
Correct.
Like a flock of dots or a pride of dots or something? Well, I think it could be John. Do you see any reason why this can't be a synthesized object, but just, you know, strong with us.
He was invited. Is John here?
I could see where John's at. I don't see him in the meeting. I think it should synthesize out of dots. If you go to above 3. Okay.
I mean, it'll.
Right.
It'll get very big very fast. Right. I Mean, those three dots are about one character wide, whereas that thing is five characters wide.
I guess it. But I mean. Well, obviously it would be compressed. I don't. I don't know. I mean, we could start stacking vertically or. Would that be too weird? No. Yeah.
Okay.
No, I mean, I. I don't think people really use more than three dots.
They probably don't. It's just that the type of system we have does not usually have restrictions. Like, you can have any number of dots if the number is less than three. I mean, less than four.
Yeah, it's. It's less than four, not less than three.
Okay, okay, okay, okay. But still, I just think we should have something where it synthesizes it and squashes them together. It's not a difficult piece of code. Okay, let's wait for John to show up and then he can. He can comment on that. Okay.
Yeah, well, we need.
John's here.
Yeah, sorry, it wasn't on my calendar.
Okay, we've got overdot, which has a number of dots parameter, and apparently the only characters go up to three dots. But I'm saying we should allow any number of dots and we should just synthesize that out of. Out of dots which have been crushed together, so to speak.
And I'm skeptical of that because I don't know how you crush multiple dots together. I mean, in the texty world, right? This is a purely textual object. So.
I mean, John, don't you do it with. I don't know.
I'm. Well, the. The triple one is. Is a character literally uses the triple dot character.
Yeah, I know. So I'm just saying why isn't the. Why isn't this just using this comma, 5, and then spacing of, I don't know, spacings of, I don't know, minus one or something. What do you. Well, spacer.
So, I mean, what about the outlier cases where either the dots overwrite one another or the dots are wider than the. The character.
Then you have to have them wider than character. I mean, it's like anything else which stacks up where the thing could have a, you know, a big hat. All hat. No, forget how that expression goes. You know, it's all hat. Then, if you get what I'm saying.
It'S.
It's the cattle that's lacking.
Yeah, I mean, well, what if you.
Try putting a negative thin space as. As the second argument to row there?
Well, let's just do negative thick space just for fun. Okay. Oh, boy. That ate.
It's.
That ate. It's what you mean to get eight. It's quote.
Yep.
Yeah, fine. I mean, okay, I think that's what we should do. And if the thing ends up with a, you know, if that ends up being over script, You know, that has a definite.
Okay. I mean, that's obvious. Something that's not going to be typable, unlike the 2 dot and 3 dot case, which I mean, is fine. I mean, we certainly do have things where you can type in some cases and not other cases.
We're going heavily to all hat with a lack of. We really have lack of body.
It's a, it's, it's gone beyond sombrero to.
Yeah, right, to Winnebago.
So here's something you should be aware of. Okay.
How do I get to an emoji?
You can type in backslash 01F600.
Backslash what?
Pipe 01F600.
Well, that wasn't the emoji I was looking for. Anyway, it doesn't really matter. That's a. Okay, that's a heavily. Go ahead. What were you going to say, John?
Okay, so in a new Cell, type X control 7 dot. Okay, now cursor out of that and type right next to it. X control 7 dot, dot. Notice the slightly different vertical spacing there. And that's because period is specifically recognized as a. I forget what we call it. But, but basically as a, as a character that can be kind of scrunched into an overscript.
Why aren't we doing that? Why aren't we turning any number of dots into an overdot with that. With that? Numbered. A numbered overdot.
So I'm, I'm just saying that this behavior, this is c behavior that would have to be changed.
Okay, Well, I think it's Right.
So if you did, if you did double dot there. Right. You'd get the scrunched behavior again.
I think that's correct, yes.
Which is Right. So I think there's a mild. I mean, this is not our most critical thing, but I think it would be mildly nice if this thing, if you type a whole bunch of dots, it would turn into an over dot comma and then that number.
Yeah, double dot is lining up perfectly with dot. So fine.
So I think that's a mildly useful thing. Okay. That does a reasonable thing there. Just goes off the side. Right. Can we go on?
Well, I guess the question is. So are we not documenting until we change the front end behavior?
No, we can document with the current front end behavior.
Okay.
Item margins.
Yes. And this is going to be More John's show than mine. Yeah, well.
And unfortunately, I don't have a really good solution here. I'm. I'm kind of. I'm kind of at a loss for this. And you'll forgive me because I'm not knowing about the meeting. I didn't even have my own copy of the agenda open. But. Yeah. So that. We had talked about item margins before and the notion that we could generalize. We talked about item margins specifically for item. But it was suggested that we could generalize item margins for. As a. As an option to. To grid box or to grid. And that's not unreasonable, but there is an ambiguity. Doesn't appear for item, but it appears for grid. And. And the problem is, you know, the. The nesting levels. It's basically, the ambiguity is. Is caused by, on the one hand, the use of list list braces to indicate, you know, this is something that might be a part of a repeating pattern in grid. But on the other hand, you might also want to specify the left margin and the right margin as separate values or as one combined value. And if they're separate values, you wrap our list br.
Rather values. Yeah. Right. Okay. Walk me through this.
I'm not.
I'm not clear.
Right, Right. Okay. So the. So it could have been interpreted as either a left. Right item margin, which only applies to the first column.
Okay.
Or it might have been interpreted as a. As a repeating specification where the left. Right values are both one for the first column, they're both two for the second column, they're both one for the third column, two for the fourth column, et cetera, et cetera.
Oh, my gosh. I don't know. I mean, the basic point here is this is for bulk specifying the margins for an item in a grid. By the way, item is also supported in row, correct?
No, no.
Supported in column because it's a column lives in the grid world, but row lives in, like, the texty world.
That's really horrifying. I mean, that's why.
Yes, and we repeatedly raised the point of how horrifying it was when you designed it.
Well, row is very useful.
Well, it's not that. Not that we were opposed to the idea of a thing that does what row does, but the. The name. You know, row and column are just totally different things, but they look like they should be parallel to one another.
Well, in what ways are they different?
Row is not a table is not a grid box. Column is a grid box.
Yeah. Okay, but operationally, what does that mean? What options do they have that Differ that they have.
They have no options in common, basically.
Basically, Yeah. I mean, you know, aside from totally generic options like base style, there's virtually nothing in common. Right.
I Row is much more similar to the old sequence form than, I mean, it's basically a slightly repackaged version of sequence form than it is anything like grid, whereas column is basically one with this formatting notebook.
What was that? Something is horribly, horribly slow in this prototype build. You saw that, right?
Yes, I did.
And this is horribly slow as well. This is what I was talking about yesterday. Tom was just ignoring it, but this is. Yeah, it's unbelievably slow. Every action here is unbelievably slow. There's something wrong. Look at this. I'm trying to resize it. It's unbelievably slow. It's spinning. See that?
Well, we can't see that it's spinning.
Okay.
There's no spinner for us. Okay, fine. But I'm telling you, that was, I.
Mean, I, I, I, I, I, I, I agree it's slow, but it's really. Why? And I'm not seeing.
Okay, well, I don't know, but, but it's been slow for me for the last few, like, week or two. Okay. That, that time.
That'S not going to change my fundamental answer. I don't know.
Yeah, I realize. You don't know. I realize you don't know. There's something, I mean, some, somebody added some stupid thing. Okay, Any case, Alignment, background, baseline style, base style, default elements. An empty item. How can we even have an empty item here?
Well, if you, if you edit it, then you might. And delete the contents, you might end up with an empty item. Yeah, you won't end up with one originally created. Unless. Yeah, I mean, I know. If you do raw boxes of empty string, might that be interpreted as an empty.
I mean, I mean, that is the basic design of grid box, though, that when you empty it out, it doesn't actually leave it necessarily as an empty string. It leaves it as a visible placeholder that you can go back and select later. Yeah, of course, you could change default element to be empty string if you wanted to, but that's not the default.
Yeah, I understand. Dividers is not present in row, right?
Correct.
And image margins is present in row but not in column.
I've never been entirely sure what image size and image margins do in row.
Well, I think image size and image margins, I think they're basically about those frame. They're related to those frame options.
Okay. I think so how come this has rounding radius and column does not have rounding radius?
Okay, well, because row is doing nothing more than a frame box, and frame boxes support rounding. Okay, but grids do not support rounding.
That's a shame.
I forward the invite to loop. But if somebody could try that. Useful.
There is a fundamental ambiguity in. When you're talking about rounding for grids, because which corners get to round? If it's only the outer corners, then you could have just wrapped a frame box around the whole thing and, and, you know, that would have been fine if you want to start rounding inner corners. What does that even mean?
I'm sorry, How. How could you have done that? Because it doesn't. The, the grid line.
Framed of grid. Framed of grid.
But that doesn't work, does it? But if I say we.
We have a fully composable language, framed of grid totally works.
Okay, I'm going to demonstrate why it doesn't. Well, here I want to get the frames of all places other than the outer frame.
That's. That's what I'm talking about, Steven. The rounding problem is well defined on the outer frame. The rounding problem is not defined at all on the inner frame. Reasons which are obvious if you think about it.
I realize that. I realize that I'm making a different point. How do I get. What I'm saying is I don't think that these are going to join up correctly if I have inner. Do you get what I'm saying?
Yes, yes, yes, That's. That's exactly true.
What does it do if I say frame to automatic? No, what does it do for frame?
And, and, and, and, and what if you want to create rounding that's just around a column or a row.
No, it's crazy.
Yeah, it is, exactly.
But I mean, having these corners be rounded is doable.
Yes, But we've never done it because. Well, I mean, you know, we could just.
Because we have a fully. Because we have a fully generic language and we don't want special cases.
We could just say it's a big. It's a big special case. Just pretend that we're not a general language here, then we can do it. Yeah.
No, no, no, no, no, no. I'm asking a simple question. I want the thing to just have divider lines that go to the outer boundary here, but then I want that to be rounding on that corner. Is that. See what I'm saying? See there? Right.
Yeah. I mean, we understand what we're saying, and we're just throwing your argument about, you know, two, three dots Back at you. Right? That would be rounding that only, you know, four of the, you know, N squared or so corners in.
Okay, I understand. I get the point. I'm just saying you can't reproduce the thing that I wanted purely with. You're saying rounding radius is hard to justify not applying. But. But rounding radius was available in row. But how does it work in row?
It uses a frame box.
To round.
The whole row because the only frame you can have in row is a frame that wraps the entire row.
Right. There's no such thing as dividers in row because it's not a grid like construct.
What does dividers do? Doesn't dividers change the. Here if I say dividers arrow green or something?
Well, you can use true and false. I mean, I don't recall the exact precedence of frame versus divider when they're both specified.
Yeah, frame. I mean, frame and dividers is a bit weird. And it's. If I recall correctly, I think it's. Is there a frame? There might even be a weirder frame specification than. Than what we've already discussed.
What's the difference between dividers and the frame arrow? All. I don't understand why the divider.
Oh, yeah, yeah, yeah, yeah. Frame actually gets worse because in grid, you can give frame an element wise frame specification or, or row wise or a column wise specification.
Okay, so what are we discussing here?
So, so, so we couldn't even say that routing radius only applies to frame because there are all kinds of frames it couldn't apply to. There are all kinds of frame specifications I should say that it couldn't apply to.
Okay, okay, fine. All right, so what's the issue? What, what's your. Okay, surprise. Row doesn't have a spacings option even though it's second. I think it should have a spacings option. There's no reason. I mean, it's not difficult to put it in. It's.
It's. That's, that's what the. The second argument of rho effectively.
I know, I know, but it's not quite the same.
In fact, it's documented right there. Spacer as an option.
I know.
Spacer as a value for the second argument.
I know, I know, I know. I use it all the time. It's just confusing.
But it's fundamentally different units. Right? I mean, the second argument gives you. Right. Spacer gives you a distance in points, whereas I don't know what units spacings use, but it's certainly not points M's. Okay.
Horizontally, it's M'S Vertically. Vertically, it's line spacings.
But that will be a reason to have a spacings option for rho. So you could get an EMS based spacing. Nice and consistently with column.
Well, in the modern world, the conversion between M's and points is pretty. Is pretty straightforward if you know the font size. If you know the ambient font size.
Yeah, but why, why would we not have a spacings option for row other than just obstinacy? I mean, it just seems like, yes, you can put the second argument in and it works with a particular. You know, it works nicely. But why not have the consistency of having spacings as an option for rho as well?
Well, for one thing, it wouldn't. It would have a confusing meaning. Why the. The spacings? If I recall correctly, I think the spacings is. I'm not sure that it's the full spacing.
And what happens if you specify both spacings and A and the delimiter? Then what does spacing mean?
Yeah, I assume that they would compose.
On which side or both?
Both.
Okay. Okay, so sorry, spacings is the ABS defined as the absolute space between items independent of the presence of frames or dividers.
Okay.
So that means.
Which you can't. Which you can't do in row.
So that means that it. I mean, if we had a spacings option, you know, in the same way that we split the space in a grid on the left side of the divider and the right side of divider, we would also have to split it on the left side and the right side of the second argument of row.
Sure. What's wrong with that?
Is that what you expected? Is that useful?
I'm not sure if that.
Is that even doable.
Look, if the default for the second argument is no space at all, which is, I think what it is. Right.
Default for the second argument is an empty string.
Yeah.
In which case basically gets omitted, I think.
Right. Which means that spacings would give the actual spacing because it's the additional space added on beyond the. The second argument space.
I know, I don't think that's right. I mean, that's exactly what we were just saying, right. Space. The spacings option means the space between the elements, irrespective of, you know, a divider or anything else that's between them.
Okay, so that, so what you're saying is if there was a space, if there was a spacer, for example, that spacer could be ignored because spacings has a higher priority. So to speak.
But if, okay, but, but what if the second argument is, you know, vertical bar.
Then it's still ignored. In other words, spacings is determining where the things get placed independent of what's between them.
Independent.
That's what it said. That's what it said. That's what it said for the grid case. And that means if you put big thick dividers in the grid and you have spacings be very small, the thing is going to crash into the divider. Am I right?
Sure. To the extent that, you know. Well, I, I guess I, I guess my basic point is you're insisting on consistency between things which are fundamentally inconsistent and live in different worlds. I mean, row. Row is like robots. It's like typing in.
I understand, but I don't think and, and understand.
No, no. For example, that, you know, if you just do, you know, something like what I put in chats row of ABC with second argument, comma, you're going to see something interesting.
Oops, that's.
Notice that the comma is not placed dead center. That's a feature.
Okay?
Because the idea is to replicate what would have happened if, if you had typed A comma, B comma, C in a standard typeset cell. You want to replicate like operator spacing, for example. In this case, what you're seeing is the operator spacing around the comma which hugs on the left hand side and spaces out on the right hand side. All right, so this is, this is something that is fundamentally different from grid, where in the case of grid, those dividers, they're always dead center in, you know, in, in the spacings value. Well, in some sense, these, you know, the, the characters, you know, this, you know, the, the kind of box that the characters are being painted in could be dead center, but the ink is not dead center. It will not look dead center at all.
Right, well, okay, fine. I'm losing this argument. Let's talk about items, item spacing, item margins.
Okay, so if you, if you look at the, at the documentation for grid, the portion that says. Yeah, yeah, so, so like, you know, alternates between C1 and C2. You see that case there? It's the third line. Yeah, that's the kind of thing that we're running into. It's, it's the list braces used as a repeating pattern. So that's where they're crazy. Anyway, it is, I mean, you know, it's, you know, it. We used to have this sort of problem with image size, for example, and we came up with up to. So that we could get rid of some of these, you know, lists of lists of lists. I think we need a more serious.
Redesign because this is incomprehensible. This and partition, you know, have the same kind of, you know, repeating this and that. And the other thing I mean up to is really helpful in partition as well.
Yeah. The main difference being I can actually remember this, whereas I can't remember partition.
Come on. It only has six arguments.
Yes, but I'm sure like ITAI would be the exact opposite. Can remember partition, but can't remember this.
So yeah, I was going to say.
I can remember this up to, you.
Know, having to deal with horizontal.
Horizontal and vertical and. Yeah, right.
So.
So, so, Mike. Right, so I. I was muted when I asked this question and. And therefore was surprised that nobody answered it. So is there. Why don't we have this ambiguity elsewhere? Is that because we're taking non listy things like.
Exactly.
Graphics directives.
Exactly. So, yeah. So it doesn't come up with directives because. Well, we have directive to deal with that problem. It's all of the other options just happen to be things that either provide a natural wrapper like directive or they. They don't have, you know, they don't have values where, you know, if it's a list it means A and if it's not a list it means B. This is. So it's just kind of a coincidence of the options that we spect and how they work.
The truth is one day we should have a wrapper that means cyclic.
That would be. That would have been really useful if we had thought of that in. In 2006.
Yeah, I think that's what we should consider and I think we should consider it for partition and this and a whole bunch of other things. And that way, as we build out more syntax here, we can build it out with that.
So we can implement item margins on item today, but we can't implement item margins on grid because of this ambiguity. Are we okay with temporarily having item margins only on item?
I think it's okay.
Okay.
But then let's put in our agenda. I mean, it'll take quite a bit of discussion, the cyclic thing, because there's a lot of issues with cyclic parts and cyclic. Lots of things.
Yeah.
But I think it's a good thing for us to look at.
That's a specific direction that I can work up a proposal around. And of course you might hate the first version of proposal, but we can iterate.
Fine.
Do we need to discuss the units?
The. The units is a Bit problematic, but it wasn't as deadly as the, as the ambiguity problem. So I mean it just comes back around to this, you know, M's versus points or line heights versus points.
What do we want to do? I mean doesn't plot margins. Plot margins is in points.
You mean.
Right. Grid is. Grid is just about the only thing that uses line heights and ends. I.
Right.
Grid and the grid spawned things like column.
I think it needs to. Otherwise it's not going to look right if you increase the font size. You want to change.
Well and we've long talked about the possibility of having a unit spawned specification where you could, you know, go either way. You still have to, you know, by.
Long we mean 20 years we've been talking about that.
Yes, yes. I mean it's a problem that we, you know, if we were willing to have a simple solution could, would not require 20 years of effort by any stretch of the imagination. But it kind of got lost in, you know, the generalities of well, you.
Know, units in the front end.
I mean what if, what if you want to specify your, your, your size in parsecs or something like that, you know.
Eye roll.
I, I want to do it in furlongs.
Yeah. Based on the absolute size of your screen. Okay, but seriously here the consistent thing is M's and line heights. Is that true?
It's consistent within grid item. It claims it's being used in a few other places where it would be less consistent. But in fact I think the item documentation, like item claims it can be used in overlay. And I looked and that's just not true. We may have wanted it to be through, but it's just not true.
What does it do with manipulate?
Sorry, I don't remember what it does with manipulates.
Yeah. Why did overlay had something.
I'm sorry, why did overlay want it?
Right. I. Right. I believe it's used in manipulate for like control placement and sizing.
Yes, I think you're right. I think you're right. I did play with it. Sorry, it's just been a while. I don't remember. I did play with it. Manipulate and it did kind of work and manipulate but not as consistently as you might have expected. But overlay is just completely non functional and the idea being that you could specify you know, separate like margins or whatever for each element of the overlay. It's not necessarily a bad idea. But nobody's asked for it, nobody's reported bugs on it. I'm tempted to just de. Document it.
Yeah, okay. And manipulate. Basically the point Is that the content area? This is moving around the content area?
No, this is not the content area. This is a control area.
Oh, so what's the idea for using the manipulate.
So if, if you are like creating, oh, a custom row of controls or something like that, you know, basically remember you could use grid to, to set, you know, to, to customize your, your control area. Manipulate. I mean, you know, we don't usually, but it is possible to do quite a level of customization of how the controls lay out and this is part of that. And if you're going to push for more details. Sorry, I don't remember off top of my head, but that's the hand wavingly general answer.
Okay, Okay.
All right, so what, okay, so here's. Trying to find in the documentation is problematic, but here's an example I just copied from the documentation of the usage of item and manipulate.
Okay.
And in the, in this particular case it's setting an alignment for a specific label that's in the control area. Right.
Right. That's useful. And I can see why we want it to overlay.
Yeah, makes sense. It's just that no one ever implemented it.
Yeah, I understand. In these cases, ems and line heights are fine units. I think for a case like this. Fine unit for a case like this. We don't want absolute points in a case like this. So we're good.
Yeah. Okay.
I, I mean, I think overlay would be one of those slow implementation type things. Yeah, by slow I mean, you know.
Well, I think I, I think I have plenty of direction now to proceed, so. All right, so thank you.
Okay. Emphasized. Are we happy with the name? Weird to me that it's red, you know.
Yeah.
We talked about having potentially other forms of emphasis in the future. You know, again, this was the one that used to be called under lighted, which was the name we made up for the red squiggly line. And we didn't like red squiggly line, obviously. Or under lighted emphasis.
We could call it squiggly. Maybe that's too. Or squiggled.
Yeah, emphasized is a bit weird to me because of the relationship to HTML which uses the EM tag meaning emphasis emphasized. And while you can customize what the M tag actually does, I think the typical thing is to italicize.
Underscriggled. I mean people do call it squiggly line. I mean that seems to be a pretty common. Under squiggled is bit weird. It's a worm that was anesthetized. Never mind.
Yeah, between those two Options. I would go with squiggled.
Me too.
What is it competing with? What are the other things? Like this frame?
No, well, it's more similar to highlighted. I mean, this is a question that we didn't actually really discuss last time or didn't discuss very fully that. Right. So the way emphasized was implemented, it disappears on interpretation. Like.
Like highlighted does.
Like highlighted does, which is different from the default behavior of framed or style, which, you know, remember where they came from. Right. So if you were to copy that percent 31 and use it as input, it would still be framed. Whereas if you did that for percent 30, it would. Right. So when you evaluate that, that's going to disappear. But if you do that with framed, the output, then the frame will be remembered obviously.
Right. For highlighted. Doesn't seem right to me. I want output that is highlighted. That was its main point.
That's specifically how we designed it. When we came up with highlighted is we wanted something that was transparent for evaluation.
Really?
Why?
As far as I remember, I mean, I'd have to dig it up a little bit. But I believe the idea was that we wanted to be able to do inline markup that wasn't going to change the evaluation of the code.
I certainly agree that the inconsistency between framed and highlighted is eyebrow raising.
Right.
I mean, yeah, it's. It's.
I don't like it. I. I think it's wrong. I think highlighted disappearing is wrong. Okay, can we go find out?
I. I don't, I don't, I don't. I don't disagree with you. I will just point out that you are disagreeing with yourself from a year or two ago when we designed highlighted. Well, so.
But you might be. Yes, you might be right that I'm disagreeing with myself. But yeah, I mean, we could.
We could change the default and then just have it respect a strip on input option.
Right?
Yes, I think that's what we should do. I think it's really wrong right now. I think it's very useful to be able to. It's just crazy. It's just crazy. I mean, if I say something like, you know, I don't know, Rain, you know, you know, if prime Q highlighted, otherwise identity. Oh, God. You got what I'm saying, right?
Yeah.
That works.
Well, why does that work?
Why does that specifically on the typeset form. So if you copied that and evaluated it, all of those would still have head integer, whereas if you took those.
Oh, my God. That's crazy. That's crazy. Super confusing.
Okay.
Yeah, we can change that. Yeah. Now, in terms of squiggled.
Right. So if we're, if we're changing and if we're changing the behavior of highlighted, then squiggled should also be like framed and all the other typeset generators.
Agreed.
But now strip on input. So would these. Would strip on input be an explicit option to highlight it?
I think so, sure.
Yeah.
It's a. It's an option to framed. So is it. Yeah. So if you copy that, it's not.
A documented option to frame, though.
Ah, okay. What is it documented for?
Good question.
I think it's documented for boxes.
Okay.
Is it documented for style?
That's another place I had no idea you could use it. That generally. How does it relate to the deferred?
It's not documented for style either. We should document it there too.
Do we like the name?
I like the name. I mean, I wouldn't claim to be. I wouldn't claim to be totally in love with the name, but I think it's a reasonable name and it's one we've had for a long time, so. Yeah, right.
But it's one we've had for a long time in the, in the low level box world.
Mm.
Yeah.
How does it relate to things like defer, which, by the way, should be referenced here.
Lou, does defer use strip on input or does it just have a direct interpretation function?
It relates to defer in that the thing that you're constructing as output can be used as input in some way.
Other than what the output would generally be interpreted as. So that's why I think it should. They should be cross referenced.
Yes, it's. It's conceptually related. It's not technically related.
Okay, but.
But now is strip on input an appropriate option or should it be some kind of wrapper? Or is that.
I think that's crazy.
Yeah.
It's an option to the specific function.
Right. The problem is that a wrapper is, you know, it's ambiguous unless you're willing to say strip everything, in which case it may strip way too much.
Yeah. Okay.
Yep. But I'm happy to go through and clean up the documentation, add it to things like style and framed and such.
I'm just thinking, is there any other name other than strip on input? I mean, strip on input is very clear.
Right.
All right, fine. That's what we should do. I think this should be renamed squiggled.
Okay.
Okay. Just one comment. Is this something to be named after what it does or how it does it? Because in a sense, highlighted Is not color.
It's not colored or yellowed.
Well, what is this doing?
Well, it's typically used to mark an error, a mistake.
Yeah.
So you're suggesting a name like marked or red Penned.
I don't know. I just want to offer.
No, no, that's a reasonable point. It's a reasonable point. Right. So what would it be? What is it called? What's that? Mistaken. That's really weird. Flagged. That's horrifying. I mean, so many flags out there waving around.
Yes.
Markup would be too general.
Yep. What. What do you think it's called in. In word processors?
I've never seen a name ascribed to it in word processors. I mean, they're probably somewhere. But not in the interface though.
Right. I mean, the closest to it is. And you know, it's been years since I've looked at this, so my memory is fuzzy, but. Right. There's usually some sentence like, you know, indicate misspelled words or highlight misspelled words, but they never refer to the actual squiggling thing.
Well, okay, so there is the concept of redlining, but that's a little bit of a different thing.
Yes.
I mean, I think it came from this maybe.
Right. And it obviously has poor social connotations.
Oh, God, yes. No, it does. Oh, my God. I didn't know that.
I think Windows refers to at least the parameter for the color as spelling wavy. Underline color.
And wavy is better than squiggled. I suppose.
We could call it misspelled.
Well, I just came across a seven page NIH document which is guidelines for spelling error annotations in consumer health text. And in seven pages.
It doesn't name it.
Yeah, it doesn't name it.
Let's see. Attention. No way. That's like an attention layer. Warning. Warning. The.
I. I mean, I. You know, I have to say you're. I was a bit surprised at your level of resistance to flagged. I didn't think that flagged was terrible.
The reason I don't like it is because, you know, in code you're always talking about flagging things and bits and, you know.
Right. I mean, I'm a bit concerned. Right. Because there's, you know, flags and codes and obviously there are physical flags of nations and whatnot. So I'm not sure it has altogether the right connotations.
See.
Personally, I'm not loving any of these. Better than squiggled.
Right.
And you know, just like we have. I mean, granted it's a named style rather than the head. Right. But obviously we have, like, underlined.
There's a profound thing for it to say.
Squiggly line or squiggly line. Yes. Not to be confused with the green squiggly line that is, you know, allegedly flagging grammar errors.
I thought you were going to say.
That was flagging correctly spelled words. That's not right. I love the way it's so definitive and what it says anyway.
Well, good to know the robots aren't going to replace us quite yet.
Well, what about an annotation word?
Well, obviously we have annotation, which is a much more general thingy.
So we.
Need to be careful not to muddy that.
Oh, boy. The thing is off. Talking about a wrapper. Oh, I am glad that the highlighting is working now. That's nice. The. The coloring is working in those boxes. Okay, let's see. Annotated. No, that's awful because we've already got 60 million things called annotated. What are some other words? Flagged. Annotated. I need to go. Commented. Well, you know, the advantage of squiggle is people will mostly know what it means. All right. I guess squiggle is probably the best we've got. Certainly better than emphasized.
Okay.
All right, I gotta go. And we got through the 133 material.
Yep. So sorry for making you hang around Mark and Tom, but I guess I'll just discuss. We'll have this discussion some other time.
Sorry, guys. Okay. Okay, bye. See you all soon.
Thank you.
Okay, bye, everyone. By.
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






