One more little benchmark, this time doing a variety of primitives. ⎕IO←0
∇ [0] TIME X;TS [1] TS←⎕TS [2] ⍎X [3] (⍕(24 60 60 1000⊥¯4↑⎕TS-TS)÷1000),' Seconds.' ∇ ∇ [0] Z←SHOW X;I [1] Z←(I,50)⍴(50×I←⌈(⍴X)÷50)↑X←,X ∇ ∇ [0] Z←X TIMES Y;D;I;C [1] Z←+⌿(-⍳⍴X)⌽Z←((⍴X),(⍴X)+⍴Y)↑Z←(D⍳X←⌽,X)∘.×(D←'0123456789')⍳Y←⌽,Y [2] I←¯1◊C←0 [3] L1:→((I←I+1)⍴Z)/L2 [4] C←⌊(÷10)×Z[I]←Z[I]+C [5] Z[I]←10|Z[I] [6] →L1 [7] L2:Z←((¯1+⍴Z)⌊+/∧\'0'=Z)↓Z←D[⌽Z] ∇ ∇ [0] Z←FACTORIAL N;I [1] Z←,'1'◊I←1 [2] L1:→((I←I+1)>N)/0 [3] Z←Z TIMES⍕I [4] →L1 ∇ [IBM APL2] TIME 'SHOW FACTORIAL 300' 30605751221644063603537046129726862938858880417357 69994167767412594765331767168674655152914224775733 49939147888701726368864263907759003154226842927906 97455984122547693027195460400801221577625217685425 59653569035067887252643218962642993652045764488303 88909753943489625436053225980776521270822437639449 12012867867536830571229368194364995646049816645022 77165001851765464693401122260347297240663332585835 06870150169794168850353752137554910289126407157154 83028228493795263658014523523315693648223343679925 45940952768206080622328123873838808170496000000000 00000000000000000000000000000000000000000000000000 000000000000000 2.078 Seconds. [GNU APL] TIME 'SHOW FACTORIAL 300' 30605751221644063603537046129726862938858880417357 69994167767412594765331767168674655152914224775733 49939147888701726368864263907759003154226842927906 97455984122547693027195460400801221577625217685425 59653569035067887252643218962642993652045764488303 88909753943489625436053225980776521270822437639449 12012867867536830571229368194364995646049816645022 77165001851765464693401122260347297240663332585835 06870150169794168850353752137554910289126407157154 83028228493795263658014523523315693648223343679925 45940952768206080622328123873838808170496000000000 00000000000000000000000000000000000000000000000000 000000000000000 52.547 Seconds. I see these numbers, ~2 seconds and ~52 seconds a lot, so I will conclude object-oriented APL is about 25 times as slow as fine-tuned machine language APL. Not too bad a penalty for portability across a wide spectrum of CPU architectures and Operating Systems. With modern commodity processors doing billion of instructions per second, most people probably won't even notice.