codereport/array-language-comparisons

A comparison of array languages & libraries: APL, J, BQN, Uiua, Q, Julia, R, NumPy, Nial, Futhark, Dex, Ivy, SaC & ArrayFire.

Cuda

232

197 commits

updated Feb 1, 2025

See the code

README

Array Language & Library Comparisons

image

This is a collection of idioms and small programs in APL, J, BQN, Julia, R, NumPy, Nial, Futhark & SaC.

There are several sites that do these kinds of comparisons:

Language / Library Websites

* Library, not an actual language

  • πŸ’š Main (APL-Family) Array Languages
  • πŸ’› Fringe (APL-Family) Array Languages
  • πŸ’™ Main (Non-APL-Family) Array Languages
  • πŸ’œ Fringe / Research Array Languages
  • πŸ’— Array Compiler Backends / Array Libraries

Comparisons

  1. REPL
  2. Index Base
  3. Axis/Rank Model
    1. LA = Leading Axis
    2. TA = Trailing Axis
    3. AA = Axis Agnostic
  4. Application Model
    1. () = Parentheses
    2. LR = Left to Right
    3. RL = Right to Left
  5. Row-major or Column-Major
12345
APLπŸ’š1 (or βŽ•IO)LA/TARLRow
KapπŸ’š0LA/TARLRow
TinyAPLπŸ’š0LARLRow
JπŸ’š0LARLRow
BQNπŸ’š0LARLRow
UiuaπŸ’š0LARLRow
QπŸ’›0β›”RLRow
JuliaπŸ’š1AA()Column
MATLABπŸ’š1LA()Column
NumPyπŸ’š0AA()Row
RπŸ’š1AA()Column
NialπŸ’›1AALRRow
FutharkπŸ’›0β›”LRRow
DexπŸ’›0()
IvyπŸ’›1 (or origin)β›”RLRow
SaCβ›”0LA()Row
ArrayFireβ›”0LA()Column
MatXβ›”0LA()Row
  1. Length of Array (Leading Axis)
  2. Shape of Array
  3. Rank of Array
  4. Number of Elements in Array
6789
APL≒⍴⍴⍴×/⍴
Kap≒⍴⍴⍴×/⍴
TinyAPL≒⍴ϼ×⍆⍴
J#$$$*/@$
BQN≠≒=×´≒
Uiuaβ§»β–³β§»β–³β§»β™­
Qcountβ›”β›”count raze
Juliasize(a, 1)size(a)ndims(a)length(a)
MATLABlength(a)size(a)rank(a)numel(a)
NumPylen(a)a.shapenp.ndim(a)a.size
Rdim(a)[1]dim(a)length(dim(a))length(a)
Nialfirst shapeshapevalencetally
Futharklengthβ›”β›”flatten |> length
Dexsize*β›”β›”
Ivy1 take rhorhorho rhorho ,
SaCshape(a)[0]shape(a)shape(shape(a))prod(shape(a))
ArrayFirea.dims()[0]a.dims()*a.numdims()*a.elements()
MatXa.Shape()[0]a.Shape()a.Rank()TotalSize(a)

πŸ’› Means the REPL has certain limitations

  • Q REPL has no HOME, END, or any arrows (CTRL or not)
  • Nial REPL has no CTRL left or right arrow
  • Futhark REPL has no HOME, END, or DEL
  • Dex REPL as no UP, DOWN and does not work with rlwrap

If you are using Q, Nial, Futhark or other languages with REPL limitations, you can get around this by invoking with rlwrap. On Linux using the Q REPL:

sudo apt install rlwrap
rlwrap taskset -c 2 ./q

Note that even when using rlwrap, some of the limitations will remain (such as CTRL + arrows).

Other Comparisons

  1. Creating an Identity Matrix
  2. Creating an Iota Matrix
  3. Reversing a Matrix Row-wise, Column-wise and in Memory
  4. Summing a Matrix Row-wise, Column-wise and Down to a Scalar

Leetcode / PWC Problems

  • πŸ’š = All solutions complete
  • πŸ’› = Some solutions missing

Progress

Language1a1b23456789
APLπŸ’šβ›”πŸ’šπŸ’šπŸ’šπŸ’šπŸ’šπŸ’šπŸ’šπŸ’š
KapπŸ’šπŸ’šπŸ’šπŸ’šπŸ’šπŸ’šπŸ’šπŸ’šπŸ’šπŸ’š
TinyAPLπŸ’šπŸ’šπŸ’šπŸ’šπŸ’šπŸ’šπŸ’šπŸ’šπŸ’šπŸ’š
JπŸ’šπŸ’šπŸ’šπŸ’šπŸ’šπŸ’šπŸ’šπŸ’šπŸ’šπŸ’š
BQNπŸ’šπŸ’šπŸ’šπŸ’šπŸ’šπŸ’šπŸ’šπŸ’šπŸ’šπŸ’š
UiuaπŸ’šπŸ’šπŸ’šπŸ’šπŸ’šπŸ’šπŸ’šπŸ’šπŸ’šπŸ’š
QπŸ’šπŸ’šπŸ’šπŸ’šπŸ’šπŸ’šπŸ’šπŸ’šπŸ’šπŸ’š
Juliaβ›”πŸ’šπŸ’šβ›”πŸ’šπŸ’šπŸ’šπŸ”œπŸ”œπŸ”œ
MATLABπŸ”œβ›”πŸ’šβ›”πŸ’šπŸ’šπŸ’šπŸ”œπŸ”œπŸ”œ
NumPyπŸ’šπŸ’šπŸ’šβ›”πŸ’šπŸ’šπŸ’šπŸ”œπŸ”œπŸ”œ
RπŸ”œπŸ’šπŸ’šπŸ”œπŸ’šπŸ’šπŸ’šπŸ”œπŸ”œπŸ”œ
NialπŸ’šβ›”πŸ’šπŸ’šπŸ’šπŸ’šπŸ’šπŸ”œπŸ”œπŸ”œ
FutharkπŸ”œπŸ’šπŸ’šπŸ’šπŸ’šπŸ’šπŸ’šπŸ”œπŸ”œπŸ”œ
Dexβ›”β›”πŸ’šβ›”πŸ’šπŸ’šπŸ”œβ›”
Ivyβ›”β›”πŸ’šπŸ’šπŸ’šπŸ’šπŸ’šπŸ”œπŸ”œπŸ”œ
SaCπŸ”œπŸ”œπŸ’šπŸ”œπŸ’šπŸ’šπŸ’šπŸ”œπŸ”œπŸ”œ
ArrayFireπŸ”œπŸ”œπŸ’šπŸ”œπŸ’šπŸ’šπŸ’šπŸ”œπŸ”œπŸ”œ
MatXπŸ”œπŸ”œπŸ’šπŸ”œπŸ’šπŸ’šπŸ”œπŸ”œπŸ”œπŸ”œ

Contributors

codereport

188 commits

athas

2 commits

cliffburdick

2 commits

Garklein

2 commits

codereport/array-language-comparisons

A comparison of array languages & libraries: APL, J, BQN, Uiua, Q, Julia, R, NumPy, Nial, Futhark, Dex, Ivy, SaC & ArrayFire.

Cuda

232

197 commits

updated Feb 1, 2025

See the code

README

Array Language & Library Comparisons

image

This is a collection of idioms and small programs in APL, J, BQN, Julia, R, NumPy, Nial, Futhark & SaC.

There are several sites that do these kinds of comparisons:

Language / Library Websites

* Library, not an actual language

  • πŸ’š Main (APL-Family) Array Languages
  • πŸ’› Fringe (APL-Family) Array Languages
  • πŸ’™ Main (Non-APL-Family) Array Languages
  • πŸ’œ Fringe / Research Array Languages
  • πŸ’— Array Compiler Backends / Array Libraries

Comparisons

  1. REPL
  2. Index Base
  3. Axis/Rank Model
    1. LA = Leading Axis
    2. TA = Trailing Axis
    3. AA = Axis Agnostic
  4. Application Model
    1. () = Parentheses
    2. LR = Left to Right
    3. RL = Right to Left
  5. Row-major or Column-Major
12345
APLπŸ’š1 (or βŽ•IO)LA/TARLRow
KapπŸ’š0LA/TARLRow
TinyAPLπŸ’š0LARLRow
JπŸ’š0LARLRow
BQNπŸ’š0LARLRow
UiuaπŸ’š0LARLRow
QπŸ’›0β›”RLRow
JuliaπŸ’š1AA()Column
MATLABπŸ’š1LA()Column
NumPyπŸ’š0AA()Row
RπŸ’š1AA()Column
NialπŸ’›1AALRRow
FutharkπŸ’›0β›”LRRow
DexπŸ’›0()
IvyπŸ’›1 (or origin)β›”RLRow
SaCβ›”0LA()Row
ArrayFireβ›”0LA()Column
MatXβ›”0LA()Row
  1. Length of Array (Leading Axis)
  2. Shape of Array
  3. Rank of Array
  4. Number of Elements in Array
6789
APL≒⍴⍴⍴×/⍴
Kap≒⍴⍴⍴×/⍴
TinyAPL≒⍴ϼ×⍆⍴
J#$$$*/@$
BQN≠≒=×´≒
Uiuaβ§»β–³β§»β–³β§»β™­
Qcountβ›”β›”count raze
Juliasize(a, 1)size(a)ndims(a)length(a)
MATLABlength(a)size(a)rank(a)numel(a)
NumPylen(a)a.shapenp.ndim(a)a.size
Rdim(a)[1]dim(a)length(dim(a))length(a)
Nialfirst shapeshapevalencetally
Futharklengthβ›”β›”flatten |> length
Dexsize*β›”β›”
Ivy1 take rhorhorho rhorho ,
SaCshape(a)[0]shape(a)shape(shape(a))prod(shape(a))
ArrayFirea.dims()[0]a.dims()*a.numdims()*a.elements()
MatXa.Shape()[0]a.Shape()a.Rank()TotalSize(a)

πŸ’› Means the REPL has certain limitations

  • Q REPL has no HOME, END, or any arrows (CTRL or not)
  • Nial REPL has no CTRL left or right arrow
  • Futhark REPL has no HOME, END, or DEL
  • Dex REPL as no UP, DOWN and does not work with rlwrap

If you are using Q, Nial, Futhark or other languages with REPL limitations, you can get around this by invoking with rlwrap. On Linux using the Q REPL:

sudo apt install rlwrap
rlwrap taskset -c 2 ./q

Note that even when using rlwrap, some of the limitations will remain (such as CTRL + arrows).

Other Comparisons

  1. Creating an Identity Matrix
  2. Creating an Iota Matrix
  3. Reversing a Matrix Row-wise, Column-wise and in Memory
  4. Summing a Matrix Row-wise, Column-wise and Down to a Scalar

Leetcode / PWC Problems

  • πŸ’š = All solutions complete
  • πŸ’› = Some solutions missing

Progress

Language1a1b23456789
APLπŸ’šβ›”πŸ’šπŸ’šπŸ’šπŸ’šπŸ’šπŸ’šπŸ’šπŸ’š
KapπŸ’šπŸ’šπŸ’šπŸ’šπŸ’šπŸ’šπŸ’šπŸ’šπŸ’šπŸ’š
TinyAPLπŸ’šπŸ’šπŸ’šπŸ’šπŸ’šπŸ’šπŸ’šπŸ’šπŸ’šπŸ’š
JπŸ’šπŸ’šπŸ’šπŸ’šπŸ’šπŸ’šπŸ’šπŸ’šπŸ’šπŸ’š
BQNπŸ’šπŸ’šπŸ’šπŸ’šπŸ’šπŸ’šπŸ’šπŸ’šπŸ’šπŸ’š
UiuaπŸ’šπŸ’šπŸ’šπŸ’šπŸ’šπŸ’šπŸ’šπŸ’šπŸ’šπŸ’š
QπŸ’šπŸ’šπŸ’šπŸ’šπŸ’šπŸ’šπŸ’šπŸ’šπŸ’šπŸ’š
Juliaβ›”πŸ’šπŸ’šβ›”πŸ’šπŸ’šπŸ’šπŸ”œπŸ”œπŸ”œ
MATLABπŸ”œβ›”πŸ’šβ›”πŸ’šπŸ’šπŸ’šπŸ”œπŸ”œπŸ”œ
NumPyπŸ’šπŸ’šπŸ’šβ›”πŸ’šπŸ’šπŸ’šπŸ”œπŸ”œπŸ”œ
RπŸ”œπŸ’šπŸ’šπŸ”œπŸ’šπŸ’šπŸ’šπŸ”œπŸ”œπŸ”œ
NialπŸ’šβ›”πŸ’šπŸ’šπŸ’šπŸ’šπŸ’šπŸ”œπŸ”œπŸ”œ
FutharkπŸ”œπŸ’šπŸ’šπŸ’šπŸ’šπŸ’šπŸ’šπŸ”œπŸ”œπŸ”œ
Dexβ›”β›”πŸ’šβ›”πŸ’šπŸ’šπŸ”œβ›”
Ivyβ›”β›”πŸ’šπŸ’šπŸ’šπŸ’šπŸ’šπŸ”œπŸ”œπŸ”œ
SaCπŸ”œπŸ”œπŸ’šπŸ”œπŸ’šπŸ’šπŸ’šπŸ”œπŸ”œπŸ”œ
ArrayFireπŸ”œπŸ”œπŸ’šπŸ”œπŸ’šπŸ’šπŸ’šπŸ”œπŸ”œπŸ”œ
MatXπŸ”œπŸ”œπŸ’šπŸ”œπŸ’šπŸ’šπŸ”œπŸ”œπŸ”œπŸ”œ

Contributors

codereport

188 commits

athas

2 commits

cliffburdick

2 commits

Garklein

2 commits

Languages

Cuda

59.7%

C++

23.8%

CMake

13.7%

MATLAB

1.8%

Makefile

1.1%