From 4e1e17b292ebe373ae4a811b5e9d1810d9dc5323 Mon Sep 17 00:00:00 2001 From: Hauke D Date: Mon, 12 Nov 2018 16:47:32 +0100 Subject: [PATCH] Added experimental Perl 6 support --- building.md | 6 ++- index.md | 7 ++- legal.md | 3 +- notes.md | 3 +- perl6.md | 134 ++++++++++++++++++++++++++++++++++++++++++++++++++++ using.md | 5 +- 6 files changed, 152 insertions(+), 6 deletions(-) create mode 100644 perl6.md diff --git a/building.md b/building.md index 62aaf92..b196dc1 100644 --- a/building.md +++ b/building.md @@ -1,9 +1,10 @@ \[ [Using](using.html) - Building - +[🦋](perl6.html) - [Notes](notes.html) - [Legal](legal.html) - -[GitHub Wiki](https://github.com/haukex/webperl/wiki/Building-WebPerl) \] +[Wiki](https://github.com/haukex/webperl/wiki/Building-WebPerl) \] Building WebPerl ================ @@ -13,6 +14,9 @@ Building WebPerl Some things may not work yet, and parts of the API may still change. Your feedback is always appreciated! +This page documents the Perl 5 support, for the *experimental* +Perl 6 support, see [here](perl6.html). + Prerequisites ------------- diff --git a/index.md b/index.md index 9337354..626ef58 100644 --- a/index.md +++ b/index.md @@ -1,16 +1,17 @@ \[ [Using](using.html) - [Building](building.html) - +[🦋](perl6.html) - [Notes](notes.html) - [Legal](legal.html) - -[GitHub Wiki](https://github.com/haukex/webperl/wiki) \] +[Wiki](https://github.com/haukex/webperl/wiki) \] Welcome to WebPerl! =================== WebPerl uses the power of [WebAssembly](https://webassembly.org/) and -[Emscripten](http://emscripten.org/) to let you run Perl 5 in the browser! +[Emscripten](http://emscripten.org/) to let you run Perl in the browser! WebPerl does not translate your Perl code to JavaScript, instead, it is a port of the `perl` binary to WebAssembly, so that you have the full @@ -20,6 +21,8 @@ power of Perl at your disposal! Some things may not work yet, and parts of the API may still change. Your feedback is always appreciated! +[**New: Experimental Perl 6 Support**](perl6.html) + ```html + +``` + + +Quick Start +----------- + +In a console (the following assumes Linux): + + $ git clone https://github.com/haukex/webperl.git + $ cd webperl + $ wget https://github.com/haukex/webperl/releases/download/v0.07-beta/webperl_prebuilt_v0.07-beta.zip + $ unzip -j webperl_prebuilt_v0.07-beta.zip '*/emperl.*' -d web + $ cpanm --installdeps . + $ cd experiments ; cpanm --installdeps . ; cd .. + $ experiments/p6/6init.pl # this patches Perl 6 support in + $ plackup web/webperl.psgi + +Then point your Chrome browser at , +and have a look at its source. + +Have fun! + + +Experimental Status and Notes +----------------------------- + +- I don't have enough experience with `Rakudo.js` + - + - + - + - + - + +- requires BigInt support, which is currently only available in Chrome + - + - + - + +- Large download (10MB compressed, 74MB uncompressed) - can we + repackage it to make it smaller, or is there a good way to + distribute this? + +- STDERR only goes to console, STDOUT gets output with HTML escapes + + +Documentation +------------- + +My code steal^H^H^H^H^Hborrows the prepackaged `Rakudo.js` build from +[6Pad](https://perl6.github.io/6pad/) and caches it locally. The script +`experiments/p6/6init.pl` also patches the experimental P6 support into +`webperl.js` (see the [Quick Start](#quick-start) above). + +Note that both Perl 5 and Perl 6 are only loaded on demand by +`webperl.js`, so if you only use one or the other, you won't have the +overhead of loading both. + +For now, I've basically just patched `Rakudo.js`'s `evalP6()` into +`Raku.eval()`, and `NQP_STDOUT` into `Raku.output`, to make things more +like the Perl 5 WebPerl, and provided some of the same API for Perl 6 +as I provide for Perl 5. + +The JS API provided by WebPerl for Perl 6 currently closely mirrors +[the Perl 5 API](using.html#webperljs): There is a JS object `Raku` +which provides the following functions / properties that do mostly the +same as for Perl 5: + +- `Raku.addStateChangeListener( function (from,to) {} )` +- `Raku.state` +- `Raku.output = function (str,chan) {}` +- `Raku.makeOutputTextarea()` +- `Raku.init( function () {} )` +- `Raku.eval( code )` + +You can add Perl 6 code to your HTML pages with `