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.
cmodulusand 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 Integeror$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.
globalkeyword [post 0.6.4]See RT #48016 and RT #48018.
bare method names [post 0.6.4]
foo.bar(), wherebaris 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
.lineto 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
.namespacedirectives 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.loadlibfor 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.
addrshortcut forset_addrop [post 0.7.1]The
addrshortcut that is mapped to theset_addrwill no longer be supported. Instead, use theset_addrdirectly.See RT#58238.
.returnin tailcall context [post 0.7.2]The
.returndirective in a tailcall context will be replaced by the more explicit.tailcalldirective.See RT #58974.
.returnin.begin_return/.end_return[post 0.7.2]The
.returndirective in a.begin_returnsequence will be replaced by the.set_returndirective. Likewise,.yieldin a.begin_yieldsequence will be replaced by.set_yield.See RT #58980.
.argwill become.set_arg[post 0.7.2]In a
.begin_callsequence, the.argdirective will be replaced by.set_arg.See RT #58976.
.resultwill become.get_result[post 0.7.2]In a
.begin_callsequence, the.resultdirecive will be replaced by the more descriptive.get_result.See RT #58978.
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.
Functions
- Old-style MMD functions [post 0.7.1]
-
Parrot_mmd_deref, Parrot_mmd_ensure_writeable, Parrot_mmd_add_function, mmd_expand_x, mmd_expand_y, Parrot_mmd_add_by_class, Parrot_mmd_register, Parrot_mmd_register_sub, Parrot_mmd_destroy, Parrot_MMD_search_default_infix, mmd_arg_tuple_inline, Parrot_mmd_search_default, mmd_cvt_to_types, Parrot_mmd_rebuild_table.
- readable_name [post 0.7.1]
-
See RT #45967.