Skip to content

Releases: ArkScript-lang/Ark

ArkScript v4.0.0-17

ArkScript v4.0.0-17 Pre-release
Pre-release

Choose a tag to compare

@github-actions github-actions released this 06 Aug 09:08

Added

  • GET_CURRENT_PAGE_ADDRESS instruction to push the current page address to the stack
  • CALL_CURRENT_PAGE super instruction, calling the current page with a given number of arguments (avoid loading a page address on the stack, then popping it to perform the call)
  • new data type Dict, which can be created with (dict "key" "value" ...), and manipulated with dict:get, dict:add, dict:contains, dict:remove, dict:keys and dict:size

Changed

  • the VM no longer stores a reference to the current function being called in the newly created scope

ArkScript v4.0.0-16

ArkScript v4.0.0-16 Pre-release
Pre-release

Choose a tag to compare

@github-actions github-actions released this 02 Jul 05:26
ad314c4

Added

  • wasm export: we can now run ArkScript code on the web!

Changed

  • renamed string:format to format
  • io:removeFiles is now io:removeFile and works on a single file/path
  • renamed almost all builtins to prefix them with builtin__, to have them proxied in the standard library (to be able to import and scope them properly)
  • new super instruction CALL_BUILTIN_WITHOUT_RETURN_ADDRESS to optimize the proxied builtins, skipping the return address deletion

ArkScript v4.0.0-15

ArkScript v4.0.0-15 Pre-release
Pre-release

Choose a tag to compare

@github-actions github-actions released this 04 Jun 09:02
e2f01aa

Added

  • LT_CONST_JUMP_IF_FALSE and LT_SYM_JUMP_IF_FALSE to compare a symbol to a const and a symbol to a symbol (respectively), then jump to an address if false (useful for while loops that check a simple (< x n) condition)
  • LT_CONST_JUMP_IF_TRUE, counterpart of LT_CONST_JUMP_IF_FALSE
  • GT_CONST_JUMP_IF_TRUE, counterpart of LT_CONST_JUMP_IF_TRUE
  • GT_CONST_JUMP_IF_FALSE, counterpart of LT_CONST_JUMP_IF_FALSE
  • GT_SYM_JUMP_IF_FALSE, counterpart of LT_SYM_JUMP_IF_FALSE
  • CALL_SYMBOL super instruction to load and call a symbol in a single instruction
  • GET_FIELD_FROM_SYMBOL and GET_FIELD_FROM_SYMBOL_INDEX super instructions to get a field from a closure and push it to the stack
  • EQ_CONST_JUMP_IF_TRUE and EQ_SYM_INDEX_JUMP_IF_TRUE to compare a symbol to a const and a symbol to a symbol (respectively), then jump to an address if true (useful for conditions that check a simple (= x n) condition)
  • NEQ_CONST_JUMP_IF_TRUE as a super instruction counterpart to EQ_CONST_JUMP_IF_TRUE
  • NEQ_SYM_JUMP_IF_FALSE, counterpart of LT_SYM_JUMP_IF_FALSE for inequality
  • AT_SYM_SYM and AT_SYM_INDEX_SYM_INDEX super instructions, to get an element from a list in a single instruction, avoiding 2 push and 2 pop
  • CHECK_TYPE_OF and CHECK_TYPE_OF_BY_INDEX super instructions, to check the type of variable against a constant in a single instruction
  • INCREMENT_STORE and DECREMENT_STORE super instructions, to update a value in place when incrementing/decrementing it by a set amount
  • APPEND_IN_PLACE_SYM and APPEND_IN_PLACE_SYM_INDEX super instructions
  • PUSH_RETURN_ADDRESS instruction now replaces the VM auto push of IP/PP
  • remove the stack swapping by pushing arguments in the reverse order by which they are loaded

Changed

  • macros are now defined like (macro name value) / (macro name (args args args) body) / ($if cond then else)

ArkScript v4.0.0-14

ArkScript v4.0.0-14 Pre-release
Pre-release

Choose a tag to compare

@github-actions github-actions released this 13 May 20:40

Added

  • instruction source location ; two new bytecode tables were added: one for filenames, another for (page pointer, instruction pointer, file id, line), allowing the VM to display better error messages when the source is available
  • show source location when a runtime error is thrown in the VM

Changed

  • VM stack size is now 4096 instead of 8192
  • Ark::CodeError now takes a CodeErrorContext to store the source (filename, line, column, expression) of an error

Removed

  • removed Value VM::resolve(const Value* val, Args&&... args), which has been deprecated in ArkScript v3.4.0

ArkScript v4.0.0-13

ArkScript v4.0.0-13 Pre-release
Pre-release

Choose a tag to compare

@github-actions github-actions released this 12 Apr 17:52
dfb6038

Added

  • $as-is to paste a node inside a maro without evaluating it further ; useful to stop recursive evaluation of nodes inside function macros
  • LOAD_SYMBOL_BY_INDEX instruction, loading a local from the current scope by an index (0 being the last element added to the scope)
  • STORE_FROM_INDEX and SET_VAL_FROM_INDEX instructions for parity with the super instructions not using load by index
  • INCREMENT_BY_INDEX and DECREMENT_BY_INDEX instructions for parity with the super instructions not using load by index
  • STORE_TAIL_BY_INDEX, STORE_HEAD_BY_INDEX, SET_VAL_TAIL_BY_INDEX, SET_VAL_HEAD_BY_INDEX super instructions added for parity with the super instructions not using load by index
  • RESET_SCOPE instruction emitted at the end of a while loop to reset a scope so that we can create multiple variables and use LOAD_SYMBOL_BY_INDEX

Changed

  • -bcr option can be given a source file, it will then be compiled before its bytecode is shown
  • magic numbers for tables start in bytecode files have been changed from 0x01, 0x02, 0x03 to 0xA1, 0xA2, 0xA3 (symbols, values, code) to make them stand out in hex editors
  • magic numbers for value types in bytecode files have been changed from 0x01, 0x02, 0x03 to 0xF1, 0xF2, 0xF3 (number, string, function)
  • numbers in the values table in bytecode files are no longer stringified but their IEEE754 representation is now encoded on 12 bytes (4 for the exponent, 8 for the mantissa)
  • changed how scopes are stored inside the VM to enhance performances. All scope data are now contiguous!
  • when possible, accessing variables from the current scope is compiled to a new instruction LOAD_SYMBOL_BY_INDEX, to avoid the sometimes expansive lookup by id
    • this works inside normal scopes (introduced by while loops) and functions scopes, but not for closures

ArkScript v4.0.0-12

ArkScript v4.0.0-12 Pre-release
Pre-release

Choose a tag to compare

@github-actions github-actions released this 03 Mar 11:37

Added

  • new builtin random, returning a random number between INT_MIN and INT_MAX, or in a custom range
  • $as-is to paste a node inside a maro without evaluating it further ; useful to stop recursive evaluation of nodes inside function macros

Changed

  • upgraded fmtlib to 11.1.3-13
  • allow capture in nested scope (before it was targeting only the current scope)

ArkScript v4.0.0-11

ArkScript v4.0.0-11 Pre-release
Pre-release

Choose a tag to compare

@github-actions github-actions released this 17 Feb 10:06

Added

  • new operator @@ to get elements in list of lists / list of strings

Changed

  • loops have their own scope: variables created inside a loop won't leak outside it

ArkScript v4.0.0-10

ArkScript v4.0.0-10 Pre-release
Pre-release

Choose a tag to compare

@github-actions github-actions released this 13 Dec 21:32

Added

  • the name & scope resolution pass now checks for mutability errors
  • compile time checks for mutability errors with append!, concat! and pop!
  • new MAKE_CLOSURE <page addr> instruction, generated in place of a LOAD_CONST when a closure is made
  • added -fdump-ir to dump the IR entities to a file named {file}.ark.ir
  • added 11 super instructions and their implementation to the VM
  • support for the glob import syntax and symbol import syntax
  • modify list and return a copy (string:setAt string index char) (bound checked)
  • added in place list mutation: (@= list|string index new_value), (@@= list|list<string> index1 index2 new_value|char) (bound checked)
  • compile time argument count check for and and or
  • basic dead code elimination in the AST optimizer

Changed

  • the Ark::VM class is now final
  • the STORE instruction has been renamed SET_VAL
  • the STORE instruction is emitted in place of the LET and MUT instructions, without any mutability checking now
  • io:writeFile no longer takes a mode and has been split into io:writeFile and io:appendToFile
  • instructions are now positioned like this: inst byte1 byte2 byte3
    • byte1 is 0 if the instruction takes a single argument on 16 bits, split on byte2 and byte3
    • if the instruction takes two arguments, they each have 12 bits ; the second one is on byte1 and upper half of byte2, the first on lower half of byte2 and then byte3
  • ast-to-json dump now supports macros
  • the parser can detect ill-formed macros (that are seen as function macros while being value macros)
  • adding a CALL_BUILTIN <builtin> <arg count> super instruction
  • fixed formatting of comments after the last symbol in an import node
  • renamed str:xyz builtins to string:xyz for uniformity with the standard library
  • string:find takes an optional third argument, startIndex (where to start the lookup from, default 0
  • list:setAt can work with negative indexes, and is now bound checked
  • re-enabled the AST optimizer, only used for the main arkscript executable (not enabled when embedding arkscript, so that one can grab variables from the VM)

Removed

  • removed LET and MUT instructions in favor of a single new STORE instruction
  • removed SAVE_ENV instruction

ArkScript v4.0.0-9

ArkScript v4.0.0-9 Pre-release
Pre-release

Choose a tag to compare

@github-actions github-actions released this 22 Sep 12:51

Changed

  • formatted ArkScript examples
  • better variable formatting in the ArkScript code formatter

ArkScript v4.0.0-8

ArkScript v4.0.0-8 Pre-release
Pre-release

Choose a tag to compare

@github-actions github-actions released this 19 Sep 17:27
b98880b

Added

  • introduced Ark::internal::Pass to describe compiler passes: they all output an AST (parser, import solver, macro processor, and optimizer for now)
  • add -f(no-)importsolver, -f(no-)macroprocessor and -f(no-)optimizer to toggle on and off those compiler passes
  • added resolving empty? as a macro when possible
  • added short-circuiting to and and or implementation
  • added --check to the formatter as an option: returns 0 if the code is correctly formatted, 1 otherwise

Changed

  • added a max macro evaluation depth
  • introduced internal::listInstructions with the different instructions, to be used by the compiler and name resolution pass
  • checking for forbidden variable/constant name in the name & scope resolution pass, to give errors to the user before compiling some weird code
  • repl completion and colors are now generated automatically from the builtins, keywords & operators
  • fixed formating of comments inside function declarations
  • renamed the macros symcat and argcount to $symcat and $argcount for uniformity

Removed

  • removed termcolor dependency to rely on fmt for coloring outputs
  • removed and and or instructions in favor of a better implementation to support short-circuiting