The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.

Deprecation in Parrot

This is a list of currently deprecated features of Parrot. Every deprecation has an associated RT ticket. Each item indicates the last release it's guaranteed to appear in. Items marked with a release of ??? are still deprecated, but a firm deadline for their removal has not yet been established.

When deprecated items are removed, all usage of the feature in the repository should be updated or removed; including documentation.

When deprecating opcodes, in addition to the ticket, be sure to mark the opcode with the :deprecated flag; this will allow users to enable deprecation warnings selectively with:

 .include 'include/warnings.pasm'
 warningson .PARROT_WARNINGS_DEPRECATED_FLAG

And then receive runtime warnings if they are using any deprecated opcodes. The -w command line option for parrot can also be used to enable all warnings.

vtable entries

  • type_keyed [post 0.5.2]

    See RT #48577.

  • type_keyed_int [post 0.5.2]

    See RT #48579.

  • type_keyed_str [post 0.5.2]

    See RT #48581.

  • type [post 0.5.2]

    See RT #48567.

  • new_from_string [post 0.5.0]

    See RT #47011.

  • cmodulus and variants [post 0.7.0]

    See RT #58550.

Opcodes

  • pioctl [post 0.5.1]

    See RT #48589.

  • store_global [post 0.5.0]

    See RT #48016. Replace usage with set_[hll,root]_global variants.

  • find_global [post 0.5.0]

    See RT #48018. Replace usage with get_[hll,root]_global variants.

  • new(out PMC, in INT, in STR) [post 0.5.0]

    See RT #47011.

  • get_mro [post 0.5.0]

    See RT #47976.

  • n_* math opcode variants [post 0.7.1]

    See RT #58410.

Class Features

  • Integer Type IDs [post 0.5.0]

    See RT #48024. Instead of $P0 = new Integer or $P0 = new .Integer, use the following syntax, which works for both PMCs and objects.

      $P0 = new 'Integer'
  • PMC union struct [post 0.5.0]

    See RT #48014. This will be removed once all core PMCs have been updated.

PIR syntax

  • old-style PASM registers [post 0.6.4]

    Old-style PASM registers without the $ character are deprecated; use PIR-style registers only.

    See RT #57638.

  • global keyword [post 0.6.4]

    See RT #48016 and RT #48018.

  • bare method names [post 0.6.4]

    foo.bar(), where bar is not a local identifier (thus indicating a method name) is no longer supported.

    See RT #45859.

  • #line [post 0.6.4]

    Will be replaced by .line to be more consistent with other PIR syntax.

    See [RT#45857], [RT#43269], and [RT#47141].

  • .pragma n_operators [post 0.6.4]

    See RT #57438.

  • <.namespace <identifier >> syntax [post 0.5.1]

    See RT #48737.

  • Use of :: in identifiers [post 0.5.1]

    See RT #48735.

  • .namespace [ "a" .. "b" ] [post 0.5.0]

    See RT #46715.

  • .namespace (without brackets) [post 0.6.2]

    All should .namespace directives without brackets should take empty brackets to indicate the root namespace. See RT #48549.

  • .HLL_map <string> ',' <string> [post 0.6.4]

    This will be replaced by .HLL_map <string> '=' <string>

    See RT #57430.

  • .HLL <string> ',' <string> [post 0.6.4]

    This will be replaced by .HLL <string>; the second string (and comma to separate them) will no longer be accepted. Use .loadlib for specifying the library name.

    See RT #57428.

  • vtable name .constants and __vtable overrides [post 0.5.2]

    See RT #48877.

  • Assignment syntax with opcodes [post ???]

    See RT #36283. When the first argument of an opcode is OUT, then the assignment syntax will be allowed, as it is today.

    In any other case (i.e. INOUT, IN), this will become a syntax error. For example:

        $S0 = print
        $P0 = substr 1, 2, "x"

    Will have to be:

        print $S0
        substr $P0, 1, 2, "x"
  • mmdvtregister and mmdvtablefind opcodes [post 0.7.0]

    These opcodes are part of the old MMD system, now deprecated and to be removed when the branch is merged in after the release.

  • addr shortcut for set_addr op [post 0.7.1]

    The addr shortcut that is mapped to the set_addr will no longer be supported. Instead, use the set_addr directly.

    See RT#58238.

  • get_*_keyed_int VTABLE methods change the size of Resizable*Arrays [post 0.7.1]

    The get_{String|PMC|Integer|Number|Boolean}_keyed_int VTABLE methods increase the size of Resizable{String|PMC|Integer|Number|Boolean}Arrays when they're used to search for an element past the end of the array. This behavior is deprecated and will be removed after the 0.7.1 release.

    See RT #52778.

Parrot Compiler tools

Capture-based objects

get_array, get_hash, get_scalar deprecations [post 0.6.2]

See RT#54000. The 'get_array', 'get_hash', and 'get_scalar' methods are now called 'list', 'hash', and 'item' respectively.

P6object class creation

P6object .new_class('Foo::Bar') will create ['Foo';'Bar'] [post 0.7.1]

See RT #58932. Strings passed as class names to P6object will be automatically separated on double-colons.