Transcript

Thanks to Rodrigo Girão Serrão for providing the transcript.
[ ] reference numbers refer to Show Notes

00:00:00 [Stevan Apter]

I don't know how you could keep walking after seeing APL? I mean for me, it it was the character set. It's so beautiful. APL is just beautiful. Stephen, you know what I'm talking about right? It's just it's just a it's a beautiful, you know? Yeah, I I I I think a certain number of us, including Arthur Whitney, have a APL character set envy.

00:00:43 [Conor Hoekstra]

Welcome to another episode of Array Cast.

00:00:46 [CH]

I'm your host Conor, and today we have a special guest who I am super excited to interview. But before we get to introducing him, we're going to go around and do brief introductions, and then we've got a short announcement from Adám. So first we go to Bob, then Stephen and then to Adám.

00:00:58 [Bob Therriault]

I'm Bob Therriault and I am a J enthusiast. Currently working on the J wiki, at least I should be. I've sort of been working on another project for a bit, but I'm going to be back at it soon and we're making progress with. But, and it's a lot of fun, and if you're interested in being sort of on the ground floor of building something, the J wiki is a really good place to be right now.

00:01:18 [Stephen Taylor]

I'm Stephen Taylor, I'm an APLer from way back, and these days I do most of my coding in q and I'm the Kx librarian.

00:01:28 [AB]

I'm Adám Brudzewsky, an APLer from not so far back, full time for Dyalog. And I guess I can in that connection say that on Thursday and Friday the 5th and 6th of May, both the Finnish user group [01] and the German user group [02] having their spring meetings, and we'll have things in the show notes to those you can sign up for those that can both be attended in person. And at least partially online as well.

00:01:57 [CH]

Awesome, so yeah, we'll have links for that in the show notes of all of our episodes. As usual and last but not least, I'm your host Conor. I'm a professional C++ developer, but I'm a huge array language enthusiast and combinator enthusiast at large and super excited to talk to our guest today who actually kind of shares the same name as one of our panelists. A different spelling, but so we have Stephen Taylor who's our panelist and our guest today is Stevan Apter. And I will do a brief introduction because I actually know much less about Steven Apter than our other panelist, Stephen Taylor knows because I think they've known each other for quite some time. I first came across Steven Apter's name or, or more accurately, his website which was www.nsl.com [03] which, when I stumbled across this website, I sort of fell off my chair because NSL stands for no stinking loop. And any of our C++ programmers will know why this is sort of funny, because in the C++ community there is a sort of famous quote for some definition of the word famous called no raw Loops, which was popularized by Sean Parent, who works at Adobe, and so that's sort of like a aphorism or witticism that exists in the C++ community and I actually bought the domain to no raw loops.com. And so when I stumbled across this, I was like what like I was falling in love with array languages and then came across another website that exists and they just were one different or one word different. Anyways on this website are a ton of different links, some of them to projects, some of them to YouTube videos, some of them to different websites, mostly focusing around K, the different variants K3 all the way up to K9. And yeah Stevan, after I've heard his name both from Stephen Taylor and from Arthur Whitney, has done a ton of work around the K language. Currently works at 1010data.com, which I think he'll tell us a little bit about more later. But with that said, I'll throw it to Stephen Taylor, who can give a sort of more in depth introduction than than I can.

00:03:56 [ST]

Oh, I don't know that this is gonna be more in depth, but let me take let me take you back to the very first Batman movie, the one with Michael Keaton and and and and Jack Nicholson, 'cause Stevan is definitely an eminent figure in the array programming community in the Iversonian languages. And there's a moment of wonder in that Batman movie where Jack Nicholson carrots with the Joker just stares at whatever it is the Batman is doing. He says, where does he get all those wonderful toys? And Steven Steven's code kind of evokes that reaction from people reading his, how does he think of these things? How does he? How could he possibly know that would work? So I'm excited to have him as our guest here on the show today and I'm hoping to learn a lot more about K than I've ever known. And and I'm particularly interested in the relationship between Q, which I do use and K, which I don't.

00:05:03 [CH]

So with that, I think we'll throw it now to Steven Apter. Feel free to jump back as far as you want to go and give us the brief history of Stevan Apter, from from anything you'd want to share with.

00:05:15 [Stevan Apter]

Well, well, thank you. First of all, thank you to all of you for inviting me and thanks for that wonderful introduction. Uh, so now I'll disappoint everybody by revealing this the the truth, the the actual truth. Uh, I uh, let's see brief brief biography. I I was a Fine Arts major in college. I I had a I had a, uh, a teacher advisor who said, you know, why are you wasting your time with paint and canvas? Why don't you go learn some programming and you can do some interesting work with at MIT? And, uh, so I I dropped out of college. I went to control data institute. Some of you may remember this vocational school started up by Control Data Corporation [04] and I spent ten months learning how to program in RPG and BAL and so captured my imagination. I I took a I took a job with National Science Foundation [05] uh, as a computer programmer operator aboard an Antarctic research vessel and spent two years in the Antarctic, programming uh and babysitting an IBM 1130 [06] . A wonderful machine, UM and in the course of that voy- that that that that that that employment I. I learned APL. We had an APL interpreter, APL 1130, [07] and that was fascinating. So after that stint, I went back to college and spent some time, including several years as a graduate student at Princeton in the philosophy department and then returned to programming. And was fortunate enough to secure an APL job with Harcourt Brace Jovanovich in their management sciences slash OR, operations research department. And and again, that was a wonderful experience 'cause it taught me something about business, which I didn't I didn't know anything about it. How how businesses operate and I had a wonderful advisor from an alumnus of Institute for Advanced Studies, a colleague of Nash, actually. His name is Carl Heimowitz. And Carl again taught me the difference between theory and practice, something I needed to learn after four or five years in in philosophy. Uhm, and uh and and I made my living thereafter as an APL programmer until meeting Arthur Whitney [08] at Morgan Stanley, where he had developed A+ and I worked with Arthur, I got to know him uh, and uh, it's a it's a a significant uh, event in my life, uh since Arthur taught me uh, how to look at programming, how to think about it. And, uh, and uh, of course Arthur has I mean, apart from his, his incredible skills as an implementer uh of and designer, tremendously fertile imagination, and Arthur has insights into into the the nature of algorithms and and and programming languages that I think are, I think those insights are unique. Uh, but I particularly uhm uh I it it was rather his his ideas about what you could throw away, what you didn't require. So coming from APL, especially APL 2 [09] and Sharp APL [10] , where, which seemed to me to be to represent UM the uh, the best solutions to the problems that APL 360 [11] , the limitations of APL 360. Arthur had this remarkable insight that that that that you there was there were other ways to to to to to enhance the power of APL 360. So we talk about that some other time. I'm not even sure I'm the best person to talk about it so, uhm, and uh so then I became a I guess, an itinerant K programmer. Oh oh, guess K, uhm, when uh, when Arthur left Morgan Stanley to form Atlanta software to develop the first version of K, we stayed on at at at Morgan and eventually joined him. A group of us joined him at UBS [12] . Where the, what what we now know of is K3 or you know the the the last version of that idiom that that that that dialect of of K was developed and we had a, uh, two or three years at UBS, where where we had a captive audience, we had the entire American branch of UBS. Our our our CTO was David Weiss, the head of the fixed income was Joel Kaplan, and so we had a chance to not just develop the language, but a kind of a laboratory of like application opportunities and that was fascinating and that uhm, it was there that, uh, I wrote a uh, I I would... UBS used Sybase extensively and, uh, as you know, K3 doesn't have the database primitives select and join and things like that. So my one of my tasks there was to develop the first version of what I guess became kdb. But it wasn't kdb, it was an attempt to exactly duplicate SQL 90. And that was fun. Uh, so from there after UBS you know various jobs in finance industry and now currently for the last six or seven years I've been working at 1010data [13] which is, uh, which where we do basically big data applications for various, in various domains and uh, so that's the biography. I hope that didn't take up too much time.

00:12:25 [CH]

Oh wow, no. So this is like similar to when I, there's a couple guests where this has happened. I think Eric Iverson was one of them, where like that was like I've, well, that was so amazing. I was like that's like better than like watching Marvel movies for me is hearing about it, which maybe doesn't make sense.

00:12:41 [SA]

Seems very prosaic to me. I I, I mean, you know, of course I lived it, so, you know.

00:12:46 [CH]

I mean you you start with I was a Fine Arts major and already I'm like wait what what? OK, not didn't expect this. And then you talk about how you had a professor, i'm not sure if that was an actual Fine Arts professor or was a different professor that encouraged you.

00:12:58 [SA]

Yeah, it was a it was a fellow from MIT who had been using computers to design sculpture? In fact, the first is really kind of interesting. When I, when I when I went to Control Data Institute which was I mean I think it's marvelous that I'm a huge fan of vocational college, vocational schools and vocational training. I think for some people at at all at all at all talent and intelligence levels, vocational school is just a wonderful thing where you go to learn a very narrow, well defined set of skills, very practical set of skills and so the teachers they hired at Control Data Institute were all professional programmers. Now remember this is 1969, like these, I mean there weren't that many programmers around and some of them were like veterans. Why we we we were introduced to to to the wiring plug boards on chord sorting machines. Terrific stuff and the first language we learned was RPG [14] . Do you remember RPG, report program generator? It's uh, it was, uh, designed to do very it was I don't want to say it was declarative, a declarative language, but you wouldn't recognize it as a an algorithmic programming language. So it was like, uh primitive kind of COBOL and my first application in RPG was was designing geometrical patterns for three dimensional sculpture. It was great. It's probably the, set the pattern for my life as a programmer.

00:14:45 [CH]

Yeah, I think we'll we'll have to find the link to the Wikipedia page for RPG. I've been told about it once and I looked into it and it reminded me of of, yeah, I can't remember sort of those COBOL like all of the screens you see of it, it looks like it's on some Dosbox or what I think of as a Dosbox which actually used to be a DOS computer at one point, but they don't make those anymore anyway. So yeah, we could I I I feel like I have 1000 questions but I I I'll pause and and wait to wait my turn 'cause I feel like, uh unless if unless if no one else has one ready to go then I'll just go ahead.

00:15:18 [BT]

I I just think it's amazing that somebody starts out their bio with "and then I went to antarctica and spent a year on a research vessel programming in an IBM 1130". It's like, Oh yeah, that happens and it's like it's like talking to the world most interesting man.

00:15:34 [CH]

So how many yeah? I guess my first question is how many languages, you said I think RPG, BAL, and then you discovered APL. Were there any other languages in between the the ones you first picked up and then before you got to APL, yeah.

00:15:46 [SA]

I mean Control Data Institute was remember it was a 10 month, 10 months, five days a week, 8 hours a day. And so there were, the course consisted of RPG, cobol [17] , PL1 [16] , bAL [15] , SNOBOL on both IBM 360, there's a little 4K 360 20 machine on the premises and then there was time sharing with CDC's 3300 and 6600 machines, which are very unusual, very fast machines for the time. Very powerful. So it was a good kind of sampling. And of course, most of the people in the program were older uhm, and had come from other careers. There were secretaries, there were truck drivers, you know people who had kind of read the match, the advertisement on the back of the match matchbook cover, you know, learn computer programming and and and they they went on to COBOL mainly. I think COBOL jobs for and for firms like Prudential Insurance and so forth. And when I was at C, uh, for in National Science Foundation it was, uh, FORTRAN. Uhm, Fortran and 1130 assembler and APL. There were there was an APL application for doing satellite navigation.

00:17:17 [CH]

Interesting and so how did when you end up on a boat in Antarctica for? I'm guessing it was a large boat.

00:17:23 [SA]

Uh, uh, not that big. It was an icebreaker. I I guess, sure, not sure, how many tons it was, but yeah, I think there were 60 scientists and maybe 80 or 90, at a merchant crew running the boat that that could be, I could be off by by some fraction, but yeah, oh sorry go, I interrupted you.

00:17:52 [CH]

No, this like I said, this is a this is this is like I'm playing a real life video game and this one yeah, it's it's great and and so I'm I'm curious, did do they have like how did you you? It sounds like you had to pick up FORTRAN, APL and then when you were sort of going through the brief history you said you know this is interesting, like what? I'm always curious as to, you know what is it for the folks that end up falling down the array language rabbit hole that they've learned, uh, you know, plethora of languages or a handful of languages. And then they stumble usually it's on to APL first, 'cause that was what existed first, and it it just completely, you know, ensnares certain people and I'm I'm i'm always trying to figure out what is it that you know that happens to certain people that other folks they just see it and they sort of keep walking 'cause they're, you know that looks weird.

00:18:34 [SA]

I don't know how you could keep walking after seeing APL. I mean for me it it was the character set it's so beautiful. APL is just beautiful. Steven, you know what I'm talking about, right? It's just it's just aPL is beautiful, you know? Yeah, I think. A certain number of us, including Arthur Whitney, have a APL character set envy. You know is it superficial? Are these superficial characteristics? What do you think, what do you think, do you think, do you think the physical appearance the the, the physical beauty of the type of the of the font and the way uh, operations uh, you know, connect up and, do you think that's superficial? Am I being shallow here? You know, should I be talking about the profound, you know the nature of of of arrays and how they have tools to thought and all that. Oh, that's just a beautiful language and that's what that's what got me.

00:19:44 [CH]

Stephen Taylor?

00:19:46 [ST]

There's a four letter word which comes up quite often in talking about computer science, and it's cool. And the reason I mention it is that within this field, within this domain of discussion, we don't generally acknowledge what a huge of component aesthetics is, but when people use the word cool around computer programs, they're talking about aesthetics. It's an aesthetic response, but the response to the character set and the notation, I think it's entirely valid. You see something like the circle overstruck with a stile and knowing that that means both rotate and reverse in APL, it's, something inside you just melts and goes wow. And if you use other languages as so many of us have to do, and you write things like reverse or you do a, you invoke an array method to plumb apart so you every time you do it and you know it's going to work, you just want to cry.

00:20:51 [CH]

Yeah, I think I've mentioned a couple times on this podcast and and others that I haven't actually, even knowing the meaning of the glyphs for months when using them, and then every once in a while, I will stumble across some blog that you know, just nonchalantly mentions oh, and if you you know, once you recognize that you know what stephen just Stephen Taylor just said about the reverse, you know that it's reversible, it's it's like you almost fall off your chair, like I think I've said that you know, for a long time I thought tally was a really bad sort of glyph until you realize that it was a composition of, you know the equal underbars and slash [18] . And it was if you rotate it 90 degrees, it sort of looks like you're keeping track and as soon as you realize these things like there's so many, I'm not sure if we have like a a link to a collection of all the different you know stories or meanings you know the the the the spool of thread with ravel [19] and the power you know from Roger, whose favorite one of the log like, there's so much of this stuff. And I mean, I feel like we have the exact same or not the exact same comment, but our last guest, Vanessa McHale, who's a J, primarily Haskell and J programmer, was mentioning that you know the the ability to express yourself so succinctly is a part of the power of the language, and so it's the spelling being one or two characters for each of these operations, and I think I even commented that like I feel like that's it's like you shouldn't say that as one of the top things but really it it it sounds trivial, but it is actually extremely important and completely changes the way that we use these languages, and that we think about solving these problems in these languages.

00:22:29 [SA]

Oh yeah, the the combination of of the interactivity, the the UM, what's the word? The the, the the the UM, the the way, the, well, the fact that a A sequence of operations can express a single thought, and we only always mentioned that about APL. You're not breaking breaking a thought up into multiple lines because the syntax forces you to do that, uhm, so you can write, and of course this is a feature that is sometimes overused, often overused, especially by beginners who are impressed with the fact that you can write 200 characters in a row and it process along the way and give you the result you're looking for at the end, uhm, but that feature what, what, what do we call that the the the idea that that you can express a a single thought in a single syntactic object? I don't know what that...

00:23:39 [AB]

Concatenative programming..?

00:23:42 [SA]

I'm not sure I, I don't know. I don't know if there is a term for it. But, uh, all all of these features work together I think to make to make the language the language is so attractive. Uh, I think that, I think APL and J programmers are much more aware of this than K programmers the the, the the I think I think that there's there's a higher degree of sensitivity to these uh, features in in J and APL, then in K. But that's just an impression.

00:24:22 [CH]

Do you think those, do you think that's a there's a reason for that? Like I actually haven't fully learned the J, the beauty of J. And that the dot and the colon represent in sort of like 2 characters or two categories of different things, similar to how in APL, like you know, the double dot each when that's sort of composed with some other operation. It typically means an operator or something like that. This is it because of that, like I, I don't know enough about K to know like if that's something that K doesn't do as much. Or what gives you the impression that sort of J and APL programmers like.

00:24:54 [SA]

I think J programmers uh are required to have a more systematic understanding of the the structure of the language and the different categories, as you say, in order to be good at it. K programmers can hack. Pretty, you know our our I I'm not i'm not suggesting that that we do, but we can, so it isn't really necessary to to understand the the, yeah, I'm not I'm not actually sure, uh, it's just an impression I have 'cause I don't, I don't write J. I don't speak J. And it's been years since I've done any APL.

00:25:38 [BT]

So do you think it might be because J, and to some extent APL as well, i'm not sure how much K has, the things like forks or trains or those kind of things where you're actually thinking about combinators, is it, is it more linear than than J.

00:25:52 [SA]

Well, there's a limited number of of adverbs in in K, right? There's only six: over, scan, prior, each, each right, and each left. And each right and each left are kind of dispensable. Uhm, although you wouldn't want to dispense with them, they're extremely useful, so you and you've only got 3 categories. You've got nouns, verbs, and adverbs. J has I'm I'm not even sure at this point how many other categories. It has all those conjunctions which we don't have in K and uh, and just uh, it's it's a larger lang, much larger language. Uhm, then K...

00:26:38 [AB]

So hold on, what do you call the category, in K, of, I don't know how to speak about them, dollar sign, question mark, at sign, and dot. They they're like, they're not adverbs, not verbs, not nouns, right?

00:26:53 [SA]

They're verbs. They're verbs. Yeah, they're verbs. They're verbs, but of course the the the, they are like, dot, for example, has a, there is a monadic dot, dyadic dot, and then there's a dot version of dot with three arguments and a version of dot with four arguments and I think there may even be 5, a 5th argument, but I can't remember. I never use it so. Uh, so are they verbs? You know, this, this is something Stephen you, you you you might want to address the the the the the distinction between a verb and a function. Uh, my my understanding is in the way I use it, uh, a verb is a a syntactic concept. Uh and function is semantic concept, so verbs represent uh, functions, but uh, there's a distinction, right? Is this, do you want to elaborate on this Stephen?

00:27:53 [ST]

Well, I do a little bit because one of the first things I got assigned to do when I was the Kx librarian was to clean up their terminology for that because a lot of people with much less experience than you were very confused about what it was. A little inquiry revealed that some of our most experienced Q programmers, not only couldn't give a definition of, plausible definition of what an adverb was in Q. They couldn't give it in English either. So, a metaphor, uh, an isomorphism, which I think had been had served Ken Iverson very well. And I've noticed that Canadians of a certain generation seem to be extremely well educated about English grammar. They know about concepts in English grammar that, although I'm a fluent speaker and writer of English, I don't know these terms. Uhm, I think the concept of the of the isomorphism of the noun verb adverb, which had been useful to that generation, was no longer no longer really helping anybody. So my bosses insistence we used, we turned the word operator for what people commonly call operators in programming languages. Function, now in talking about Q, refers to operators and lambdas and keywords. Anything that, anything that takes arguments. A verb, you know I never satisfied myself, uh, that everybody who is using those terms on previously we're using them the same way.

00:29:44 [SA]

I've nothing really to add to that, except it's always seemed pretty obvious to me that noun, verb and adverb as they are syntactic concepts. So A+B as an expression has two nouns and a verb uhm, but the, the the so actually in K this actually makes it, I think, more clear. I don't know if there's anything parallel to this in APL or J, but in K, if you want to pass, if you want to capture plus you want to assign a name to it to the to you, you can say "a gets plus". Uh, or you can say "a gets paren plus paren" and that nominalizes the verb, turns it into, it turns into a function. You know if you look at the type of paren plus paren, in K3 [20] , it's 7, which is, I'm sorry, it's yeah it's 7 which is the type of a lambda as well. So the the and in in in Q I think you can, even in Q, yes you can. You can capture, k4 [21] , you can capture, uh, you can nominalize adverbs as well, right? Uhm paren slash paren. Is a is a is a, my I don't know. What the type I can't remember what the type system is in Q. But, uh, so it it seems pretty clear uhm, I I don't think there's a, uh, a lot of confusion about that. Uh, whether people will will pick it up and and and use that distinction is a different question.

00:31:33 [ST]

It brings me to a question i've been wanting to ask you for some time. You before when we were talking before we started recording, you mentioned Raymond Smullyan's work. And he's a notorious Taoist as well as mathematician. I converted as a young man to Buddhism, I was raised Congregationalist for that, but in between I was a humanist for a while, so I've sometimes describe myself as a lapsed atheist, and you know, I think from what you're telling us, that it would be fair to describe you as a lapsed Q programmer?

00:32:13 [SA]

Ha ha ha. That's true.

00:32:16 [ST]

Although I'm back on to K and that makes you a member of a very small community of people who know both languages, I don't count myself among them. The the official position on K4 is that it's an implementation language. It's not documented, it's not supported. We don't encourage people to use it, so personally I don't have much experience and I'm wondering if what you could tell us about what you see of the relationship between the two languages.

00:32:47 [SA]

Oh, I only have room in my head for one language at a time, so actually a couple of couple of months ago I tried to implement a uh tableau system I was talking about this earlier Tableau system in in Q and I just kept I kept I, things just kept falling over and I realized that it would, and of course that my APL skills are incredibly rough, you know, I you know, i'm always amazed at people who are capable of keeping more than one language in their head at at the same time and being fluent in more than one language. Maybe some of you are. It sounds like Conor and, you're a, you know poly, polyglot. Very impressive. I don't know how you do it. Uh, so let's see, UM, well, well Q uh, and I was a Q programmer for six or seven years when I was at Millennium Partners hedge fund and we used Q extensively. We didn't use K4 at all, although you could. You could. You could obviously exit into K4. The decision at Millennium was we were going to use Q and it's a good decision. Uh, so, what's the difference? K3 obviously lacks some really wonderful ideas that only. Appeared first in K4. Table datatypes, transparent dictionaries. You know they could add dictionaries together in K3. Let's point that in K3 there are ints, floats, symbols, characters. OK, good UM there are lambdas. Uhm, there are dictionaries, but dictionaries are atomic. You can bang a dictionary to get its domain. You can come, you can get its value. Uh, by saying dictionary bracket bracket uh so you can take a dictionary apart, operate on it, put it back together which is sort of like enclosed disclose in in APL and and, we you know, k, programmers for years said, oh, you know, take take it for granted that you could do that and that. That's the way you had to deal with dictionaries. The atomicity of dictionaries was taken for granted, so in K4, when dictionaries became permeable, and, uh, and and it was, wow, this is this is fantastic. This is tremendously liberating, and it is, it's a wonderful idea. The idea that you could, uhm, flip a dictionary, uh, to to is that right? You can do that, right? Flip of a dictionary gives you a table, right?

00:35:49 [ST]

The values in the dictionary have to be same-length vectors..

00:35:54 [SA]

So that was wonderful. It's a wonderful idea that you could do that. And and in the fluent, the fluidity of of programming. The flow is a concept that I was looking for, but, or that program flow? Uh, yeah, yeah I people talk about this all the time. Uhm, how how programmers will enter a kind of mental space where ideas just flow, and Arthur talks about it a lot. So these so so these features certainly come contributed to increased flow, as does the table dictionary that you're going to distinguish a dictionary of vectors or dictionary of lists from a table. Uhm and and that was that, that was. And of course the fact that tables are lists, not not not not, not dictionary. So really, and so from my point of view, the, Q, K, K4 rationalized a whole set of ideas. I never saw them as as limiting in K3. Because of course when you work in a programming language, it's a kind of a, you know it's the it's the the the you become early, some of us, you become ideologically blinded and and you you know the limits of the language are the limits of the of our world. To quote, to quote the greatest programmer of the 20th century, yeah, yeah, OK so. Uh the so. So it was a revelation to to encounter Q after years of working in K3. I'm trying to remember if this was a that was a conversation that I had when Arthur was in was developing Q. I think it was Q. Yeah it was. Q UM he was living in Florida and I went to visit for a while and we had a conversation on the beach where we were talking about, talking about uh dictionaries as mappings as maps. So mapping you know a domain of, I think in, k4 he only allows symbols right? He can't, you can't use anything but symbols for dictionaries. Am I right, Stephen?

00:38:15 [ST]

That you can use anything as the key, but it's it's most common to use symbols.

00:38:19 [SA]

Oh is it? Is it generalized? I can't, I can't remember. Uhm, so yeah that that so so I think K4, Q uh represents uh a significant significant conceptual and practical, uh evolution from K3, nevertheless. Nevertheless, I think there are some rough edges in in in Q and some of them have to do with the q dialect and some of them I think are intrinsic to K4. But I don't remember what they are. And K3 K3 is smaller, tighter, more regular language I believe, so the limitations say I think once once you remove the the the limitations on a on a concept you're obligated, you incur an obligation to to to have that feature, uh, generalized completely generalized if there were arbitrary limitations. If you've got some, I mean I'm being I'm being very schematic here, but if you introduce some feature and you don't and and but and you have what, but there's a footnote, you can't do this and you can't do that, you can't do this, right? Then you think, whoa, wait, wait a minute, you know, wait a minute, did you haven't thought this all the way through? So it may be really useful, but you gotta learn the limitations, which is why "Q for mortals" is "this thick" and Don Orth's K3 reference manual is "this thick".

00:40:20 [CH]

For for our listener who can't see the the width between the fingers, the the "Q for mortals" is about five times as thick, it seems like, from what I can tell by the finger lengths that it's a lot longer.

00:40:32 [SA]

It's a lot longer. Well, yeah it it it. It has to be. It has to be. There's just there's just a lot, it's a much bigger language. I I I couldn't I look, the the the two most frequented, most dog-eared sections in my copy of "Q for mortals" [22] are the page on types and the page on the functional forms for the various kdb. Uhm, operators like select and so forth, so those are really dog-eared because I can't remember that stuff. And yeah, I think that's another important point that I'm sure have you all seen the K3 reference card? The little accordion card that that that we developed at UBS. Yes, Steven is going to go grab it right now, so the entire language you know can be put on this little tiny reference card and it is complete. There's nothing missing. Yeah, there it is. So, so I mean, K programmers don't, frequently, they just they don't consult any reference material. You know, reference manual, user manual. You learn the language, it's small enough, you get it all into your head and you use it, and I think that's great and I think that's also true for a lot of Q programmers,- was that OSU? It's the K3 reference manual.

00:41:57 [CH]

Yeah, K language summary, which fits on what looks just sort of slightly slightly bigger than an index card.

00:42:04 [SA]

Now I think in in subsequent versions of the language like K9, arthur has taken K3 as his model and not K4. Uh, and and yet the K9 is more general. Uh, then, then then the last iteration I've seen of K9, which is several months ago. A more general than than K4. So anyway, so that so I I don't. I guess when we're done with this discussion, I'm sure I'll think of like, eight different other things that have to do with the differences between the variants, flavors of K. And those are the ones that that strike me. And of course, K let me, k4 is a much more, UM, k4, a lot of it has to do with the applications that people are writing. Uhm, we, at Millennium Partners, we did not use K4, Q as a database language, we didn't use we we we wrote a uh in a distributed P&L system that was the primary application. Uh, and the data was, it was not in, you know it, it didn't use the, uh, I can't even remember the the tools that people use in in kdb+, hdb, and so forth. We didn't didn't have anything to do with that. So and we had a GUI, uh, for for for, for this for this application. So, but that was really an idiosyncratic use of kdb+ RFQ. I think I don't know. I don't know what the Stephen you're in a much better position than I am to to talk about the the space, the application space for K4.

00:44:27 [ST]

Well, I think it's very much undervalued as a general purpose programming language. Some some of the reasons for that are obvious. It's proprietary, you can't, you can't just download it and use it for free. It's a general thing that you know there are free versions of it around. Uh, most people who would encounter it, would encounter it in Fintech, large data applications. So there's this huge skew in the application, in the application space. But this morning I was writing Q to clean up metadata on my Apple music. Part of a part of an exercise to demonstrate this is of a really excellent language for hacking.

00:45:12 [SA]

So as a K programmer I mean, my, uh, I think one of the one of the most dumb, beautiful uses of an array language is a John Scholes game of life video on YouTube [23] . Uh, and uh, I I can't tell you how many times I've watched it and I watch it for, you know, I just find it incredibly pleasurable to watch it. It's to me, it's the it's the most perfect example of the use of array language. Uh, uh, language to solve a problem. It's like a it's like a short story. You know, it's like touch, there, we agree, and the the the his work as the dynamic functionista, which is again in an area that greatly interests me, which is a combinator theory. Uh is uh is miraculous and and and I I I did my best to implement a to implement a functional programming language which which which compiles into uh, a into into into Curry combinators. And then I looked at his work. And I said OK either or both of the following is true. John Scholes is much smarter than I am. And APL is much more expressive than K. So that was my impression. I still believe both of those propositions. Uh, so are you, are you guys familiar with this this this, this work? Have you looked at it? It's magnificent, it's magnificent. It's just so wonderful the the I I haven't looked at it now in a couple of years I I don't know where it is on the dyalog web website uh, he was working at this was when he was the dynamic functionista, is this, does this ring a bell for anybody?

00:47:25 [AB]

Yeah, I mean, we'll include a link to it. It's there's a whole article on the APL wiki about that video.

00:47:34 [SA]

It's not just the game of life video, but the the, the, the, the code that John wrote on on Y combinator, functional languages, and combinators. So magnificent.

00:47:50 [AB]

Well, there's lots of things. And then there's the dfns website.

00:47:54 [CH]

Yeah, because yeah I will have to, I will have to track this down, uhm, because I have not stumbled across this yet and I actually like my, i'd say 100 percent. 80% of my like free time. I've spent over the last, you know, two months to six months tracking down like the the history and lineages of combinators. And I think it's probably one of the least well acknowledged, although it's clearly I had no clue that John Scholes was doing this, so he's clearly done some work, and you said yourself, you tried to write a functional language that compiled down to the Curry combinators, which is both of Miranda, SASL, and KRC are 3 different languages that do that, that, those are all David Turner languages.

00:48:44 [SA]

Yes, exactly. And and and. You know, I I this is not. This is not a an area of special expertise for me, it was a you know are are you are you you guys, must be familiar with with this. That if you want to learn something in that's in any way related to sorry, they're always looking for opportunities to learn by by coding. So some people learn differently. They learn very abstractly. Uh, and and I'm not one of those people. Uh, and I I learned by well, that's the NSL, as kind of a record of things that I wanted to understand better, so I implemented them. And I'm not sure it didn't create it did increase my understanding all that much, although it was very satisfying to do the implementation and so calm. Uh, yeah, for, uh, I actually, first, uh I first learned something about Curry combinators from a talk that Raymond Smullyan gave at a colloquium at Princeton, when I was a student, in which he talked about, you know his I, I mean probably familiar with the his, uh analogy, the mockingbird yes, exactly his birds and uh, combinator birds? Just, you know, just quintessentially small, yeah this is not playful and very profound way of understanding things.

00:50:34 [CH]

Yeah no, I think I think. Yeah, it's it's a shame. In one sense that Iverson, 'cause they Iverson, and Eugene McDonald, published a paper in 1989 called Phrasal forms. And that is basically the only literature that I can find that

00:50:48 [SA]

well, look at this.

00:50:55 [CH]

Links combinatory logic and the Curry combinators to array languages. Because, because from there Iverson goes on to basically rebrand combinators as trains, and he calls the S Combinator, the hook, and the Phi Combinator the fork. And then since then, it's sort of the relationship between array languages and combinatory logic has been basically the link is implicitly there, but just not acknowledged, and it's I think that at least APL and J, I can't speak as much to to K and Q 'cause I haven't spent enough time with the languages. But those are, I think there are the best languages in the world for doing combinator programming. I don't think there's a programming language out there, there're other programming languages that compile down to combinators, but in terms of languages that actually have support in the forms of functions or glyphs or what have you. I think like array languages should be rebranded like Modern Combinator array languages, because they have such good support for it. So yeah, I'm we're going to have to go, and I I know that Adám has just linked something [24] to to track down this work in writing by John Scholes, 'cause I know that he was definitely involved in adding some of the combinators to Dyalog APL in the last, you know two decades or so when they started adding them, but I'm not sure Adám if you have more info.

00:52:24 [AB]

He was interesting enough, Dyalog is the only APL that with long history that has had the jot as a a proper operator. So that's a that's a combinator and the I wouldn't surprise, I'd be surprised if it was John Scholes who had that I pushed for that to be part of the core language right from the beginning and that combinator allows you to express uh, most things?

00:52:59 [SA]

How does it work? Yeah, yeah.

00:53:02 [AB]

But that's the one that that. It's like, well, there's two different things, right? If you give it, the if the derived functions or F jot G is monadic, then it's just I i think it's the combinator just to apply one after another, and if it's a dyadic function, then it's it's the left function F and that's dyadic, but with the right argument, preprocessed by the monadic application of the right function so uhm.

00:53:42 [SA]

Is it? Is it used in your experience? Do people exploit this combinator in in their code or is it uh, relatively esoteric.

00:53:54 [AB]

Uhm, yes or no, I think. It's it's. It's not well understood where exactly how, how important it is. I think that's that's the problem. I think people use it for some simplistic things and then don't realize how it's fundamental to combinatory logic. So it's a D Combinator. When it's the, it's the dyadic one. And the fact that you can express things just by composing more and more using this using D combinator. Yeah, it might not look pretty in the end. But using the D combinator, so this this and it was originally in in in Dyalog APL. It was just called compose. Not a specific type of compose, and it was recently renamed because we're adding so many others, yeah, combinatorial operators. It's got function composition operators and then it renamed, but it was just called compose because you can build up every type of composition from this.

00:55:01 [SA]

Uh, I need to take a look at this.

00:55:04 [AB]

At least at least a monadic thing.

00:55:06 [SA]

You know you you thought occurred to me as you were talking uhm, this is specially true, I think for our array languages you have some operator that appears kind of mysterious. And, uh are you drawn to finding uses for it in order to find out exactly what it does and what its limits are and how you can?

00:55:31 [AB]

I think it goes both ways. I mean with as I mentioned that I think it's it's often misunderstood. I think people have kind of simplistic need and then they for this particular operator they'll try to use it and then it works in some cases. In other cases, they just burned themselves and like this didn't do what I expect it to go to something else or write it as explicit code, not in tacit. And it took for me personally a very long time before I realized, oh, that's what it does. Just it's the same as the left function. But it preprocesses the right the right argument with some other function, which, which means that together with the with other operator that's in in many modern APL's, commute or or swap, it swaps the arguments around being that it can preprocess the right argument and you can swap arguments around. That means you can also preprocess left one. You just need to swap it over to the right, preprocess, and you can swap it back again. Yeah, yeah. And so by swapping and swapping swapping you can move things in and out and select parts of an argument and swap around and apply things and you can build everything up for that. Once I realize that that's all it does, it's just "preprocess right". That's a long name for it. Good. Then I started seeing patterns where we'd use it. It's not that I would that I looked at the documentation and said, oh that's what it does and let me, I need to understand and then then I would try using it. I need to understand. What is the concept? The thought concept right is its notation for for thought. That when I have that pattern in my, then, and oh then I can, then I have that in my in my vocabulary and go say oh, this is exactly what I need and now I've started using it. It took years.

00:57:16 [SA]

Yeah, it's fascinating, Stephen are you are you? When I listen to to Adám talk so blithely about a commute operator. You know the the the K in limiting itself to single character operators forecloses on the possibility of of having an expansion of primitives there that you can't you know you cannot fit anymore primitive operations into this very limited space, uhm, very limited syntactic space, UM, and so I I would love a commute operator, but there's no room for it in K. And there's no room for the kind of combinators that you describe, so K, especially K3, is much smaller language with well defined limits.

00:58:21 [AB]

Uhm, well, you couldn't write a commute operator right earlier APLs and and so many APLs don't have a commute operator. You can write it yourself. I I often find it limiting in in when I have a look at K, it's rare, i'm definitely not an expert or even like less than a newbie. And is I can't define my own inline function, verbs and it can't-

00:58:45 [SA]

really? Oh, I see what you mean. You mean write them infix?

00:58:50 [AB]

And similarly I can't really write something that behaves like an adverb. Yeah, I can write a function that takes multiple arguments, of which some of them might be functions, and I can write a formula in there. But in the, in my opinion or my, my mind is so limited in its at in inability to remember where I'm holding that when I need to put brackets around the arguments and jump back and forth and things aren't right next to each other then I can't keep tracking it anymore, it's it's I I people know me for hating parenthesis.

00:59:16 [SA]

That's right, that's right.

00:59:21 [AB]

Because I need to have a mental stack, whenever I see a parenthesis, I come from the right and now i'm that, I'm concatenating and that's opening parenthesis. I need to remember what is it I'm concatenating the right. I might evaluate something on the left before I can concatenate it. I just I can't handle that, and so and that I'm missing. So you can write a commute operator, right? It's easy to write in K, but they will.

00:59:41 [SA]

Well, yes yeah of course yes, of course it it it it is it's easy to write. But then as you point out your your your your, your coding you're not using the primitives. And I meant I meant that you know it's it's one of the advantages of having this kind of uh, space that that that that the APL character set and any variations that you know any kind of combinations of overstrikes can give you. It's a, uh, it's a lot of power. It's a, it's a it's a great deal of power.

01:00:22 [AB]

So that comes with great responsibility, right?

01:00:24 [SA]

Well, I I was trying to think about how to complete that, but it certainly imposes a it imposes a a uh, a demand on the programmer. Uhm, at least it would on me. To say I have to learn, I have to master at all. I have to learn this entire language in order to write good code. I would be terrified if I only understood a part of the language, I think. Am I really doing this the best way? This is the most efficient way to do it and and one rarely, I think rarely feels that way in K. It often feels that you've got the best possible solution or one that's closest to to to the best possible solution, here's here's an anecdote. I know you guys are not well, Stephen, you'll, as a K programmer you'll get this, uh, this happened pretty early on at UBS in the development of K. Arthur, who was in the next office came came running into my office and he said, look what I found. And he found that you could define a lambda that consisted only of X Y Z X, where X, Y, and Z, were the default arguments to the function. So it was a triadic function. And X Y Z X over turned out to be a way to write a converging selection on a table. And at the same time, multicolumn sorting on a table. So there's this function, X Y Z X, and it does these two completely, or it seemed apparently totally different things. And I think that's one of the one of the the the beauties of K at any rate, that uh, that very short and simple, uh, functions or expressions, i'm sorry I'm not expressing this well. One hopes that one will discover some unexpected, uh, some unexpected piece of, some unexpected property of of the language? Uh, that that some very small bit of code will do something entirely unexpected, but interesting and useful. Uh, and I think. That that that's. One thing the other thing, and I've I've speculated about this, and I don't, uh, I don't again, I don't know exactly how to express it. But, uh if you consider uhm, I'll speak very loosely if you consider all of the short syntactically valid sequences in any of these Iverson languages, code sequences sequences of length 1, 2, 3, 4, 5, 6, 7. Consider all the syntactically valid sequences. How much is it that that I I would expect that to be a very dense, a very dense, in that you'd find a lot of really useful and interesting functions in in that set, uh, supplied with correct arguments, of course, and I've often wondered how much was there waiting to be discovered that you know that we don't, you know we wouldn't, we wouldn't anticipate we wouldn't say, oh, you know these five characters, given these arguments, will do this function that up till now I've been, you know, writing much, you know, having much writing a lot more code to do, so that's, that's a of interest to

01:04:42 [AB]

me, but my father told me that the early on in APL days, conferences and other APL events, or or maybe it was even in in various newsletters, they would explore this the the dot operator in APL, the inner product [25] and and say like there are all these static functions in there. Then this you combine 2, the two of them with the dot operator. What does this do?

01:05:09 [SA]

That's it, yes, exactly exactly exactly.

01:05:15 [CH]

Bob, were you gonna say something?

01:05:15 [BT]

Well, I was going to say that I think sometimes the magic happens when you get something like that in the language and it's actually not just something that you didn't know the language could do, but it illuminates the way something else works. So when you didn't think two things were related, suddenly you realize they are related. And now you have a whole different viewpoint of what you're doing with it, and and it's the language that's introduced that kind of a a dual view of it. And and to me, whenever that happens, that's like a put my pencil down and go for a walk and come back again because it's just, whoa too much.

01:05:54 [SA]

So perhaps perhaps the the highly discredited Sapir Whorf hypothesis, which doesn't apply to natural languages, applies to programming languages. In that it conditions the way we think and how we think. Well, maybe that is the yeah, that I think that's largely true.

01:06:13 [BT]

Yeah, I certainly find it true that I I do find my language limits my ability to come up with concepts, and I mean in the last couple of years, what I've worked on more is trying to work beyond a language, so I'm thinking more about things that are not expressible by language, and that's a very challenging but liberating thing to get into if you if you...

01:06:38 [SA]

Oh wait, now could you say that again? You're thinking about what trans linguistic concepts or trans linguistic ideas.

01:06:44 [BT]

Yeah, is it sort of more in the realm of meditation you start thinking about a tone because you can't express a tone with language. And you can focus on the tone and then you try and think about, well, how you're experiencing a tone without language and it starts to open up what language is actually limiting you to, because you're now thinking about something that can't be expressed in language.

01:07:16 [SA]

It reminded me a friend of mine, Aaron Siegel, who teaches philosophy at Hebrew University in Jerusalem, and this semester he has a a seminar on ineffability, which strikes me as something right up your alley. You know the the the territory of meaning that goes, that's inexpressible. And as a Taoist, I'm sure Stephen is conversant with this idea.

01:07:50 [AB]

But you aren't you saying that it's only not expressible in in our normal human languages, whereas you can express a tone that cannot be written and you can possibly express something in an array language that cannot otherwise be pronounced.

01:08:05 [SA]

A tone is a, are you are you but tone you mean a musical tone, Bob?

01:08:12 [BT]

Yeah, tone or frequency. I mean it doesn't have to be musical, it's it's something that would not normally be expressible. Like you express it how you how you experience it is you know you listen to a musical tone that's the experience of it. You don't describe it, usually in terms of language to experience it.

01:08:34 [SA]

And you know the and think of two composers, Scriabin and Messiaen, who who reported, you know, tones notes, having color or being colored? And and and I don't experience that. That's not, you know, the the mapping from one sensory domain to another, it's not...

01:09:06 [BT]

But you probably experienced it as a as a visual artist.

01:09:13 [SA]

The relationship between musical tones and colours?

01:09:16 [BT]

No, I'm thinking more in terms of when you when you were a visual artist, there were things that were beyond what you would be expressing with language because you were expressing visually. Yeah yeah.

01:09:27 [SA]

Oh sure. Oh yeah, yeah, yeah. Absolutely I didn't I didn't think of them as ideas or concepts. You know, not 'cause I find the idea of a of an inexpressible concept to be a contradiction in terms. Concepts are intrinsically linguistic or or at least capable of linguistic language expressions. Uhm concepts, but there are other non conceptual cognitive uh, entities. I guess you'd call them that that feelings, for example feeling isn't a concept and so that that's, but if it's, it's uh, if it's conceptual, it's it's expressible. I won't that's almost I I don't know what it would mean to have an inexpressible concept.

01:10:22 [BT]

But the game I usually play is on the boundaries of things, so it's you, I think you're right. I think if by the time you've got a concept you've got something that is expressible in language, but I I'd like to go to the edge of that and find out what.

01:10:35 [SA]

Yeah, it's it's.

01:10:37 [BT]

Yeah, I find it interesting. I'm not sure whether our listeners will.

01:10:40 [SA]

Well, that's interesting. It's very interesting I, I think it all goes quite beyond, although this is what array programmers think. Actually with Arthur Arthur.

01:10:53 [AB]

This is this is what array programming feels like.

01:10:55 [SA]

Yeah, so like Arthur Whitney used to say that our languages are so productive that that that that we we array programmers. Uh, have lots of time to waste on other things.

01:11:09 [ST]

This conversation has reminded me of an interview with a Swedish poet, Aase Berg, who at one point in the interview says forget about your readers? Forget about self expression. It sounds so much better in Swedish. [Speaking Swedish] poetry is research into the unfathomable.

01:11:36 [SA]

That's... I I like that. I like that.

01:11:44 [ST]

And it enables us to make connections in the way that we were talking about, where we hadn't seen connections before, and I guess that's why Shelley called poets the unacknowledged legislators of the world. So rea- this is really a stretch of reaching out for connections which may not exist, Stevan and I know you're a, at any rate for some time were very keen on Krav Maga and I'm wondering if there's anything in your experience of Krav Maga that you relate to programming in K.

01:12:22 [SA]

That only that that martial arts allows one to forget for a moment or more than a moment about programming and philosophy, and you know that's me as a very much an amateur. I mean just not as the worst student in my class, I will say I just forget about, you know, turn off the mind. Which is it's a good habit to get into, isn't it?

01:12:57 [ST]

Sounds like flow.

01:12:59 [SA]

It is a kind of flow. Oh, it's absolutely a kind of flow. I think sparring and grappling, which I was, grappling I was terrible at UHM, but that yes, definitely that's a it's all about flow. All about flow, so flow is good. We like flow. We like flow as programmers we like flow in all aspects of our lives. Whatever you know, it's a very general concept where things just you're just totally identified with the activity you're engaged in and you disappear. You disappear, there's only the activity. You are the activity. So it leads me to wonder whether there are, there's value in the opposite. Value in not achieving flow and I think there probably is. I think that is...

01:13:59 [BT]

I, I think there definitely is because I think that's where I think flow is when you're you've reached that state where you can, your practice is internalized, and it's you're just expressing as it comes out, but I think to get there you have to have broken it down and I think I think you have to get away from flow to break something down.

01:14:22 [SA]

This is a very good insight. I like this a lot and I think it does describe, it does describe exactly exactly, it's exactly right. Thank you, that's good.

01:14:34 [BT]

I fluked it.

01:14:40 [ST]

Well I like that. Yeah, teaching is the complement of flow. The obverse, yeah.

01:14:51 [SA]

And it involves struggle and failure. And, uh

01:14:57 [ST]

all right, yeah? 'cause we all know people who seem to be naturally good at one thing or another and as a consequence are utterly unable to teach to anyone else.

01:15:08 [SA]

That is, yes, yeah, I keep saying that, yes. I'm I like, this conversation is very good.

01:15:21 [CH]

Well, I'll say, 'cause we have flown by the hour mark and this has been, you mentioned I think it was a couple minutes ago, turning off the mind or something and this conversation has done the exact opposite of that. My mind is exploding right now.

01:15:42 [SA]

Ah well, I'm I'm. I'm so glad to have met. And of course I know Stephen. I'm so glad to have met the three of you. And, uh, I hope, uh, we can continue to to talk and engage and exchange ideas.

01:15:57 [CH]

Yeah you you will have to promise to come back on 'cause I feel like we haven't even really talked about all the different projects on the site, I mean. Uhm, you have a whole like longer than 30 years, but you know, starting from sort of when you met Arthur Whitney, I'm guessing that was sometime in the 80s.

01:16:12 [SA]

That's about right, yeah?

01:16:13 [CH]

And A+, but you have this journey from APL to A+ to K. Took you back to K or I'm not sure if yeah, no, that's right K3 and so yeah, you have a a very. I mean I think the array language path is is not as commonly traveled. It's a it's a seldom traveled path these days by sort of people picking up programming languages, but in in terms of those that have over the past, the last few decades you have a very very unique path and I'm not sure how many folks are able to tell stories about going to visit Arthur Whitney on the beach in Florida and and yeah, I'm very jealous. Uh, yeah, so you'll have to promise to come back 'cause I I still have a billion questions and I'm going to be going and and researching everything I can now about John Scholes and your your Curry combinator language.

01:17:02 [SA]

Love to.

01:17:02 [CH]

Is that just a a project or can that be found on your website as well or, ...

01:17:06 [SA]

Oh yeah, it's on my website. It's called SLACK [26] . Uh, it's it's. Steve's lazy combinator K. Is that right? Steve's Lazy Combinator K. Uh, and it's an implementation of, uh, I can't remember who, what the the the the there's lots of stuff in that domain. There's SLACK, there's a whole bunch of other stuff on combinators uh, and, uh yeah, so you'll find it all all there. And, uh, it's unfortunate in a way that it's all written in K3, although, uh, if you I have a K3 interpreter for Windows and one for Mac, if you're interested, you can uh, you can get that from me.

01:17:58 [CH]

Yeah, this sounds like, uh, I mean, I've been trying to simultaneously learn APL, J, and BQN, and K is just, it's been at the the edge, but now I guess I I have motivation to go and learn this as the 4th one. And I I have I have this is I don't think I've mentioned this before, but one of my goals over the next two years is to write a multi directional transpiler between all three dialects. I'm not sure how easy it would be for K, but the idea is that you write APL or BQN and it will simultaneously simultaneously like write the equivalent expression like, it'll be limited because obviously they're not isomorphic.

01:18:37 [SA]

That's an interesting idea. That's a really interesting idea.

01:18:39 [CH]

But like it would be, at least for me, an incredibly useful teaching tool that, like if you did it correctly and just start with a few small expressions, you could just write once in APL or BQN, and then what I might not actually be able to know how to write easily in J if I get the the Lego components correct. I can just write it in APL and then see the equivalent. And if I open source it, then you know a bunch of you know actual J experts and BQN experts could go and because it would probably just be some dictionary look up thing and so if there's nicer ways to do something in J that I'm naively converting from APL to J, you know Bob could come along and be like Oh no, actually, this is the idiomatic way. And it's like, uh? Kind of a pipe dream project, but the the point here being is that now K clearly has to be added because I I need to go.

01:19:29 [SA]

Uh, it's a. It's a it sounds like a very big project.

01:19:34 [CH]

Yeah it would be. I mean conversations like these, I don't usually say this on air because you know my employer might be listening, but like whenever I have these types of conversations, I always tell myself, you know, I should just go quit my job and just study for two years 'cause like clearly, like I'm wasting my time working when I should be learning. But you know, life life requires being able to pay for stuff. Well, we'll just yeah. We'll wrap things up by just saying. Once again, yeah, thank you so much Stevan Apter for coming on, this was like I said, yeah yeah, this is like a better than a Marvel movie and I love Marvel movies

01:20:08 [SA]

This is a great pleasure for me. Thank you. Thank you for for inviting me. I really enjoyed myself.

01:20:13 [CH]

Yeah, we look forward to having you back at some point in the future. And with that we will say happy array programming.

01:20:19 [All]

Happy array programming.