From 4605b386fc97f36fa453faac5c4f8edd2cb70f2b Mon Sep 17 00:00:00 2001 From: Hauke D Date: Thu, 9 Aug 2018 12:19:46 +0200 Subject: [PATCH] Initial commit of WebPerl site --- .gitignore | 3 +++ CNAME | 1 + _config.yml | 5 +++++ building.md | 15 ++++++++++++++ index.md | 34 +++++++++++++++++++++++++++++++ legal.md | 32 ++++++++++++++++++++++++++++++ notes.md | 56 ++++++++++++++++++++++++++++++++++++++++++++++++++++ using.md | 15 ++++++++++++++ webperl.png | Bin 0 -> 29701 bytes 9 files changed, 161 insertions(+) create mode 100644 .gitignore create mode 100644 CNAME create mode 100644 _config.yml create mode 100644 building.md create mode 100644 index.md create mode 100644 legal.md create mode 100644 notes.md create mode 100644 using.md create mode 100644 webperl.png diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..6acca6e --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ +/web/ +/work/ +/emperl5/ diff --git a/CNAME b/CNAME new file mode 100644 index 0000000..5cc05e1 --- /dev/null +++ b/CNAME @@ -0,0 +1 @@ +webperl.zero-g.net \ No newline at end of file diff --git a/_config.yml b/_config.yml new file mode 100644 index 0000000..2e5adb1 --- /dev/null +++ b/_config.yml @@ -0,0 +1,5 @@ +theme: jekyll-theme-minimal +title: WebPerl +description: Run Perl in the browser with WebPerl! +logo: webperl.png +show_downloads: false diff --git a/building.md b/building.md new file mode 100644 index 0000000..ca4ba81 --- /dev/null +++ b/building.md @@ -0,0 +1,15 @@ + +🕸️🐪 Building WebPerl +=================== + +\[ [Home](index.html) - +[Using WebPerl](using.html) - +[Building WebPerl](building.html) - +[Wiki](https://github.com/haukex/webperl/wiki) - +[GitHub](https://github.com/haukex/webperl) - +[Notes](notes.html) - +[Legal](legal.html) \] + + +Nothing here yet. + diff --git a/index.md b/index.md new file mode 100644 index 0000000..d1556e8 --- /dev/null +++ b/index.md @@ -0,0 +1,34 @@ + +🕸️🐪 Welcome to WebPerl! +====================== + +\[ [Home](index.html) - +[Using WebPerl](using.html) - +[Building WebPerl](building.html) - +[Wiki](https://github.com/haukex/webperl/wiki) - +[GitHub](https://github.com/haukex/webperl) - +[Notes](notes.html) - +[Legal](legal.html) \] + + +WebPerl uses the power of [WebAssembly](https://webassembly.org/) and +[emscripten](http://emscripten.org/) to let you run Perl 5 in the browser! + +**Notice: WebPerl is in beta.** +Some things may not work yet, and parts of the API may still change. +Your feedback is always appreciated! + +```html + + +``` + diff --git a/legal.md b/legal.md new file mode 100644 index 0000000..4831cae --- /dev/null +++ b/legal.md @@ -0,0 +1,32 @@ + +🕸️🐪 WebPerl Author, Copyright, and License +========================================= + +\[ [Home](index.html) - +[Using WebPerl](using.html) - +[Building WebPerl](building.html) - +[Wiki](https://github.com/haukex/webperl/wiki) - +[GitHub](https://github.com/haukex/webperl) - +[Notes](notes.html) - +[Legal](legal.html) \] + +**WebPerl ** + +Copyright (c) 2018 Hauke Daempfling (haukex@zero-g.net) +at the Leibniz Institute of Freshwater Ecology and Inland Fisheries (IGB), +Berlin, Germany, + +This program is free software; you can redistribute it and/or modify +it under the same terms as Perl 5 itself: either the GNU General Public +License as published by the Free Software Foundation (either version 1, +or, at your option, any later version), or the "Artistic License" which +comes with Perl 5. + +This program is distributed in the hope that it will be useful, but +**WITHOUT ANY WARRANTY**; without even the implied warranty of +**MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE**. +See the licenses for details. + +You should have received a copy of the licenses along with this program. +If not, see . + diff --git a/notes.md b/notes.md new file mode 100644 index 0000000..5170ad8 --- /dev/null +++ b/notes.md @@ -0,0 +1,56 @@ + +🕸️🐪 Misc. Notes on WebPerl +========================= + +\[ [Home](index.html) - +[Using WebPerl](using.html) - +[Building WebPerl](building.html) - +[Wiki](https://github.com/haukex/webperl/wiki) - +[GitHub](https://github.com/haukex/webperl) - +[Notes](notes.html) - +[Legal](legal.html) \] + + +TODOs +----- + + + + +Possible Improvements +--------------------- + +- More efficient JS/C/Perl glue +- Test/Support sockets/WebSockets + - for example, can we compile a DBD:: module to connect to a DB on the server? +- A RPC module for communicating between client and server Perls +- Support some of the Emscripten API (like wget?) +- Try to shrink the download size more (exclude more modules, ...?) + + +Limitations +----------- + +- Only works in browsers with WebAssembly support + (asm.js requires aligned memory access, and Perl apparently has quite a few places with unaligned access) +- 32-bit ints +- No `system`, `qx`, `fork`, `kill`, `wait`, `waitpid`, threads, etc. + - Theoretically, we could link in BusyBox to get a shell and utilities (??) + - (`system` and `qx` support could theoretically be added by patching `pp_system`/`pp_backtick` in `pp_sys.c`) +- No signals (except `SIGALRM`) +- In the current configuration, `exit` is not supported, and therefore `atexit` handlers aren't supported + (see discussion in `webperl.js`, and `NO_EXIT_RUNTIME` in the Emscripten documentation - currently it + seems to make the most sense to build with `NO_EXIT_RUNTIME=1`) +- Static linking, requires rebuild to add modules + (Emscripten apparently only supports asm.js dynamic linking when dynamic memory growth is disabled, which is not very useful) + + +Prior Art +--------- + +Several people have built microperl with Emscripten: + +- Harsha +- Shlomi Fish +- FUJI Goro + diff --git a/using.md b/using.md new file mode 100644 index 0000000..65d6dd3 --- /dev/null +++ b/using.md @@ -0,0 +1,15 @@ + +🕸️🐪 Using WebPerl +================ + +\[ [Home](index.html) - +[Using WebPerl](using.html) - +[Building WebPerl](building.html) - +[Wiki](https://github.com/haukex/webperl/wiki) - +[GitHub](https://github.com/haukex/webperl) - +[Notes](notes.html) - +[Legal](legal.html) \] + + +Nothing here yet. + diff --git a/webperl.png b/webperl.png new file mode 100644 index 0000000000000000000000000000000000000000..a4359e279e27cd4503b9818ce3b009e9a9e58096 GIT binary patch literal 29701 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 F{|DqZtnL5+ literal 0 HcmV?d00001