Migration level: Difference between revisions

From APL Wiki
Jump to navigation Jump to search
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</source>
| <syntaxhighlight lang=apl inline>⎕ML=0</syntaxhighlight>
| <syntaxhighlight lang=apl inline>Z←∊R</source>
| <syntaxhighlight lang=apl inline>Z←∊R</syntaxhighlight>
| Monadic <syntaxhighlight lang=apl inline>∊</source> is interpreted as [[Type]] rather than [[Enlist]].
| Monadic <syntaxhighlight lang=apl inline>∊</syntaxhighlight> is interpreted as [[Type]] rather than [[Enlist]].
|-
|-
| <syntaxhighlight lang=apl inline>⎕ML=1</source>
| <syntaxhighlight lang=apl inline>⎕ML=1</syntaxhighlight>
|  
|  
| Default behaviour
| Default behaviour
|-
|-
| rowspan=3 | <syntaxhighlight lang=apl inline>⎕ML≥2</source>
| rowspan=3 | <syntaxhighlight lang=apl inline>⎕ML≥2</syntaxhighlight>
| <syntaxhighlight lang=apl inline>Z←↑R</source>
| <syntaxhighlight lang=apl inline>Z←↑R</syntaxhighlight>
| Monadic <syntaxhighlight lang=apl inline>↑</source> is interpreted as [[First]] rather than [[Mix]].
| Monadic <syntaxhighlight lang=apl inline>↑</syntaxhighlight> is interpreted as [[First]] rather than [[Mix]].
|-
|-
| <syntaxhighlight lang=apl inline>Z←⊃R</source>
| <syntaxhighlight lang=apl inline>Z←⊃R</syntaxhighlight>
| Monadic <syntaxhighlight lang=apl inline>⊃</source> is interpreted as [[Mix]] rather than [[First]].
| Monadic <syntaxhighlight lang=apl inline>⊃</syntaxhighlight> is interpreted as [[Mix]] rather than [[First]].
|-  
|-  
| <syntaxhighlight lang=apl inline>Z←≡R</source>
| <syntaxhighlight lang=apl inline>Z←≡R</syntaxhighlight>
| Monadic <syntaxhighlight lang=apl inline>≡</source> returns a positive rather than a negative value, if its argument has non-uniform [[depth]].
| 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</source>
| rowspan=2| <syntaxhighlight lang=apl inline>⎕ML=3</syntaxhighlight>
| <syntaxhighlight lang=apl inline>R←X⊂[K]Y</source>
| <syntaxhighlight lang=apl inline>R←X⊂[K]Y</syntaxhighlight>
| Dyadic <syntaxhighlight lang=apl inline>⊂</source> is interpreted as [[Partition]] (<syntaxhighlight lang=apl inline>⊆</source>) rather than [[Partitioned Enclose]].
| Dyadic <syntaxhighlight lang=apl inline>⊂</syntaxhighlight> is interpreted as [[Partition]] (<syntaxhighlight lang=apl inline>⊆</syntaxhighlight>) rather than [[Partitioned Enclose]].
|-  
|-  
| <syntaxhighlight lang=apl inline>⎕TC</source>
| <syntaxhighlight lang=apl inline>⎕TC</syntaxhighlight>
| The order of the elements of <syntaxhighlight lang=apl inline>⎕TC</source> is the same as in APL2.
| 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</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
|-
|-
| <syntaxhighlight lang=apl inline>⎕ML=0</source>
| <syntaxhighlight lang=apl inline>⎕ML=0</syntaxhighlight>
| <syntaxhighlight lang=apl>Epsilon←{×⎕NC'⍺':⍺∊⍵ ⋄ ⊃0⍴⊂⍵}</source>
| <syntaxhighlight lang=apl>Epsilon←{×⎕NC'⍺':⍺∊⍵ ⋄ ⊃0⍴⊂⍵}</syntaxhighlight>
| <syntaxhighlight lang=apl inline>'''[^'']+''' '∊'⎕R'&' 'Epsilon'</source>
| <syntaxhighlight lang=apl inline>'''[^'']+''' '∊'⎕R'&' 'Epsilon'</syntaxhighlight>
|-
|-
| <syntaxhighlight lang=apl inline>⎕ML=2</source>
| <syntaxhighlight lang=apl inline>⎕ML=2</syntaxhighlight>
| <syntaxhighlight lang=apl>
| <syntaxhighlight lang=apl>
UpArrow←{×⎕NC'⍺':⍺↑⍵ ⋄ ⊃⍵}
UpArrow←{×⎕NC'⍺':⍺↑⍵ ⋄ ⊃⍵}
RightShoe←{×⎕NC'⍺':⍺↑⍵ ⋄ ↑⍵}
RightShoe←{×⎕NC'⍺':⍺↑⍵ ⋄ ↑⍵}
EqualUnderbar←|≡
EqualUnderbar←|≡
</source>
</syntaxhighlight>
| <syntaxhighlight lang=apl inline>'''[^'']+''' '↑' '⊃' '≡'⎕R'&' 'UpArrow' 'RightShoe' 'EqualUnderbar'</source>
| <syntaxhighlight lang=apl inline>'''[^'']+''' '↑' '⊃' '≡'⎕R'&' 'UpArrow' 'RightShoe' 'EqualUnderbar'</syntaxhighlight>
|-
|-
| <syntaxhighlight lang=apl inline>⎕ML=3</source>
| <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)
</source>
</syntaxhighlight>
| <syntaxhighlight 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 71:


{|class=wikitable
{|class=wikitable
| <syntaxhighlight 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]]
|-
|-
| <syntaxhighlight 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.
|-
|-
| <syntaxhighlight lang=apl inline>⎕CS←4</source> || Format (<syntaxhighlight 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.
|}
|}



Latest 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 ZR Monadic is interpreted as Type rather than Enlist.
⎕ML=1 Default behaviour
⎕ML2 ZR Monadic is interpreted as First rather than Mix.
ZR Monadic is interpreted as Mix rather than First.
ZR Monadic returns a positive rather than a negative value, if its argument has non-uniform depth.
⎕ML=3 RX[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 ⎕ML1 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:

⎕CS1 Stranding is done before bracket indexing
⎕CS2 The name class of an invalid name is 4 rather than ¯1.
⎕CS4 Format () and default output uses the same width for all columns, rather than determining the width separately for each column.

External links

Documentation

APL built-ins [edit]
Primitive functions
Scalar
Monadic ConjugateNegateSignumReciprocalMagnitudeExponentialNatural LogarithmFloorCeilingFactorialNotPi TimesRollTypeImaginarySquare Root
Dyadic AddSubtractTimesDivideResiduePowerLogarithmMinimumMaximumBinomialComparison functionsBoolean functions (And, Or, Nand, Nor) ∙ GCDLCMCircularComplexRoot
Non-Scalar
Structural ShapeReshapeTallyDepthRavelEnlistTableCatenateReverseRotateTransposeRazeMixSplitEncloseNestCut (K)PairLinkPartitioned EnclosePartition
Selection FirstPickTakeDropUniqueIdentitySelectReplicateExpandSet functions (IntersectionUnionWithout) ∙ Bracket indexingIndex
Selector Index generatorGradeIndex OfInterval IndexIndicesDeal
Computational MatchNot MatchMembershipFindNub SieveEncodeDecodeMatrix InverseMatrix DivideFormatExecuteMaterialiseRange
Primitive operators Monadic EachCommuteConstantReplicateExpandReduceWindowed ReduceScanOuter ProductKeyI-BeamSpawnFunction axis
Dyadic BindCompositions (Compose, Reverse Compose, Beside, Withe, Atop, Over) ∙ Inner ProductPowerAtUnderRankDepthVariantStencilCut (J)
Quad names
Arrays Index originMigration levelAtomic vector
Functions Name classCase convertUnicode convert
Operators SearchReplace
APL glyphs [edit]
Information GlyphTyping glyphs (on Linux) ∙ UnicodeFontsMnemonicsOverstrikesMigration level
Individual glyphs Jot () ∙ Right Shoe () ∙ Up Arrow () ∙ Zilde () ∙ High minus (¯) ∙ Dot (.) ∙ Del ()