As some recall, Rakudo's 2017.04 release was somewhat of a
trainwreck. It was
clear the quality assurance of releases needed to be kicked up a notch. So
today, I'll talk about what progress we've made in that area.
Define The Problem
A particular problem that plagued the 2017.04 release were big changes and
refactors made in the compiler that passed all the 150,000+ stresstests, however
still caused issues in some ecosystem modules and users' code.
The upcoming 2017.06 has many, many more big changes:
IO::ArgFiles were entirely replaced with the new IO::CatHandle implementation
IO::Socket got a refactor and sync sockets no longer use libuv
IO::Handle got a refactor with encoding and sync IO no longer uses libuv
Sets/Bags/Mixes got optimization polish and op semantics finalizations
A while back
I introduced the alienfile recipe system and we wrote a simple alienfile that provides in a CPAN context the tool xz and the
library liblzma. I also went over how to test it with App::af.
The week after that
I showed how to integrate that alienfile into a fully functioning Alien called Alien::xz and promised to show how to then use
that Alien from an XS or FFI module. Today I am going to do that. I am also going to show how to use a tool oriented Alien module.
(conveniently, Alien::xz can be used in either library or tool oriented Alien mode). If you are more interested in FFI or tool oriented mode
feel free to skip down to the appropriate paragraph.
It playing with update and container day here in the Moose-pen.
Now that I have the 'create' function working so well with execute_array I figured the next logical step would be to do 'update' function but I have one small problem. When I attempt to do this;
At The Perl Conference in Washington DC, I'll be giving a talk on Modeling a Universe in Perl. For previous versions of this talk, people have asked for more information about how we model complex actions in a (mostly) declarative manner. For example, here's the code for purchasing a clone:
It's the Steps() function which is our declarative code. As you might imagine, there are tons of actions which might require that you be in a particular area, or have credits removed from your wallet, so the Area and Wallet lines can be dropped into any Steps() function anywhere throughout our code. But people want to know how this works. In reality, it's pretty simple.
Well is still container day here in the Moose-pen.
So now that I have the 'execute_array' all fixed up and working I think I will carry on the same past and get the container to work with an array of 'classes'. In that end I created this little class;
package Test::User;
use Moose;
has username => ( is => 'rw',
isa => 'Str',);
has address => ( is => 'rw',
isa => 'Str',);
1;
Now the next thing I needed to do was make a test out of what I fixed yesterday;
Portable GitHub system "GitPrep 2.6" is released at 2017-06-10.
Finally, "wiki" system is added. You can write documentation on GitPrep.
At first, Let's try GitPrep example. You will find GitPrep is real portable GitHub system.
The features of GitPrep
I introduce the featrues of GitPrep for people who see GitPrep for the first time.
Github clone: GitPrep has the same interface as GitHub. All of repository, pull request, issue, and wiki is used.
Support issue system
Portable: You can install GitPrep on your own Unix/Linux server.
Only needs Perl 5.10.1+.
Smart HTTP support: you can pull and push repository via HTTP.
Built-in web server, and reverse proxy support.
CGI support.
SSL support.
Public key authentication support
Installation is very easy. You run only two commands. Difficult settings is unnecessary.
Even if you have troubles by your mistake, for example "git push -f origin master", you can access all of your git repositories directory and fix them.
All reporitories are yours. All repositories exists on your own server.
Tuesday Night Social: Get to know your fellow attendees!
Tutorials spaces still available
Call for Speakers: Lightning Talks
Call for Volunteers
Arrival Dinner - Sunday June 18
Arrangements have been made with Zikrayet Restaurant and Lounge to host a large crowd for The Perl Conference Arrival Dinner.
Given the nature of the place, it will be possible to make this event more of a come and hang out destination than we've been able to have in past years. Just the same we have an official time of 6pm set for the dinner so everyone can have a common plan for arrival.
This is an arrivals dinner but not necessarily the arrivals dinner. It's also a tradition that others who prefer smaller crowds and/or a more vegan-friendly menu organize an Alt Arrival Dinner.
I've started to build a blog engine in Perl 6 using the Bailador web framework. Primarily as an example for the Bailador book, but if it works well it might even be used as a replacement for the blog engine running blogs.perl.org.
If you are interested, follow the GitHub project. If you'd like to help with the development, let me know, and I'll invite you to the Bailador Slack channel where we can discuss things. If you'd like to support the project financially then the best thing you can do is to back the crowdfunding campaign of my book about Bailador.
Based on the follow-up discussion on- and offline, I've tried to come up with a pull request that implements the proposed changes. To give it a try, clone it, and use my sample adapter to produce some output:
Rakudo.js now should build in much more sane manner and passes some tests.
In directory containing a checkout of the js branch of rakudo
Once you grab a node.js (tested with 7.10.0)
$ git clone https://github.com/rakudo/rakudo.git rakudo-js-fresh
$ git checkout js
$ cd rakudo-js-fresh
$ perl Configure.pl --backends=moar,js --gen-nqp --gen-moar
$ make js-all
$ ./perl6-js -e 'say(123)'
$ make js-spectest
Rakudo.js now passes some tests https://github.com/rakudo/rakudo/blob/js/t/spectest.js.data .
The remaining majority tests are stopped from passing mostly rampant bugs and a few missing bits.
OTOH some of the more advanced features like precompilation/junctions/multi methods (including callsame) work showing that once the building blocks work we can reuse the ton of good work put into Rakudo itself.
The Rakudo js has been recently update so it's now tracking nom clearly.
nqp.js is now using the new buffer IO and character based IO ops have been removed.
On the positive side our custom C++ synchronous extension that allowed piping to a spawned process has been deleted as it was a quick and dirty hack and the way node.js extensions are done is being currently reworked.
Well it get lucky postette day here in the Moose-Pen.
Well I left off yesterday a little worried that I was only testing half of the execute_array as I never actually got down into the DBI code of things. So I decided lets give it a try on that pre-installed 'DBD::DBM' that I used in my '10_crud_basic.t' test case as according to the DBI docs there shold be a defult implimentsion of 'execute_array''