Skip to content

Releases: PlutoLang/Pluto

0.11.3

13 Aug 21:23
Compare
Choose a tag to compare

Fixed some regressions from 0.11.2:

  • io.isfile and io.isdir erroring on non-existent paths
  • io.copy erroring when the destination doesn't exist

0.11.2

11 Aug 13:50
Compare
Choose a tag to compare

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

11 Jun 11:16
Compare
Choose a tag to compare
  • 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 and exportvar'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

24 May 08:28
Compare
Choose a tag to compare
  • 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

08 May 03:44
Compare
Choose a tag to compare
  • 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

15 Feb 14:18
Compare
Choose a tag to compare
  • 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

02 Dec 06:00
Compare
Choose a tag to compare
  • Compile-Time Evaluation: io.contents and type 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
  • Fixed infinite loop when switch control value contains or or and
  • Fixed base32.decode not working correctly on some ARM systems

0.10.2

12 Nov 23:23
Compare
Choose a tag to compare
  • Added io.mkdir as an alias for io.makedir
  • Added io.mkdirs as an alias for io.makedirs
  • Fixed class preparsing issues with 'switch' & 'do' statements
  • Fixed not being able to use reserved identifiers with colon call syntax

0.10.1

04 Nov 02:06
Compare
Choose a tag to compare
  • Compatibility: Fixed not inferring that a keyword should be disabled from parameter
  • Universal Block Opener: Fixed do not being accepted instead of then for catch 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

29 Oct 20:19
Compare
Choose a tag to compare
  • 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.
  • do can now be used instead of then and begin
  • if expressions are now no longer deprecated but require an end (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 for pluto_ functions.

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