« first day (1247 days earlier)      last day (1400 days later) » 
00:00 - 20:0020:00 - 23:00

12:00 AM
well uh
 
@Bubbler You're absolutely right! Thanks a mill!!!
 
@AviF.S. In case you might run into a cycle so a simple -loop never ends, use traj.
 
@Bubbler Ah, thanks!
 
another question: what in your opinion is the most ridiculous-looking APL symbol?
 
Also, how do you access a cell in a (2+)D vector? This doesn't seem right: 3 2⊃↓m
Isn't there a way to pick without splitting?
 
12:03 AM
@AviF.S. (⊂3 2)⊃m
 
Also @Adám add to APLCart! 'Get/Find/Pick Cell` don't yield
 
Or ⊃3 2⌷m?
 
@Adám Thanks!
@Bubbler Oh my goodness, I better go to bed! Of course! 3 2⌷m works...
You don't even need the pick \facepalm
 
@AviF.S. Good point. Can you create a GitHub issue. I really need to → bed.
 
@AviF.S. In case m is nested, 3 2⌷m gives the enclosed cell. Must be fine for simple m.
 
12:06 AM
@Adám 'Course! I only stopped doing that because all of mine got rejected, haha!
@Bubbler Ah, good to know! Thanks!
@Adám Well materialise is already there, so not sure what to add... But adding more search terms would be phenomenal!
 
RGS
@all does anyone know how to search the chatroom for messages containing an image?
 
nope
 
@RGS Maybe this?
It doesn't search for all images, just the images uploaded directly to SE
 
RGS
@Bubbler clever, was able to find the image I was looking for
@Bubbler that was exactly what I wanted!
 
Nice :)
 
12:17 AM
[daydreaming about making a pixelized APL font] - what's the most "complicated" symbol?
that you've seen
 
@matt Probably out of the typical character set. NARS2000 uses some wild ones like and §.
 
hm how do i fit those into a 5x7 grid?
maybe idk
```
#####
# #
# # #
#####
# # #
# #
#####
```
well uh that worked
 
5×7 would be hard because @ and
and and probably
 
If you're interested in working with fonts, I've very recently been making an APL-alike called BQN with a different character set (see here) and would really appreciate some fonts that support it well. The symbols tend to be simpler, except it uses some double-struck characters like 𝕎.
 
@Bubbler
 
12:26 AM
@matt Options for multi-line code here under "Code".
 
ohhhh
@Marshall so what is this BQN?
 
@matt The idea is to clean up APL by fixing up irregular parts of the language and incorporating ideas like first-class functions and lexical scope that have become mainstream since APL was created (just yesterday, in 1966).
Definitely not a new idea, but BQN does take some new approaches.
 
like what? ("new approaches")
and why "BQN"?
 
@matt One of the bigger ones is to allow non-arrays in the language. APL makes everything an array, with scalars like 3 being 0-dimensional. This is valid, and works really well when arrays always contain basic data (characters or numbers). Then we would say every array has depth 1. But it doesn't work so well (IMO) when you allow arrays that contain arrays. I would say that if you want depths >1, you should also have depth 0, non-arrays.
 
alright
what does that have to do with fonts though?
 
12:35 AM
@matt I obtained "BQN" by moving each letter in "APL" forward by one in the alphabet. I'd come up with the backronym "Big Questions Notation" by the time I realized N doesn't come after L.
 
why did you skip M anyway
?
 
@matt It has a different character set than APL, which existing fonts (especially the monospace ones) don't usually support fully. So I'm putting in a request to remember BQN if you decide to make an APL font, basically.
@matt That's a question for my brain, not me.
 
just link me the list of characters and I'll see what I can do :)
 
@matt Condensed version at the bottom of this page. There will be at least a few additions later though.
 
think I'll start sometime on the weekends maybe...
 
 
6 hours later…
6:17 AM
@matt is very hard to fit into pixel fonts. Trust me, I spent many hours on that back in the '90s.
 
6:38 AM
@AviF.S. OK, added those, except "find" which is really not right for indexing-type things.
 
RGS
7:06 AM
@Adám do you have anything from those times?
 
@RGS It may be on a hard-drive I salvaged from my father's home when he died. I used to create my own DOS fonts. IIRC, characters had to fit into 16 rows and 8 columns, but the rightmost column was duplicated, so you couldn't really use it, and 7 pixels wide for things like W and æ and is tough.
 
RGS
@Adám yeah, I bet :/
 
 
3 hours later…
10:08 AM
OK, it looks like there's a bit of unfairness going on over in CGCC - my solution to the Dottie Number problem has been deleted as not meeting the spec, but the exact same algorithm in K is being allowed to stand.
 
@JeffZeitlin Most likely it's just that someone flagged yours for "not an answer", while they didn't notice the K one or weren't knowledgeable enough in K
Just live with it, it does happen sometimes.
 
@JeffZeitlin Yeah, the challenge spec is what's problematic here.
 
I specifically commented back when it was happening that if the APL solution was invalid, so should be the K solution as it was the same solution - and this is ... just being deleted after the discussion being back in March.
@Adám - Yes, and the only reason for the arbitrary precision requirement was supposedly to block it from languages that had the Dottie number "hard coded" (e.g., recognized and optimized, or as a constant in an intended-for-golfing language).
 
@JeffZeitlin If I had written the challenge, I'd have included "the code should in principle be able to compute the value to arbitrary exactness, given enough memory, time, and numerical precision."
 
@JeffZeitlin We have only one moderator atm (iirc) and flags are taking a couple months to resolve these days.
 
10:17 AM
Also, lots of the other solutions are invalid.
 
And many are already deleted, so it's literally a red zone...
 
@Adám - Yes, that's the right way to do so.
@Bubbler - I don't actually see that; I don't have enough rep in the stack for that.
 
@JeffZeitlin The requirement is 10k rep (iirc).
 
All I see is that mine is deleted, but the exact same solution in K without the commentary and explanation is still there.
 
10:22 AM
@JeffZeitlin Feel free to flag it as invalid.
 
@Adám - Nope. Since I commented on it, it'll be taken as a "revenge" flagging.
 
Ooh, I never noticed that this view allows seeing one's actual posts without going to individual pages. Nice.
 
@Adám - Someone who won't be perceived as having a 'vested interest' in my solution - perhaps like Bubbler (or even better, someone who doesn't golf in APL at all) - would get a better response to setting an invalid flag on it.
 
Or just leave it. Nobody will judge you negatively for having a deleted answer there. The OP is at fault.
 
@Adám - BTW, you'd awarded me a bounty on that one. Since it was taken away from me with the deletion of the answer, did you get it back?
 
10:31 AM
@JeffZeitlin No, that's probably just lost.
 
@Adám - That isn't right.
We can split hairs forever over whether my solution and the problem were handled correctly, but you shouldn't be penalized by someone's arbitrary decision that I'm wrong.
 
While you can raise that on meta.stackexchange.com, I'm not personally worried. Too much rep.
Ah man, I was wondering why the syntax highlighting showed errors all over. Turns out I'm trying to define a tradop inside a tradfn :-(
 
@Adám - Well, one can argue whether there's any such thing as "too much rep", but I get that you really mean "I have sufficiently high rep that I don't perceive it as being worth worrying about". I'm debating whether to bring it up on Meta.SE; I seem to recall that there has been discussion that implies that it's not going to change. Maybe after 16:00 when I come off-duty for the day, I'll do some digging; if I start now, I'll get distracted and be late for work...
 
Tutorial: How does one define a (local) tradfn in a tradfn or dfn?
goo←{
    r←goo x
    r←x x x
}
_←⎕FX 1↓¯1↓⎕NR'goo'
(I you want it local in a tradfn, don't forget to localise goo in the header.)
 
10:47 AM
I don't think the question would ever have occurred to me - because tradAPLs didn't actually allow it!
 
@JeffZeitlin Are you sure? Here I'm using a trick to be able to write the code over multiple lines without having to quote everything, but didn't old APL's allow dynamic ⎕FX using a local name?
 
As I recall, most older APLs didn't actually have ⎕FX
 
OK, that's older APLs :-)
 
Honestly, if the need had occurred to me, I'd probably have ended up doing something along the lines of 'inlining' the definition as a charvec, and then ⍎ing it.
 
@JeffZeitlin I need to call it many times, and I need control structs in it.
That said, control structs now work in 18.0's
 
10:54 AM
That would seem to be where namespacing comes into play...
 
Yeah, I could define it outside.
 
But that's also a recent thing, not available in the APLs that I learned on. :)
 
@JeffZeitlin Thanks, I'll do that.
 
Incidentally, while I'm thinking of it... If you haven't already, consider "fixing" the installer/deinstaller so that it gives me the option of leaving the fonts installed if I uninstall the rest of the package.
 
@JeffZeitlin Or maybe split the fonts into a separate optional part, like the IME.
 
10:58 AM
That could work, too.
 
@JeffZeitlin Can you email support@ about it?
 
I'll do that as soon as my mail server comes back up (got a call in to my domain hosting service about the outage already).
 
RGS
11:21 AM
Hey @Adám, how did the internship with Oli (it was Oli, right?) went? (or "is going")
 
@RGS No idea. @RichardPark is the handler for him. Ollie, I think.
 
RGS
@Adám at least I got the sound right :P Ok, I thought you were handling him as well.
 
@JeffZeitlin [saving you the cost of a postage stamp :-)] I doubt if we'll do that .. can you get the font from dyalog.com/apl-font-keyboard.htm instead .. it's the same that's in the release (I put both in place!)
 
@AndyS - That's not a problem for me; when I get around to installing 18, I'll be leaving 17 in place anyway. But I suggest leaving the fonts because they're available to more than just Dyalog once installed, and you don't really know if I've used them elsewhere (e.g., in a book or tutorial that I'm writing about APL). If I "know" I have them, it's not necessarily going to occur to me to go and download them separately.
Most packages that I've encountered previously don't deinstall their fonts unless there's a very proprietary and restrictive license that they obtained them under; in such cases, they often don't "install" them in the conventional way, so that they're not available outside the program.
 
11:37 AM
@JeffZeitlin Fair point, but on the other hand we like to tidy up after ourselves .. the font should only be uninstalled once you remove the last Dyalog version from your machine.
 
@AndyS - I like the attitude of "don't leave a mess"; the question becomes "Is leaving the fonts behind 'failing to tidy up'?". I contend that it's not. I could accept, as I suggested, making it optional - during the cleanup, ask if the fonts should be uninstalled.
 
 
1 hour later…
12:47 PM
@matt Welcome back. Up for more APL?
 
I guess so. :)
 
You know how they teach you to do multiplication before addition etc.?
 
... They didn’t.
 
Uh oh. Well, they probably tried.
 
RGS
@Adám ???
 
12:49 PM
Why is that bad?
 
@RGS ?
@matt Well, since APL adds so many additional infix (dyadic) functions, it'd be a mess trying to remember the precedence order of them all.
 
Makes sense.
 
TMN even has inconsistent and ambiguous rules, making it completely impossible to machine-evaluate without requiring parentheses.
 
Right.
 
APL takes the rule TMN uses for power towers (right-to-left) an applies it to all functions. No exceptions.
3² is 3*2 in APL, btw.
 
12:53 PM
Alright.
I see you guys were still discussing fonts and things above :)
 
Another way to look at it is with TMN's f(g(h(x))) where APL simply allows removing the parentheses: f g h x and clearly this moves from right to left.
 
RGS
@Adám who learns mult... AH! Adám, me and matt understood your message as "in school you were taught to do multiplication and then you were taught to do addition" but you meant the precedences, not the moments in time when we were taught those operations
 
@RGS I see, I should have explained that better.
 
OHHHHHH
 
The rule for all functions is that they look as far as they can to the right.
Only the end of the statement or a closing parenthesis will stop them.
 
12:57 PM
“As far as they can”?
 
Yeah, like 2×3+4 has × take everything on its right as right argument, i.e. 3+4 which is 7, so the whole thing gives 14.
On the left, they only take the immediately adjacent array (if any) as left argument. If what's to their left is a function or the beginning of the statement or the opening of a parenthesis, then they also stop.
 
I see.
 
So (2×3)+4 is 10 because × can't "see" beyond )
 
its like being in an opaque goldfish bowl. Not that I have a goldfish or anything...
:)
 
Yeah.
 
1:01 PM
suddenly wants to eat an apple WHAT HAVE YOU DONE TO ME
Shall we continue?
 
Sure, but consider installing (or using) this to make it easier for you to type APL characters.
Now let me tell you about a really fundamental APL function: monadic the index or integer generator:
      ⍳4
1 2 3 4
      ⍳10
1 2 3 4 5 6 7 8 9 10
 
... Safari is a real pain. It hates javascript:
 
Wait, didn't you say you were on a ChromeBook?
 
I was. Now I’m phoning.
 
Ah. I don't have a good solution for iPhones. Sorry. Copy and paste, I guess.
 
1:10 PM
From where?
 
Can you not type use the language bar on the page I linked to type APL characters, then copy them here?
 
facepalm
Tada! ⍳
Tada #2! ⍳10
 
Good. Now can you write an APL expression that computes the sum of the integers from 1 to 100?
(not 1+2+3+4…)
 
RGS
@Adám ooh ooh ooh! I can! xD
 
+←⍳100 ?
 
1:14 PM
@RGS Remember when you were at this level?
 
@Adám - I can name that tune in six characters :)
 
@Adám ⍎'1+2+3+4...'? ;D
 
@matt Almost. is assignment. You're looking for the symbol that applies + between the elements.
 
RGS
@Adám I do... copying and pasting characters from this wikipedia page
 
And is that just +⍳100 ?
 
1:16 PM
@JamesHeslip ⍎'100',∊'+',¨∘.,⍨⎕D
@matt No. We learned this yesterday: +/m was the sum, and ×/ was the product.
 
RIIIGHT
+/⍳100
 
@Adám damn. That's nifty.
 
@matt Very good.
@matt Can you figure out how to sum the first ten squares? I.e. 1²+2²+3²+…+10²?
 
Is it +/(⍳10)*2 ?
or no, take out the parentheses
 
No, you need the parentheses.
 
1:22 PM
I do?
 
Remember the "long right reach" rule
 
Ah, right
 
If you take out the parens, ⍳ takes as its argument 10*2
 
RIIIGHT
 
Very good!
 
1:23 PM
:)
Whats next, Professor? ;)
 
The sum of the first 100 even numbers, i.e. 2+4+6+…+200
 
Simple enough, that’s +/(⍳10)×2
 
Yes, but there's another way to do it, without the parens
Hint: Multiplication is commutative
 
@matt Yes, do what Jeff said.
 
1:27 PM
2×+/⍳100 ?
 
@Adám - Sorry; I shouldn't be stepping on your toes on this; I suspect there's a genetic predisposition in my family to teaching... :)
 
@JeffZeitlin No, you're helping. Keep it up.
@matt Sure, and that gives the right result, but it isn't really doing the same thing. I was thinking +/2×⍳100
 
@matt - consider the multiplication separate from the addition.
 
Do you understand why that works?
 
Perfectly.
 
1:29 PM
Given that multiplication is commutative, a×b is the same as b×a
 
:)
 
@matt Good, now do the sum of the odd numbers 1+3+5+…+199
 
+/(2×⍳100)-1 ?
 
@matt Yes, that's perfect.
 
That works; can you come up with one that doesn't use parentheses?
 
1:32 PM
One way to do what Jeff is asking is by noting that APL uses a high minus to indicate that a number is negative: ¯1
Try it!
 
Can’t think of anything
 
Adding a negative number is the same as subtracting the corresponding positive number.
 
What @Adám said
And addition is also commutative.
 
+/¯1+2×⍳100 ?
 
:)
Exactly!
 
1:36 PM
Very nice. That's what I'd write
 
:)
Can’t believe I’m learning APL at 6:37 am
 
(Which tells me you're on the Pacific coast of North America...)
 
Not ON the coast, just near it
 
Well, Pacific time zone.
 
Yep.
 
1:38 PM
OK, let's learn how to define your own functions.
 
Ooh fancy!
 
Do you know the Greek alphabet by any chance?
 
Most of it
 
The left-most letter is
The right-most letter is
 
Yep
 
1:40 PM
So we use these special names for the left and right arguments.
 
What if we need 3 arguments though?
 
How many arguments did you give to +/ ?
 
facepalm Still partially in the JS mindset I guess
 
No problem.
 
How do we name functions themselves?
 
1:42 PM
Now we can simply take an expression, replacing the right argumet with (and optionally for a left argument), and put it in curly braces:
{(+/⍵)÷⍵}
 
Makes sense.
 
We can name it just like we did with variables: Avg←{(+/⍵)÷≢⍵}
 
Alright.
 
However, just like the built-in functions, user-defined functions can appear inline: 10×{(+/⍵)÷⍵}3 1 4 1 5
 
Cool :)
 
1:45 PM
And again, all the rules for the built-ins apply to your functions too. Long right scope etc.
 
Right.
 
Now let me explain a little more about the /
 
Go ahead...
 
RGS
@matt (Adám's probably typing :) )
 
Actually I have to pop out again teleports out of apple orchard bye guys
 
RGS
1:48 PM
@matt bye ○/
 
?
 
Looks like a head with an arm waving above it
APL Emoji
 
RGS
@matt o/ is a person waving and o7 is a salute
take the "o" and replace it with an APL glyph, becomes ○/ :)
 
Ah of course.
 
@matt Ping me when you want to continue.
 
RGS
1:49 PM
(I introduced this one here :') ((I think)) )
 
@RGS No, my computer crashed.
 
Ahh that’s bad
\o/
 
I think it might have overheated due to the weather.
 
@RGS - Might be fun, just for the hell of it, to pass ○/ a vector V where ¯12≤V≤12 and see what results...
 
RGS
@Adám laptop or computer? you can always get one of those things to place your laptop on with fan(s)
 
1:52 PM
@JeffZeitlin What's the longest vector you can find that doesn't error?
 
RGS
      ○/ ¯12+⍳25
2.178676374J0.5298078998
(⎕IO←0)
 
      ○/1,⍨1E6⍴0
1
@RGS Yeah, I'll buy one right away.
 
@Adám - any vector where each element is 10 will not error.
 
RGS
@Adám I'm assuming you don't mean that is the longest vector you can find?
 
@RGS No. I'll need more RAM…
 
RGS
1:54 PM
      ○/1,⍨1E7⍴0
1
 
@RGS Nice!
 
There's a bug logged for ○/ in Dyalog.
 
      ○/1,⍨1E8⍴0
1
 
Only with decimal floats and I think only in debug mode though.
 
RGS
@Adám my computer just broke a sweat BUT
      ○/1,⍨1E9⍴0
1
 
1:56 PM
Darn.
 
RGS
And the fans are not turned on aha
@Adám are you running the E10 rn?
 
There's some special code for ⍟/ on a boolean vector in 18.0 but I don't think I hit ○/.
 
@RGS Yes.
 
RGS
@Adám I don't know if I want to risk running E11 though
 
Well, I get WS FULL for ○/1E9⍴10
 
1:59 PM
@RGS You'd need 12 GB ram.
 
Oh, I guess you can only evaluate ○/ quickly on booleans if there's at most a single 1, so there's not much point.
 
But that's gotta be a RAM limitation on this Surface
 
@RGS @Adám what are these curious E* things you are referring to?
 
RGS
@ab5tract 1E9 is scientific notation for 10*9
 
@ab5tract 2E3 is 2×10³
 
2:00 PM
What they said
 
RGS
@Adám increase and increase WS give me nothing
how can I make my ws bigger?
 
if it had been written 1E11 I think I would have grokked it. Thanks for the explanation
Should have read the actual snippets :)
 
RGS
@ab5tract sorry, I got lazy and dropped the first 1 :)
 
No worries, laziness is a virtue where I'm from ;)
 
@RGS Dyalog APL doesn't allow changing MAXWS on the fly :-(
 
RGS
2:02 PM
@Adám ah no problem
@Adám did it finish, though? I get WS FULL also with 1E10 so if you get this one to run, you win
 
@RGS Still running.
      ○/1,⍨1E10⍴0
1
 
RGS
@Adám well played Sir, well played.
 
RGS
2:20 PM
@all what is the point of prototypes? Why doesn't ⍬ just represent any empty vector?
 
@RGS Other than stuff like 3 3↑'' and 3 3↑⍬ I'm not sure
@RGS * 3 3↑⍪'' 3 3↑⍪⍬
 
RGS
@RichardPark (you can edit your messages a short time after you send them :) )
 
@RichardPark I enjoyed your latest video. I have to say that the number of crashes you get in your Dyalog while working on these problems does worry me
 
@ab5tract That's just RIDE (and possibly because it's in a VM). It's definitely a priority to sort out
 
Good to know :)
 
2:31 PM
@ab5tract was gonna plug it in today's webinar but too much content so saving for next time
 
RGS
@Adám "Language Features of Dyalog version 18.0 in Depth - Part 2" still shows in the "coming up" section
 
@RichardPark What's about that ^ ?
 
@RGS For me it shows the Array thinking pt 1
 
RGS
@ab5tract that's because you just clicked the link. scroll up on the right, see if there isn't one video hiding at the top :)
 
2:38 PM
@RGS well I'll be... :)
 
RGS
:)
 
@Adám uh oooh
my bad
@Adám I also can't fix it myself
 
@RichardPark Jason has to do it‽
 
@Adám I just rang him - on the case
@Adám Should be sorted now!
dyalog.tv
 
RGS
@RichardPark I confirm it is sorted ○7
 
2:50 PM
@RGS TY ○7
 
 
1 hour later…
RGS
3:55 PM
@Adám what did you mean with "I use them where APL has array comprehension"?
 
@RGS How do you write 10 20 30+1 in JS?
I'd do [10,20,30].map(x=>x+1)
 
RGS
ah so you are talking about scalar extension and things like that?
I see
but now suppose you are a newbie APLer
 
Yeah, thinking in terms of the whole array.
 
RGS
translate that JS into APL, pls
 
Sure, 10 20 30+¨1
 
RGS
3:57 PM
yeah
so the ¨ is kind of looping
 
(it'll still be fast, because ¨ knows that + understands arrays)
 
RGS
@Adám but that is just because you optimized it under the hood, not because it is really array-oriented
the only point I want to make is that imo, and I would argue the majority of programmers would think in a somewhat similar way, using things like .map() and .filter() and .reduce() is more in line with a functional style of programming, which is also something many people aren't very comfortable with
Functional programming comes (up to an extent) naturally to me but I can't take those skills and convert them right away into array-oriented programming skills :)
 
I also can't leave the concatenative programming behind, so I end up with things like:
d.replace(/[<>&'"]/g,x=>({'<':'&lt;','>':'&gt;','&':'&amp;',"'":'&apos;','"':'&quot;'}[x])).split(/\r?\n/g).splice(1).map(r=>r.split("\t"))
 
RGS
@Adám do you mean the repeated chaining?
 
Yeah. Here's an even more extreme one: with both map and filter:
ps=d.replace(/[<>&'"]/g,x=>({'<':'&lt;','>':'&gt;','&':'&amp;',"'":'&apos;','"':'&quot;'}[x])).split(/\r?\n/g).splice(1).map(r=>r.split("\t"))
    .filter(x=>-1===x[0].indexOf("dfns.") && ["Tacit", "Dfn"].includes(x[2]) && ["Monadic Function", "Dyadic Function"].includes(x[3]) && x[4]==="")
 
RGS
4:06 PM
@Adám heh
Now, I have nothing against that piece of code per se, just wouldn't chain everything like crazy. Probably would introduce one or two intermediate variables.
But functional programming really is a thing I enjoy. I think for a mathematician functional programming can be a really elegant programming paradigm
 
@RGS I guess 'compress' is somewhat semantically equivalent to a .select?
and .map is just function application
 
@ab5tract .select?
 
.select == .filter == .grep
every language designer has a preference :)
{ ⍵ × 10 } ⍳5
is the same as ^5.map: * × 10 in Raku
 
And how do you write 10×⍳5? ;-)
 
That said, I still have the same issues with not really feeling like my functional skills are coming in super handy while learning APL
maybe another idea for a wiki page, 'A Functional Programmer's Guide to Array Programming`
@Adám oh, now you've done it! ;)
 
4:31 PM
#!/usr/bin/env raku

sub prefix:<⍳>(Int $i) { 0...^$i } # we can write a multi sub to handle shapes later
sub infix:<××>(Int $a, *@b) { @b.map: $a × * }

say ⍳5;
say 10 ×× ⍳5;

# 06:29 longwalker@airbridges ~/c/raku ./rw
# $ raku aplish.raku
# (0 1 2 3 4)
# (0 10 20 30 40)
Note: I could have over-ridden × in the local scope but then I couldn't have used × in the body definition and this is one of my first Raku scripts since getting my toes wet into APL and developing muscle memory for the keyboard so I was too excited to use the Unicode variant of multiplication. Generally Raku code uses *
@Adám as requested, good sir ^^^
@Marshall while I am spamming the APL Orchard with Raku (our symbol is a butterfly, kind of fitting...)
I wanted to raise to your awareness the Native Form Grapheme approach that was developed/followed for Perl 6^W^WRaku to have sane semantics with variably formed UTF -* sequences that are actually equivalent at some desired level of equivalency / case folding\
Sorry, that's "Normal Form Grapheme": 6guts.wordpress.com/2015/04/12/…
Not sure whether any of it might apply to BQN but it's by far the sanest Unicode environment I've ever tooled around in. The approach is lossy in Raku but it is trivial to create a class which keeps the original sequence around when you care about the binary equivalence of a round tripped thing-a-ma-jig. Some might call it anti-social to just quit the types of games that other languages play with Unicode by not supporting this kind of roundtripping out of the box.
But I like to think of it as pushing forward
 
 
1 hour later…
5:54 PM
I hath returned!
 
6:15 PM
@RichardPark great APL webinar today! looking forward to future "APL thinking" talks. Curious for the Miota examples, how come you didn't show the simplest solution?

Miota ← {⊃,/⍳¨⍵}
 
6:40 PM
@ab5tract Nice, will keep this approach in mind. It's not applicable to BQN source because there are no combining characters (I wish there were non-combining versions of a lot of the diacritics though), but it sounds good for programming. I think BQN has to use code points as the basic character type so that character arrays can be random-access. However, it should be possible to make a performant NFG library since everything's compiled.
 
Great! I definitely imagined the BQN approach would be something like this, byte-oriented but with NFG as a "relatively easy" win for the user space experience when desired
it really does make a difference to not be thinking about all the underlying implementation details of the Unicode characters you are dealing with
@Marshall what is BQN's attitude towards Unicode characters in function names?
 
@ab5tract Absolutely not byte-oriented. Code points like Dyalog. It just won't do anything special for combining characters like Raku.
 
ah sorry, misunderstood
 
@ab5tract At the moment, ASCII only. Uppercase/lowercase is part of the language design and I don't want to have to worry about how that works in all sorts of languages now.
 
Totally fair :)
@Marshall Looking back, perhaps what I meant by "byte oriented" should have been written "byte-transparent", as I understand that the idea is that it will do no massaging of the characters on ingestion
But I admit, even thinking about thinking about character encodings for too long makes me start to sweat
Which is why I love having the high level sugar, obviously.
 
6:51 PM
It is an interesting idea though. 'á'≡'á' is kind of like 1j0≡0
 
@Adám Right, I also meant to bring it to your/Dyalog's attention as well :)
 
We are aware of these issues. We may very well extend ⎕C in the future to do even more normalisation than the basic one it can do now.
If you look at its documentation, you'll see that it only accepts the three left arguments ¯3 ¯1 1 which may seem random and spread out, but that's because we've reserved numbers for Unicode normalisation purposes.
 
@Adám The presentation on casing definitely let me know that you are all well aware. But Jonathan Worthington is an unsung hero in the language implementation space and so I just wanted to make sure to raise his specific work in this Normal Form Grapheme.
Lots of unsung heroes in the implementation game. I really had no idea about Arthur Whitney just a few short months ago.
 
I don't think we can ever have NFG scalars in the existing Dyalog APLs. It'd take a split like the Classic/Unicode one, and we're still suffering badly from then. Having an installed user-base and promising backwards compatibility is a huge responsibility.
 
7:11 PM
Ah, I can see what you mean there. Part of the reason Raku took so long / includes the kitchen sink and a house on top too is related to Larry's experience with those very issues.
Better to have important things like DateTime in core otherwise your core is going to depend on some third party DateTime, that kind of thing.
@Adám At any rate, I found the casing demo to contain impressive feats of Unicode processing. Congrats on being on the other side of all that work!
 
Hence ⎕DT now in 18.0
I'll tell Richard Smith. He's the one actually doing the grunt work with all this Unicode and date-time stuff.
@ab5tract One way to look at it is that we've just chosen to do pre-releases for the last 58 years, and now we're almost ready to release. I think 20.0 will be it, basically.
 
@Adám I noticed the recurring joke by John Scholes about how he had been working on a single program for five decades and it being "nearly finished" in YouTube videos :)
That's also quite similar to Larry and Perl 6. Just cook it until it's ready, even if it takes a few decades! Still, Dyalog clearly has Raku beat here :D
Both in terms of installations and oven time
 
7:59 PM
@ngn but if i did, transforming to BQN would'be been ever so slightly more difficult :p
 
00:00 - 20:0020:00 - 23:00

« first day (1247 days earlier)      last day (1400 days later) »