Commit ea168771 authored by Dominique Dumont's avatar Dominique Dumont

Imported Upstream version 2014.07

parent df3c7883
......@@ -34,7 +34,7 @@ MAIN: {
GetOptions(\%options, 'help!', 'prefix=s',
'backends=s', 'no-clean!',
'gen-nqp:s',
'gen-moar:s',
'gen-moar:s', 'moar-option=s@',
'git-protocol=s',
'gen-parrot:s', 'parrot-option=s@',
'parrot-make-option=s@',
......@@ -96,7 +96,15 @@ MAIN: {
$default_backend ||= 'parrot';
}
unless (%backends) {
die "No suitable nqp executables found! Please specify some --backends, or a --prefix that contains nqp-{p,j,m} executables\n";
die "No suitable nqp executables found! Please specify some --backends, or a --prefix that contains nqp-{p,j,m} executables\n\n"
. "Example to build for all backends (which will take a while):\n"
. "\tperl Configure.pl --backends=moar,parrot,jvm --gen-moar --gen-parrot\n\n"
. "Example to build for MoarVM only:\n"
. "\tperl Configure.pl --gen-moar\n\n"
. "Example to build for Parrot only:\n"
. "\tperl Configure.pl --gen-parrot\n\n"
. "Example to build for JVM only:\n"
. "\tperl Configure.pl --backends=jvm --gen-nqp\n\n";
}
}
......@@ -132,7 +140,7 @@ MAIN: {
print $MAKEFILE "clean: ", join(' ', map "$_-clean", @prefixes), "\n";
print $MAKEFILE "\t\$(RM_F) perl6\$(EXE) perl6\$(BAT)\n\n";
for my $t (qw/test spectest coretest localtest/) {
for my $t (qw/test spectest coretest localtest stresstest/) {
print $MAKEFILE "$t: ", join(' ', map "$_-$t", @prefixes), "\n";
}
......@@ -147,16 +155,17 @@ MAIN: {
my %impls = gen_nqp($nqp_want, prefix => $prefix, backends => join(',', sort keys %backends), %options);
my @errors;
my %errors;
if ($backends{parrot}) {
my %nqp_config;
if ($impls{parrot}{ok}) {
%nqp_config = %{ $impls{parrot}{config} };
}
elsif ($impls{parrot}{config}) {
push @errors, "The nqp-p is too old";
push @errors, "The nqp-p binary is too old";
}
else {
push @errors, "Cannot obtain configuration from NQP on parrot";
push @errors, "Unable to read configuration from NQP on Parrot";
}
my $nqp_have = $nqp_config{'nqp::version'} || '';
......@@ -174,27 +183,21 @@ MAIN: {
if @errors;
}
if (@errors && !defined $options{'gen-nqp'}) {
push @errors,
"\nTo automatically clone (git) and build a copy of NQP $nqp_want,",
"try re-running Configure.pl with the '--gen-nqp' or '--gen-parrot'",
"options. Or, use '--prefix=' to explicitly",
"specify the path where the NQP and Parrot executable can be found that are use to build $lang.";
}
$errors{parrot}{'no gen-nqp'} = @errors && !defined $options{'gen-nqp'};
sorry(@errors) if @errors;
unless (@errors) {
print "Using $impls{parrot}{bin} (version $nqp_config{'nqp::version'} / Parrot $nqp_config{'parrot::VERSION'}).\n";
print "Using $impls{parrot}{bin} (version $nqp_config{'nqp::version'} / Parrot $nqp_config{'parrot::VERSION'}).\n";
if ($^O eq 'MSWin32' or $^O eq 'cygwin') {
$config{'dll'} = '$(PARROT_BIN_DIR)/$(PARROT_LIB_SHARED)';
$config{'dllcopy'} = '$(PARROT_LIB_SHARED)';
$config{'make_dllcopy'} =
'$(PARROT_DLL_COPY): $(PARROT_DLL)'."\n\t".'$(CP) $(PARROT_DLL) .';
}
if ($^O eq 'MSWin32' or $^O eq 'cygwin') {
$config{'dll'} = '$(PARROT_BIN_DIR)/$(PARROT_LIB_SHARED)';
$config{'dllcopy'} = '$(PARROT_LIB_SHARED)';
$config{'make_dllcopy'} =
'$(PARROT_DLL_COPY): $(PARROT_DLL)'."\n\t".'$(CP) $(PARROT_DLL) .';
my $make = fill_template_text('@make@', %config, %nqp_config);
fill_template_file('tools/build/Makefile-Parrot.in', $MAKEFILE, %config, %nqp_config);
}
my $make = fill_template_text('@make@', %config, %nqp_config);
fill_template_file('tools/build/Makefile-Parrot.in', $MAKEFILE, %config, %nqp_config);
}
if ($backends{jvm}) {
$config{j_nqp} = $impls{jvm}{bin};
......@@ -215,22 +218,24 @@ MAIN: {
push @errors, "jvm::runtime.jars value not available from $bin --show-config.";
}
sorry(@errors) if @errors;
my $java_version = `java -version 2>&1`;
$java_version = $java_version =~ /(?<v>[\d\._]+).+\n(?<n>\S+)/
? "$+{'n'} $+{'v'}"
: 'no java version info available';
$errors{jvm}{'no gen-nqp'} = @errors && !defined $options{'gen-nqp'};
unless (@errors) {
my $java_version = `java -version 2>&1`;
$java_version = $java_version =~ /(?<v>[\d\._]+).+\n(?<n>\S+)/
? "$+{'n'} $+{'v'}"
: 'no java version info available';
print "Using $bin (version $nqp_config{'nqp::version'} / $java_version).\n";
print "Using $bin (version $nqp_config{'nqp::version'} / $java_version).\n";
$config{'nqp_prefix'} = $nqp_config{'jvm::runtime.prefix'};
$config{'nqp_jars'} = $nqp_config{'jvm::runtime.jars'};
$config{'nqp_classpath'} = $nqp_config{'jvm::runtime.classpath'};
$config{'j_runner'} = $^O eq 'MSWin32' ? 'perl6-j.bat' : 'perl6-j';
$config{'nqp_prefix'} = $nqp_config{'jvm::runtime.prefix'};
$config{'nqp_jars'} = $nqp_config{'jvm::runtime.jars'};
$config{'nqp_classpath'} = $nqp_config{'jvm::runtime.classpath'};
$config{'j_runner'} = $^O eq 'MSWin32' ? 'perl6-j.bat' : 'perl6-j';
fill_template_file('tools/build/Makefile-JVM.in', $MAKEFILE, %config);
fill_template_file('tools/build/Makefile-JVM.in', $MAKEFILE, %config);
}
}
if ($backends{moar}) {
$config{m_nqp} = $impls{moar}{bin};
......@@ -242,20 +247,46 @@ MAIN: {
else {
push @errors, "Unable to read configuration from NQP on MoarVM";
}
sorry(@errors) if @errors;
print "Using $config{m_nqp} (version $nqp_config{'nqp::version'} / MoarVM $nqp_config{'moar::version'}).\n";
$errors{moar}{'no gen-nqp'} = @errors && !defined $options{'gen-nqp'};
unless (@errors) {
print "Using $config{m_nqp} (version $nqp_config{'nqp::version'} / MoarVM $nqp_config{'moar::version'}).\n";
$config{'perl6_ops_dll'} = sprintf($nqp_config{'moar::dll'}, 'perl6_ops_moar');
# Add moar library to link command
# TODO: Get this from Moar somehow
$config{'moarimplib'} = $^O eq 'MSWin32' ? "$prefix/bin/moar.dll.lib"
: $^O eq 'darwin' ? "$prefix/lib/libmoar.dylib"
: '';
$config{'perl6_ops_dll'} = sprintf($nqp_config{'moar::dll'}, 'perl6_ops_moar');
# Add moar library to link command
# TODO: Get this from Moar somehow
$config{'moarimplib'} = $^O eq 'MSWin32' ? "$prefix/bin/moar.dll.lib"
: $^O eq 'darwin' ? "$prefix/lib/libmoar.dylib"
: '';
fill_template_file('tools/build/Makefile-Moar.in', $MAKEFILE, %config, %nqp_config);
}
}
fill_template_file('tools/build/Makefile-Moar.in', $MAKEFILE, %config, %nqp_config);
if ($errors{parrot}{'no gen-nqp'} || $errors{jvm}{'no gen-nqp'} || $errors{moar}{'no gen-nqp'}) {
my @options_to_pass;
push @options_to_pass, "--gen-parrot" if $backends{parrot};
push @options_to_pass, "--gen-moar" if $backends{moar};
push @options_to_pass, "--gen-nqp" unless @options_to_pass;
my $options_to_pass = join ' ', @options_to_pass;
my $want_executables = $backends{parrot} && $backends{moar}
? ', Parrot and MoarVM'
: $backends{parrot}
? ' and Parrot'
: $backends{moar}
? ' and MoarVM'
: '';
my $s1 = @options_to_pass > 1 ? 's' : '';
my $s2 = $want_executables ? 's' : '';
push @errors,
"\nTo automatically clone (git) and build a copy of NQP $nqp_want,",
"try re-running Configure.pl with the '$options_to_pass' option$s1.",
"Or, use '--prefix=' to explicitly specify the path where the NQP$want_executables",
"executable$s2 can be found that are use to build $lang.";
}
sorry(@errors) if @errors;
my $l = uc substr($default_backend, 0, 1);
print $MAKEFILE qq[\nt/*/*.t t/*.t t/*/*/*.t: all\n\t\$(${l}_HARNESS_WITH_FUDGE) --verbosity=1 \$\@\n];
......@@ -300,6 +331,8 @@ General Options:
Download and build a copy of NQP
--gen-moar[=branch]
Download and build a copy of MoarVM to use
--moar-option='--option=value'
Options to pass to MoarVM's Configure.pl
--gen-parrot[=branch]
Download and build a copy of Parrot
--parrot-option='--option'
......
This diff is collapsed.
......@@ -36,11 +36,17 @@ Note that this step is necessary for running Rakudo from outside the build
directory. But don't worry, it installs locally by default, so you don't need
any administrator privileges for carrying out this step.
### Configuring Rakudo to run on MoarVM
To automatically download and build a fresh MoarMV and NQP, run:
perl Configure.pl --gen-moar --gen-nqp --backends=moar
### Configuring Rakudo to run on Parrot
To automatically download and build a fresh Parrot and NQP, run:
perl Configure.pl --gen-parrot --backends=parrot
perl Configure.pl --gen-parrot --gen-nqp --backends=parrot
It is recommended to first install the libicu-dev and libreadline-dev packages.
......@@ -56,12 +62,6 @@ need to modify your NQP runner to limit memory use. e.g. edit the
nqp-j / nqp-j.bat executable (found wherever you installed to, or in the
`install/bin` directory) to include `-Xms500m -Xmx2g` as options passed to java.
### Configuring Rakudo to run on MoarVM
To automatically download and build a fresh MoarMV and NQP, run:
perl Configure.pl --gen-moar --gen-nqp --backends=moar
### Multiple backends at the same time
By supplying combinations of backends to the `--backends` flag, you
......
New in 2014.07
+ require and build parrot 6.6.0
+ Cool.eval and eval() are now removed
+ assigning a single itemized hash to a hash is now DEPRECATED (my %h = {...})
+ .hash now turns an itemized hash into a hash
+ added unpack directives "a" and "Z"
+ subbuf-rw specced and implemented
+ Supply.zip-latest specced and implemented
+ minute value is optional in Timezone offsets in DateTime.new(), also a colon
to delimit hours/minutes is now optional
+ file copy and creation operations on the MoarVM now give default file permissions of 0666
+ the tr/// operator is implemented and has the proper return value
+ improved string handling for MoarVM backend
+ fixed class A { my $.x = 42 } scoping on MoarVM
+ removed hack that kept (|)= & co from working
+ re-arranged infixish actions to support [[*]]= etc
+ optimized CompUnitRepo::Local::File
+ optimized takedispatcher to cleardispatcher
+ all backends now allow C pointer arithmetic and casting of pointers to Perl 6 types
(this funtionality is exposed by NativeCall)
+ made block inlining a level 2 optimization
+ small optimizations to number parsing
+ fixed Label.gist
+ fixed 'fail' so it also prints a backtrace
+ fixed a repeat until code-gen bug
+ added CompUnit.name and fixed .perl
+ removed hack for $Inf/$NaN: constants Inf/NaN are exposed since a while
+ made initial/max threads introspectable
+ naive implementation of IO.umask
+ make .WHICH also work on type objects
+ throw a X::Subscript::FromEnd for @foo[-1]
+ throw X::TypeCheck::Binding on all backends (was MoarVM only)
New in 2014.06
+ say/note now a little faster for single Str (which is most common)
+ an initial implementation of S11 (Compilation Units) is now available
+ .IO.{d|s|z} are now about 40% faster and return Failure if path doesn't exist
+ $*DISTRO now works correctly on OS X (with name "macosx")
+ $*KERNEL now works correctly on OS X (with name "darwin")
+ initial implementation of $*USER and $*GROUP
+ initial implementation of Supply.zip-latest
+ implement dummy Lock (for $lock.protect( {...} ) ) on parrot
+ @*INC now only contains elements for actually existing paths
+ more work on allowing slangs transparently (such as "v5")
+ IO::Socket::Async now also works on JVM
+ can close tap to stop listening on a socket
+ implement Supply.on_demand, for making on-demand supplies
+ fix race condition in async socket reading
+ can now also bind to dynamic variables
+ LAST phaser used to fire when not actually iterating, now fixed
+ (Set|Bag|Mix).pairs now return immutable Enums
+ (Set|Bag|Mix)Hash.pairs no longer allow changes feeding back
+ optimize :a(:$b) and attributive binding
+ optimize IO::Path.contents
+ optimize push, unshift, and comb
+ assorted optimizations to Junction construction and dispatch
+ optimize no-args case of @foo>>.bar
+ implement :42nd colonpair syntax
+ include correct version information in perl6-debug
New in 2014.05
+ asynchronous timers on MoarVM backend
+ added or updated many Supply methods:
act, batch, categorize, Channel, classify, delay, elems, flat, grab, last,
live, max, min, minmax, merge, migrate, Promise, reduce, reverse, rotor,
sort, squish, stable, start, uniq, wait, zip
+ add list functionality to 'on', as with new S17 spec
+ added .Supply coercer
+ added IO::Notification.watch_path / IO::Path::watch which return a Supply
of file system changes
+ added signal() which returns a Supply of Signals (such as SIG_HUP)
+ added IO::Socket::Async.connect, returns a Promise with a IO::Socket::Async
+ added IO::Socket::Async.send, returns a Promise with success / failure
+ added IO::Socket::Async.chars_supply, returns a Supply with chunks
+ added first-index, last-index, grep-index subs/methods
+ Pair.key was erroneously implemented "is rw"
+ added "subtest code, desc" to Test.pm (inspired by P5's Test::More)
+ added "throws_like" to Test.pm (formerly of Test::Util)
+ Test::Tap::tap_ok and throws_like are now 1 test (using subtest)
+ BagHash<foo>-- on non-existing key no longer fails (as per S02 spec change)
+ (Set|Bag|Mix)(|Hash) now have a .fmt method
+ deprecate $*OS, $*OSVER, $*VM<name>, $*VM<config>, $*PERL<name>
$*PERL<compiler>...
+ added $*KERNEL, $*DISTRO, $*VM, $*PERL as full blown objects
+ .delta (by recent spec change) in Date/DateTime now instead spelled
.later and .earlier
+ TimeUnit enum removed; string named and positional arguments used instead
+ optimized grep,grep-index,first,first-index,last-index with seperate
candidates for Regex and Callable.
+ "use v5" is no longer a noop, but actually tries to load the "v5" module
(soon available as part of Rakudo*)
+ implemented labeled loops and throwing of labels as payload
+ added various optimizations, like optimizing out %_ when unused
New in 2014.04
+ significant performance enhancement for MoarVM, spectest running 20%+ faster
+ S17 (concurrency) now in MoarVM (except timing related features)
+ winner { more @channels { ... } } now works
+ fixed pb with Parcelness of single element array slices with adverbs
+ implemented univals(), .unival and .univals (on MoarVM)
+ make .pick/.roll behave sanely on Enums
+ fixed Str.samespace and ss//
+ added .minpairs/.maxpairs on (Set|Bag|Mix)Hash
+ added Bag.kxxv
+ Capture.WHICH implemented so that identical Captures have the same .WHICH
+ Naive implementation of "is cached" trait on Routines
+ Hash.perl now randomizes key order, while Hash.gist sorts
+ NativeCall passes all its tests on all backends
New in 2014.03
+ Fix suggestions for unknown routines when specified with '&'
......
# Announce: Rakudo Perl 6 compiler, Development Release #75 ("Echt")
On behalf of the Rakudo development team, I'm happy to announce the
April 2014 release of Rakudo Perl 6 #75 "Echt". Rakudo is an
implementation of Perl 6 on the Parrot Virtual Machine, the Java Virtual
Machine and the Moar Virtual Machine[^1]. The tarball for this release
is available from <http://rakudo.org/downloads/rakudo/>.
Please note: This announcement is not for the Rakudo Star
distribution[^2] --- it's announcing a new release of the compiler
only. For the latest Rakudo Star release, see
<http://rakudo.org/downloads/star/>.
The Rakudo Perl compiler follows a monthly release cycle, with each
release named after a Perl Mongers group. This time it's the Perl
Mongers group of Echt, who held their first meeting in about five years
the other day.
Some of the changes in this release are outlined below:
+ NativeCall passes all its tests on all backends
+ significant performance enhancement for MoarVM, spectest running 20%+ faster
+ S17 (concurrency) now in MoarVM (except timing related features)
+ winner { more @channels { ... } } now works
+ implemented univals(), .unival and .univals (on MoarVM)
+ added .minpairs/.maxpairs on (Set|Bag|Mix)Hash
+ Naive implementation of "is cached" trait on Routines
These are only some of the changes in this release. For a more
detailed list, see "docs/ChangeLog".
The development team thanks all of our contributors and sponsors for
making Rakudo Perl possible, as well as those people who worked on