Migration level: Difference between revisions
m (Text replacement - "<source" to "<syntaxhighlight") |
m (Text replacement - "</source>" to "</syntaxhighlight>") Tags: Mobile edit Mobile web edit |
||
Line 10: | Line 10: | ||
{| class=wikitable | {| class=wikitable | ||
| <syntaxhighlight lang=apl inline>⎕ML=0</ | | <syntaxhighlight lang=apl inline>⎕ML=0</syntaxhighlight> | ||
| <syntaxhighlight lang=apl inline>Z←∊R</ | | <syntaxhighlight lang=apl inline>Z←∊R</syntaxhighlight> | ||
| Monadic <syntaxhighlight lang=apl inline>∊</ | | Monadic <syntaxhighlight lang=apl inline>∊</syntaxhighlight> is interpreted as [[Type]] rather than [[Enlist]]. | ||
|- | |- | ||
| <syntaxhighlight lang=apl inline>⎕ML=1</ | | <syntaxhighlight lang=apl inline>⎕ML=1</syntaxhighlight> | ||
| | | | ||
| Default behaviour | | Default behaviour | ||
|- | |- | ||
| rowspan=3 | <syntaxhighlight lang=apl inline>⎕ML≥2</ | | rowspan=3 | <syntaxhighlight lang=apl inline>⎕ML≥2</syntaxhighlight> | ||
| <syntaxhighlight lang=apl inline>Z←↑R</ | | <syntaxhighlight lang=apl inline>Z←↑R</syntaxhighlight> | ||
| Monadic <syntaxhighlight lang=apl inline>↑</ | | Monadic <syntaxhighlight lang=apl inline>↑</syntaxhighlight> is interpreted as [[First]] rather than [[Mix]]. | ||
|- | |- | ||
| <syntaxhighlight lang=apl inline>Z←⊃R</ | | <syntaxhighlight lang=apl inline>Z←⊃R</syntaxhighlight> | ||
| Monadic <syntaxhighlight lang=apl inline>⊃</ | | Monadic <syntaxhighlight lang=apl inline>⊃</syntaxhighlight> is interpreted as [[Mix]] rather than [[First]]. | ||
|- | |- | ||
| <syntaxhighlight lang=apl inline>Z←≡R</ | | <syntaxhighlight lang=apl inline>Z←≡R</syntaxhighlight> | ||
| Monadic <syntaxhighlight lang=apl inline>≡</ | | Monadic <syntaxhighlight lang=apl inline>≡</syntaxhighlight> returns a positive rather than a negative value, if its argument has non-uniform [[depth]]. | ||
|- | |- | ||
| rowspan=2| <syntaxhighlight lang=apl inline>⎕ML=3</ | | rowspan=2| <syntaxhighlight lang=apl inline>⎕ML=3</syntaxhighlight> | ||
| <syntaxhighlight lang=apl inline>R←X⊂[K]Y</ | | <syntaxhighlight lang=apl inline>R←X⊂[K]Y</syntaxhighlight> | ||
| Dyadic <syntaxhighlight lang=apl inline>⊂</ | | Dyadic <syntaxhighlight lang=apl inline>⊂</syntaxhighlight> is interpreted as [[Partition]] (<syntaxhighlight lang=apl inline>⊆</syntaxhighlight>) rather than [[Partitioned Enclose]]. | ||
|- | |- | ||
| <syntaxhighlight lang=apl inline>⎕TC</ | | <syntaxhighlight lang=apl inline>⎕TC</syntaxhighlight> | ||
| The order of the elements of <syntaxhighlight lang=apl inline>⎕TC</ | | The order of the elements of <syntaxhighlight lang=apl inline>⎕TC</syntaxhighlight> 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 <syntaxhighlight lang=apl inline>⎕ML←1</ | 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 | ||
|- | |- | ||
| <syntaxhighlight lang=apl inline>⎕ML=0</ | | <syntaxhighlight lang=apl inline>⎕ML=0</syntaxhighlight> | ||
| <syntaxhighlight lang=apl>Epsilon←{×⎕NC'⍺':⍺∊⍵ ⋄ ⊃0⍴⊂⍵}</ | | <syntaxhighlight lang=apl>Epsilon←{×⎕NC'⍺':⍺∊⍵ ⋄ ⊃0⍴⊂⍵}</syntaxhighlight> | ||
| <syntaxhighlight lang=apl inline>'''[^'']+''' '∊'⎕R'&' 'Epsilon'</ | | <syntaxhighlight lang=apl inline>'''[^'']+''' '∊'⎕R'&' 'Epsilon'</syntaxhighlight> | ||
|- | |- | ||
| <syntaxhighlight lang=apl inline>⎕ML=2</ | | <syntaxhighlight lang=apl inline>⎕ML=2</syntaxhighlight> | ||
| <syntaxhighlight lang=apl> | | <syntaxhighlight lang=apl> | ||
UpArrow←{×⎕NC'⍺':⍺↑⍵ ⋄ ⊃⍵} | UpArrow←{×⎕NC'⍺':⍺↑⍵ ⋄ ⊃⍵} | ||
RightShoe←{×⎕NC'⍺':⍺↑⍵ ⋄ ↑⍵} | RightShoe←{×⎕NC'⍺':⍺↑⍵ ⋄ ↑⍵} | ||
EqualUnderbar←|≡ | EqualUnderbar←|≡ | ||
</ | </syntaxhighlight> | ||
| <syntaxhighlight lang=apl inline>'''[^'']+''' '↑' '⊃' '≡'⎕R'&' 'UpArrow' 'RightShoe' 'EqualUnderbar'</ | | <syntaxhighlight lang=apl inline>'''[^'']+''' '↑' '⊃' '≡'⎕R'&' 'UpArrow' 'RightShoe' 'EqualUnderbar'</syntaxhighlight> | ||
|- | |- | ||
| <syntaxhighlight lang=apl inline>⎕ML=3</ | | <syntaxhighlight lang=apl inline>⎕ML=3</syntaxhighlight> | ||
| <syntaxhighlight lang=apl> | | <syntaxhighlight lang=apl> | ||
UpArrow←{×⎕NC'⍺':⍺↑⍵ ⋄ ⊃⍵} | UpArrow←{×⎕NC'⍺':⍺↑⍵ ⋄ ⊃⍵} | ||
Line 61: | Line 61: | ||
LeftShoe←{×⎕NC'⍺':⍺⊆⍵ ⋄ ⊂⍵} | LeftShoe←{×⎕NC'⍺':⍺⊆⍵ ⋄ ⊂⍵} | ||
quadTC←(⎕UCS 8 13 10) | quadTC←(⎕UCS 8 13 10) | ||
</ | </syntaxhighlight> | ||
| <syntaxhighlight lang=apl inline>'''[^'']+''' '↑' '⊃' '≡' '⊂' '⎕TC'⎕R'&' 'UpArrow' 'RightShoe' 'EqualUnderbar' 'LeftShoe' ' quadTC'</ | | <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 71: | ||
{|class=wikitable | {|class=wikitable | ||
| <syntaxhighlight lang=apl inline>⎕CS←1</ | | <syntaxhighlight lang=apl inline>⎕CS←1</syntaxhighlight> || [[Strand notation|Stranding]] is done before [[bracket indexing]] | ||
|- | |- | ||
| <syntaxhighlight lang=apl inline>⎕CS←2</ | | <syntaxhighlight lang=apl inline>⎕CS←2</syntaxhighlight> || The [[name class]] of an invalid name is 4 rather than ¯1. | ||
|- | |- | ||
| <syntaxhighlight lang=apl inline>⎕CS←4</ | | <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. | ||
|} | |} | ||
Revision as of 22:27, 10 September 2022
⎕ML ⎕EL ⎕CS
|
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.
APL+Win settings
[TBD]
Dyalog settings
Dyalog APL currently offers the following settings:
⎕ML=0
|
Z←∊R
|
Monadic ∊ is interpreted as Type rather than Enlist.
|
⎕ML=1
|
Default behaviour | |
⎕ML≥2
|
Z←↑R
|
Monadic ↑ is interpreted as First rather than Mix.
|
Z←⊃R
|
Monadic ⊃ is interpreted as Mix rather than First.
| |
Z←≡R
|
Monadic ≡ returns a positive rather than a negative value, if its argument has non-uniform depth.
| |
⎕ML=3
|
R←X⊂[K]Y
|
Dyadic ⊂ is interpreted as Partition (⊆ ) rather than Partitioned Enclose.
|
⎕TC
|
The order of the elements of ⎕TC is the same as in APL2.
|
Work-arounds
When migrating to Dyalog APL, the below drop-ins for the affected built-ins allow setting ⎕ML←1
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.
Migrating from | Define | Then run this on all code |
---|---|---|
⎕ML=0
|
Epsilon←{×⎕NC'⍺':⍺∊⍵ ⋄ ⊃0⍴⊂⍵} |
'''[^'']+''' '∊'⎕R'&' 'Epsilon'
|
⎕ML=2
|
UpArrow←{×⎕NC'⍺':⍺↑⍵ ⋄ ⊃⍵} RightShoe←{×⎕NC'⍺':⍺↑⍵ ⋄ ↑⍵} EqualUnderbar←|≡ |
'''[^'']+''' '↑' '⊃' '≡'⎕R'&' 'UpArrow' 'RightShoe' 'EqualUnderbar'
|
⎕ML=3
|
UpArrow←{×⎕NC'⍺':⍺↑⍵ ⋄ ⊃⍵} RightShoe←{×⎕NC'⍺':⍺↑⍵ ⋄ ↑⍵} EqualUnderbar←(|≡) LeftShoe←{×⎕NC'⍺':⍺⊆⍵ ⋄ ⊂⍵} quadTC←(⎕UCS 8 13 10) |
'''[^'']+''' '↑' '⊃' '≡' '⊂' '⎕TC'⎕R'&' 'UpArrow' 'RightShoe' 'EqualUnderbar' 'LeftShoe' ' quadTC'
|
Alternatively, the definitions can be used directly inside the text substitutions, whereby one avoids polluting existing code with these cover names.
APLX settings
APLX treats the value as a collection of individual bits, thus allowing the combination of an exact set of behaviours:
⎕CS←1 |
Stranding is done before bracket indexing |
⎕CS←2 |
The name class of an invalid name is 4 rather than ¯1. |
⎕CS←4 |
Format (⍕ ) and default output uses the same width for all columns, rather than determining the width separately for each column.
|
External links
Documentation
APL glyphs [edit] | |
---|---|
Information | Glyph ∙ Typing glyphs (on Linux) ∙ Unicode ∙ Fonts ∙ Mnemonics ∙ Overstrikes ∙ Migration level |
Individual glyphs | Jot (∘ ) ∙ Right Shoe (⊃ ) ∙ Up Arrow (↑ ) ∙ Zilde (⍬ ) ∙ High minus (¯ ) ∙ Dot (. ) ∙ Del (∇ )
|