Hi folks, Long time no releases. We've been very busy setting up the OpenResty Inc. commercial company in the US. That's why we've been quiet in the last few months. The good news is that we now have a strong full-time engineering team that can work on both the OpenResty open source platform and higher-level commercial products based on that. The OpenResty web platform will always remain open source. There's no doubt about that ;)
Now I am excited to announce the new formal release, 1.11.2.3, of the OpenResty web platform based on NGINX and LuaJIT: https://openresty.org/en/download.html Both the (portable) source code distribution and the Win32 binary distribution are provided on this Download page. OpenResty's official yum repositories will get updated to use the this new version as soon as Fedora's COPR site is back online: http://status.fedoraproject.org/ Special thanks go to all our developers and contributors! We have the following highlights in this release: * We greatly reduced the chance of hash collisions in LuaJIT's global string table for x86_64 systems with SSE 4.2 support. * We removed the standard Lua 5.1 interpreter from our bundle. We now use LuaJIT exclusively. We will soon drop compatibility with the standard 5.1 interpreter in the OpenResty core so that we no longer have to maintain two parallel implementations of our Lua API (one based on CFunction, and the one based on FFI). * We add HTTP/HTTPS proxy support to our OPM client for restricted network environments. * We now includes a very new LuaJIT v2.1 version with new builtin functions like Lua 5.3's table.move(). * New --shdict "NAME SIZE" and --resolve-ipv6 options in the "resty" command-line utility. * Automatic Lua bracktrace output on Lua exceptions in the "resty" command-line utility. * Important bug fixes regarding retries count limit in balancer_by_lua*. * ngx.redirect() now supports 303 as well. The complete change log since the last (formal) release, 1.11.2.2: * change: we no longer bundle the standard Lua 5.1 interpreter (aka the PUC-Rio Lua). now we only bundle LuaJIT. * win32: upgraded PCRE to 8.40, zlib to 1.2.11, and OpenSSL to 1.0.2k. * bugfix: we did not use "PATH" in "./configure --sbin-path=PATH" when creating symlinks. thanks David Galeano for the patch. * bugfix: default index.html: missing the "</p>" tag. thanks Xiaoyu Chen for the patch. * feature: applied the "safe_resolver_ipv6_option" patch to the nginx core to avoid the "ipv6=off" option to be parsed by nginx when it is not built with IPv6 support. thanks Thibault Charbonnier for the patch. * feature: now we automatically add the "-msse4.2" compilation option for building the bundled LuaJIT when it is available. * upgraded ngx_lua to 0.10.8. * feature: fixed build compatibility with BoringSSL. thanks Tom Thorogood for the patch. Note: BoringSSL is *not* an officially supported target. * feature: "tcpsock:connect()": allows the "options_table" argument being nil. thanks Dejiang Zhu for the patch. * feature: added support for the 303 status code in ngx.redirect(). thanks Tom Thorogood for the patch. * bugfix: C API: "ngx_http_lua_add_package_preload()" might not take effect when lua_code_cache is off. thanks jimtan for the patch. * bugfix: balancer_by_lua*: the number of retres might exceed the limit of proxy_next_upstream_tries or alike. * bugfix: setting response headers would change the "Content-Type" response header. thanks leafo for the report and Ming Wen for the patch. * bugfix: tcp cosockets: "sslhandshake()": typo in the error message. thanks detailyang for the patch. * bugfix: typo fix in C POST args handler debug log. thanks Robert Paprocki for the patch. * change: removed the use of "luaL_getn()" macro as it is no longer available in the latest LuaJIT v2.1. thanks Datong Sun for the patch. * change: removed the "mmap(sbrk(0))" memory trick since glibc leaks memory when it is forced to use "mmap()" to fulfill "malloc()". * doc: ngx.exit() also returns immediately in the balancer_by_lua* context. thanks Jinhua Tan for the patch. * doc: various wording tweaks and more code examples. thanks Dayo Akanji for the patch. * doc: added a note about the LRU regex cache used in the ngx.re.* implementation of lua-resty-core. * tests: the test suite can now work with PCRE 8.39 ~ 8.40. thanks Andreas Lubbe for the patch. * upgraded resty-cli to 0.17. * optimize: removed unwanted exit status handling. thanks Thibault Charbonnier for the patch. * feature: generates Lua stacktraces by default for user errors. thanks Thibault Charbonnier for the patch. * bugfix: fixed exit code handling for nginx crashes and INT signal interrupts. thanks Aliaxandr Rahalevich and Gordon Gao for the report. * feature: resty: added the --shdict "NAME SIZE" option. thanks Thibault Charbonnier for the patch. * feature: resty: added new command-line option "--resolve-ipv6". thanks Thibault Charbonnier for the patch. * upgraded opm to 0.0.3. * "dist.ini": relaxed the github repo link check. * feature: added support for HTTP proxies via environments "http_proxy" and "https_proxy". * bugfix: tar might give the permissions error 'Cannot change ownership to uid XX, gid XX: Operation not permitted'. thanks Jon Keys for the patch. * upgraded lua-resty-core to 0.1.11. * feature: "resty.core.regex": exported internal Lua helper functions "collect_captures", "check_buf_size", and "re_sub_compile". these functions are deliberately undocumented and thus subject to future changes. * change: "resty.core": made the warning louder by turning it to an alert when LuaJIT 2.0 is used. * bugfix: ngx.re: "split()" might enter infinite loops when the regex is an empty string. thanks Dejiang Zhu for the patch. * upgraded lua-resty-lock to 0.06. * optimize: use branch-free algorithms for variables assignment. thanks Thibault Charbonnier for the patch. * optimize: removed the unused shdict metatable retrieval code. thanks Thibault Charbonnier for the patch. * doc: various documentation improvements from Thibault Charbonnier. * upgraded lua-resty-lrucache to 0.06. * bugfix: "resty.lrucache": the "get()" method incorrectly ignored "false" values. thanks Proton for the patch. * optimize: small tweaks from Aapo Talvensaari and Thibault Charbonnier. * doc: typo fixes from Gordon Gao. * upgraded lua-resty-mysql to 0.19. * bugfix: the 8-bit packet numbers might overflow and led to runtime Lua exceptions. thanks Ming Wen for the patch. * upgraded lua-resty-limit-traffic to 0.03. * bugfix: fixed several known race conditions by switching to "shdict:incr(k, v, init)". thanks Thibault Charbonnier for the patch. * optimize: use "math.max()" to reduce Lua branches. thanks Thibault Charbonnier for the patch. * upgraded lua-redis-parser to 0.13. * bugfix: removed the use of the old Lua 5.0 "luaL_getn" API function since the latest LuaJIT 2.1 just removed it. * upgraded lua-cjson to 2.1.0.5. * feature: supports MS C compiler older than VC2012. thanks spacewander for the patch. * bugfix: fixed compilation errors from the Microsoft C compiler. thanks Tim Chen for the patch. * bugfix: conditionally build "luaL_setfuncs()" function as the latest LuaJIT v2.1 already includes it. thanks Datong Sun for the patch. * bugfix: preserve "empty_array_mt" behavior upon multiple loadings of the module. thanks Thibault Charbonnier for the patch. * upgraded ngx_redis2 to 0.14. * feature: fixed compilation errors with Nginx 1.11.6+. * upgraded ngx_memc to 0.18. * feature: fixed the compilation errors with nginx 1.11.6+. thanks Hiroaki Nakamura for the patch. * upgraded ngx_drizzle to 0.1.10. * feature: fixed compilation issues with nginx 1.11.6+. thanks James Christopher Adduono for the patch. * bugfix: fixed errors and warnings with C compilers without variadic macro support. * upgraded LuaJIT to v2.1-20170405: https://github.com/openresty/luajit2/tags * feature: added the bytecode option "L" to display lua source line numbers. thanks Dejiang Zhu for the patch. * optimize: x64: "lj_str_new": uses randomized hash functions based on crc32 when "-msse4.2" is used in build options. thanks Shuxin Yang for the patch. * optimize: "lj_str_new": tests the full hash value before doing the full string comparison on hash collisions. thanks Shuxin Yang for the patch. * imported Mike Pall's latest changes: * Add some more changes and extensions from Lua 5.2. * Remove old Lua 5.0 compatibility defines. * FFI: Fix FOLD rules for "int64_t" comparisons. * ARM64: Add big-endian support. * x64/"LJ_GC64": Fix "emit_loadk64()". * "LJ_GC64": Fix "BC_CALLM" snapshot handling. * x64/"LJ_GC64": Fix assembly of CNEWI with 64 bit constant pointer. * ARM64: Fix Nintendo Switch build. * ARM64: Fix XLOAD/XSTORE with FP operand. * Remove unnecessary mcode alloc pointer check. * Limit mcode alloc probing, depending on the available pool size. * Fix overly restrictive range calculation in mcode allocation. * Fix out-of-scope goto handling in parser. * Remove internal "__mode = "K"" and replace with safe check. * Fix annoying warning, due to deterministic binutils configuration. * DynASM: Fix warning. * MIPS64, part 2: Add MIPS64 hard-float JIT compiler backend. * Fix FOLD rules for "math.abs()" and FP negation. * Fix soft-float "math.abs()" and negation. * x64/"LJ_GC64": Fix warning for DUALNUM build. * x64/"LJ_GC64": Fix (currently unused) integer stores in "asm_tvptr()". * ARM64: Cleanup and de-cargo-cult TValue store generation. * MIPS: Don't use "RID_GP" as a scratch register. * MIPS: Fix emitted code for U32 to float conversion. * MIPS: Backport workaround for compact unwind tables. * Make "checkptrGC()" actually work. * ARM64: Fix AREF/HREF/UREF fusion. * "LJ_GC64": Add build options and install instructions. * Add some more extensions from Lua 5.2/5.3. * Fix cross-endian jit.bcsave for MIPS target. * ARM64: Remove unused variables in disassembler. * ARM64: Fuse BOR/BXOR and BNOT into ORN/EON. * Add "proto" field to "jit.util.funcinfo()". * Add missing FOLD rule for 64 bit shift+BAND simplification. * ARM64: Fix code generation for S19 offsets. * ARM64: Fuse various BAND/BSHL/BSHR/BSAR combinations. * ARM64: Fuse FP multiply-add/sub. * ARM64: Fuse XLOAD/XSTORE with STRREF/ADD/BSHL/CONV. * ARM64: Reorganize operand extension definitions. * ARM64: Add missing ldrb/strb instructions to disassembler. * ARM64: Fix pc-relative loads of consts. Cleanup branch codegen. * ARM64: Make use of tbz/tbnz and cbz/cbnz. * Eliminate use of lightuserdata derived from static data pointers. * ARM64: Emit more efficient trace exits. * Generalize deferred constant handling in backend to 64 bit. * ARM64: Reject special case in "emit_isk13()". * ARM64: Allow full VA range for mcode allocation. * ARM64: Add JIT compiler backend. * Fix amalgamated build. * Increase range of "GG_State" loads via "IR_FLOAD" with "REF_NIL". * MIPS: Fix TSETR barrier. * Report parent of stitched trace. The HTML version of the change log with lots of helpful hyper-links can be browsed here: https://openresty.org/en/changelog-1011002.html OpenResty is a full-fledged web platform by bundling the standard Nginx core, Lua/LuaJIT, lots of 3rd-party Nginx modules and Lua libraries, as well as most of their external dependencies. See OpenResty's homepage for details: https://openresty.org/ We have run extensive testing on our Amazon EC2 test cluster and ensured that all the components (including the Nginx core) play well together. The latest test report can always be found here: https://qa.openresty.org/ Have fun! Best regards, Yichun PS 1: we've been privately building a Perl 6 dialect compiler that can compile a large (non-strict) subset of the Perl 6 programming language into optimized and standalone Lua code targeting the OpenResty web platform. This compiler is called fanlang. Our initial benchmark already shows that the Lua code generated by the fanlang compiler is significantly faster than the official/reference implementation of Perl 6. Our fanlang compiler is already mature enough that has already been successfully used to build another compiler for a domain specific language called edgelang. The edgelang compiler also emits optimized and standalone Lua code targeting OpenResty. This release is the first OpenResty formal version that can fully support our fanlang and edgelang compilers. We have plans to open source a basic version of our fanlang compiler to the community once it is fully bootstrapped by itself. PS 2: We'll try upgrading the NGINX core in OpenResty to the latest version in the next OpenResty release. Stay tuned! _______________________________________________ nginx mailing list nginx@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx