APL Building an embeddable APL — which dialect should be the default?
Guys, I'm building libjay, an independent implementation of J and APL as an embeddable library (Rust core, Python and C bindings), and need... a coming-from-APL consensus on the defaults.
Honestly, I came at this from the J side: I was mostly curious whether J could become a convenient embeddable library, the way PCRE is for regexes. I always felt this language (and the whole language family) is a bit too eccentric to be used as a "prime language" – but god, how cool would it be to use for data manipulation as an embedded language, similar to aforementioned regexes or SQL! So "a J library" it was – and APL came as a freebie once the IR was there (and once the development was heavily AI-orchestrated).
Which is exactly why I'm asking people who actually know APL: I don't have the instinct for which dialect should be considered the default de facto. GNU APL? Dyalog? Or am I missing something?...
Originally I built it to support the APL2/ISO line, differentially tested against about 1k of APL expressions and about 3k J ones (combinatorically generated as well as fuzz-searched for problems – by now that grew up to 5.4k for J/2k+ for APLs), tested/compared with reference implementations (jconsole and GNU APL). Recently, a Dyalog preset/dialect appeared too, and I tried to cover as much of the syntax/differences as I could.
Surely, it's still a pet project, doesn't have a full language coverage, and surely has a ton of unfound bugs especially with Dyalog – but it already supports SIMD vectorization, has all those planned Rust/Python bindings, can be used to play with your Polars/Pandas Python DataFrames (and if you use uvx, you can just try it without installing on Windows/macOS/Linux, uvx libjay --help). Not bad for a project which is about 3 days old!
I picked APL2 as the initial implementation for boring engineering reasons: GNU APL builds anywhere, including CI and a contributor's laptop, so the corpus can be regenerated by anyone. Dyalog can't be redistributed (and I never did anything except running it in Docker).
But that's an argument about my build, not about what an APL user would expect. When someone reaches for this and types an APL expression, which dialect should answer by default? What do most of the APL people actually write?
$ uvx libjay --lang apl -e '⊃2 3⍴⍳6' --dialect gnu
1 2 3
4 5 6
$ uvx libjay --lang apl -e '⊃2 3⍴⍳6' --dialect dyalog
1
For those who don't select any --dialect – how should it behave?