Dev Version: 9.028 cpan:Perlito5 2018-09-03 - fix a problem compiling the example from Perlito5 COOKBOOK section 9.027 cpan:Perlito5 2018-09-03 - fix Grammar::CORE in CPAN, the grammar was not precompiled - Java: -- CORE functions: formline() form() initial implementation sprintf() argument "%vd" - JavaScript: -- CORE functions: delete(@h{@keys}) sprintf() argument "%vd" vec() - Core compiler: -- 'form' compiler -- add Perlito5/Runtime/Formline.pm for CORE::formline() implementation -- add core module: feature.pm, warnings.pm 9.026 cpan:Perlito5 2018-06-13 - remove CPAN tests that depend on specific Perl versions 9.025 cpan:Perlito5 2018-05-31 - remove CPAN tests that depend on specific Perl versions - add modules: -- Class::XSAccessor pure-perl replacement -- Test::More - work in progress - Java: -- open() mode ">&" and "<&" emulation 9.024 cpan:Perlito5 2018-05-28 - remove CPAN tests that depend on specific Perl versions - Java: -- fix syntax error in "or" operation -- fix "Inf" in emitter 9.023 cpan:Perlito5 2018-05-24 - Parser: -- some "goto" forms are transformed, so they work in JavaScript and Java backends. -- fix chomp(), chop() -- fix fat-arrow in argument lists -- fix indirect object -- indented heredoc with <<~"tag" -- use $^H and %^H -- set Perl version to 5.026 -- add core modules: Env Benchmark, Memoize DirHandle, File::Spec, File::Basename, Text::Abbrev, Text::ParseWords Time::Local, Time::localtime, Time::gmtime Getopt::Std, Getopt::Long Tie::Hash, Tie::Scalar, Tie::Array, warnings::register, Fcntl, Symbol, Term::ANSIColor, FindBin IO, IO::Handle, IO::Seekable, IO::File, Class::Struct, Perl::OSType integer, if, parent, subs, mro -- syntax fixes for hash vs. block, and ${var->{index}} -- CORE:: prefix (CORE::print, CORE::tr) -- CORE::GLOBAL special namespace -- CORE functions can be overridden -- stacked operators in "-X" file test -- remove "." from @INC -- decode source code "magic number" for UTF-8, UTF-16LE, UTF-16BE -- "hexfloat" literals -- new operators '|.', '|.=', '&.', '&.=', '^.', '^.=', '~.' -- "\N{U+263D}", "\N{YIN YANG}" string escape sequence - JavaScript: -- fix some special cases with "$#" sigil - Java: -- javax.script API registers "Perl5" interpreter example at misc/Java/Script.java -- "jrunscript" support $ jrunscript -cp .:perlito5.jar -l Perl5 -- global variable lookup is cached -- fix $^O, returns the the operating system name -- "require", "require VERSION" -- "opendir", "readdir", "closedir", "select", "binmode" -- "vec" -- "localtime", "gmtime" -- tied hash -- tied array -- overload implemented for about half of the operators -- strict refs -- srand() returns true, warns on overflow -- fix read-only values -- "$\", "$;", "$^T" -- caller() now works "natively", decoding the Java stack trace -- symbol tables like %:: and typeglobs support -- file tests: "-e", "-l", "-r", "-w", "-x" -- lvalue ternary "?:", "vec", "substr" -- regex modifier /xx /r -- regex %+ named captures -- regex named captures can have underscore in the name -- SUPER method call -- add core modules: Cwd, Sys::Hostname 9.022 cpan:Perlito5 2017-05-xx - Parser: -- Implemented compile-time scratchpad, used in BEGIN blocks. -- "Use" is no longer an AST node, because all "use" statements are executed at compile-time - JavaScript: -- fix "range" special cases -- regex /s /x modifiers -- variable redeclaration -- fixed a performance problem in eval-string - Java: -- eval-string -- __DATA__ and filehandle -- TIESCALAR, AUTOLOAD -- "Encode.pm" encode_utf8, decode_utf8 -- "Scalar::Util", "List::Util" ports. -- BEGIN block fixes - "Exporter" works. -- INIT and END blocks -- "$$" variable (process id) -- mkdir(), rmdir() -- pack (a..X, @ and . with number working) -- unpack (a,A,Z with number working) -- splice() -- optimize "for (0..1000000)" -- s///e, tr// -- glob deref - *{ $name }{CODE}->() -- regex comments with "(?#text)" -- regex modifiers /e /g /c -- support for all primitive data types 0.047 cpan:v6 2016-07-28 - hide internal classes from CPAN index 9.021 cpan:Perlito5 2016-05-10 - JavaScript: -- state variables by Yati Sagade - Java: -- state variables by Yati Sagade -- open(), close(), readline(), read(), sysread(), getc() -- regex variables $1, $2, $&, pos() 9.020 cpan:Perlito5 2016-05-02 - Parser: -- "->@*" support -- new namespaces for modules that require backend-specific implementations: lib/Perlito5X/Java/ and lib/Perlito5X/JavaScript/ and configuration modules: lib/Perlito5/Java/Lib.pm and lib/Perlito5/JavaScript/Lib.pm - Java: -- '&subr', '&subr()', '\&subr' idioms -- '*name = \&subr' idiom -- sprintf(), printf(), fc() -- increment/decrement operations on native types -- support for primitive data types, work in progress: "byte", "short" 9.019 cpan:Perlito5 2016-04-10 - Java: -- pure-typed expressions, see: misc/benchmark/benchmark_typed.pl -- support for primitive data types, work in progress: "long", "int" see: misc/benchmark/benchmark_typed_primitive.pl 9.018 cpan:Perlito5 2016-03-02 - Docs: -- new documentation file "README-howto-release.md" - Java: -- API to extend Java classes using Perl: new keywords "implements", "throws" -- native "undef" is "null" -- regex character class fixup - avoid double escape -- hex(),crypt(),rindex() by Bas Appelo -- oct() by Imran Mohammad -- delete, exists fixes for non hash context -- chomp() and chop() converted from JS to Java -- Java example: new socket based client server game using Perl, by Imran Mohammad misc/Java/GameClient.pl, misc/Java/GameServer.pl -- read/write argument list - $_[0]++ 9.017 cpan:Perlito5 2016-01-19 - Tests: -- Travis-ci integration https://travis-ci.org/fglock/Perlito added by fredericorecsky - Java: -- closure fixes: captured variables in for-loop; context -- implement return followed by comma-separated list -- new API to call Perl from Java -- new API to extend Java classes using Perl -- new API to access Java value types -- internal integer number representation is now "long" -- bless() and initial method call implementation (work in progress) by Bruno Czekay -- generated code has a smaller diff between runs - github bug #39 -- regex: implemented string match in list context -- regex: space in character classes is significant when /x is active - bug #40 -- regex: string replace preserves escape character - bug #41 9.016 cpan:Perlito5 2015-12-21 - Docs: -- review cookbook entry "Obtaining a Perl compiler script that runs in the browser" - Parser: -- error message for: "Identifier too long" (Perl limit is 251 characters) -- new error handler Perlito5::Compiler::error() - JavaScript: -- implemented 1-argument bless() - github bug #35 -- fix autovivification in exists() - Java: -- a "method call without parenthesis" will access a Java class/instance variable: my Int $val = Sample->VAL; -- closure fix: variables used in method calls are captured -- new example: misc/Java/TestConcurrent.pl 9.015 cpan:Perlito5 2015-12-01 - Docs: -- cookbook entry "Obtaining a Perl compiler script that runs in the browser" - Parser: -- error messages for: Scalar/Array/Number/String found where operator expected -- improved error message for missing comma - JavaScript: -- console.log() is the default "print" -- reverse() bugfix, add tests - Command line "perlito5" -- better switch handling: -Cperl5 / -C perl5 / -C'perl5' -- compile-only switch '-c' -- multiple '-e' switches -- '-E' switches -- show %ENV, @INC in '-V' -- set $0 -- execute UNITCHECK blocks 9.014 cpan:Perlito5 2015-11-24 - Parser: -- AUTOLOAD and DESTROY don't need a 'sub' prefix. -- ${...} and @{...} are "do-block"-ish -- $x->{s} doesn't try to parse "s///" -- set ${^GLOBAL_PHASE} - JavaScript: -- implement '-p' operator in nodejs - Command line "perlito5" -- read source code from STDIN or pipe if there is no -e or filename -- execute CHECK, INIT and END blocks 9.013 cpan:Perlito5 2015-11-07 - no changes; "pause.perl.org" reupload 9.012 cpan:Perlito5 2015-11-06 - Docs: -- started "Cookbook" section in Perlito5.pm POD with instructions to generate perlito5.js 9.011 cpan:Perlito5 2015-11-06 - fix command line option "expand_use" 9.010 cpan:Perlito5 2015-11-06 - fix MANIFEST.SKIP 9.009 cpan:Perlito5 2015-11-05 - Build: -- add bin/perlito5 to script_files section, add dist_abstract -- requires perl 5.014 because older versions don't have 'feature.pm', which breaks tests - Parser: -- update CORE prototypes to Perl v5.22 - use (+) instead of (\\[@%]) - Perl5-to-JavaScript compiler: -- implement (+) prototype 9.008 cpan:Perlito5 2015-11-04 - Makefile - add bin/perlito5 to EXE_FILES section - add LICENSE.md - Perl5-to-JavaScript compiler: -- default "print" function tries harder to find a native print -- fixed context in readline() - that is, "$x = <$fh>" vs. "@x = <$fh>" 9.007 cpan:Perlito5 2015-10-30 - add Build.PL 9.006 cpan:Perlito5 2015-10-30 * Perlito5 (Perl 5 compiler): - fix handling of native data parameters 9.004 cpan:Perlito5 2015-10-30 * Perlito5 (Perl 5 compiler): - fix CPAN files [rt.cpan.org #108111] - main Java class is "Main" - fix Perl5 emitter $/ variable 9.003 cpan:Perlito5 2015-10-21 * Perlito5 (Perl 5 compiler): - fix CPAN index 9.002 cpan:Perlito5 2015-10-21 * Perlito5 (Perl 5 compiler): - fix CPAN index 9.001 cpan:Perlito5 2015-10-21 * Perlito5 (Perl 5 compiler): - command line: -Cast-json - fix CPAN distro 9.000 cpan:Perlito5 2015-10-20 * Perlito5 (Perl 5 compiler): - first CPAN distro dev 2015-08-17 * Perlito5 (Perl 5 compiler): - more than 1700 tests - Parser: -- emit the same error messages as 'perl' in more places -- expanded support for prototypes, regex, v-strings -- track variable redeclarations and variable scopes -- add the variable type to AST nodes ("real sigil") -- "Perlito5X" namespace re-implements CPAN modules that are not possible (or not easy) to support directly in Perlito - such as Data::Dumper. Some modules are inlined in the parser - such as "vars" and "constant". -- add "<<>>" (Perl 5.22) -- support for "__LINE__", "__FILE__", and tracking the current line number -- more pod implementation details, such as "=encoding" -- fix return value for if/unless modifiers -- command line - implement "-n", "-p", "-M", "-m", fixed "-I" -- use a smaller grammar-grammar -- use a faster calling convention in grammar -- shorter AST node names - Perl5-to-JavaScript compiler: -- file operators (nodejs) -- create regex variables $1, $2, ... -- implement regex /e and /ee modifier -- /usr/bin/node displays the message's text and a backtrace (Shlomi Fish) -- initial overload implementation -- flip-flop operator, split, tr - Perl5-to-Java compiler: -- statements: while() and if() -- containers: hash, array, scalar; autovivification -- lexical and global variables -- Java data types: String, long, double, boolean -- Perl data types: closures, references -- initial implementation of regexes -- native Java objects and classes using: package Perl::Package { import => "java.class" } -- typed lexicals - mapped to imported Java classes: my Perl::Package $java_variable -- Java::inline * Perlito6 (Perl 6 compiler): -- no significant changes -- Go backend no longer works -- Python bootstrap still works -- instructions in "README-perlito6" need some update (replace "d8" with "node") dev 2014-05-30 * Perlito5 (Perl 5 compiler): - more than 1000 tests! - Perl5-to-Perl6 compiler - 'perlito5.org' web page moved to github - implement 5.20 "prototype" attribute - implement 5.20 "hash slices" - implement 5.16 "__SUB__" - 'use vars', 'use constant' - bugfixes: -- allow special variables in "for" loop -- implement "\( @a )" in p5-js -- 'local' now works with subscripted variables -- implement '$;' -- many more dev 2012-04-12 * Perlito5 (Perl 5 compiler): -- namespace Perlito5X contains versions of CPAN modules adapted for perlito -- option "-B" is now the default; this executes immediately: perlito5 -e 'say "ok"' -- option "-MO=Deparse": $ node perlito5.js -Isrc5/lib -MO=Deparse -e ' while (1) { say "works" } ' -- environment variable PERL5LIB=src5/lib now works - parser: -- autoquote hash-keys fix -- string interpolation in m// -- accept underlines inside numbers - javascript backend: -- AUTOLOAD -- tie() - TIEARRAY, STORE, FETCH -- string increment -- negative index in array -- more file and process operations: chdir, unlink, close, exit -- control functions: next, last, redo, break -- more functions: rand, printf, sprintf -- "continue" blocks -- GLOB references - perl5 backend: -- requires v5.10 * Perlito6 (Perl 6 compiler): -- updated method hyper syntax to use >>. instead of .>> 9.0 2012-04-11 * Perlito5 (Perl 5 compiler): - parser: -- there is now an internal "grammar API"; new words can be added to the grammar from inside perl5 modules; The non-standard "token" grammar was moved to a module -- here-docs -- new Perl5-in-Perl6 backend (experimental) -- new option -Bjs/-Bperl5 -- new option -Cast-perl5 -- added option -I Note: -I./src5/lib is required to compile the compiler and also to run some of the tests -- runs some tests from the perl5 test suite (pmurias++) -- implemented prototypes (function signatures) -- "use", import/unimport; "use strict"/"no strict" - perl5 backend: -- use native data structures and ops - javascript backend: -- works on node-js (pmurias++) -- @ISA and inheritance -- %ENV, @ARGV -- simple regexes (using javascript native regex) -- symbol tables/typeglobs -- references -- "local", "our"; goto &sub -- wantarray; each; __PACKAGE__ -- native javascript can be accessed with JS::inline('string') -- reduced generated code size; emitted code is more optimized and better formatted -- cleanup unused modules from the browser backend - javascript backend regressions: -- the d8 shell (v8 javascript) doesn't support some file system functions needed by the compiler -- perlito5 calling convention is incompatible with native javascript The last commit using native javascript calls is "e1e3316b" * Perlito6 (Perl 6 compiler): - compiler namespace moved from Perlito to Perlito6 8.0 2011-12-24 - added new compiler for Perl version 5. * Perlito Perl 5: - command line "perlito5.pl" - supported backends: Perl 5, JavaScript - source code in src5/ directory * Perlito Perl 6: - command line renamed to "perlito6.pl" - supported backends: Perl 5, Python 2.6, JavaScript - new experimental backend: Java - fixed META.yml for "v6.pm" CPAN distribution (thanks Aevar) - fixed unicode IO, added unicode tests - add some formatting to Perl5 and JavaScript output - methods: map, grep - operators: x - source code moved to src6/ directory Regressions: - removed '-B' command line flag (since 7.0) - backends pending upgrade to the new AST: Common Lisp, Ruby 1.9, Eval - backends no longer supported in this version: Go, Parrot, Rakudo, Clojure 7.0 2011-04-20 - supported backends: Perl 5, Python 2.6, JavaScript - added "perlito" command-line compiler and shell - new distribution "v6.pm" (Perlito in Perl 5) This replaces Pugs::Compiler::Perl5 as the v6.pm compiler in CPAN. - correct operator precedence - interpolation of variables and code in strings - 'unless' and statement modifiers - several fixes in List, Hash, Array, Block, Bool, Str, Mu - operators: numeric autoincrements, defined-or, range Regressions: - removed '-B' command line flag - backends pending upgrade to the new AST: Go, Common Lisp, Ruby 1.9, Eval - backends not supported in this version: Parrot, Rakudo, Clojure 6.0 2010-07-27 - Ruby backend bootstrap. - more tests 5.0 2010-07-19 - Python backend bootstrap. - use variable assignment instead of binding - that is, use '=' instead of ':=' - 'use' - all backends can now use Test.pm - 'elsif' - 'loop' - regex quantifiers - Lisp backend now bootstraps with the 'util/mp6.pl' compiler 4.1 2010-03-24 - floating point numbers - 'while' loop 4.0 2010-03-20 - Go backend bootstrap. The Go backend was updated to the latest Go language spec. - Perl5 backend optimized; 30% faster - More library functions, added to all backends - New 'Eval.pm' module - implements a MiniPerl6 interpreter in MiniPerl6. This should add some debugging capabilities later on. - New test suite. See README on how to use 'prove' for each backend. - New compiler options to create binary executables - Currently the stable backends are: Perl5, JavaScript, JVM, Lisp, Go. See README for bootstrapping instructions for all backends. - Removed support for features that are not standard Perl6. 3.0 2010-01-21 - Go language backend; using Go: http://golang.org - Java-class backend; using Rhino: http://www.mozilla.org/rhino - util/mp6.pl - compiler command line script written in MiniPerl6 - new repository at http://github.com/fglock/Perlito - new web page at http://www.perlito.org created by nferraz (Nelson Ferraz) 2.0 2009-10-09 - JavaScript (Firefox, V8) bootstrap - simplified 'make' inside tokens 1.0 2009-08-28 - Lisp (SBCL) bootstrap - Changed accessors to lvalue [intermission] - Perl5 emitter: fixed Array inside signature: method ( $a, [ $b, $c ] ) ... - Perl5 emitter: implemented "warn" 0.003 2006-12-12 - All tests converted to TAP format - Parrot backend: - added Parrot emitter and 'mp6-parrot' script - passes several tests - 'Match' class written in MP6 - Perl5 backend: - parameter binding with complex data structures 0.002 2006-11-18 - fixed array expansion in 'for @x {...}' - fixed grammar compilation in MiniPerl6::Grammar and MiniPerl6::Grammar::Regex - type annotations my Int $x - autoquote hash keys { a => 42 } - pair syntax sugar { :$a } - deep array binding [ $a, [ $b, $c ] ] := [ 1, [ 2, 3 ] ] 0.001 2006-11-17 - MiniPerl6::Perl5::Emitter and MiniPerl6::Emitter::Token compile ok echo 'class Main { say "hello, World" }' | perl -Ilib5 mp6-perl5-boot.pl | perl -Ilib5 2006-11-14 - all files parsed - added Perl5 build script 2006-11-11 - parses MiniPerl6/Emitter.pm 2006-11-10 - parses mp6.pl 2006-11-06 - implemented MP6::G::Regex::rule() - /<%hash>/ - /const|const/ - // - /<'xyz'>/ - /\n/ 2006-11-01 - initial language draft (on paper)