« first day (1511 days earlier)      last day (1133 days later) » 

12:01 AM
I'm so over it... you sit high atop your throne, with such ambi-valence, you sink to your lowest depths, and choose to pull rank... Do I need to repeat myself before or after I bind you under my boot
 
@Bubbler Compiler bug, fix coming up shortly...
 
@ngn really matters. Anyone can see... really matters... really matters to me
 
@Bubbler Works right for me now with a hard refresh. The issue is that (1+·) still evaluates 1 and + in case they have side effects, then drops them. I misplaced the drop instructions and it was dropping the right argument 4 instead of 1.
 
ngn
@nathanrogers lol :D
 
𝕨 didn't have the same problem as · because it's dynamically assigned a "nothing" value at runtime, which is not a good way to do it (the compiler should generate two functions to avoid runtime checks). Fixing that is my next thing to do with the compiler but I haven't worked on the compiler in a while.
 
12:17 AM
@Marshall is there a roadmap/planned features sort of table to look at?
 
@nathanrogers No, and if there was it would be completely unreliable. The spec gives the features that I plan to support and the ones not yet supported are namespaces, block headers and multiple bodies, and a few rare cases for inferred properties.
 
ngn
i'm waiting for a rewrite in c (or singeli, whatever) before i start taking bqn seriously
 
@nathanrogers implementing things is way easier & quicker than thinking of them and writing them down, so if there was such a list, it'd be empty most of the time
@ngn i'm waiting on myself to write my own java/c-like language to write an impl in. Unfortunately, that's quite difficult
 
@ngn Not-very-seriously working on a Zig version (just the basic VM at first), but I'd put Singeli at a higher priority.
 
@dzaima (maybe before that I'll write a new array model with refcounting and 8/16/32-bit ints and whatnot still in java, potentially integrating singeli when that's working, in such a way to transpile it to that lang later on. but who knows)
 
ngn
12:31 AM
@Marshall what are your impressions from zig? i tried it once. it has some fresh useful ideas, but the syntax is too verbose (compared to atw c) and it bloats the binary with stuff that i never told it to, so i gave up.
@dzaima transpile - i've thought about something like that too, but most of the time i can get away with c macros and/or generated code
 
@ngn I haven't done much with it but I'm fairly sure I like it better than C. Just less weird stuff to account for. It's very quickly getting more stable. I think it still generates somewhat large binaries (nothing like Rust though), but there might be ways to avoid that now.
 
@ngn macros won't change the type system, or allow for readable generics though
 
Very dense code has never been a goal for me so I can't comment on that.
 
ngn
@dzaima generics - we might disagree on "readable", but the rest is doable if you pass the type as a macro parameter
@Marshall it's means to an end
the more you can see at once on a screen, the easier it is to comprehend
otherwise it's scrolling or chaning buffers and reading mostly vertical code..
easy to get lost
 
@ngn only if you're not sacrificing more comprehensibility than you gain of course. And I'd argue the amount you gain is little compared to what you lose in most cases
 
ngn
12:42 AM
depends on experience and whether other people are involved
 
of course
 
ngn
i rarely have regrets about having written something in a simpler (i.e. shorter) way
 
@ngn Some shortening is making things simpler, some isn't. Purely removing whitespace and renaming things to shorter names isn't what I'd call "simpler", but definitely shorter
 
ngn
zig would make me forget what i'm doing, because i'd be able to see only a small fraction of the amount of code i would normally see
@dzaima it leaves more space for more code, though
@dzaima i think of redundant whitespace as "added" in verbose code, not "removed" in concise code :)
 
@ngn sure, that's fine by me. But it isn't added just for verbosity, good whitespace can increase comprehensibility by a lot. So from my viewpoint, by removing whitespace, you're removing comprehensibility
if c had c++'s auto (or maybe even allowing omitting variable type altogether), would you use it?
 
ngn
12:51 AM
whitespace is just one way to make the a human brain perceive items as grouped
rounding can achieve a similar effect - that's why ( and ) have that shape
another is colour or brightness
 
@ngn I find whitespace for grouping to be a lot more readable than parentheses fwiw
but practically I have to mix both when there's like >3 levels of nesting
and of course operator precedence is comparatively awful at making brain perceive groups
 
ngn
@dzaima i had to look that up. i think typeof solves that problem well.
also, i don't need that many types. most of them are abbreviated to a single letter anyway. it's only a problem with function types in c, they can be verbose and confusing.
 
@ngn i meant that as, would you, if given the opportunity, never declare types of variables other than function args?
 
ngn
@dzaima whitespace can be annoying when it gives you a false impression of things being grouped or separated. for instance between a type and a variable: T v. i like abbreviating such commonly occurring pair as macros: Tv.
@dzaima of course
the less code, the better. so type inference would be good.
 
hmm, if you really wanted to, function argument types could be somewhat inferred too, going from the main method recursively adding types to functions you encounter
in that sense, dynamically-typed langs are better :)
 
ngn
1:02 AM
@dzaima that's not always possible, as sometimes you pass a char but the function expects an int, and the compiler takes care of 0-extension or sign-extension as appropriate
 
@dzaima Function arguments and mutable variables. Those are pretty much the only variables I'd ever want a declared type for. For complex structures I want the type to be obvious but if there's a variable declaration nearby it's probably for creating or destructuring it anyway.
 
so i'm in the minority of preferring explicit types for every variable
 
Having to declare types actually encourages reusing temp variables instead of naming them differently I would say. That's dangerous.
@dzaima Among us three. I think there's a lot of support for that position in the wider programming world.
 
@Marshall don't see how that's the case
 
@dzaima Since you have to rewrite the type if you make a new variable, but not if you use an old one. Maybe that doesn't bother you though.
 
1:10 AM
@Marshall yeah, i'm definitely not on the level of speed-writing where not typing the type is worth confusion. (and an IDE will write the type for me in many cases anyways)
 
ngn
@dzaima it's not about typing speed, it's about removing irrelevant noise
(or: not adding irrelevant noise)
 
@ngn the type of a new variable is as relevant/irrelevant as of the previous one
(and I wouldn't call types neither irrelevant, or noise. They serve as a reference point while reading, from which you can build knowledge of what's happening; the more info you have while reading, the better)
 
ngn
"the more info you have while reading, the better" - i'd rather avoid information overload and focus on the essence of what the function is doing
 
@dzaima Really depends on the code though. I've written plenty of stuff where every single value is a machine-word sized integer. I could mark them as values or indices but that's extremely obvious just from reading and usually from the names as well.
 
@ngn "information overload" - of course, you don't want to have your whole code be just pure information for reading, it's a balance. You though seem to prefer having like 0 information
 
ngn
1:19 AM
@dzaima 0 redundant
 
@Marshall that's an interesting case. I think I'd still prefer confirmation that everything's a machine word over having to infer that myself. (though a type specification on every var is probably not the best way to achieve that)
 
@dzaima Yes, my thinking in a lot of cases is that I want to know what the variable is, and probably the best place to find that is the code to its right. Sometimes the type tells you enough; I don't think that's too common. Sometimes there should be a comment on that line, or in extreme cases a few lines of comments.
 
ngn
and sometimes even just the name of the variable is enough for a human to figure out its type
 
@Marshall I think in most of my code I rarely have 2 or more variables of the same type, so the type is often good for quick reading, and with the name it's hard to have any confusion
 
ngn
Thing thing = new Thing(); // thing :)
 
1:27 AM
@ngn right, the name is the first thing you check obviously. If that doesn't help, then the type, then the definition
@ngn yeah, that's the sad case of redundancy
 
@dzaima Well the name tells you which one of the 26 categories of possible stuff it's in of course.
 
ngn
@dzaima if you don't mind c/java's verbosity, why make a transpiled language of your own?
 
@ngn I don't mind verbosity when it's justified. There are of course cases when there is unneeded verbosity (I much prefer java's verbosity levels, but it's slower than C, so a mix of the two is best)
@dzaima ("I much prefer java's verbosity levels" is a bit stupid. I prefer java's type system & some syntax, but since the end goal is performance, i can't use actual java)
 
@dzaima Have you tried other higher-level languages that compile to native?
 
@Bubbler i've tried some. Kotlin and Rust lose on using name:Type, D has horribly slow compile times from what I've heard (and also has a weird relationship with garbage collection) but i should probably look into it more
 
1:45 AM
@dzaima Is name:Type a bad thing?
 
zig and v (though they aren't really high-level) don't have classes; C++ is, well, C++
@Bubbler i absolutely hate it, in approximately the same way nathan rogers hates the name "nothing" for · :P
 
@dzaima Ooh. That's too bad :P
 
yeah, it really is unfortunate. So many possibly good languages down the drain..
@dzaima (well, rust doesn't really have classes either. Whatever I want to implement BQN into must have classes of some sort, inheritance for the type system just works beautifully)
 
Why is everyone so keen on implementing a portion of a language and moving on to some other language? Wouldn't it be nice if we could have a production release of any one of them?
 
ngn
@nathanrogers very good question
 
1:55 AM
@dzaima reference
 
ngn
@nathanrogers for psychological reasons, i think: it's fun to implement languages (at least in the beginning) and it's too easy to get started and quickly put together something working, which gives people a sense of achievement and bragging rights before their peers. when they eventually run into difficulties, they move on to the next shiny thing.
 
@nathanrogers I mostly program things for fun. the current Java dzaima/BQN was never meant to be any candidate for a "production release" of any sort, but for me to make one, I need a language to implement it into first
 
so is @Marshall planning to make the full implementation himself later?
 
ngn
@nathanrogers making language implementers collaborate on something useful is near-impossible, like cat herding. everyone thinks he/she is the best.
 
(and me wanting to make my own java-like language dates back to at least like november 2018)
 
2:01 AM
That said, dzaima/BQN does pretty much everything I want it to. The things that would take it to "production release" are almost entirely things like FFI and other APIs that I have no experience with.
 
ngn
@Marshall sigh..
 
we could look at the clojure source for how it handles java interop
 
ngn
@Marshall way too slow. artificial barriers to entry like fonts and keyboards. counter-intuitive array model. (i'll stop at 3)
 
@nathanrogers Is this a we that means you
 
@Marshall right, that's unintentional. (it would probably be possible to add JNA to it to allow C interop or something, but i have approximately no reason to try to)
 
dzaima/BQN can interface with Java but not with C ABIs.
 
really?
 
@dzaima (and that could be made with •JLoad, making the base dzaima/BQN still not need any dependencies, at the cost of FFI being a library)
 
ngn
@nathanrogers if it's written in java..
 
@ngn The first of these is just wrong and the other two are about BQN the language and not an implementation.
 
2:04 AM
Right, but there needs to be syntax for it no?
@Marshall was your plan to implement in C eventually, or just in js as a concept language?
 
@nathanrogers there is the half-baked •JLoad to allow importing java code specifically made to interact with dzaima/BQN, but that, as i said, needs a manually written java side
 
@dzaima For music, resampling (that is, changing sample rate) is something that I really don't want to write myself and that's needed to use samples in a reasonable way, so I'd like to be able to call a C library for it.
@nathanrogers I would probably use a language like Zig. I'd like to see if I can keep a lot of the runtime self-hosted while improving the performance, as that makes it easier to implement advanced algorithms for primitives.
 
@nathanrogers clojure benefits from being directly on the JVM and presumably being compiled though. dzaima/BQN has its own everything and isn't statically compiled
 
ngn
2:30 AM
@nathanrogers any ideas how to solve that problem?
 
which
 
ngn
@nathanrogers the one described in the message i replied to
 
Basically, supporting a production release of a language is really hard and demanding for a single person working on it in their spare time
 
ngn
@Bubbler exactly
but the success story of haskell uniting the lazy-eval functional programming community is proof that it's possible to organize collaboration
 
2:36 AM
usually because of the users who ask "why this language does not support XXX" (e.g. networking, GUI, multithreading, FFI)
 
@ngn that's the solution for me. whichever language manages to achieve that. I'm just not interested in learning languages or implementations if they're going to be abandoned because they were just a fun toy for the implementor
 
ngn
@nathanrogers "achieve that" = "attract developers"?
 
@nathanrogers But we don't know how they succeeded, which means you didn't give any real solution
 
@Bubbler it takes us all just moving to one and building it up
 
ngn
@Bubbler if "they" is shakti, i think even just arthur's name is sufficient for that
 
2:40 AM
haskell took 30 some years to catch on
 
ngn
@nathanrogers the array programming community has been around for longer
 
@ngn Arthur isn't developing K in his spare time, is he?
 
it needs to be open source and in the hands of the community
 
ngn
@Bubbler no, he's well funded, of course
 
the obnoxious thing is all the closed source implemenations drawing everyone's attention
and the legacy of it all
so creating the open source side so that it trumps the closed source side by creating an ecosytstem that allows people to build real applications
 
2:42 AM
@ngn One thing would be to create some library of fast performance operations so making fast impls would just require plugging that in
 
which means libraries, apis, etc
I think bqn is a really nice first user impression, once you actually decide to start reading through it, but it needs to be even slower if its to attract anyone but already avid array language users
 
ngn
@dzaima i fear that might lead to less unity and more syntactic bikeshedding
 
i do love my bikes
and storing them in my shed
 
@ngn bikeshedding is gonna happen anyways, just maybe slower. though maybe that's a good thing
you'll keep advocating k to no end, i'll continue preferring BQN or whatever, that's not gonna change
 
I think it would be good for us to have examples of IRL programs and not golf or toy problem examples. nqueens is impressive and all, but can I write a webserver? Or a chat room, or something else... and people actually making IRL software applications. I haven't seen how to do that in any of the impls thus far. Maybe I'm missing it, and someone is doing that, but I don't know quite where to look even
 
ngn
2:48 AM
@dzaima k is a simple, fast, proven, widely used, commercial language. no offence, but bqn isn't a thing.
@dzaima so, it's doomed then
 
@ngn which
 
@ngn I don't believe we'll be able to settle on a single language. So I think it's best to just accept that and try to just not do everything twice where possible
2
 
ngn
@dzaima maybe the original apl notation (except dyalog shit) is the language that unites us all?
@nathanrogers collaboration
 
@ngn Right, give me APL notation, but just in a tidy modern package, with scripting, and complete ecosystem of libraries
 
@dzaima (and if we do by some magical relevation, it's simple enough to abandon one side and put all efforts into the other; having more complete impls will help the decision too)
 
2:52 AM
like get rid of all the ⎕ noise, get rid of a million ways to read and write whatnot
 
ngn
@nathanrogers we can't even agree on which language is better, you're talking about libraries :)
 
APL is clearly the best option
 
ngn
@nathanrogers your last message contradicts your second to last
 
@nathanrogers APL as a notation has zero ways to interact with the outside world, and you need million ways to interact with the outside world to build real-world applications
 
ngn
@Bubbler what are those ways? read from stdin, write to stdout, start child processes (with full control over their i/o), tcp client/server, load libraries.. ?
 
3:01 AM
@ngn BQN types plus n-ary functions is a superset of all of APL/BQN/k/J. Other than that, you'll want ascii, I'll want unicode, you'll want only rank 1, I'll want arbitrary rank
 
@ngn how
 
but for now i shall go sleep
 
@Bubbler right, I'm talking about the scaffolding around the "notation" needs an overhaul
from the ground up, modernised
root out any concept of the excuses made for mainframe design
 
ngn
@dzaima i'm sure it's not a superset. i would make a compromise with non-ascii (as i already have in ngn/k). rank 0-or-1 would be ideal, but apl works too, it's just more effort for no good reason.
@nathanrogers if you removed the ⎕names, would that still be apl.. ?
 
@Bubbler or what about a notation for mutation?
@ngn yes?
who says it needs to be APL2
or compatible with older apls?
 
ngn
3:05 AM
@nathanrogers ok :)
 
i think BQN has a lot of good ideas
 
ngn
@nathanrogers like what?
 
idk how consistent it is to use, but I'm getting there
@ngn the context doesn't suddenly change. I'm talking about the language around the primitives
the scaffolding, and hey I can run them as scripts, there's features for program architecture and such
I wouldn't have any problem using APL forever into the future if APL was what BQN is now, and had extensible syntax
 
ngn
@nathanrogers "language around the primitives" - what..
 
What do you mean what? Like I think everyone can agree that working in pure APL primitives is glorious
 
ngn
3:09 AM
you need context to be able to read forks, for instance
 
but namespace, ⎕IO/CY/PATH etc is obnoxious
and how there technically is a way to do whatever you want but the documentation is impossible to find
 
ngn
@nathanrogers i agree
 
unless you know someone
or it have its own concepts about how to use APL
forces you to use OOP in the middle of your functional DFNS namespace
 
ngn
@nathanrogers i agree
 
@dzaima (like, we should be happy we've settled mostly on 2 langs - k and APL/BQN-like)
 
ngn
3:11 AM
@nathanrogers bqn is a documentation that also happens to come with an interpreter :)
 
I guess
k is a language without documentation
 
ngn
@nathanrogers not true
k is many languages, and some of them come with (sometimes secret) documentation
 
i mean... fine, a better way to say it is
k is a language
"usage examples" are great, but not documentation
I love your usage list in the help menu, super nice
but not documentation
neither is the OK manual documentation
 
ngn
i can't english. i need collaborators and i'm ready to sacrifice my name (the "ngn" part of "ngn/k") for that.
 
i wish I were capable , but I can barely use the language
 
ngn
3:15 AM
@nathanrogers what's wrong with oK's manual?
 
@ngn nothing , just that documentation is comprised of more than simply examples and usage
BQN docs are great, if not easy to navigate
 
ngn
@nathanrogers oK's manual is more than examples and usage. it contains many full sentences in english.
 
It really just needs a side bar to get to any other page with a click, rather than having to find the home page again and starting over each time you want to cross reference @Marshall
@ngn full sentences in english that amount to usage
 
ngn
@nathanrogers so, would you prefer irrelevant backstories like in bqn's?
 
@ngn you have to remember that you have comparatively very low standards :)
 
ngn
3:18 AM
@dzaima for documentation? true :)
i just need a hint about what the primitive does, i can figure out the details through testing
wordy documentation only takes away the joy of finding out by yourself how things work :)
 
@ngn github.com/JohnEarnest/ok/blob/gh-pages/docs/Manual.md everything before the verb reference is documentation, but its extremely brief . I don't need humor or meandering story telling in the docs to read them, but I need to know what is happening in the language to a level which I deem sufficient to answer question
@ngn how many times I @ngn because I don't understand or know what to do
how many times I got to bed because you're in another time zone and there's not many others to ask?
that's what documentation is for
i shouldn't have to hound the implementer for information beause that's time consuming for both of us
 
ngn
@nathanrogers fair. i'm sorry, i was busy implementing the thing, and as i said, i can't english.
 
:P
not a criticism, so far I love the language, but... not some of the concepts
but I get some people are natural writers and others aren't... but around K, it seems that everyone prizes as few words as possible, rather than optimizing word count balanced with substance.
Further, I cannot stand the way corporate K is so secretive and cryptic
 
ngn
i see k as a great injustice. it's available only to those who can pay a lot to legally use it. i did my best to correct some of that, to the best of my abilities.
 
@nathanrogers you could certainly do your fair share of trying things yourself. i've often replied to you by just trying things and looking at the limited docs myself, originally not knowing anything about the question
 
3:22 AM
I get why, but also I can't stand it
@dzaima for the most part I'm asking after sufficient self-torture and hair rending. but I'm just not used to the mode of thinking in K yet?
and maybe attacking problems outside my capability with the language
 
ngn
k is what you get if you take apl's original ideas all the way
 
That isn't the impression I get. K seems to be APL if you dramatically compress the number of primitives, and the number of symbols to represent those primitives, removing elegance, symmetry, entendre and even puns for spartan austerity
 
ngn
@dzaima and thanks for doing that
@nathanrogers "elegance, symmetry" - i can give examples why it's the exact opposite (preferably tomorrow)
 
@ngn I put it like this
APL feels like a notation
K feels like a concise programming language
 
ngn
@nathanrogers where's ⍣'s scanful buddy in apl?
that's a break of symmetry
elegant is slim. doing more with less. k has fewer verbs/adverbs/concepts/etc than apl.
 
3:28 AM
I have a hard time "thinking" in K primitives because they're so overloaded, its hard at my level to read it without considering every possible set of arguments, and even then there is minimal information about which arguments are getting passed to the functions themselves so its hard to infer what type of function we're calling
@ngn I don't believe elegance and shortness have anything to do with one another. They may be parallel, but they aren't similar goals
Like you can be elegant and short, or you can be elegant and not strive for the shortest version.
 
ngn
@nathanrogers i didn't say shortness. k code is usually ~1/8-1/4 longer than apl, as one would expect from the number of bits actually used per character.
 
but now we're back to the word game again
I see what you mean actually
@ngn why not go all the way and just reduce everything down to just the mathematical primitives?
 
ngn
@nathanrogers no, it's not a word game. k has 26 verbs (iirc), apl has how many? k has 6 adverbs, apl(dyalog) has recently added all possible combinators of two args and two operands..
k has rankdepth. apl has rank and depth.
 
@ngn I meant to disregard that
@ngn right, I criticized that the other day in ktree
@ngn what?
 
ngn
@nathanrogers to rephrase: apl makes a distinction between a matrix and a vector of vectors. k doesn't.
 
3:34 AM
right, which creates problems as for symmetry with the primitives
I can't just do mat[&boolmat] in k
 
ngn
how did we get into this topic.. initially we were trying to unite the brainforces in array languages! :)
 
right
And I was suggestion that the APL notation should be used as the core of whatever it is
 
ngn
@nathanrogers until recently you couldn't do that in dyalog either
 
⍤⍥⍤
 
At least we have to admit that people have drastically different tastes for array languages (and that many different concepts and models)
 
ngn
3:38 AM
@Bubbler that doesn't mean they are all good tastes..
 
I really think the main purpose of the array language community should be around the pursuit of "the universal notation for computing" and less on which other language needs a 15th implementation.
but that doesn't even seem to be a shared goal
 
ngn
but i can't argue anymore. i should have been asleep for a couple of hours already. see you tomorrow.
 
which I can't understand, array programming was an extension of the notation
I think APL is a strong foundation for that, but its the legacy and all the noise surrounding the notation, and even the dichotomy between the "primitives" and the rest of the system interaction stuff.
 
yeah, legacy problems
and apparently some APLers think the core APL and the rest of the code (from control structures to OOP to interfacing) should be visually very different
 
3:59 AM
I think so too. There really should be a literal notation as nice as the function primitives
@ngn documentation will include detailed scope rules, limitations, along with mentioning anywhere that a blank line feed is required at the end of a file
 
4:13 AM
@Bubbler by a literal notation I mean data literals
And perhaps object and dictionary literals
See I think bqn is pursuing a lot of this
I just need some time with it
 
 
2 hours later…
6:32 AM
@ngn @nathanrogers and in ngn/k, you can use deep where and (m'). example
 
6:55 AM
what most surprises me
is that j discussion is uncommon in this room
do j users just prefer to talk elsewhere? or have they moved on from j?
 
@chrispsn J is clearly still being developed, but Roger Hui seems to largely have left. I think most people here just dislikes J's spelling.
@JulianFondren Hi there. Interested in APL?
@user4808141 Hello aardwolf. If you want to participate here, please email access@apl.chat
 
Apparently J users have separate user meetings (at New York or something) and tend to be (relatively) more active at Reddit r/apljk
 
@Adám yep. mostly J though.
I didn't log into this chat for the longest time because it doesn't accept github authentication unlike the rest of stackoverflow. But I've read it occasionally
 
I see. Well, you're most welcome here, even if the discussions are mostly about APL (and lately BQN and some K).
 
Yeah, J is 100% on topic here, though discussion about J has been virtually nonexistent recently
 
7:10 AM
great. J seems pretty similar to APL in terms of primitives, like having /. (⌸), and I've been long interested in some of the dyalog.tv talks like Aaron Hsu's one on doing trees "the APL" way, so I don't mind an APL focus at all. Gotta get literate so I can follow such talks at least.
or, pretty similar to DyalogAPL. I guess ⌸ isn't in some of them.
 
@JulianFondren Yeah, Dyalog APL is the closest to J. We (I work for Dyalog) have Roger Hui who has exerted some influence in that direction lately.
 
 
4 hours later…
11:10 AM
well that was an interesting discussion to read
 
 
1 hour later…
12:31 PM
@chrispsn The J forums are pretty active. And I've personally moved on from J of course.
 
CMC: Mix no matter what ⎕ML is.
 
1:01 PM
@chrispsn there's also #jsoftware on freenode
 
1:34 PM
@Adám aw, ↓⍣¯1 doesn't quite work
⍎⎕ML⊃2/'↑⊃' but I suppose that's cheating
 
@rak1507 {⎕ML←1⋄↑⍵} is shorter.
 
oh true
 
I was thinking there might be something clever like ⊃⍬⍴⊢ for First.
 
There's a three character version.
 
there's 1∘⍴ if you don't mind scalar vs vector...
 
1:39 PM
That's not First then.
 
true
 
@Marshall For Mix?
 
@Adám Yes. The Wiki page could actually provide a hint.
 
wait, doesn't ⍬∘⍴ do First?
 
@rak1507 No, it returns an enclosure for e.g. 'abc' 'def'
 
1:42 PM
Ahh
 
@Marshall I don't see it. Want to reveal?
 
@Adám ↑⍤0 or ⊃⍤0.
 
oh, I had ⊂⍣¯1⍤0
 
@Marshall Yes, I just found it, right now.
 
I don't like using ⎕ML dependant functionality
 
1:45 PM
No, I don't either, but I need it on occasion.
I am building an expression that will be executed in an unknown namespace, so it has to work with all settings.
 
does {⎕ML←1⋄whatever} not work maybe? imo that's simpler to understand than something more clever
 
The hint being the discussion of rank in the last paragraph of "History". J's > is really more like ⊂⍣¯1 except that it's defined with function rank 0. The function rank is what unifies all the results.
 
@rak1507 That is indeed what I've used.
 
Ah, cool
 
I just thought it'd be interesting to see if anyone could come up with something shorter.
 
1:48 PM
weird question: is there a way to get the primitive from a namespace? n⍎'↑' and n.↑ don't work (oh they do I was being dumb)
 
I was about to say that that should work.
 
my 'namespace' was actually not a namespace... oops
 
Oh, ⊃⍤0 is optimized but ↑⍤0 isn't. That's funny. I guess it's because the general case ⊃⍤k is useful.
 
Heh, I've never seen this message before:
Where is that FAQ?
 
@Adám would it be un-idiomatic to make a namespace with ⎕ML←1 so you could use ns.↑?
 
1:53 PM
@rak1507 I've suggested that before. With the new array notation, you'd be able to write (⎕ML:1).↑
 
something with under would be interesting as well
 
What, like ↑⍢{⎕ML←1}?
 
yeah
 
1. That can't work. 2. It isn't shorter.
 
it isn't faster as is, but ↑⍢(⎕ML:1) could be made to work (maybe?)
 
1:55 PM
A dangerous one is (⎕IO:0).? which will always give the same result.
 
@Adám I mean, it could be defined, but what does {⎕ML←2}⍢{⎕ML←1} do?
 
I don't know why, but I find the under glyph annoyingly ugly.
 
f⍢ns could temporarily set variables in the current namespace to the variables in ns and then revert
 
Wait, I guess you're saying the dfn definition stays local so it doesn't make sense.
 
@rak1507 Ah, so "under namespace" means "in that namespace". Sure. Or if you have an existing ns: ↑⍢(⎕CS ns⍨)
 
1:57 PM
I suppose there's no point when ns.(code) works
 
@rak1507 That's essentially a functional equivalent of :With
@xpqz More so than Over?
 
@Adám yes! I didn't know that existed but that's exactly what I'm thinking
@rak1507 and this isn't true because you can't use variables in the current namespace
 
What to do if there are name clashes?
 
keep the original
so it can act like a default
so you could do f⍢defaults for example
 
original meaning on the left of /outside :with?
 
1:59 PM
yes
 
@rak1507 I usually use "dictionaries" for that: defaultsClone←⎕NS defaults ⋄ 'defaultsClone'⎕NS mysettings ⋄ 'mysettings'⎕NS defaultsClone ― a bit awkward because ⎕NS still doesn't like a ref larg.
 
yeah, seems a bit clunky
 
Under
 
@rak1507 With ref larg: mysettings⎕NS(⎕NS defaults)⎕NS mysettings or even ⎕NS/3⍴mysettings,⎕NS defaults
@xpqz Seems about right for the kind of tricks it can do.
 
2:24 PM
how come a.b.c.d.##≢a.b.c.d where they are nested namespaces?
 
@rak1507 a.b.c.d.## is a.b.c if they are sensibly created.
## is parent. ⎕THIS is this ns.
 
@Adám define sensibly created, I think I've created them sensibly but that's not true for me
a←⎕NS⍬ ⋄ a.b←⎕NS⍬ ...
 
@rak1507 Ah, no, that's not in my definition of "sensibly"
 
oh :(
I assume it's :Namespace then?
 
Your code makes each name a ref to a sibling namespace.
 
2:30 PM
?!
 
Instead, you want a←⎕NS⍬ ⋄ a.(b←⎕NS⍬) ...
Or simply 'a.b.c.d'⎕NS⍬
 
@Adám oh, weird
ohh right ok
 
Namespaces have a parent. Names of refs do not necessarily reside in the parent of the namespace they refer to.
 
@rak1507 which
 
@Adám wow. I had no idea.
 
2:32 PM
@xpqz Something every day…
 
Namespaces have a lot more tricks up their sleeves than the docs give them credit for.
 
@nathanrogers all of it, the language stuff
 
Talking about nothing?
 
Much ado about nothing
 
Turns out there was "nothing" to talk about
@Adám literally
@ngn comes from. Ever could
 
2:43 PM
@Marshall yay
 
No way
That's dope
 
will see if i can speed it up. (and also add more types than just doubles of course)
 
Cool though
It looks like
Lib Loads "reurntype name arg1type..."
 
@nathanrogers yeah. Like Dyalog's ⎕NA but the library path is the left arg, not part of the name
(i'm open to other syntax suggestions)
 
@dzaima Can you then not choose what the APL-side name will be?
 
2:55 PM
No this looks good. I thought it was silly to specify the name twice
 
@Adám it just returns a function
 
Ah, I see.
 
I like this where you just assign it whatever name you want
 
remember, first-class functions :)
 
Though I wonder if path on the right fits with import more
 
2:56 PM
@nathanrogers good point
 
@dzaima So •JLoad returns a function that returns functions?
 
@Adám or any other BQN object really
•JLoad"a.b.C" is return new a.b.C(); but dynamically called pretty much
 

« first day (1511 days earlier)      last day (1133 days later) »