Releases: PlutoLang/Pluto
Releases · PlutoLang/Pluto
0.11.3
0.11.2
Compiler:
- Fixed
extends
not inheriting__index
,__mindex
,__newindex
- Fixed lexer looping infinitely on a self-referencing alias
Runtime:
- Fixed
in
for substring checking not being binary safe - Fixed table.slice crashing when producing a big slice
- Fixed
exportvar
's handling of non-finite numbers - Fixed bigint addition when operands are a mix of positive and negative
- Fixed memory leaks under some rare conditions
You can view the full commit log here.
0.11.1
- Improved implicit-global coverage for multiple assignments within the same statement
- Fixed preprocessor aliases not taking multi-token arguments (e.g. function calls)
- Fixed compile-time concatenation shadowing optional parentheses
- Fixed
extends
not inheriting__pairs
Standard Library:
- socket.bind now returns the created coroutine and errors are raised to the caller instead of the scheduler
- Fixed socket.listen/socket.bind not failing for bound TCP ports on Windows
- Fixed
os.sleep(1)
taking considerably longer than 1ms on Windows - Fixed
scheduler:run
yielding after the final tick - Fixed
dumpvar
andexportvar
's quoted strings not escaping bytes that would make it invalid UTF-8 - Fixed filesystem errors on Windows not being UTF-8 encoded when the user has a non-English locale
You can view the full commit log here.
0.11.0
- Added preprocessor aliases (
$alias
) - Added compile-time evaluated statement
$assert
- Added warning for unused local variables
- Added octal numerals
- Added
__mindex
metamethod- This is now used by default table metatable, elimiting the compatibility concerns it previously had.
- Export is no longer deprecated but now implies constness
- Walrus operator can now initialize multiple variables
- Compile-time conditionals can now be equality checks
- Table freezing is now an optional feature, enabled via
PLUTO_ENABLE_TABLE_FREEZING
- Fixed implicit conversion of booleans to strings outside of concats
- Removed table length cache
- Removed let & const
Standard library:
- Added buffer library
- Added table.invert, table.dedup/deduplicate, table.deduped/deduplicated, table.values
- Added crypto.crc32c
- crypto.random now treats 1-2 arguments like math.random
- Added optional 'binary' parameter to crypto.md5
- Added ffi.alloc, ffi.write, & ffi.read
- Added UDP support to socket.connect
- Added socket.isudp, socket.udpserver
- Added io.chmod
- Added os.arch constant
- Added callonce function
- Added sdiv, udiv, smod, & umod functions
- string.split's needle parameter is now required (previously defaulted to
","
) - socket.listen & socket.bind can now be bound to a specific IP address
- io.part now returns 'parent, name' if part argument is omitted
- Optimized json.encode & json.decode
- Removed
_PSOUP
constant
0.10.5
- Improved error message when
new
is provided with a nil value - Fixed ternary expression sometimes picking a bad register
- Fixed possible buffer overflow when processing comments
Standard Library:
- json.encode now errors when provided with a non-finite number such as NaN or infinity
- Fixed a rare crash with json.encode
0.10.4
- Compile-Time Evaluation: Fixed
$elseif
not working - Fixed derived classes having their __index overwritten
Standard Library:
- Improved scheduler's handling of errorfunc so debug.traceback is more useful
- Optimized base64 decode operations
- FFI: Fixed unloading library if it's out of scope but its functions are not
- FFI: Fixed incorrectly writing f32 & f64 values for struct members
- Fixed various issues with big inputs on dumpvar, exportvar, json.encode, json.decode, xml.encode, & xml.decode
0.10.3
- Compile-Time Evaluation:
io.contents
andtype
are now also available - Compile-Time Evaluation: Table return type is now supported (for functions like
url.parse
) - Improved handling when a C++ exception is thrown during ffi.call
- Fixed not inferring that a keyword should be disabled when used as a global variable
- For Integrators: Added
PLUTO_PARANOID_KEYWORD_DETECTION
to make this more aggressive
- For Integrators: Added
- Fixed infinite loop when switch control value contains
or
orand
- Fixed base32.decode not working correctly on some ARM systems
0.10.2
0.10.1
- Compatibility: Fixed not inferring that a keyword should be disabled from parameter
- Universal Block Opener: Fixed
do
not being accepted instead ofthen
forcatch
and$if
- FFI library: Improved cdef parsing and error reporting
- Crypto library: Fixed returning incorrect hex digest for MD5 in some cases
- Socket library: Fixed an issue where the remote closing a connection too soon could cause recv/peek to never see some data that was sent
0.10.0
- Added chained comparisons (e.g.
1 <= i <= #t
) - Added private methods to classes
- Private fields (and methods) can be declared and accessed anywhere inside the class now. Previously, you needed to define a private field before you accessed it. This is no longer a restriction.
- Pluto now automatically detects if non-compatible keywords should be enabled or disabled based on usage
- This is overwritten by the scripter using
pluto_use
or the integrator or user managing compatibility mode, so it only applies when absolutely zero configuration has been applied. This is a significant improvement for lua source code compatibility.
- This is overwritten by the scripter using
do
can now be used instead ofthen
andbegin
if
expressions are now no longer deprecated but require anend
(e.g.print(if a then b else c end)
)$define
statement now requires an assignment- Fixed not being able to load Lua C modules on Linux
- For simplicity in this regard, Pluto now always uses the C ABI to export
lua_
functions and the C++ ABI forpluto_
functions.
- For simplicity in this regard, Pluto now always uses the C ABI to export
Standard library:
- Added canvas library
- Added ffi library
- Added regex library
- Added assert.contains
- Added bigint.eq, bigint.lt, & bigint.le
- Added crypto.ripemd160
- Added crypto.exportkey & crypto.importkey
- Added crypto.decompress
- Added string.tohex & string.fromhex
- Added table.findindex/findkey, table.back, table.keys, table.modget, table.modset, table.slice, table.countvalues, & table.chunk
- Added socket.getpeer, socket.peek, socket.getside, socket.istls, & socket.isopen
- Added optional limit argument to string.split
- Added io.cwd and io.chdir as aliases for io.currentdir
- socket.starttls can now be used on server sockets
- Optimized json.encode with
__order
- Fixed handling when an invalid RSA private key is passed to crypto.encrypt, crypto.decrypt, crypto.sign