Ngn/apl: Difference between revisions

Jump to navigation Jump to search
2,278 bytes added ,  12:25, 31 August 2023
Link removed
m (→‎External link: minor clarification of link)
(Link removed)
 
(13 intermediate revisions by 5 users not shown)
Line 1: Line 1:
{{DISPLAYTITLE:ngn/apl}}{{Infobox array language
{{DISPLAYTITLE:ngn/apl}}{{Infobox array language
| logo                    = [[File:Ngn-apl logo.png]]
| title                    = ngn/apl
| title                    = ngn/apl
| array model              = [[nested array model|nested]]
| array model              = [[nested array model|nested]]
Line 10: Line 11:
| latest release version  = 2018 (unversioned)
| latest release version  = 2018 (unversioned)
| implementation language  = [[wikipedia:Javascript|Javascript]]
| implementation language  = [[wikipedia:Javascript|Javascript]]
| source                  = [https://gitlab.com/n9n/apl/blob/master/apl.js GitLab]
| source                  = [https://github.com/abrudz/ngn-apl/ GitHub]
| platforms                = In-browser, [[wikipedia:Node.js|Node.js]]
| platforms                = In-browser, [[wikipedia:Node.js|Node.js]]
| license                  = [[wikipedia:MIT_License|MIT]]
| license                  = [[wikipedia:MIT_License|MIT]]
| website                  = [https://gitlab.com/n9n/apl gitlab.com/n9n/apl]
| website                  = [https://github.com/abrudz/ngn-apl/ github.com/abrudz/ngn-apl]
| influenced by            = [[Dyalog APL]]
| influenced by            = [[Dyalog APL]]
| run online              = [https://repl.it/languages/APL REPL]
| run online              = [https://abrudz.github.io/ngn-apl/web/ In-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''' 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 primitives, [[dfn]]s (<source lang=apl inline>{⍺ ⍵}</source>), [[nested array]]s, [[complex number]]s (<source lang=apl inline>1j2</source>), [[Infinity|infinities]] (<source lang=apl inline>¯</source> or <source lang=apl inline>∞</source>), [[Function train|forks and atops]], [[Multiple assignment|strand assignment]] (<source lang=apl inline>(a b)←c</source>), [[indexed assignment]] (<source lang=apl inline>a[b]←c</source>), [[dop|user-defined operators]] (<source lang=apl inline>{⍺⍺ ⍵⍵}</source>), but does not support [[tradfn]]s (<source lang=apl inline>∇R←X f Y</source>), non-zero [[index origin]] (<source lang=apl inline>⎕IO</source>), [[comparison tolerance]] (<source lang=apl inline>⎕CT</source>), [[prototype]]s, [[modified assignment]] (<source lang=apl inline>x+←1</source>), [[keyword]]s (<source lang=apl inline>:If</source>), [[object-oriented programming]], [[namespace]]s.
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://n9n.gitlab.io/apl/web demo interface]]]
[[File:Ngn/apl|center|thumb|ngn/apl's [https://abrudz.github.io/ngn-apl/web/ demo interface]]]
== External link ==
 
* [http://archive.vector.org.uk/art10501160 ''Compiling APL to JavaScript''] article in the [[Vector Journal]]
== Features ==
* [https://n9n.gitlab.io/apl/web Online demo]
 
* [https://plj541.github.io/APL.js/ Online session]
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.
* inverses.
 
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]]
* [https://repl.it/languages/APL ngn/apl on REPL]
* [https://repl.it/languages/APL ngn/apl on REPL]
* [https://tio.run/#apl-ngn ngn/APL on Try It Online]
* [https://tio.run/#apl-ngn ngn/APL on Try It Online]
* [https://gitlab.com/n9n/apl Source code]
* [https://abrudz.github.io/ngn-apl/web/ Online demo]
 
* [https://plj541.github.io/APL.js/ Online session]
{{APL dialects}}[[Category:APL dialects]][[Category:Nested array languages]][[Category:Leading axis languages]][[Category:Languages with tacit programming]][[Category:Compilers]]
* [https://github.com/abrudz/ngn-apl/ Source code]
== References ==
<references/>
{{APL dialects}}[[Category:APL dialects]][[Category:Nested array languages]][[Category:Leading axis languages]][[Category:Languages with tacit programming]][[Category:IR compilers]]

Navigation menu