Migration level: Difference between revisions

Jump to navigation Jump to search
m (→‎Documentation: Added link to GNU APL docs)
 
(8 intermediate revisions by 2 users not shown)
Line 1: Line 1:
{{Built-ins3|Migration level|⎕ML|⎕EL|⎕CS}}, '''Evolution level''', or '''Compatibility setting''' is a number that, in [[Dyalog APL]], [[APL+Win]], and [[APLX]] respectively, specifies exact behaviour relative to [[APL2]]. In Dyalog APL and APL+Win, a lower value represents a behaviour closer to the original [[NARS]] specification, while a higher the value represents a behaviour closer to APL2. In APLX, a lower value matches APL2 while a higher value indicates higher [[backwards compatibility]] with [[APL.68000]].
{{Built-ins3|Migration level|⎕ML|)EvLevel|⎕CS}}, '''Evolution level''', or '''Compatibility setting''' is a number that, in [[Dyalog APL]], [[APL+Win]], and [[APLX]] respectively, specifies exact behaviour relative to [[APL2]]. In Dyalog APL and APL+Win, a lower value represents a behaviour closer to the original [[NARS]] specification, while a higher the value represents a behaviour closer to APL2. In APLX, a lower value matches APL2 while a higher value indicates higher [[backwards compatibility]] with [[APL.68000]].


== APL+Win settings ==
== APL+Win settings ==


[TBD]
APL+Win's default is <syntaxhighlight lang=apl inline>)EvLevel 2</syntaxhighlight>.
 
{|class=wikitable
! Feature
! <syntaxhighlight lang=apl inline>)EvLevel 0</syntaxhighlight>
! <syntaxhighlight lang=apl inline>)EvLevel 1</syntaxhighlight>
! <syntaxhighlight lang=apl inline>)EvLevel 2</syntaxhighlight>
|-
| Dyadic <syntaxhighlight lang=apl inline>⊂</syntaxhighlight>
| [[EVOLUTION ERROR]]
| [[Partitioned Enclose]]
| [[Partition]]
|-
| Monadic <syntaxhighlight lang=apl inline>↓</syntaxhighlight>
| [[EVOLUTION ERROR]]
| [[Split]]
| [[SYNTAX ERROR]]
|-
| Monadic <syntaxhighlight lang=apl inline>∊</syntaxhighlight>
| [[EVOLUTION ERROR]]
| [[Type]]
| [[Enlist]]
|-
| Monadic <syntaxhighlight lang=apl inline>↑</syntaxhighlight>
| [[EVOLUTION ERROR]]
| [[Mix]]
| [[First]]
|-
| Monadic <syntaxhighlight lang=apl inline>⊃</syntaxhighlight>
| [[EVOLUTION ERROR]]
| [[First]]
| [[Mix]]
|-
| [[Bracket indexing]] of a [[strand]]
| [[EVOLUTION ERROR]]
| indexing applied to strand as a whole
| [[EVOLUTION ERROR]]
|-
| Unparenthesised [[strand]] [[assignment]]
| [[EVOLUTION ERROR]]
| assigned value distributed to names
| [[EVOLUTION ERROR]]
|-
| <syntaxhighlight lang=apl inline>(/)</syntaxhighlight>
| [[EVOLUTION ERROR]]
| [[Replicate]] [[function]]
| [[EVOLUTION ERROR]]
|-
| <syntaxhighlight lang=apl inline>(\)</syntaxhighlight>
| [[EVOLUTION ERROR]]
| [[Expand]] [[function]]
| [[EVOLUTION ERROR]]
|}
 
=== Work-arounds ===
 
APL+Win provides [[system function]] alternatives to the functions that are affected by moving to evolution level 2:
 
{|class=wikitable
| [[Partitioned Enclose]]
| <syntaxhighlight lang=apl inline>⎕PENCLOSE</syntaxhighlight>
|-
| [[Split]]
| <syntaxhighlight lang=apl inline>⎕SPLIT</syntaxhighlight>
|-
| [[Type]]
| <syntaxhighlight lang=apl inline>⎕TYPE</syntaxhighlight>
|-
| [[Mix]]
| <syntaxhighlight lang=apl inline>⎕MIX</syntaxhighlight>
|-
| [[First]]
| <syntaxhighlight lang=apl inline>⎕FIRST</syntaxhighlight>
|-
| [[Replicate]] [[function]]
| <syntaxhighlight lang=apl inline>⎕REPL</syntaxhighlight>
|-
| [[Expand]] [[function]]
| <syntaxhighlight lang=apl inline>⎕EXPAND</syntaxhighlight>
|}


== Dyalog settings ==
== Dyalog settings ==


Dyalog APL currently offers the following settings:
Dyalog's default setting is currently <syntaxhighlight lang=apl inline>⎕ML=1</syntaxhighlight>.


{| class=wikitable
{| class=wikitable
| <source lang=apl inline>⎕ML=0</source>
! Feature !! <syntaxhighlight lang=apl inline>⎕ML←0</syntaxhighlight> !! <syntaxhighlight lang=apl inline>⎕ML←1</syntaxhighlight> !! <syntaxhighlight lang=apl inline>⎕ML←2</syntaxhighlight> !! <syntaxhighlight lang=apl inline>⎕ML←3</syntaxhighlight>
| <source lang=apl inline>Z←∊R</source>
|-
| Monadic <source lang=apl inline>∊</source> is interpreted as [[Type]] rather than [[Enlist]].
| Monadic <syntaxhighlight lang=apl inline>∊</syntaxhighlight>
| [[Type]]
| [[Enlist]]
| [[Enlist]]
| [[Enlist]]
|-
|-
| <source lang=apl inline>⎕ML=1</source>
| Monadic <syntaxhighlight lang=apl inline></syntaxhighlight>
|  
| [[Mix]]
| Default behaviour
| [[Mix]]
| [[First]]
| [[First]]
|-
|-
| rowspan=3 | <source lang=apl inline>⎕ML≤2</source>
| Monadic <syntaxhighlight lang=apl inline></syntaxhighlight>
| <source lang=apl inline>Z←↑R</source>
| [[First]]
| Monadic <source lang=apl inline>↑</source> is interpreted as [[First]] rather than [[Mix]].
| [[First]]
| [[Mix]]
| [[Mix]]
|-
|-
| <source lang=apl inline>Z←⊃R</source>
| Monadic <syntaxhighlight lang=apl inline></syntaxhighlight> on array of uneven [[depth]]
| Monadic <source lang=apl inline></source> is interpreted as [[Mix]] rather than [[First]].
| negative result
| negative result
| positive result
| positive result
|-  
|-  
| <source lang=apl inline>Z←≡R</source>
| Dyadic <syntaxhighlight lang=apl inline></syntaxhighlight>
| Monadic <source lang=apl inline>≡</source> returns a positive rather than a negative value, if its argument has non-uniform [[depth]].
| [[Partitioned enclose]]
| [[Partitioned enclose]]
| [[Partitioned enclose]]
| [[Partition]]
|-
|-
| rowspan=2| <source lang=apl inline>⎕ML=3</source>
| <syntaxhighlight lang=apl inline>⎕TC</syntaxhighlight>
| <source lang=apl inline>R←X⊂[K]Y</source>
| <syntaxhighlight lang=apl inline>⎕UCS 8 10 13</syntaxhighlight>
| Dyadic <source lang=apl inline></source> is interpreted as [[Partition]] (<source lang=apl inline>⊆</source>) rather than [[Partitioned Enclose]].
| <syntaxhighlight lang=apl inline>⎕UCS 8 10 13</syntaxhighlight>
|-
| <syntaxhighlight lang=apl inline>⎕UCS 8 10 13</syntaxhighlight>
| <source lang=apl inline>⎕TC</source>
| <syntaxhighlight lang=apl inline>⎕UCS 8 13 10</syntaxhighlight>
| The order of the elements of <source lang=apl inline>⎕TC</source> is the same as in APL2.
|}
|}


=== Work-arounds ===
=== Work-arounds ===
When migrating to Dyalog APL, the below drop-ins for the affected [[built-ins]] allow setting <source lang=apl inline>⎕ML←1</source> while preserving code behaviour. It is then safe to programmatically (as shown in the rightmost column) change all occurrences of the affected built-ins with their respective covers.
When migrating to Dyalog APL, the below drop-ins for the affected [[built-ins]] allow setting <syntaxhighlight lang=apl inline>⎕ML←1</syntaxhighlight> while preserving code behaviour. It is then safe to programmatically (as shown in the rightmost column) change all occurrences of the affected built-ins with their respective covers.


{| class=wikitable
{| class=wikitable
! Migrating from !! Define !! Then run this on all code
! Migrating from !! Define !! Then run this on all code
|-
|-
| <source lang=apl inline>⎕ML=0</source>
| <syntaxhighlight lang=apl inline>⎕ML=0</syntaxhighlight>
| <source lang=apl>Epsilon←{×⎕NC'⍺':⍺∊⍵ ⋄ ⊃0⍴⊂⍵}</source>
| <syntaxhighlight lang=apl>Epsilon←{×⎕NC'⍺':⍺∊⍵ ⋄ ⊃0⍴⊂⍵}</syntaxhighlight>
| <source lang=apl inline>'''[^'']+''' '∊'⎕R'&' 'Epsilon'</source>
| <syntaxhighlight lang=apl inline>'''[^'']+''' '∊'⎕R'&' ' Epsilon '</syntaxhighlight>
|-
|-
| <source lang=apl inline>⎕ML=2</source>
| <syntaxhighlight lang=apl inline>⎕ML=2</syntaxhighlight>
| <source lang=apl>
| <syntaxhighlight lang=apl>
UpArrow←{×⎕NC'⍺':⍺↑⍵ ⋄ ⊃⍵}
UpArrow←{×⎕NC'⍺':⍺↑⍵ ⋄ ⊃⍵}
RightShoe←{×⎕NC'⍺':⍺↑⍵ ⋄ ↑⍵}
RightShoe←{×⎕NC'⍺':⍺↑⍵ ⋄ ↑⍵}
EqualUnderbar←|≡
EqualUnderbar←|≡
</source>
</syntaxhighlight>
| <source lang=apl inline>'''[^'']+''' '↑' '⊃' '≡'⎕R'&' 'UpArrow' 'RightShoe' 'EqualUnderbar'</source>
| <syntaxhighlight lang=apl inline>'''[^'']+''' '↑' '⊃' '≡'⎕R'&' ' UpArrow ' ' RightShoe ' ' EqualUnderbar '</syntaxhighlight>
|-
|-
| <source lang=apl inline>⎕ML=3</source>
| <syntaxhighlight lang=apl inline>⎕ML=3</syntaxhighlight>
| <source lang=apl>
| <syntaxhighlight lang=apl>
UpArrow←{×⎕NC'⍺':⍺↑⍵ ⋄ ⊃⍵}
UpArrow←{×⎕NC'⍺':⍺↑⍵ ⋄ ⊃⍵}
RightShoe←{×⎕NC'⍺':⍺↑⍵ ⋄ ↑⍵}
RightShoe←{×⎕NC'⍺':⍺↑⍵ ⋄ ↑⍵}
Line 61: Line 153:
LeftShoe←{×⎕NC'⍺':⍺⊆⍵ ⋄ ⊂⍵}
LeftShoe←{×⎕NC'⍺':⍺⊆⍵ ⋄ ⊂⍵}
quadTC←(⎕UCS 8 13 10)
quadTC←(⎕UCS 8 13 10)
</source>
</syntaxhighlight>
| <source lang=apl inline>'''[^'']+''' '↑' '⊃' '≡' '⊂' '⎕TC'⎕R'&' 'UpArrow' 'RightShoe' 'EqualUnderbar' 'LeftShoe' ' quadTC'</source>
| <syntaxhighlight lang=apl inline>'''[^'']+''' '↑' '⊃' '≡' '⊂' '⎕TC'⎕R'&' ' UpArrow ' ' RightShoe ' ' EqualUnderbar ' ' LeftShoe ' ' quadTC '</syntaxhighlight>
|}
|}
Alternatively, the definitions can be used directly inside the text substitutions, whereby one avoids polluting existing code with these cover names.
Alternatively, the definitions can be used directly inside the text substitutions, whereby one avoids polluting existing code with these cover names.
Line 71: Line 163:


{|class=wikitable
{|class=wikitable
| <source lang=apl inline>⎕CS←1</source> || [[Strand notation|Stranding]] is done before [[bracket indexing]]
| <syntaxhighlight lang=apl inline>⎕CS←1</syntaxhighlight> || [[Strand notation|Stranding]] is done before [[bracket indexing]]
|-
|-
| <source lang=apl inline>⎕CS←2</source> || The [[name class]] of an invalid name is 4 rather than ¯1.
| <syntaxhighlight lang=apl inline>⎕CS←2</syntaxhighlight> || The [[name class]] of an invalid name is 4 rather than ¯1.
|-
|-
| <source lang=apl inline>⎕CS←4</source> || Format (<source lang=apl inline>⍕</source>) and default output uses the same width for all columns, rather than determining  the  width separately for  each column.
| <syntaxhighlight lang=apl inline>⎕CS←4</syntaxhighlight> || Format (<syntaxhighlight lang=apl inline>⍕</syntaxhighlight>) and default output uses the same width for all columns, rather than determining  the  width separately for  each column.
|}
|}


Line 84: Line 176:
* [https://help.dyalog.com/latest/#Language/System%20Functions/ml.htm Dyalog]
* [https://help.dyalog.com/latest/#Language/System%20Functions/ml.htm Dyalog]
* [http://microapl.com/apl_help/ch_020_070_140.htm APLX]
* [http://microapl.com/apl_help/ch_020_070_140.htm APLX]
* [https://www.gnu.org/software/apl/apl.html GNU APL]
{{APL built-ins}}{{APL glyphs}}[[Category:System constants]]
 
{{APL built-ins}}[[Category:System constants]]

Navigation menu