janet/CHANGELOG.md

44 KiB

Changelog

All notable changes to this project will be documented in this file.

1.34.0 - 2024-03-22

  • Add a new (split) PEG special by @ianthehenry
  • Add buffer/push-* sized int and float by @pnelson
  • Documentation improvements: @amano-kenji, @llmII, @MaxGyver83, @pepe, @sogaiu.
  • Expose _exit to skip certain cleanup with os/exit.
  • Swap set / body order for each by @sogaiu.
  • Abort on assert failure instead of exit.
  • Fix: os/proc-wait by @llmII.
  • Fix macex1 to keep syntax location for all tuples.
  • Restore if-let tail calls.
  • Don't try and resume fibers that can't be resumed.
  • Register stream on unmarshal.
  • Fix asm roundtrip issue.

1.33.0 - 2024-01-07

  • Add more + and * keywords to default-peg-grammar by @sogaiu.
  • Use libc strlen in janet_buffer_push_cstring by @williewillus.
  • Be a bit safer with reference counting.
  • Add support for atomic loads in Janet's atomic abstraction.
  • Fix poll event loop CPU usage issue.
  • Add ipv6, shared, and cryptorand options to meson.
  • Add more ipv6 feature detection.
  • Fix loop for forever loop.
  • Cleaned up unused NetStateConnect, fixed janet_async_end() ev refcount by @zevv.
  • Fix warnings w/ MSVC and format.
  • Fix marshal_one_env w/ JANET_MARSHAL_UNSAFE.
  • Fix (default).
  • Fix cannot marshal fiber with c stackframe, in a dynamic way that is fairly conservative.
  • Fix typo for SIGALARM in os/proc-kill.
  • Prevent bytecode optimization from remove mk* instructions.
  • Fix arity typo in peg.c by @pepe.
  • Update Makefile for MinGW.
  • Fix canceling waiting fiber.
  • Add a new (sub) PEG special by @ianthehenry.
  • Fix if net/server's handler has incorrect arity.
  • Fix macex raising on ().

1.32.1 - 2023-10-15

  • Fix return value from C function janet_dobytes when called on Janet functions that yield to event loop.
  • Change C API for event loop interaction - get rid of JanetListener and instead use janet_async_start and janet_async_end.
  • Rework event loop to make fewer system calls on kqueue and epoll.
  • Expose atomic refcount abstraction in janet.h
  • Add array/weak for weak references in arrays
  • Add support for weak tables via table/weak, table/weak-keys, and table/weak-values.
  • Fix compiler bug with using the result of (break x) expression in some contexts.
  • Rework internal event loop code to be better behaved on Windows
  • Update meson build to work better on windows

1.31.0 - 2023-09-17

  • Report line and column when using janet_dobytes
  • Add :unless loop modifier
  • Allow calling reverse on generators.
  • Improve performance of a number of core functions including partition, mean, keys, values, pairs, interleave.
  • Add lengthable?
  • Add os/sigaction
  • Change every? and any? to behave like the functional versions of the and and or macros.
  • Fix bug with garbage collecting threaded abstract types.
  • Add :signal to the sandbox function to allow intercepting signals.

1.30.0 - 2023-08-05

  • Change indexing of array/remove to start from -1 at the end instead of -2.
  • Add new string escape sequences \\a, \\b, \\?, and \\'.
  • Fix bug with marshalling channels
  • Add div for floored division
  • Make div and mod variadic
  • Support bnot for integer types.
  • Define (mod x 0) as x
  • Add ffi/pointer-cfunction to convert pointers to cfunctions

1.29.1 - 2023-06-19

  • Add support for passing booleans to PEGs for "always" and "never" matching.
  • Allow dictionary types for take and drop
  • Fix bug with closing channels while other fibers were waiting on them - ev/take, ev/give, and ev/select will now return the correct (documented) value when another fiber closes the channel.
  • Add ffi/calling-conventions to show all available calling conventions for FFI.
  • Add net/setsockopt
  • Add signal argument to os/proc-kill to send signals besides SIGKILL on Posix.
  • Add source argument to os/clock to get different time sources.
  • Various combinator functions now are variadic like map
  • Add file/lines to iterate over lines in a file lazily.
  • Reorganize test suite to be sorted by module rather than pseudo-randomly.
  • Add *task-id*
  • Add env argument to fiber/new.
  • Add JANET_NO_AMALG flag to Makefile to properly incremental builds
  • Optimize bytecode compiler to generate fewer instructions and improve loops.
  • Fix bug with ev/gather and hung fibers.
  • Add os/isatty
  • Add has-key? and has-value?
  • Make imperative arithmetic macros variadic
  • ev/connect now yields to the event loop instead of blocking while waiting for an ACK.

1.28.0 - 2023-05-13

  • Various bug fixes
  • Make nested short-fn's behave a bit more predictably (it is still not recommended to nest short-fns).
  • Add os/strftime for date formatting.
  • Fix ev/select on threaded channels sometimes live-locking.
  • Support the NO_COLOR environment variable to turn off VT100 color codes in repl (and in scripts). See http://no-color.org/
  • Disallow using (splice x) in contexts where it doesn't make sense rather than silently coercing to x. Instead, raise a compiler error.
  • Change the names of :user8 and :user9 sigals to :interrupt and :await
  • Change the names of :user8 and :user9 fiber statuses to :interrupted and :suspended.
  • Add ev/all-tasks to see all currently suspended fibers.
  • Add keep-syntax and keep-syntax! functions to make writing macros easier.

1.27.0 - 2023-03-05

  • Change semantics around bracket tuples to no longer be equal to regular tuples.
  • Add index argument to ffi/write for symmetry with ffi/read.
  • Add buffer/push-at
  • Add ffi/pointer-buffer to convert pointers to buffers the cannot be reallocated. This allows easier manipulation of FFI memory, memory mapped files, and buffer memory shared between threads.
  • Calling ev/cancel on a fiber waiting on ev/gather will correctly cancel the child fibers.
  • Add (sandbox ...) function to core for permission based security. Also add janet_sandbox to C API. The sandbox allows limiting access to the file system, network, ffi, and OS resources at runtime.
  • Add (.locals) function to debugger to see currently bound local symbols.
  • Track symbol -> slot mapping so debugger can get symbolic information. This exposes local bindings in debug/stack and disasm.
  • Add os/compiler to detect what host compiler was used to compile the interpreter
  • Add support for mingw and cygwin builds (mingw support also added in jpm).

1.26.0 - 2023-01-07

  • Add ffi/malloc and ffi/free. Useful as tools of last resort.
  • Add ffi/jitfn to allow calling function pointers generated at runtime from machine code. Bring your own assembler, though.
  • Channels can now be marshalled. Pending state is not saved, only items in the channel.
  • Use the new .length function pointer on abstract types for lengths. Adding a length method will still work as well.
  • Support byte views on abstract types with the .bytes function pointer.
  • Add the u format specifier to printf family functions.
  • Allow printing 64 integer types in printf and string/format family functions.
  • Allow importing modules from custom directories more easily with the @ prefix to module paths. For example, if there is a dynamic binding :custom-modules that is a file system path to a directory of modules, import from that directory with (import @custom-modules/mymod).
  • Fix error message bug in FFI library.

1.25.1 - 2022-10-29

  • Add memcmp function to core library.
  • Fix bug in os/open with :rw permissions not correct on Linux.
  • Support config.mk for more easily configuring the Makefile.

1.25.0 - 2022-10-10

  • Windows FFI fixes.
  • Fix PEG if-not combinator with captures in the condition
  • Fix bug with os/date with nil first argument
  • Fix bug with net/accept on Linux that could leak file descriptors to subprocesses
  • Reduce number of hash collisions from pointer hashing
  • Add optional parameter to marshal to skip cycle checking code

1.24.1 - 2022-08-24

  • Fix FFI bug on Linux/Posix
  • Improve parse error messages for bad delimiters.
  • Add optional name parameter to the short-fn macro.

1.24.0 - 2022-08-14

  • Add FFI support to 64-bit windows compiled with MSVC
  • Don't process shared object names passed to dlopen.
  • Add better support for windows console in the default shell.c for auto-completion and other shell-like input features.
  • Improve default error message from assert.
  • Add the tabseq macro for simpler table comprehensions.
  • Allow setting (dyn :task-id) in fibers to improve context in supervisor messages. Prior to this change, supervisor messages over threaded channels would be from ambiguous threads/fibers.

1.23.0 - 2022-06-20

  • Add experimental ffi/ module for interfacing with dynamic libraries and raw function pointers. Only available on 64 bit linux, mac, and bsd systems.
  • Allow using &named in function prototypes for named arguments. This is a more ergonomic variant of &keys that isn't as redundant, more self documenting, and allows extension to things like default arguments.
  • Add delay macro for lazy evaluate-and-save thunks.
  • Remove pthread.h from janet.h for easier includes.
  • Add debugger - an easy to use debugger function that just takes a fiber.
  • dofile will now start a debugger on errors if the environment it is passed has :debug set.
  • Add debugger-on-status function, which can be passed to run-context to start a debugger on abnormal fiber signals.
  • Allow running scripts with the -d flag to use the built-in debugger on errors and breakpoints.
  • Add mutexes (locks) and reader-writer locks to ev module for thread coordination.
  • Add parse-all as a generalization of the parse function.
  • Add os/cpu-count to get the number of available processors on a machine

1.22.0 - 2022-05-09

  • Prohibit negative size argument to table/new.
  • Add module/value.
  • Remove file/popen. Use os/spawn with the :pipe options instead.
  • Fix bug in peg thru and to combinators.
  • Fix printing issue in doc macro.
  • Numerous updates to function docstrings
  • Add defdyn aliases for various dynamic bindings used in core.
  • Install janet.h symlink to make Janet native libraries and applications easier to build without jpm.

1.21.2 - 2022-04-01

  • C functions janet_dobytes and janet_dostring will now enter the event loop if it is enabled.
  • Fix hashing regression - hash of negative 0 must be the same as positive 0 since they are equal.
  • The flycheck function no longer pollutes the module/cache
  • Fix quasiquote bug in compiler
  • Disallow use of cancel and resume on fibers scheduled or created with ev/go, as well as the root fiber.

1.20.0 - 2022-1-27

  • Add :missing-symbol hook to compile that will act as a catch-all macro for undefined symbols.
  • Add :redef dynamic binding that will allow users to redefine top-level bindings with late binding. This is intended for development use.
  • Fix a bug with reading from a stream returned by os/open on Windows and Linux.
  • Add :ppc64 as a detectable OS type.
  • Add & more support for destructuring in the match macro.
  • Add & more support for destructuring in all binding forms (def).

1.19.2 - 2021-12-06

  • Fix bug with missing status lines in some stack traces.
  • Update hash function to have better statistical properties.

1.19.1 - 2021-12-04

  • Add an optional prefix parameter to debug/stacktrace to allow printing prettier error messages.
  • Remove appveyor for CI pipeline
  • Fixed a bug that prevented sending threaded abstracts over threaded channels.
  • Fix bug in the map function with arity at least 3.

1.19.0 - 2021-11-27

  • Add math/log-gamma to replace math/gamma, and change math/gamma to be the expected gamma function.
  • Fix leaking file-descriptors in os/spawn and os/execute.
  • Ctrl-C will now raise SIGINT.
  • Allow quoted literals in the match macro to behave as expected in patterns.
  • Fix windows net related bug for TCP servers.
  • Allow evaluating ev streams with dofile.
  • Fix ev related bug with operations on already closed file descriptors.
  • Add struct and table agnostic getproto function.
  • Add a number of functions related to structs.
  • Add prototypes to structs. Structs can now inherit from other structs, just like tables.
  • Create a struct with a prototype with struct/with-proto.
  • Deadlocked channels will no longer exit early - instead they will hang, which is more intuitive.

1.18.1 - 2021-10-16

  • Fix some documentation typos
  • Fix - Set pipes passed to subprocess to blocking mode.
  • Fix -r switch in repl.

1.18.0 - 2021-10-10

  • Allow ev/cancel to work on already scheduled fibers.
  • Fix bugs with ev/ module.
  • Add optional base argument to scan-number
  • Add -i flag to janet binary to make it easier to run image files from the command line
  • Remove thread/ module.
  • Add (number ...) pattern to peg for more efficient number parsing using Janet's scan-number function without immediate string creation.

1.17.2 - 2021-09-18

  • Remove include of windows.h from janet.h. This caused issues on certain projects.
  • Fix formatting in doc-format to better handle special characters in signatures.
  • Fix some marshalling bugs.
  • Add optional Makefile target to install jpm as well.
  • Supervisor channels in threads will no longer include a wasteful copy of the fiber in every message across a thread.
  • Allow passing a closure to ev/thread as well as a whole fiber.
  • Allow passing a closure directly to ev/go to spawn fibers on the event loop.

1.17.1 - 2021-08-29

  • Fix docstring typos
  • Add make install-jpm-git to make jpm co-install simpler if using the Makefile.
  • Fix bugs with starting ev/threads and fiber marshaling.

1.17.0 - 2021-08-21

  • Add the -E flag for one-liners with the short-fn syntax for argument passing.
  • Add support for threaded abstract types. Threaded abstract types can easily be shared between threads.
  • Deprecate the thread library. Use threaded channels and ev instead.
  • Channels can now be marshalled.
  • Add the ability to close channels with ev/chan-close (or :close).
  • Add threaded channels with ev/thread-chan.
  • Add JANET_FN and JANET_REG macros to more easily define C functions that export their source mapping information.
  • Add janet_interpreter_interupt and janet_loop1_interrupt to interrupt the interpreter while running.
  • Add table/clear
  • Add build option to disable the threading library without disabling all threads.
  • Remove JPM from the main Janet distribution. Instead, JPM must be installed separately like any other package.
  • Fix issue with ev/go when called with an initial value and supervisor.
  • Add the C API functions janet_vm_save and janet_vm_load to allow saving and restoring the entire VM state.

1.16.1 - 2021-06-09

  • Add maclintf - a utility for adding linting messages when inside macros.
  • Print source code of offending line on compiler warnings and errors.
  • Fix some issues with linting and re-add missing make docs.
  • Allow controlling linting with dynamic bindings :lint-warn, :lint-error, and :lint-levels.
  • Add -w and -x command line flags to the janet binary to set linting thresholds. linting thresholds are as follows:
    • :none - will never be trigger.
    • :relaxed - will only trigger on :relaxed lints.
    • :normal - will trigger on :relaxed and :normal lints.
    • :strict - will trigger on :strict, :normal, and :relaxed lints. This will catch the most issues but can be distracting.

1.16.0 - 2021-05-30

  • Add color documentation to the doc macro - enable/disable with (dyn :doc-color).
  • Remove simpler HTML docs from distribution - use website or built-in documentation instead.
  • Add compiler warnings and deprecation levels.
  • Add as-macro to make using macros within quasiquote easier to do hygienically.
  • Expose JANET_OUT_OF_MEMORY as part of the Janet API.
  • Add native-deps option to declare-native in jpm. This lets native libraries link to other native libraries when building with jpm.
  • Remove the tarray module. The functionality of typed arrays will be moved to an external module that can be installed via jpm.
  • Add from-pairs to core.
  • Add JPM_OS_WHICH environment variable to jpm to allow changing auto-detection behavior.
  • The flychecker will consider any top-level calls of functions that start with define- to be safe to execute and execute them. This allows certain patterns (like spork/path) to be better processed by the flychecker.

1.15.5 - 2021-04-25

  • Add declare-headers to jpm.
  • Fix error using unix pipes on BSDs.
  • Support .cc and .cxx extensions in jpm for C++ code.
  • Change networking code to not create as many HUP errors.
  • Add net/shutdown to close sockets in one direction without hang ups.
  • Update code for printing the debug repl

1.15.4 - 2021-03-16

  • Increase default nesting depth of pretty printing to JANET_RECURSION_GUARD
  • Update meson.build
  • Add option to automatically add shebang line in installed scripts with jpm.
  • Add partition-by and group-by to the core.
  • Sort keys in pretty printing output.

1.15.3 - 2021-02-28

  • Fix a fiber bug that occured in deeply nested fibers
  • Add unref combinator to pegs.
  • Small docstring changes.

1.15.2 - 2021-02-15

  • Fix bug in windows version of os/spawn and os/execute with setting environment variables.
  • Fix documentation typos.
  • Fix peg integer reading combinators when used with capture tags.

1.15.0 - 2021-02-08

  • Fix gtim and ltim bytecode instructions on non-integer values.
  • Clean up output of flychecking to be the same as the repl.
  • Change behavior of debug/stacktrace with a nil error value.
  • Add optional argument to parser/produce.
  • Add no-core option to creating standalone binaries to make execution faster.
  • Fix bug where a buffer overflow could be confused with an out of memory error.
  • Change error output to file:line:column: message. Column is in bytes - tabs are considered to have width 1 (instead of 8).

1.14.2 - 2021-01-23

  • Allow JANET_PROFILE env variable to load a profile before loading the repl.
  • Update tracev macro to allow def and var inside to work as expected.
  • Use (dyn :peg-grammar) for passing a default grammar to peg/compile instead of loading default-peg-grammar directly from the root environment.
  • Add ev/thread for combining threading with the event loop.
  • Add ev/do-thread to make ev/thread easier to use.
  • Automatically set supervisor channel in net/accept-loop and net/server correctly.

1.14.1 - 2021-01-18

  • Add doc-of for reverse documentation lookup.
  • Add ev/give-supervsior to send a message to the supervising channel.
  • Add ev/gather and chan argument to ev/go. This new argument allows "supervisor channels" for fibers to enable structured concurrency.
  • Make -k flag work on stdin if no files are given.
  • Add flycheck function to core.
  • Make backmatch and backref more expressive in pegs.
  • Fix buggy string/split.
  • Add fiber/last-value to get the value that was last yielded, errored, or signaled by a fiber.
  • Remove :generate verb from loop macros. Instead, use the :in verb which will now work on fibers as well as other data structures.
  • Define next, get, and in for fibers. This lets each, map, and similar iteration macros can now iterate over fibers.
  • Remove macro eachy, which can be replaced by each.
  • Add dflt argument to find-index.
  • Deprecate file/popen in favor of os/spawn.
  • Add :all keyword to ev/read and net/read to make them more like file/read. However, we do not provide any :line option as that requires buffering.
  • Change repl behavior to make Ctrl-C raise SIGINT on posix. The old behavior for Ctrl-C, to clear the current line buffer, has been moved to Ctrl-Q.
  • Importing modules that start with / is now the only way to import from project root. Before, this would import from / on disk. Previous imports that did not start with . or / are now unambiguously importing from the syspath, instead of checking both the syspath and the project root. This is backwards incompatible and dependencies should be updated for this.
  • Change hash function for numbers.
  • Improve error handling of dofile.
  • Bug fixes in networking and subprocess code.
  • Use markdown formatting in more places for docstrings.

1.13.1 - 2020-12-13

  • Pretty printing a table with a prototype will look for :_name instead of :name in the prototype table to tag the output.
  • match macro implementation changed to be tail recursive.
  • Adds a :preload loader which allows one to manually put things into module/cache.
  • Add buffer/push function.
  • Backtick delimited strings and buffers are now reindented based on the column of the opening delimiter. Whitespace in columns to the left of the starting column is ignored unless there are non-space/non-newline characters in that region, in which case the old behavior is preserved.
  • Argument to (error) combinator in PEGs is now optional.
  • Add (line) and (column) combinators to PEGs to capture source line and column. This should make error reporting a bit easier.
  • Add merge-module to core.
  • During installation and release, merge janetconf.h into janet.h for easier install.
  • Add upscope special form.
  • os/execute and os/spawn can take streams for redirecting IO.
  • Add :parser and :read parameters to run-context.
  • Add os/open if ev is enabled.
  • Add os/pipe if ev is enabled.
  • Add janet_thread_current(void) to C API
  • Add integer parsing forms to pegs. This makes parsing many binary protocols easier.
  • Lots of updates to networking code - now can use epoll (or poll) on linux and IOCP on windows.
  • Add ev/ module. This exposes a fiber scheduler, queues, timeouts, and other functionality to users for single threaded cooperative scheduling and asynchronous IO.
  • Add net/accept-loop and net/listen. These functions break down net/server into it's essential parts and are more flexible. They also allow further improvements to these utility functions.
  • Various small bug fixes.

1.12.2 - 2020-09-20

  • Add janet_try and janet_restore to C API.
  • Fix os/execute regression on windows.
  • Add :pipe option to os/spawn.
  • Fix docstring typos.

1.12.1 - 2020-09-07

  • Make zero?, one?, pos?, and neg? polymorphic.
  • Add C++ support to jpm and improve C++ interop in janet.h.
  • Add %t formatter to printf, string/format, and other formatter functions.
  • Expose janet_cfuns_prefix in C API.
  • Add os/proc-wait and os/proc-kill for interacting with processes.
  • Add janet_getjfile to C API.
  • Allow redirection of stdin, stdout, and stderr by passing keywords in the env table in os/spawn and os/execute.
  • Add os/spawn to get a core/process back instead of an exit code as in os/execute. When called like this, os/execute returns immediately.
  • Add :x flag to os/execute to raise error when exit code is non-zero.
  • Don't run main when flychecking.
  • Add :n flag to file/open to raise an error if file cannot be opened.
  • Fix import macro to not try and coerce everything to a string.
  • Allow passing a second argument to disasm.
  • Add cancel. Resumes a fiber but makes it immediately error at the yield point.
  • Allow multi-line paste into built in repl.
  • Add (curenv).
  • Change net/read, net/chunk, and net/write to raise errors in the case of failures.
  • Add janet_continue_signal to C API. This indirectly enables C functions that yield to the event loop to raise errors or other signals.
  • Update meson build script to fix bug on Debian's version of meson
  • Add xprint, xprin, xprintf, and xprinf.
  • net/write now raises an error message if write fails.
  • Fix issue with SIGPIPE on macOS and BSDs.

1.11.3 - 2020-08-03

  • Add JANET_HASHSEED environment variable when JANET_PRF is enabled.
  • Expose janet_cryptorand in C API.
  • Properly initialize PRF in default janet program
  • Add index-of to core library.
  • Add -fPIC back to core CFLAGS (non-optional when compiling default client with Makefile)
  • Fix defaults on Windows for ARM
  • Fix defaults on NetBSD.

1.11.1 - 2020-07-25

  • Fix jpm and git with multiple git installs on Windows
  • Fix importing a .so file in the current directory
  • Allow passing byte sequence types directly to typed-array constructors.
  • Fix bug sending files between threads.
  • Disable PRF by default.
  • Update the soname.

1.11.0 - 2020-07-18

  • Add forever macro.
  • Add any? predicate to core.
  • Add jpm list-pkgs subcommand to see which package aliases are in the listing.
  • Add jpm list-installed subcommand to see which packages are installed.
  • Add math/int-min, math/int-max, math/int32-min, and math/int32-max for getting integer limits.
  • The gc interval is now autotuned, to prevent very bad gc behavior.
  • Improvements to the bytecode compiler, Janet will now generate more efficient bytecode.
  • Add peg/find, peg/find-all, peg/replace, and peg/replace-all
  • Add math/nan
  • Add forv macro
  • Add symbol/slice
  • Add keyword/slice
  • Allow cross compilation with Makefile.
  • Change compare-primitve to cmp and make it more efficient.
  • Add reverse! for reversing an array or buffer in place.
  • janet_dobytes and janet_dostring return parse errors in *out
  • Add repeat macro for iterating something n times.
  • Add eachy (each yield) macro for iterating a fiber.
  • Fix :generate verb in loop macro to accept non symbols as bindings.
  • Add :h, :h+, and :h* in default-peg-grammar for hexidecimal digits.
  • Fix %j formatter to print numbers precisely (using the %.17g format string to printf).

1.10.1 - 2020-06-18

  • Expose janet_table_clear in API.
  • Respect JANET_NO_PROCESSES define when building
  • Fix jpm rules having multiple copies of the same dependency.
  • Fix jpm install in some cases.
  • Add array/trim and buffer/trim to shrink the backing capacity of these types to their current length.

1.10.0 - 2020-06-14

  • Hardcode default jpm paths on install so env variables are needed in fewer cases.
  • Add :no-compile to create-executable option for jpm.
  • Fix bug with the trace function.
  • Add :h, :a, and :c flags to thread/new for creating new kinds of threads. By default, threads will now consume much less memory per thread, but sending data between threads may cost more.
  • Fix flychecking when using the use macro.
  • CTRL-C no longer exits the repl, and instead cancels the current form.
  • Various small bug fixes
  • New MSI installer instead of NSIS based installer.
  • Make os/realpath work on windows.
  • Add polymorphic compare functions for comparing numbers.
  • Add to and thru peg combinators.
  • Add JANET_GIT environment variable to jpm to use a specific git binary (useful mainly on windows).
  • asm and disasm functions now use keywords instead of macros for keys. Also some slight changes to the way constants are encoded (remove wrapping quote in some cases).
  • Expose current macro form inside macros as (dyn :macro-form)
  • Add tracev macro.
  • Fix compiler bug that emitted incorrect code in some cases for while loops that create closures.
  • Add :fresh option to (import ...) to overwrite the module cache.
  • (range x y 0) will return an empty array instead of hanging forever.
  • Rename jpm repl to jpm debug-repl.

1.9.1 - 2020-05-12

  • Add :prefix option to declare-source
  • Re-enable minimal builds with the debugger.
  • Add several flags for configuring Janet on different platforms.
  • Fix broken meson build from 1.9.0 and add meson to CI.
  • Fix compilation issue when nanboxing is disabled.

1.9.0 - 2020-05-10

  • Add :ldflags option to many jpm declare functions.
  • Add errorf to core.
  • Add lenprefix combinator to PEGs.
  • Add %M, %m, %N, and %n formatters to formatting functions. These are the same as %Q, %q, %P, and %p, but will not truncate long values.
  • Add fiber/root.
  • Add beta net/ module to core for socket based networking.
  • Add the parse function to parse strings of source code more conveniently.
  • Add jpm rule-tree subcommand.
  • Add --offline flag to jpm to force use of the cache.
  • Allow sending pointers and C functions across threads via thread/send.
  • Fix bug in getline.
  • Add sh-rule and sh-phony to jpm's dialect of Janet.
  • Change C api's janet_formatb -> janet_formatbv, and add new function janet_formatb to C api.
  • Add edefer macro to core.
  • A struct/table literal/constructor with duplicate keys will use the last value given. Previously, this was inconsistent between tables and structs, literals and constructor functions.
  • Add debugger to core. The debugger functions are only available in a debug repl, and are prefixed by a ..
  • Add sort-by and sorted-by to core.
  • Support UTF-8 escapes in strings via \uXXXX or \UXXXXXX.
  • Add math/erf
  • Add math/erfc
  • Add math/log1p
  • Add math/next
  • Add os/umask
  • Add os/perm-int
  • Add os/perm-string
  • Add :int-permissions option for os/stat.
  • Add jpm repl subcommand, as well as post-deps macro in project.janet files.
  • Various bug fixes.

1.8.1 - 2020-03-31

  • Fix bugs for big endian systems
  • Fix 1.8.0 regression on BSDs

1.8.0 - 2020-03-29

  • Add reduce2, accumulate, and accumulate2.
  • Add lockfiles to jpm via jpm make-lockfile and jpm load-lockfile.
  • Add os/realpath (Not supported on windows).
  • Add os/chmod.
  • Add chr macro.
  • Allow _ in the match macro to match anything without creating a binding or doing unification. Also change behavior of matching nil.
  • Add :range-to and :down-to verbs in the loop macro.
  • Fix and and or macros returning nil instead of false in some cases.
  • Allow matching successfully against nil values in the match macro.
  • Improve janet_formatc and janet_panicf formatters to be more like string/format. This makes it easier to make nice error messages from C.
  • Add signal
  • Add fiber/can-resume?
  • Allow fiber functions to accept arguments that are passed in via resume.
  • Make flychecking slightly less strict but more useful
  • Correct arity for next
  • Correct arity for marshal
  • Add flush and eflush
  • Add prompt and return on top of signal for user friendly delimited continuations.
  • Fix bug in buffer/blit when using the offset-src argument.
  • Fix segfault with malformed pegs.

1.7.0 - 2020-02-01

  • Remove file/fileno and file/fdopen.
  • Remove ==, not==, order<, order>, order<=, and order>=. Instead, use the normal comparison and equality functions.
  • Let abstract types define a hash function and comparison/equality semantics. This lets abstract types much better represent value types. This adds more fields to abstract types, which will generate warnings when compiled against other versions.
  • Remove Emscripten build. Instead, use the amalgamated source code with a custom toolchain.
  • Update documentation.
  • Add var-
  • Add module/add-paths
  • Add file/temp
  • Add mod function to core.
  • Small bug fixes
  • Allow signaling from C functions (yielding) via janet_signalv. This makes it easy to write C functions that work with event loops, such as in libuv or embedded in a game.
  • Add '%j' formatting option to the format family of functions.
  • Add defer
  • Add assert
  • Add when-with
  • Add if-with
  • Add completion to the default repl based on currently defined bindings. Also generally improve the repl keybindings.
  • Add eachk
  • Add eachp
  • Improve functionality of the next function. next now works on many different types, not just tables and structs. This allows for more generic data processing.
  • Fix thread module issue where sometimes decoding a message failed.
  • Fix segfault regression when macros are called with bad arity.

1.6.0 - 2019-12-22

  • Add thread/ module to the core.
  • Allow seeding RNGs with any sequence of bytes. This provides a wider key space for the RNG. Exposed in C as janet_rng_longseed.
  • Fix issue in resume and similar functions that could cause breakpoints to be skipped.
  • Add a number of new math functions.
  • Improve debugger experience and capabilities. See examples/debugger.janet for what an interactive debugger could look like.
  • Add debug/step (janet_step in the C API) for single stepping Janet bytecode.
  • The built in repl now can enter the debugger on any signal (errors, yields, user signals, and debug signals). To enable this, type (setdyn :debug true) in the repl environment.
  • When exiting the debugger, the fiber being debugged is resumed with the exit value of the debug session (the value returned by (quit return-value), or nil if user typed Ctrl-D).
  • (quit) can take an optional argument that is the return value. If a module contains (quit some-value), the value of that module returned to (require "somemod") is the return value. This lets module writers completely customize a module without writing a loader.
  • Add nested quasiquotation.
  • Add os/cryptorand
  • Add prinf and eprinf to be have like printf and eprintf. The latter two functions now including a trailing newline, like the other print functions.
  • Add nan?
  • Add janet_in to C API.
  • Add truthy?
  • Add os/environ
  • Add buffer/fill and array/fill
  • Add array/new-filled
  • Use (doc) with no arguments to see available bindings and dynamic bindings.
  • jpm will use CC and AR environment variables when compiling programs.
  • Add comptime macro for compile time evaluation.
  • Run main functions in scripts if they exist, just like jpm standalone binaries.
  • Add protect macro.
  • Add root-env to get the root environment table.
  • Change marshalling protocol with regard to abstract types.
  • Add show-paths to jpm.
  • Add several default patterns, like :d and :s+, to PEGs.
  • Update jpm path settings to make using jpm easier on non-global module trees.
  • Numerous small bug fixes and usability improvements.

1.5.1 - 2019-11-16

  • Fix bug when printing buffer to self in some edge cases.
  • Fix bug with jpm on windows.
  • Fix update return value.

1.5.0 - 2019-11-10

  • os/date now defaults to UTC.
  • Add --test flag to jpm to test libraries on installation.
  • Add math/rng, math/rng-int, and math/rng-uniform.
  • Add in function to index in a stricter manner. Conversely, get will now not throw errors on bad keys.
  • Indexed types and byte sequences will now error when indexed out of range or with bad keys.
  • Add rng functions to Janet. This also replaces the RNG behind math/random and math/seedrandom with a consistent, platform independent RNG.
  • Add with-vars macro.
  • Add the quickbin command to jpm.
  • Create shell.c when making the amalgamated source. This can be compiled with janet.c to make the janet interpreter.
  • Add cli-main function to the core, which invokes Janet's CLI interface. This basically moves what was init.janet into boot.janet.
  • Improve flychecking, and fix flychecking bugs introduced in 1.4.0.
  • Add prin, eprint, eprintf and eprin functions. The functions prefix with e print to (dyn :err stderr)
  • Print family of functions can now also print to buffers (before, they could only print to files.) Output can also be completely disabled with (setdyn :out false).
  • printf is now a c function for optimizations in the case of printing to buffers.

1.4.0 - 2019-10-14

  • Add quit function to exit from a repl, but not always exit the entire application.
  • Add update-pkgs to jpm.
  • Integrate jpm with https://github.com/janet-lang/pkgs.git. jpm can now install packages based on their short names in the package listing, which can be customized via an env variable.
  • Add varfn macro
  • Add compile time arity checking when function in function call is known.
  • Added slice to the core library.
  • The */slice family of functions now can take nil as start or end to get the same behavior as the defaults (0 and -1) for those parameters.
  • string/ functions that take a pattern to search for will throw an error when receiving the empty string.
  • Replace (start:end) style stacktrace source position information with line, column. This should be more readable for humans. Also, range information can be recovered by re-parsing source.

1.3.1 - 2019-09-21

  • Fix some linking issues when creating executables with native dependencies.
  • jpm now runs each test script in a new interpreter.
  • Fix an issue that prevent some valid programs from compiling.
  • Add mean to core.
  • Abstract types that implement the :+, :-, :*, :/, :>, :==, :<, :<=, and :>= methods will work with the corresponding built-in arithmetic functions. This means built-in integer types can now be used as normal number values in many contexts.
  • Allow (length x) on typed arrays an other abstract types that implement the :length method.

1.3.0 - 2019-09-05

  • Add get-in, put-in, update-in, and freeze to core.
  • Add jpm run rule and jpm rules to jpm to improve utility and discoverability of jpm.
  • Remove cook module and move path module to https://github.com/janet-lang/path.git. The functionality in cook is now bundled directly in the jpm script.
  • Add buffer/format and string/format format flags Q and q to print colored and non-colored single-line values, similar to P and p.
  • Change default repl to print long sequences on one line and color stacktraces if color is enabled.
  • Add backmatch pattern for PEGs.
  • jpm detects if not in a Developer Command prompt on windows for a better error message.
  • jpm install git submodules in dependencies
  • Change default fiber stack limit to the maximum value of a 32 bit signed integer.
  • Some bug fixes with jpm
  • Fix bugs with pegs.
  • Add os/arch to get ISA that janet was compiled for
  • Add color to stacktraces via (dyn :err-color)

1.2.0 - 2019-08-08

  • Add take and drop functions that are easier to use compared to the existing slice functions.
  • Add optional default value to get.
  • Add function literal short-hand via | reader macro, which maps to the short-fn macro.
  • Add int? and nat? functions to the core.
  • Add (dyn :executable) at top level to get what used to be (process/args 0).
  • Add :linux to platforms returned by (os/which).
  • Update jpm to build standalone executables. Use declare-executable for this.
  • Add use macro.
  • Remove process/args in favor of (dyn :args).
  • Fix bug with Nanbox implementation allowing users to created custom values of any type with typed array and marshal modules, which was unsafe.
  • Add janet_wrap_number_safe to API, for converting numbers to Janets where the number could be any 64 bit, user provided bit pattern. Certain NaN values (which a machine will never generate as a result of a floating point operation) are guarded against and converted to a default NaN value.

1.1.0 - 2019-07-08

  • Change semantics of -l flag to be import rather than dofile.
  • Fix compiler regression in top level defs with destructuring.
  • Add table/clone.
  • Improve jpm tool with git and dependency capabilities, as well as better module uninstalls.

1.0.0 - 2019-07-01

  • Add with macro for resource handling.
  • Add propagate function so we can "rethrow" signals after they are intercepted. This makes signals even more flexible.
  • Add JANET_NO_DOCSTRINGS and JANET_NO_SOURCEMAPS defines in janetconf.h for shrinking binary size. This seems to save about 50kB in most builds, so it's not usually worth it.
  • Update module system to allow relative imports. The :cur: pattern in module/expand-path will expand to the directory part of the current file, or whatever the value of (dyn :current-file) is. The :dir: pattern gets the directory part of the input path name.
  • Remove :native: pattern in module/paths.
  • Add module/expand-path
  • Remove module/*syspath* and module/*headerpath* in favor of dynamic bindings :syspath and :headerpath.
  • Compiled PEGs can now be marshaled and unmarshaled.
  • Change signature to parser/state
  • Add :until verb to loop.
  • Add :p flag to fiber/new.
  • Add file/{fdopen,fileno} functions.
  • Add parser/clone function.
  • Add optional argument to parser/where to set parser byte index.
  • Add optional env argument to all-bindings and all-dynamics.
  • Add scratch memory C API functions for auto-released memory on next gc. Scratch memory differs from normal GCed memory as it can also be freed normally for better performance.
  • Add API compatibility checking for modules. This will let native modules not load when the host program is not of a compatible version or configuration.
  • Change signature of os/execute to be much more flexible.

0.6.0 - 2019-05-29

  • file/close returns exit code when closing file opened with file/popen.
  • Add os/rename
  • Update windows installer to include tools like jpm.
  • Add jpm tool for building and managing projects.
  • Change interface to cook tool.
  • Add optional filters to module/paths to further refine import methods.
  • Add keyword arguments via &keys in parameter list.
  • Add -k flag for flychecking source.
  • Change signature to compile function.
  • Add module/loaders for custom loading functions.
  • Add external unification to match macro.
  • Add static library to main build.
  • Add janet/*headerpath* and change location of installed headers.
  • Let partition take strings.
  • Haiku OS support
  • Add string/trim, string/trimr, and string/triml.
  • Add dofile function.
  • Numbers require at least 1 significant digit.
  • file/read will return nil on end of file.
  • Fix various bugs.

0.5.0 - 2019-05-09

  • Fix some bugs with buffers.
  • Add trace and untrace to the core library.
  • Add string/has-prefix? and string/has-suffix? to string module.
  • Add simple debugger to repl that activates on errors or debug signal
  • Remove *env* and *doc-width*.
  • Add fiber/getenv, fiber/setenv, and dyn, and setdyn.
  • Add support for dynamic bindings (via the dyn and setdyn functions).
  • Change signatures of some functions like eval which no longer takes an optional environment.
  • Add printf function
  • Make pp configurable with dynamic binding :pretty-format.
  • Remove the meta function.
  • Add with-dyns for blocks with dynamic bindings assigned.
  • Allow leading and trailing newlines in backtick-delimited string (long strings). These newlines will not be included in the actual string value.

0.4.1 - 2019-04-14

  • Squash some bugs
  • Peg patterns can now make captures in any position in a grammar.
  • Add color to repl output
  • Add array/remove function
  • Add meson build support
  • Add int module for int types
  • Add meson build option
  • Add (break) special form and improve loop macro
  • Allow abstract types to specify custom tostring method
  • Extend C API for marshalling abstract types and other values
  • Add functions to os module.

0.4.0 - 2019-03-08

  • Fix a number of smaller bugs
  • Added :export option to import and require
  • Added typed arrays
  • Remove callable?.
  • Remove tuple/append and tuple/prepend, which may have seemed like O(1) operations. Instead, use the splice special to extend tuples.
  • Add -m flag to main client to allow specifying where to load system modules from.
  • Add -c flag to main client to allow compiling Janet modules to images.
  • Add string/format and buffer/format.
  • Remove string/pretty and string/number.
  • make-image function creates pre compiled images for janet. These images link to the core library. They can be loaded via require or manually via load-image.
  • Add bracketed tuples as tuple constructor.
  • Add partition function to core library.
  • Pre-compile core library into an image for faster startup.
  • Add methods to parser values that mirror the api.
  • Add janet_getmethod to CAPI for easier use of method like syntax.
  • Add get/set to abstract types to allow them to behave more like objects with methods.
  • Add parser/insert to modify parser state programmatically
  • Add debug/stacktrace for easy, pretty stacktraces
  • Remove the status-pp function
  • Update API to run-context to be much more sane
  • Add :lflags option to cook/make-native
  • Disallow NaNs as table or struct keys
  • Update module resolution paths and format

0.3.0 - 2019-01-26

  • Add amalgamated build to janet for easier embedding.
  • Add os/date function
  • Add slurp and spit to core library.
  • Added this changelog.
  • Added peg module (Parsing Expression Grammars)
  • Move hand written documentation into website repository.