« first day (1502 days earlier)      last day (1142 days later) » 

11:00 PM
(+/2/⊢)¨⟨2 3⟩
huehue
look, I'm down for , over 1‿2‿3‿4
 
also, ⟨-⟜1 ⋄ +⟜1⟩ for an array of decrement and increment. ⟨-⟜1 +⟜1⟩ is ambiguous - it could be both a single-item vector of an atop, or a 2-element vector
 
or how about a mixture ⟨1 2 3, 4 + 5, 6 + 7, 8 9 10 11⟩
yielding : ⟨1 2 3 9 13 8 9 10 11⟩
 
also, 2⊸×⍟6 1 for "multiply 1 by 2, 6 times" wouldn't work if 6 1 was an array
 
I genuinely don't know, so I'm asking. Are there drawbacks to strand notation if it is only legal within delimiters?
 
@nathanrogers as i said, it becomes ambiguous whether something is strand notation or something else
 
11:04 PM
I would prefer 2 characters, to double - 1 the length of the array
 
@nathanrogers I can't make sense of this question. Explicit stranding with still has the problem that you can't strand one item, but it's easy to tell visually whether something is a strand because is visually distinctive. Implicit stranding, with no marker, is hard to see.
 
its all the extra input I don't like, and why not a simple token like something easy to input say ,
 
@nathanrogers I think that version would lead to a very complicated spec just to avoid a few commas.
 
right, commas
 
@nathanrogers ( being a tiny bit harder to type is preferable imo - means less people will use it :D)
 
11:06 PM
:/
 
@nathanrogers Once you are used to the keyboard backslash-space is hardly an imposition to type.
 
ngn
@dzaima wait, you don't want people to use it?
 
yesterday, by dzaima
@ngn I'm not exactly a fan of -notation, but the alternatives aren't good (always using ⟨⟩-or-whatever-notation is a lot of overhead, and k-style array tokens and APL strands both make for weird syntactic things)
 
Note also that you can get a list of single-digit numbers with "20350233"-'0'.
 
I'm all down for an optional delimeter
when you must be explicit, but I don't know why it has to be mandatory
 
11:09 PM
@nathanrogers Because if it isn't, then +⟜2 4 is ambiguous.
 
@nathanrogers because parsing (both for the compiler and human readers) gets really complicated and wonky when you have such strange ambiguity
 
6 mins ago, by nathan rogers
or how about a mixture ⟨1 2 3, 4 + 5, 6 + 7, 8 9 10 11⟩
I don't think something like this is ambiguous
 
@nathanrogers that isn't. But other things still are
 
@nathanrogers Lists can, and often do, contain functions and modifiers.
 
@dzaima and it's really hard to define stranding as something that happens if and only if it otherwise would be an error. It'd be literally a "try catch" in the spec, and incredibly hard to read
in your model, what would +⟜2 4 be? How about ⟨+⟜2 4⟩?
 
11:13 PM
why not have arguments bind to composition more tightly than to the stranding?
 
@nathanrogers Using it with the rank and depth modifiers was one of the main reasons to add stranding.
 
from left to right
4 → token1
2 → token2
⟜ → composition token
bind with curren_token - 1
previous tokens are strand
if you're trying to bind an array you just do +⟜⟨2 4⟩
 
@Marshall (to clarify, that's talking about f⎉a‿b where you want a‿b to be the operand)
 
idk f⟨a b⟩
is still nicer in my eyes
 
@nathanrogers your notation never made things shorter, and now even makes things longer!
 
11:17 PM
by a single charactar
oof
 
@nathanrogers two actually
 
This is a horrible horrible form of bikeshedding. You are suggesting all sorts of ways to damage the integrity of the language in order to fix some trivial aesthetic issue that you would get used to very quickly if you actually used it.
 
@dzaima which is a 66% increase here. That's not particularly good, especially for which should really be short
 
I'm not an implementor, so I genuinely don't know
I'm asking "why not x"
Not saying "you should do x"
thought I do love bikes
and sheds
or rather "what is the justification for x over y"
 
@nathanrogers and we're answering: 1) it's horrible to parse; 2) it's very ambiguous; 3) it's pointless; 4) it only makes code longer; 5) it's harder to read
 
11:20 PM
because I'm curious to use the language and want to understand it
What is the pitch for BQN over some K / APL or J
 
@nathanrogers has rank; statically parseable; is readable
 
ngn
@dzaima now you have to explain how k is not those
 
I think each point corresponded to K, APL, and J separately
 
(inb4 ngn "but k has rank, it's just depth")
 
I guess statically parseable is a big win against all of APL/J/K
 
11:23 PM
K is statically parseable
 
@Bubbler k is statically parseable
 
@nathanrogers The guiding principle in designing BQN syntax has always been consistency. There shouldn't be special cases, and parallel concepts should have parallel syntax. In practice I find BQN takes far less mental overhead to write than APL or J, even though its syntax tends to be more powerful (list literals and function headers for example).
 
@dzaima (man my 1-2s delay with matrix bridge isn't doing me favors)
 
@dzaima Oh. TIL
 
@dzaima it's the only way I can compete with you
 
11:25 PM
Got to go.
 
@dzaima is APL not those things?
 
@rak1507 don't you make me write a direct interface to SE for my client
@nathanrogers APL isn't statically parseable; the other two were about the other 2 languages
 
@dzaima I'll have to practice my typing speed
 
what does "statically parsable" mean?
 
@nathanrogers you can't build an AST for 1(⍎(?2)⊃'+3')4
 
11:26 PM
@Marshall I do wish the syntax was consistent in APL
@dzaima why not
 
@dzaima I think you're missing a ⍎
 
@nathanrogers depending on random chance, that may be 1 + 4, function application, or 1 3 4, an array
@rak1507 yep
 
but wouldn't the AST be (list 1 (eval '(random 2) (pick "+3")) 4)
 
@nathanrogers the 1 + 4 case wouldn't be a list, but function application
 
You don't know if the topmost node will be a list or a dyadic function application
 
11:28 PM
try it - it'll give 5 or 1 3 4
 
Oh I see
but this is just a matter of evaluation wierdness isn't it
 
@nathanrogers also, if you have a namespace, 1 ns.a 2 is a more understandable example, which depends on the type of a
@nathanrogers as per ^, it happens in many cases
 
@Marshall @dzaima does bqn have system utilities like streams, pipes, FFI with C, dictionaries, CLI command execution, etc
 
If you really want to build an AST for APL, the best you can do is a nested list of tokens which can be of any type
 
@nathanrogers streams/pipes - no; currently the only major impls are in Java and JS, both of which don't really interface with C directly; dzaima/BQN has a CLI
 
11:31 PM
can I interface with Java libraries?
 
ngn
@Bubbler but you have to do it yourself, it's not built into the language
 
or js
 
@ngn Of course
 
@ngn I think the point was whether it is possible for such an AST to exist or whether it is provably impossible
 
@nathanrogers not directly, but I did add a way to load in custom objects/types into dzaima/BQN. The JS one doesn't allow direct access to JS (but you can use BQN from within JS)
 
ngn
11:32 PM
@Bubbler well, k has `p@ for parsing and j has.. i forgot what it's tokenizer was - ;: ?
 
since it is JS, can I call rest methods from the browser? how do I get data into a program?
 
or is it a golfing language only? what are the plans?
 
ngn
@Bubbler thanks. that's just half a parser because j has a similar problem to apl with respect to static parsing.
 
Right
 
11:35 PM
@nathanrogers I don't think there currently are ways to pass data to BQN to invoke, but it shouldn't be hard for that to be added
 
can I at least read from files?
so all BQN programs rely on generated data from within BQN?
or statically encoded data?
 
@nathanrogers yeah - there's •FBytes •FChars •FLines
 
that's good
 
@nathanrogers the JS BQN impl afaik isn't used for anything other than testing/online REPL, so yeah, all 0 programs do :D
 
:C
so its still pre-release?
 
11:37 PM
@nathanrogers it's not a golfing language at least
@nathanrogers trig functions didn't exist until very recently, so yes
 
and dzaima/BQN still has some unfinished primitives - ⚇⊐ off the top of my head, and there are a couple more
 
what is the goal of the language
general purpose applications with strong program structure, configuration system, build system, with all the system interaction that I'm referring to?
 
@nathanrogers afaik Marshall is making it to write another language (Iridescence) in it. We don't know anything about iridescence
 
@Marshall is that like a Q is actually K under the sheets sort ofthing?
 
11:39 PM
@dzaima other than that, it's probably supposed to be an APL replacement
@nathanrogers iridescence would be extremely different from BQN as far as i know
 
hmm
does BQN have infinite rank?
 
@nathanrogers current impls do
 
ngn
@dzaima so "iridescence" on top of "bqn" on top of "singeli"?
 
@ngn sure
 
I'm completely lost
lemme just go impl my own APL ril quiq
/phaseplumb
 
11:42 PM
@nathanrogers singeli is another thing - a low-level language for writing optimized vectorized builtins
 
not available to use?
 
ngn
@nathanrogers in early stages of development
 
@nathanrogers what's not available to use?
 
singeli
sangheili
sig nelly
 
@nathanrogers it's extremely early in development. We're still a bit at the disagreeing about syntax phase
 
11:44 PM
hm
I'd rather not pay, myself
 
ngn
and i'm questioning the necessity
 
@ngn of?
 
ngn
@nathanrogers "singeli". c with a bunch of macros seems to be doing a decent job of producing vectorized loops.
 
@ngn are you sure it's generating optimal code?
 
ngn
@dzaima i can't prove it's optimal, but i do have a shortcut in vim to peek at the assembly, and i can tell if it's got vector instructions or not
i can even understand some of them :)
 
11:49 PM
(i doubt you're writing anything more complicated than basic arithmetic list-list and list-atom. There are a couple other things in a language)
 
ngn
however, the c preprocessor is painful to use. so maybe we need a better preprocessor rather than something with inherited types and polymorphism and arcane syntax..
@dzaima that, and reduce, scan, eachprior, amend
 
@ngn and reduce/scan actually work? have you compared performance to Dyalog?
 
ngn
some primitives need vectorization too, like til (k's ⍳N), reverse, etc, but those are already near-optimal
@dzaima reduce and amend work, scan and eachprior not yet
@dzaima i'd rather use my time for comparing against (the original) k, but one day i'll test dyalog too
 
{x+y}/!100000 in the browser is faster than {⍺+⍵}/⍳100000 locally
 
@rak1507 k benefits a lot from static compilation and less requirements
also ngn/k doesn't need to allocate an object per each item there
 
ngn
11:53 PM
@rak1507 dyalog is terrible at interpretative performance. i think dzaima meant only the optimized versions like +/
 
fair enough
 
ngn
@rak1507 btw, dyalog has 400⌶ which might be of help there
 
always forget about that one
 
@rak1507 yay
 
oh cool for some reason I thought bqn was really slow
 
11:58 PM
@rak1507 dzaima/BQN has pretty decent interpretive performance. Functions are compiled to java bytecode
@ngn (why not compare against Dyalog? how does the original k and Dyalog compare?)
 
ngn
@dzaima waste of time
@dzaima i give you one guess :)
 

« first day (1502 days earlier)      last day (1142 days later) »