Ngn/apl: Difference between revisions

Jump to navigation Jump to search
1,149 bytes added ,  09:01, 27 April 2023
rework most of the page
m (Typo)
(rework most of the page)
Line 19: Line 19:
}}
}}
'''ngn/apl''' is an APL bytecode compiler and interpreter by [[Nick Nickolov]]. Because it is implemented in [[wikipedia:Javascript|Javascript]], it can be run in [[wikipedia:Node.js|Node.js]] or any modern browser.
'''ngn/apl''' is an APL bytecode compiler and interpreter by [[Nick Nickolov]]. Because it is implemented in [[wikipedia:Javascript|Javascript]], it can be run in [[wikipedia:Node.js|Node.js]] or any modern browser.
ngn/apl supports most of the core language of [[Dyalog APL 14.0]],: [[dfn]]s (<syntaxhighlight lang=apl inline>{⍺ ⍵}</syntaxhighlight>), [[nested array]]s, [[complex number]]s (<syntaxhighlight lang=apl inline>1j2</syntaxhighlight>), [[Function train|forks and atops]], [[Multiple assignment|strand assignment]] (<syntaxhighlight lang=apl inline>(a b)←c</syntaxhighlight>), [[indexed assignment]] (<syntaxhighlight lang=apl inline>a[b]←c</syntaxhighlight>), and [[dop|user-defined operators]] (<syntaxhighlight lang=apl inline>{⍺⍺ ⍵⍵}</syntaxhighlight>), but does not support [[Key]] (<syntaxhighlight lang=apl inline>⌸</syntaxhighlight>), [[Rank (operator)|Rank (operator]] (<syntaxhighlight lang=apl inline>⍤</syntaxhighlight>) [[tradfn]]s (<syntaxhighlight lang=apl inline>∇R←X f Y</syntaxhighlight>), non-zero [[index origin]] (<syntaxhighlight lang=apl inline>⎕IO←1</syntaxhighlight>), [[comparison tolerance]] (<syntaxhighlight lang=apl inline>⎕CT</syntaxhighlight>), [[prototype]]s (it always uses zero as fill), [[modified assignment]] (<syntaxhighlight lang=apl inline>x+←1</syntaxhighlight>), [[keyword]]s (<syntaxhighlight lang=apl inline>:If</syntaxhighlight>), [[object-oriented programming]], or [[namespace]]s. It extends Dyalog APL with [[Infinity|infinities]] (<syntaxhighlight lang=apl inline>¯</syntaxhighlight> or <syntaxhighlight lang=apl inline>∞</syntaxhighlight>) and a few additional primitives.


On December 27, 2020, Nickolov announced that he would discard his implementation.<ref>Nickolov, N. "ngn". [https://chat.stackexchange.com/transcript/message/56558504#56558504 Announcement]. [[APL Orchard]]. Stack Exchange chat.</ref> Soon after, [[Adám Brudzewsky]] took up the mantle of hosting the source and online demo.<ref>Brudzewsky, A. "Adám". [https://chat.stackexchange.com/transcript/message/56558600#56558600 Announcement]. [[APL Orchard]]. Stack Exchange chat.</ref>
On December 27, 2020, Nickolov announced that he would discard his implementation.<ref>Nickolov, N. "ngn". [https://chat.stackexchange.com/transcript/message/56558504#56558504 Announcement]. [[APL Orchard]]. Stack Exchange chat.</ref> Soon after, [[Adám Brudzewsky]] took up the mantle of hosting the source and online demo.<ref>Brudzewsky, A. "Adám". [https://chat.stackexchange.com/transcript/message/56558600#56558600 Announcement]. [[APL Orchard]]. Stack Exchange chat.</ref>
[[File:Ngn/apl|center|thumb|ngn/apl's [https://abrudz.github.io/ngn-apl/web/ demo interface]]]
[[File:Ngn/apl|center|thumb|ngn/apl's [https://abrudz.github.io/ngn-apl/web/ demo interface]]]
== External link ==
 
== Features ==
 
ngn/apl partially supports some of the core language of [[Dyalog APL 14.0]]:
* [[dfn]]s (<syntaxhighlight lang=apl inline>{⍺ ⍵}</syntaxhighlight>)
* [[nested array]]s
* [[complex number]]s (<syntaxhighlight lang=apl inline>1j2</syntaxhighlight>)
* [[Function train|forks and atops]]
* [[Multiple assignment|strand assignment]] (<syntaxhighlight lang=apl inline>(a b)←c</syntaxhighlight>)
* [[indexed assignment]] (<syntaxhighlight lang=apl inline>a[b]←c</syntaxhighlight>)
* [[dop|user-defined operators]] (<syntaxhighlight lang=apl inline>{⍺⍺ ⍵⍵}</syntaxhighlight>), using the <syntaxhighlight lang=apl inline>⍶</syntaxhighlight> and <syntaxhighlight lang=apl inline>⍹</syntaxhighlight> glyphs in place of Dyalog's <syntaxhighlight lang=apl inline>⍺⍺</syntaxhighlight> and <syntaxhighlight lang=apl inline>⍵⍵</syntaxhighlight>.
 
The following features of Dyalog APL are not supported:
* <syntaxhighlight lang=apl inline>!</syntaxhighlight> does not work with negative or complex operands.
* [[Where]] (<syntaxhighlight lang=apl inline>⍸</syntaxhighlight>)
* [[Over]] (<syntaxhighlight lang=apl inline>⍥</syntaxhighlight>)
* [[Atop]] (<syntaxhighlight lang=apl inline>⍤</syntaxhighlight>)
* [[Nest]] (<syntaxhighlight lang=apl inline>⊆</syntaxhighlight>)
* [[Partitioned enclose]] (<syntaxhighlight lang=apl inline>⊆</syntaxhighlight>)
* [[At]] (<syntaxhighlight lang=apl inline>@</syntaxhighlight>)
* [[Stencil]] (<syntaxhighlight lang=apl inline>⌺</syntaxhighlight>)
* [[Unique mask]] (<syntaxhighlight lang=apl inline>≠</syntaxhighlight>)
* [[Key]] (<syntaxhighlight lang=apl inline>⌸</syntaxhighlight>)
* [[Rank (operator)|Rank (operator]] (<syntaxhighlight lang=apl inline>⍤</syntaxhighlight>)
* [[tradfn]]s (<syntaxhighlight lang=apl inline>∇R←X f Y</syntaxhighlight>)
* non-zero [[index origin]] (<syntaxhighlight lang=apl inline>⎕IO←1</syntaxhighlight>)
* [[comparison tolerance]] (<syntaxhighlight lang=apl inline>⎕CT</syntaxhighlight>)
* [[prototype]]s (it always uses zero as fill)
* [[modified assignment]] (<syntaxhighlight lang=apl inline>x+←1</syntaxhighlight>)
* [[keyword]]s (<syntaxhighlight lang=apl inline>:If</syntaxhighlight>)
* [[object-oriented programming]]
* [[namespace]]s.
 
It extends Dyalog APL with:
* [[Infinity|infinities]] (<syntaxhighlight lang=apl inline>¯</syntaxhighlight> or <syntaxhighlight lang=apl inline>∞</syntaxhighlight>)
* the identity element operator (<syntaxhighlight lang=apl inline>⍁</syntaxhighlight>)
* exceptions (<syntaxhighlight lang=apl inline>↗</syntaxhighlight>)
 
== External links ==
* [http://archive.vector.org.uk/art10501160 ''Compiling APL to JavaScript''] article in the [[Vector journal]]
* [http://archive.vector.org.uk/art10501160 ''Compiling APL to JavaScript''] article in the [[Vector journal]]
* [https://repl.it/languages/APL ngn/apl on REPL]
* [https://repl.it/languages/APL ngn/apl on REPL]

Navigation menu