2017.40 Unicode Granted

Samantha McVey has completed her work on the “Improving the Robustness of Unicode Support” Grant. In an extensive blog post she describes what she has done in the past months, how all achievable goals were achieved, and how quite a number of bonus features also made it. You can leave any congratulations, support or other comments on the official TPF page about the completion of the grant. I think we can now safely say that Rakudo Perl 6 has the most complete Unicode support of any programming language in the world. Kudos to Samantha!

Object creation 1.5x faster

Elizabeth Mattijsen (with a lot of help by Timo Paulssen and Jonathan Worthington) completed her work on auto-generating the BUILDALL method for each class. This is an internal method that is called to create an object using the default .new method. Instead of interpreting a build plan of the class every time an object of that class is created, a custom BUILDALL method is created directly using QAST ops (basically writing source code in Abstract Syntax Trees and then “EVALling” them). This makes each call to .new 1.5x faster, making our canary about 8% faster!

Nativecall also much faster

Stefan Seifert also finished his work on auto-generating native call function bodies, making the interface between Rakudo Perl 6 internals and Inline::Perl5 much faster. This also made the Inline::Perl5 version of our canary about 10% faster. The race continues to be on!

Roast Versioning

Rakudo Perl 6 has a file that contains a list of test-files (roast) it should run (spectest.data) when doing a so-called spectest. A single file used to be used for all language versions, which is bad because:

  • New files get added to roast master and roast runner complains they’re missing when running tests for older language versions.
  • Files in master get restructured, but deleted files still have to live as dummy files when tests for another language version get run.

Zoffix Znet implemented roast versioning by making a separate list of files for each language version so that Rakudo Perl 6 can run tests for each language version seperately. Roast runner just looks at VERSION file in roast to figure out which version of the list of test-files to load (the file list is now in spectest.data and spectest.data.6.c; for a future release a spectest.data.6.d file will be added).

The language that will not be named

Zoffix Znet rekindled the discussion about the naming of Rakudo Perl 6 again, this time suggesting 6lang (to be pronounced slang). Again, quite some discussion on blogs.perl.org, /r/perl6, /r/perl and Twitter. Yours truly hopes we can settle this once and for all before Rakudo Perl 6 language version 6.d comes out (or whatever we will call it then).

Hacktoberfest is here again

It’s the month of October again and your chance to win a T-shirt! Simply sign up, have a look at the issues at hand, fix only 4 of them and profit!

Community Bug SQUASHathon

On Saturday 7 October we will have yet another Community Bug SQUASHathon. Please join us on #perl6-dev on freenode and help us squash those pesky core bugs.

Texas to ASCII

To avoid any political connotations, it was felt that we should be moving towards documenting operators consisting purely of ASCII characters as “ASCII” operators (such as (<=)), and operators that consist of at least 1 non-ASCII character (such as ) as “Unicode” operators. Internal documentation has already been adapted, external documentation will follow shortly unless consensus changes.

Other Core Developments

  • Zoffix Znet made chainable operators (such as <: 2 < 3 < 4) between 6x and 36x times faster (depending on number of items in the chain). He also made cmp on Version objects about 7x faster. Which is nice as we will need to do a lot more language version comparisons in the future!
  • Jonathan Worthington fixed several race conditions and deadlocks with the new ThreadPoolScheduler. He also made sure that all aspects of the new ThreadPoolScheduler are now used on 6.c, except the part of await no longer blocking the thread it is awaiting in.
  • Samantha McVey fixed an issue with uniname and non-unique Unicode names. The noncharacter property is now also returned for noncharacters.
  • Zoffix Znet also fixed and improved the ** regex quantifier and made sure that chdir respects the :CWD named parameter.
  • And quite some other smaller fixes and improvements.

Other Blog Posts

Meanwhile on Twitter

Meanwhile on StackOverflow

Meanwhile on perl6-users

Ecosystem Additions

Winding Down

Bart Wiegmans has created a Pull Request for all of the work that has done on the new JIT: this is now going through the final reviewing process. This work will be merged any day now, which should allow for quite some more “so many percent faster” items in the next issue. So please check in again next week!

4 thoughts on “2017.40 Unicode Granted

  1. Hi All, I have been whacking and hacking on Perl 6 for 4 months or so. Lots of good stuff in P6. Many P5 people are commenting that P6 is a new language. My experience would agree with that because converting from P5 to P6 has meant a lot of re-configuration of the code.
    Any-whoo, my main reason for commenting is that I’m not happy with the keying process for hashes. It does not help that the documentation is jumbled. This blog post (linked above) was insightful and an indicator of the documentation troubles (https://www.nntp.perl.org/group/perl.perl6.users/2017/09/msg4437.html). The hash keys are more powerful in P6, but the simple act of looping over the keys will not always match as expected. The dull surprise of retrieving a type “Any”, instead of a value or reference – means another hour or two wasted sorting out the nature of hash keys. I stopped using .exists: because I need a second check to be assure that I have the ‘right’ existence. I have been regex matching keys to, first, determine that I am matching a string key, and second, to retrieve the key that will retrieve the correct value. I feel we need a Hash::Simple method that can declare the hash keys to be strings. I can see possible applications for complex keys, but that also looks like a good way to unwittingly destroy data; so it is a more advanced coding effort than the typical Perl hack. Before I start embedding SQL expressions within keys, I would like to build simple dispatch tables that return something like &callback, and not Any.

    • How are you getting non-Str-keyed hashes without effort?
      Even if this is somehow happening naturally (are you sure you’re not initializing with :{‘foo’ => ‘bar’} ?), you can enforce Str keys with a declaration like my %hash{Str};

    • Hashes have string keys by default. Sounds like you’re doing something very wrong if you’re having so much trouble with it, but without seeing your code, there’s no way to tell what.

Got something to note?