From 55ace3508bbc57b546431f55c9dbf13cf14c0c12 Mon Sep 17 00:00:00 2001 From: LadyCailin Date: Thu, 14 Apr 2022 23:48:27 +0200 Subject: [PATCH 1/8] 3.3.5 final changelog prep --- src/main/resources/docs/Changelog | 58 ++++++++++++++++++++++++ src/main/resources/docs/VersionBumpGuide | 51 +++++++++++++++++++++ 2 files changed, 109 insertions(+) create mode 100644 src/main/resources/docs/VersionBumpGuide diff --git a/src/main/resources/docs/Changelog b/src/main/resources/docs/Changelog index 3eb6b6b27..b892ddd9e 100644 --- a/src/main/resources/docs/Changelog +++ b/src/main/resources/docs/Changelog @@ -1,3 +1,61 @@ +==3.3.5== + +CommandHelper 3.3.5 supports Minecraft 1.16.5-1.18.2 + +The largest feature of this release is that support for Java 16 was added, and support for previous versions were +dropped. Additionally, while the exposed feature set is somewhat limited, various backend changes have been +committed, which improves the reliability and performance of the system, and allows for additional planned changes in +the future, particularly around static analysis, user objects, and other language features. + +=== New Feature Overview === + +* Various deprecated functions have been removed. spawn_mob (use spawn_entity), tame_mob (use set_mob_owner), \ +enchant_inv (use enchant_item), enchant_rm_inv (use remove_item_enchant), get_enchant_inv (use get_item_enchants), \ +can_enchant_target (use can_enchant_item), get_block_at (use get_block), set_block_at (use set_block) +* Add support for 1.17 Minecraft Mobs +* Additional data in entity_spec +* MethodScript source is now hardened against bidi attacks. https://trojansource.codes/trojan-source.pdf +* Various improvements to the LangServ, which increases the functionality of the Visual Studio Code IDE. \ +Things such as code outline and integration with proc docs is now supported. The idea of a "workspace" was added, \ +which allows for all code to be handled as a whole project, rather than a bunch of individual files. For instance, \ +the ability to go to a proc declaration from a reference was added, and smart comments added to a proc now show \ +up when hovering over a proc reference. +* RCON support was added +* Declarative prefilters were added. This has little visible effect to end users, other than to say that prefilters \ +should be more performant now, and additional error checking can be done to ensure correct prefilter usage, including \ +incorrect values, and unexpected additional (and unused) values. The framework is added now, and more events will \ +be onboarded onto the system in the future. Some of the changes require Static Analysis to be enabled (disabled by +default). +* Initial framework support is added for function signatures. This allows native functions to specify return types and \ +expected parameters, which allows for better compile time error detection, if static analysis is turned on. For now, \ +most of the functions are not onboarded yet, and anyways, typechecking is disabled by default, but this will be \ +enabled in the near future. If you wish to go ahead and try out your code under typechecking, please enable it \ +in the static-analysis-config.ini file in the prefs folder. This will be enabled by default in the VSCode IDE plugin \ +in the next version, and once deemed stable, will be enabled by default, and eventually be unable to be turned off \ +in normal circumstances. +* CommandHelper reloading (that is, on startup, and also with the /recompile command) has been substantially altered. \ +Now, compilation and execution are fully separated into two distinct steps, which means that code changes that cause \ +a compile error will not stop the old, previously working code from running. Only successful recompiles will allow \ +for the new code to begin to be executed. Preferences (files in prefs/) are now reloaded as part of a recompile. \ +The halt-on-failure preference now shuts down the server if, on initial startup, the code will not compile, or other \ +configuration is wrong, such that the code can not come up completely. This is useful if, for instance, some server \ +security is provided through CommandHelper, so that if something changes and the code no longer will run, it is better \ +for the server to shut down than run unprotected. Various other backend improvements were made in this area. +* Extension load time was reduced. +* As always, hundreds of additional performance fixes and bug fixes and other minor things. + +Very early support for LLVM is being introduced. This is not generally usable for basically anything yet, but you +are encouraged to take a look and provide feedback if you are a command line user. + +=== Function API Additions === + +MethodScript additions: {{function|array_fill}}, {{function|fixed_array}} + +Minecraft additions: {{function|get_banner_patterns}}, {{function|get_entity_freezing}}, +{{function|get_hanging_direction}}, {{function|get_world_autosave}}, {{function|is_sign_text_glowing}}, +{{function|psend_block_damage}}, {{function|set_banner_patterns}}, {{function|set_entity_freezing}}, +{{function|set_hanging_direction}}, {{function|set_sign_text_glowing}}, {{function|set_world_autosave}} + ==3.3.4== CommandHelper 3.3.4 supports Minecraft 1.13.2 - 1.16.5. All extensions must be updated when upgrading from previous versions. diff --git a/src/main/resources/docs/VersionBumpGuide b/src/main/resources/docs/VersionBumpGuide new file mode 100644 index 000000000..5950877e1 --- /dev/null +++ b/src/main/resources/docs/VersionBumpGuide @@ -0,0 +1,51 @@ + +This is a guide for developers when doing a version bump of MethodScript. + +== General Procedure == + +The general procedure for development is to develop on the "current version", say version 2.0.0, and then release it as +version 2.0.0-final. This is slightly different than many systems, where "version 2.0.0" is the release version, and +dev builds are "2.0.0-SNAPSHOT", but for infrequently released projects, this seems to be a better approach. + +As of version 3.3.4, the release tags have been standardized on ''commandhelper--final''. + +== Step 1: Prepare for new version == + +This is the largest step in the process. The [[Changelog]] page must first be updated with the highlights of the +previous development cycle. This can be somewhat easily determined by reading through the git log, though this will +generally only reveal major points, which is fine. These bullet points go in under the new feature overview. + +The command to read the relevant git logs is <%PRE|git log ..HEAD --reverse%>. This will provide them +in chronological order, starting from the first commit after the tag. Read through all of them, extract the highlights, +and fill out the bullet points. + +Next, we need to gather a list of new functions and events and other elements. +This can be done in MethodScript with this code snippet: + +<%CODE|@version = ''; @api = json_decode(shell(array('mscript', '--', 'json-api'))); foreach(@top: @data in @api) { if(@top == 'extensions') { continue(); }; msg(@top); foreach(@n: @e in @data) { if(@e['since'] == @version) { msg(' ' . @n); } } }; die();%> + +Additionally, make any final changes to the documentation that you wish to be under the current version, as it will only +upload under the site on that version one last time. + +Commit all these changes, and push them out. + +== Step 2: Do a version bump == + +This is the step that actually bumps up the version. + +<%PRE|mvn clean release:clean release:prepare%> + +Follow the prompts, then git push when complete. + +== Step 3: Pin the build (requires Azure Portal access) == + +After the build for this final commit is complete, download the jar. Login to the Azure portal (portal.azure.com) and +access the methodscriptbuilds storage account blade. Access the Storage Browser, Blob Containers, and +commandhelperpinned container. Add directory (following the format of the others) then upload the jar, naming it +commandhelper--final.jar. + +== Step 4: Create new version == + +Open the pom file, and change the version there to the new version. Go to MSVersion and add a new enum (the LATEST value +is determined automatically). Make a commit and push. On this build, AggressiveDeprecations might start kicking in +immediately, so ensure you're aware of what might change there. From 58c445c3f8e06a69f71a04fbe86a2c266045454c Mon Sep 17 00:00:00 2001 From: LadyCailin Date: Fri, 15 Apr 2022 16:27:23 +0200 Subject: [PATCH 2/8] Add return keyword bullet --- src/main/resources/docs/Changelog | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/resources/docs/Changelog b/src/main/resources/docs/Changelog index b892ddd9e..a953bfde3 100644 --- a/src/main/resources/docs/Changelog +++ b/src/main/resources/docs/Changelog @@ -42,6 +42,7 @@ configuration is wrong, such that the code can not come up completely. This is u security is provided through CommandHelper, so that if something changes and the code no longer will run, it is better \ for the server to shut down than run unprotected. Various other backend improvements were made in this area. * Extension load time was reduced. +* return can now be used as a keyword, such as return expression(); * As always, hundreds of additional performance fixes and bug fixes and other minor things. Very early support for LLVM is being introduced. This is not generally usable for basically anything yet, but you From 7bdd469c9869f707b81736d7ba5761ae6bc3378e Mon Sep 17 00:00:00 2001 From: LadyCailin Date: Tue, 19 Apr 2022 15:56:39 +0200 Subject: [PATCH 3/8] Add keyword and statement info --- src/main/resources/docs/Changelog | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/src/main/resources/docs/Changelog b/src/main/resources/docs/Changelog index a953bfde3..a1928c5e5 100644 --- a/src/main/resources/docs/Changelog +++ b/src/main/resources/docs/Changelog @@ -42,7 +42,16 @@ configuration is wrong, such that the code can not come up completely. This is u security is provided through CommandHelper, so that if something changes and the code no longer will run, it is better \ for the server to shut down than run unprotected. Various other backend improvements were made in this area. * Extension load time was reduced. -* return can now be used as a keyword, such as return expression(); +* return can now be used as a keyword, such as return expression(); or return; +* continue and break can also be used as keywords, in the same way. +* Full support for statements has been added. In either strict and non-strict mode, adding a semicolon creates a \ +statement. For now, they are not required in any mode, though they will cause errors in strict mode if they are \ +used in places they shouldn't. To keep backwards compatibility, in non-strict mode, when a statement is used where \ +it shouldn't be, the value will be "pulled up" and not cause any errors. For instance, for the code \ +if(@a;){}, this will cause an error in strict mode, but work like if(@a){} in non-strict \ +mode. Eventually, this will cause a warning in non-strict mode, but additional work is needed before that can be \ +implemented. In both modes, when statements are used, properly, this may increase runtime performance, because it \ +skips the automatic sconcat feature, which is required for small aliases, but is inefficient in all other cases. * As always, hundreds of additional performance fixes and bug fixes and other minor things. Very early support for LLVM is being introduced. This is not generally usable for basically anything yet, but you From fe0072810f5e33e3a5d8b1faf7430d7b74f49a16 Mon Sep 17 00:00:00 2001 From: LadyCailin Date: Thu, 14 Apr 2022 23:48:27 +0200 Subject: [PATCH 4/8] 3.3.5 final changelog prep --- src/main/resources/docs/Changelog | 58 ++++++++++++++++++++++++ src/main/resources/docs/VersionBumpGuide | 51 +++++++++++++++++++++ 2 files changed, 109 insertions(+) create mode 100644 src/main/resources/docs/VersionBumpGuide diff --git a/src/main/resources/docs/Changelog b/src/main/resources/docs/Changelog index 3eb6b6b27..b892ddd9e 100644 --- a/src/main/resources/docs/Changelog +++ b/src/main/resources/docs/Changelog @@ -1,3 +1,61 @@ +==3.3.5== + +CommandHelper 3.3.5 supports Minecraft 1.16.5-1.18.2 + +The largest feature of this release is that support for Java 16 was added, and support for previous versions were +dropped. Additionally, while the exposed feature set is somewhat limited, various backend changes have been +committed, which improves the reliability and performance of the system, and allows for additional planned changes in +the future, particularly around static analysis, user objects, and other language features. + +=== New Feature Overview === + +* Various deprecated functions have been removed. spawn_mob (use spawn_entity), tame_mob (use set_mob_owner), \ +enchant_inv (use enchant_item), enchant_rm_inv (use remove_item_enchant), get_enchant_inv (use get_item_enchants), \ +can_enchant_target (use can_enchant_item), get_block_at (use get_block), set_block_at (use set_block) +* Add support for 1.17 Minecraft Mobs +* Additional data in entity_spec +* MethodScript source is now hardened against bidi attacks. https://trojansource.codes/trojan-source.pdf +* Various improvements to the LangServ, which increases the functionality of the Visual Studio Code IDE. \ +Things such as code outline and integration with proc docs is now supported. The idea of a "workspace" was added, \ +which allows for all code to be handled as a whole project, rather than a bunch of individual files. For instance, \ +the ability to go to a proc declaration from a reference was added, and smart comments added to a proc now show \ +up when hovering over a proc reference. +* RCON support was added +* Declarative prefilters were added. This has little visible effect to end users, other than to say that prefilters \ +should be more performant now, and additional error checking can be done to ensure correct prefilter usage, including \ +incorrect values, and unexpected additional (and unused) values. The framework is added now, and more events will \ +be onboarded onto the system in the future. Some of the changes require Static Analysis to be enabled (disabled by +default). +* Initial framework support is added for function signatures. This allows native functions to specify return types and \ +expected parameters, which allows for better compile time error detection, if static analysis is turned on. For now, \ +most of the functions are not onboarded yet, and anyways, typechecking is disabled by default, but this will be \ +enabled in the near future. If you wish to go ahead and try out your code under typechecking, please enable it \ +in the static-analysis-config.ini file in the prefs folder. This will be enabled by default in the VSCode IDE plugin \ +in the next version, and once deemed stable, will be enabled by default, and eventually be unable to be turned off \ +in normal circumstances. +* CommandHelper reloading (that is, on startup, and also with the /recompile command) has been substantially altered. \ +Now, compilation and execution are fully separated into two distinct steps, which means that code changes that cause \ +a compile error will not stop the old, previously working code from running. Only successful recompiles will allow \ +for the new code to begin to be executed. Preferences (files in prefs/) are now reloaded as part of a recompile. \ +The halt-on-failure preference now shuts down the server if, on initial startup, the code will not compile, or other \ +configuration is wrong, such that the code can not come up completely. This is useful if, for instance, some server \ +security is provided through CommandHelper, so that if something changes and the code no longer will run, it is better \ +for the server to shut down than run unprotected. Various other backend improvements were made in this area. +* Extension load time was reduced. +* As always, hundreds of additional performance fixes and bug fixes and other minor things. + +Very early support for LLVM is being introduced. This is not generally usable for basically anything yet, but you +are encouraged to take a look and provide feedback if you are a command line user. + +=== Function API Additions === + +MethodScript additions: {{function|array_fill}}, {{function|fixed_array}} + +Minecraft additions: {{function|get_banner_patterns}}, {{function|get_entity_freezing}}, +{{function|get_hanging_direction}}, {{function|get_world_autosave}}, {{function|is_sign_text_glowing}}, +{{function|psend_block_damage}}, {{function|set_banner_patterns}}, {{function|set_entity_freezing}}, +{{function|set_hanging_direction}}, {{function|set_sign_text_glowing}}, {{function|set_world_autosave}} + ==3.3.4== CommandHelper 3.3.4 supports Minecraft 1.13.2 - 1.16.5. All extensions must be updated when upgrading from previous versions. diff --git a/src/main/resources/docs/VersionBumpGuide b/src/main/resources/docs/VersionBumpGuide new file mode 100644 index 000000000..5950877e1 --- /dev/null +++ b/src/main/resources/docs/VersionBumpGuide @@ -0,0 +1,51 @@ + +This is a guide for developers when doing a version bump of MethodScript. + +== General Procedure == + +The general procedure for development is to develop on the "current version", say version 2.0.0, and then release it as +version 2.0.0-final. This is slightly different than many systems, where "version 2.0.0" is the release version, and +dev builds are "2.0.0-SNAPSHOT", but for infrequently released projects, this seems to be a better approach. + +As of version 3.3.4, the release tags have been standardized on ''commandhelper--final''. + +== Step 1: Prepare for new version == + +This is the largest step in the process. The [[Changelog]] page must first be updated with the highlights of the +previous development cycle. This can be somewhat easily determined by reading through the git log, though this will +generally only reveal major points, which is fine. These bullet points go in under the new feature overview. + +The command to read the relevant git logs is <%PRE|git log ..HEAD --reverse%>. This will provide them +in chronological order, starting from the first commit after the tag. Read through all of them, extract the highlights, +and fill out the bullet points. + +Next, we need to gather a list of new functions and events and other elements. +This can be done in MethodScript with this code snippet: + +<%CODE|@version = ''; @api = json_decode(shell(array('mscript', '--', 'json-api'))); foreach(@top: @data in @api) { if(@top == 'extensions') { continue(); }; msg(@top); foreach(@n: @e in @data) { if(@e['since'] == @version) { msg(' ' . @n); } } }; die();%> + +Additionally, make any final changes to the documentation that you wish to be under the current version, as it will only +upload under the site on that version one last time. + +Commit all these changes, and push them out. + +== Step 2: Do a version bump == + +This is the step that actually bumps up the version. + +<%PRE|mvn clean release:clean release:prepare%> + +Follow the prompts, then git push when complete. + +== Step 3: Pin the build (requires Azure Portal access) == + +After the build for this final commit is complete, download the jar. Login to the Azure portal (portal.azure.com) and +access the methodscriptbuilds storage account blade. Access the Storage Browser, Blob Containers, and +commandhelperpinned container. Add directory (following the format of the others) then upload the jar, naming it +commandhelper--final.jar. + +== Step 4: Create new version == + +Open the pom file, and change the version there to the new version. Go to MSVersion and add a new enum (the LATEST value +is determined automatically). Make a commit and push. On this build, AggressiveDeprecations might start kicking in +immediately, so ensure you're aware of what might change there. From 353171aee89f5692286847175610b27b481b3e9e Mon Sep 17 00:00:00 2001 From: LadyCailin Date: Fri, 15 Apr 2022 16:27:23 +0200 Subject: [PATCH 5/8] Add return keyword bullet --- src/main/resources/docs/Changelog | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/resources/docs/Changelog b/src/main/resources/docs/Changelog index b892ddd9e..a953bfde3 100644 --- a/src/main/resources/docs/Changelog +++ b/src/main/resources/docs/Changelog @@ -42,6 +42,7 @@ configuration is wrong, such that the code can not come up completely. This is u security is provided through CommandHelper, so that if something changes and the code no longer will run, it is better \ for the server to shut down than run unprotected. Various other backend improvements were made in this area. * Extension load time was reduced. +* return can now be used as a keyword, such as return expression(); * As always, hundreds of additional performance fixes and bug fixes and other minor things. Very early support for LLVM is being introduced. This is not generally usable for basically anything yet, but you From 56c2c99bc6afaa07f3267440313d935fad1aa82c Mon Sep 17 00:00:00 2001 From: LadyCailin Date: Tue, 19 Apr 2022 15:56:39 +0200 Subject: [PATCH 6/8] Add keyword and statement info --- src/main/resources/docs/Changelog | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/src/main/resources/docs/Changelog b/src/main/resources/docs/Changelog index a953bfde3..a1928c5e5 100644 --- a/src/main/resources/docs/Changelog +++ b/src/main/resources/docs/Changelog @@ -42,7 +42,16 @@ configuration is wrong, such that the code can not come up completely. This is u security is provided through CommandHelper, so that if something changes and the code no longer will run, it is better \ for the server to shut down than run unprotected. Various other backend improvements were made in this area. * Extension load time was reduced. -* return can now be used as a keyword, such as return expression(); +* return can now be used as a keyword, such as return expression(); or return; +* continue and break can also be used as keywords, in the same way. +* Full support for statements has been added. In either strict and non-strict mode, adding a semicolon creates a \ +statement. For now, they are not required in any mode, though they will cause errors in strict mode if they are \ +used in places they shouldn't. To keep backwards compatibility, in non-strict mode, when a statement is used where \ +it shouldn't be, the value will be "pulled up" and not cause any errors. For instance, for the code \ +if(@a;){}, this will cause an error in strict mode, but work like if(@a){} in non-strict \ +mode. Eventually, this will cause a warning in non-strict mode, but additional work is needed before that can be \ +implemented. In both modes, when statements are used, properly, this may increase runtime performance, because it \ +skips the automatic sconcat feature, which is required for small aliases, but is inefficient in all other cases. * As always, hundreds of additional performance fixes and bug fixes and other minor things. Very early support for LLVM is being introduced. This is not generally usable for basically anything yet, but you From 9496a3aaf5f01105b15f412609d2610ec7016c42 Mon Sep 17 00:00:00 2001 From: LadyCailin Date: Sun, 8 May 2022 19:42:54 +0200 Subject: [PATCH 7/8] Add more about new features --- src/main/resources/docs/Changelog | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/src/main/resources/docs/Changelog b/src/main/resources/docs/Changelog index a1928c5e5..f6629f40e 100644 --- a/src/main/resources/docs/Changelog +++ b/src/main/resources/docs/Changelog @@ -52,6 +52,23 @@ it shouldn't be, the value will be "pulled up" and not cause any errors. For ins mode. Eventually, this will cause a warning in non-strict mode, but additional work is needed before that can be \ implemented. In both modes, when statements are used, properly, this may increase runtime performance, because it \ skips the automatic sconcat feature, which is required for small aliases, but is inefficient in all other cases. +* First class proc referneces are added. Assuming a proc named _test is defined, proc _test will return \ +a reference to it, which can be stored in a variable, or otherwise passed around as an argument. +* Closures, iclosures, and proc references now extend the new Callable interface. +* All callables can be executed with parenthetical notation, no matter how they are stored. Previously this \ +only worked with top level variables, such as @c() but now it works with any other format, including \ +direct returns from other functions and array references, for instance, assuming func returns a Callable, \ +func()() will execute it. +* Tab completion is now enhanced for aliases defined with the @command syntax, if they also provide type information \ +in @param tags. For instance, if the alias is /test $enum and @param $enum WorldEnvironment \ +is provided, then the $enum value will automatically provide autocomplete with the values from the WorldEnvironment enum. +* Support for variadic arguments is added. Callables may now be defined with a variadic type in the last parameter, +which will match all overflow parameters, for instance proc _test(string... @values) can now be called \ +such as _test('a', 'b', 'c'), and @values will be an array of strings array('a', 'b', 'c') \ +within the proc. +* Additional methods of handling dynamic includes and static analysis have been added. Forward proc declarations, \ +@{DynamicProc} annotations, and additional file options. See the page on [[Procedures]] for more details. +* Annotations have been added. For now, only @{DynamicProc} exists, though this will be expanded on in the future. * As always, hundreds of additional performance fixes and bug fixes and other minor things. Very early support for LLVM is being introduced. This is not generally usable for basically anything yet, but you From ca424f22f63bfa6c3adc3173bedcf98c4a26461e Mon Sep 17 00:00:00 2001 From: LadyCailin Date: Mon, 9 Jan 2023 18:33:47 +0100 Subject: [PATCH 8/8] Update changelog --- src/main/resources/docs/Changelog | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/main/resources/docs/Changelog b/src/main/resources/docs/Changelog index f6629f40e..3fa61d3fe 100644 --- a/src/main/resources/docs/Changelog +++ b/src/main/resources/docs/Changelog @@ -1,6 +1,6 @@ ==3.3.5== -CommandHelper 3.3.5 supports Minecraft 1.16.5-1.18.2 +CommandHelper 3.3.5 supports Minecraft 1.16.5-1.19.3 The largest feature of this release is that support for Java 16 was added, and support for previous versions were dropped. Additionally, while the exposed feature set is somewhat limited, various backend changes have been @@ -12,14 +12,14 @@ the future, particularly around static analysis, user objects, and other languag * Various deprecated functions have been removed. spawn_mob (use spawn_entity), tame_mob (use set_mob_owner), \ enchant_inv (use enchant_item), enchant_rm_inv (use remove_item_enchant), get_enchant_inv (use get_item_enchants), \ can_enchant_target (use can_enchant_item), get_block_at (use get_block), set_block_at (use set_block) -* Add support for 1.17 Minecraft Mobs +* Add support for 1.17-1.19 Minecraft Mobs * Additional data in entity_spec * MethodScript source is now hardened against bidi attacks. https://trojansource.codes/trojan-source.pdf * Various improvements to the LangServ, which increases the functionality of the Visual Studio Code IDE. \ Things such as code outline and integration with proc docs is now supported. The idea of a "workspace" was added, \ which allows for all code to be handled as a whole project, rather than a bunch of individual files. For instance, \ the ability to go to a proc declaration from a reference was added, and smart comments added to a proc now show \ -up when hovering over a proc reference. +up when hovering over a proc reference. Requires static analysis to be enabled. * RCON support was added * Declarative prefilters were added. This has little visible effect to end users, other than to say that prefilters \ should be more performant now, and additional error checking can be done to ensure correct prefilter usage, including \ @@ -52,7 +52,7 @@ it shouldn't be, the value will be "pulled up" and not cause any errors. For ins mode. Eventually, this will cause a warning in non-strict mode, but additional work is needed before that can be \ implemented. In both modes, when statements are used, properly, this may increase runtime performance, because it \ skips the automatic sconcat feature, which is required for small aliases, but is inefficient in all other cases. -* First class proc referneces are added. Assuming a proc named _test is defined, proc _test will return \ +* First class proc references are added. Assuming a proc named _test is defined, proc _test will return \ a reference to it, which can be stored in a variable, or otherwise passed around as an argument. * Closures, iclosures, and proc references now extend the new Callable interface. * All callables can be executed with parenthetical notation, no matter how they are stored. Previously this \