Pre-release

@SquidDev SquidDev released this May 18, 2018 · 1 commit to master since this release

Assets 2

Libraries

  • [@sci4me] Implement a bitset.
  • [@t-mw] Fix vector-item.
  • [@SquidDev] Export -and and -or from the prelude.
  • [@CrazedProgrammer] Rewrite bit32 library in Urn, adding support for LuaJIT's bitop library too.

Compiler

  • [@SquidDev] Add the concept of "intrinsics" to the compiler.

Codegen

  • [ @SquidDev] Emit line mappings for unquote-splices.
Pre-release

@SquidDev SquidDev released this Feb 23, 2018 · 14 commits to master since this release

Assets 2

Libraries

  • [@zardyh] Add setq! and over!. This time using pattern matching instead of compiler API hacks.
  • [@zardyh] Add optional struct type checks (enabled using -fstrict-structs).
  • [@zardyh] Add splicing-view (and use it in cdr et all).
  • [@SquidDev] Add splice, an improved replacement for unpack.
  • [@SquidDev] Add find-index and element-index.
  • [@zardyh] Add cardinality and disjoint? operations on sets.
  • [@SquidDev] Add several byte ↔ string conversion methods.
  • [@SquidDev] Performance improvements to io library.
  • [@SquidDev] Add exported-vars macro, making defining Lua-style modules easier.
  • [@SquidDev] Add demand and desire assertions.
  • [@zardyh] Improve LuaJIT bindings.

Compiler

  • [@SquidDev] Use defstruct instead of tables for most compiler internals.
  • [@SquidDev] Strip common traceback from error messages.
  • [@SquidDev] Add @foo shorthand for (splice foo).
  • [@SquidDev] Add option to run profiling tools at compile time.
  • [@SquidDev] Allow define-native to declare native metadata, removing the need for .meta.lua files.
  • [@SquidDev] Add module reloading to the REPL.

Optimiser/codegen

  • [@SquidDev] Defensively copy captured loop variables.
  • [@SquidDev] Convert the codegen to use spaces instead of tabs.
  • [@SquidDev] Fix optimiser and codegen handling variadic value wrappers.
  • [@SquidDev] Generate more sensible code for variadic constructs with a known number of arguments.
Pre-release

@SquidDev SquidDev released this Nov 25, 2017 · 123 commits to master since this release

Assets 2

Libraries

  • [@zardyh] Rename % to mod.
  • [@zardyh] Add if-let and if-with.
  • [@zardyh] Reduce code size bloat from methods.
  • [@SquidDev] Allow specifying delegate function for methods.
  • [@zardyh] Make `push-cdr! variadic.
  • [@SquidDev] Make gensym generate nicer temporary names.
  • [@zardyh] Allow returning multiple values from handler-case.

Compiler

  • [@SquidDev] Allow --emit-lua/--emit-lisp to specify file paths,
  • [@SquidDev] Add support for mutable top-level definitions.
  • [@SquidDev] Generate an index of all defined symbols.
  • [@SquidDev] Use tables for compiler errors, allowing us to distinguish between bugs and compile errors.
  • [@SquidDev] Ensure various Lua functions exist before calling them.

Optimiser/Codegen

  • [@SquidDev] Always emit directly called lambdas as bindings
  • [@SquidDev] Do not replace definitions when definition has not been scanned.
  • [@SquidDev] Inline bound lambdas which are only called once.
  • [@SquidDev] Lower deferrable nodes into conditions.
Pre-release

@SquidDev SquidDev released this Oct 6, 2017 · 180 commits to master since this release

Assets 2

Libraries

  • [@zardyh] Add [pat => exps], which implicitly binds the matched expression to it.
  • [@zardyh] Add data/format: powerful string formatting library.
  • [@SquidDev] Restructure the standard library.
  • [@zardyh] Add rationals, with support for rational literals.
  • [@SquidDev] Add matrix, vector and complex number libraries.

Compiler

  • [@SquidDev] Warn when macros are not expanded.
  • [@SquidDev] Add plugin which merges defmethod/defdefault setters into a single definition.
  • [@SquidDev] Improvements to line mapping system
  • [@SquidDev] Use .lib.lua instead of .lua for libraries.

Optimiser/Codegen

  • [@SquidDev] Improve code generation for conditions.
  • [@SquidDev] Only wrap tables in parenthesis when needed.
Pre-release

@SquidDev SquidDev released this Aug 27, 2017 · 262 commits to master since this release

Assets 2

Libraries

Compiler

  • [@SquidDev] Fix documentation generator including language annotations.
  • [@SquidDev] Add an analysis for unused variables (enabled with -W2).
  • [@SquidDev] Search in ? and ?/init when specifying custom library paths.
  • [@SquidDev] Add support for loading .lisp, .cl and .urn files.
  • [@zardyh] Add :q to the REPL, an easy way to exit.
  • [@SquidDev] Import CLI inputs into the REPL scope.
  • [@SquidDev] Add :view command to REPL, to preview definitions.

Optimiser

  • [@SquidDev] Rewrite the usage analysis pass.
  • [@SquidDev] Use a "universal transformer" for optimisation passes.
Pre-release
Pre-release

@SquidDev SquidDev released this Aug 22, 2017 · 296 commits to master since this release

Assets 2

Libraries

  • [@zardyh] Add optional arguments to lambdas via a macro.
  • [@zardyh] Add block to urn/control/prompt.
  • [@zardyh] Use else instead of true in cond blocks.
  • [@zardyh] Add defmethod and defgeneric.
  • [@SquidDev] Allow fetching arg from the varargs if it is not defined.
  • [@SquidDev] Fail gracefully if os.getenv or os.exit are not defined.
  • [@zardyh] Change eq? and pretty to use defgeneric.
  • [@zardyh] Add defstruct.
  • [@SquidDev] Add a primitive directed graph manipulation library.
  • [@SquidDev] Make c[ad]+r generation more robust.
  • [@zardyh] Improve do, an add a complimentary do-list. It is encouraged to use these instead of for-each.
  • [Everyone] Improve documentation and add more examples.

Compiler

  • [@SquidDev] Improve stdlib location detection and allow specifying stdlib path through the URN_STDLIB environment variable.
  • [@zardyh] Add roman numeral support to parser. Use the r format specifier (#rMDCLXVI).
  • [@SquidDev] Add plugins/doc-test.lisp tool, to generate tests from examples in docstrings.
  • [@SquidDev] Add a code coverage profiler (--profile=coverage) and run it on tests.
  • [@SquidDev] Add readline and linenoise support to the REPL.
  • [@zardyh] Allow using ' as a thousands separator.

Optimiser/Codegen

  • [@SquidDev] Fix codegen crash when calling constants.
  • [@SquidDev] Make optimiser replace truthy values with true in cond.
  • [@SquidDev] Fix codegen issues on tail-recursive functions where no variables changed.
  • [@SquidDev] Wrap constants in parentheses when indexing them.
  • [@SquidDev] Warn when definitions are potentially accessed before being defined.
  • [@SquidDev] Reduce letrec into let where possible.
  • [@SquidDev] Improvements to (id x) reduction, allowing lambdas and structs to be reduced.
  • [@SquidDev] Localise the most commonly used variables when we have too many.
  • [@SquidDev] Unify binding handling, fixing several issues with variadic arguments.
  • [@SquidDev] Write many tests for codegen and optimiser.
Pre-release

@SquidDev SquidDev released this Jul 25, 2017 · 396 commits to master since this release

Assets 2

Libraries

  • [@SquidDev] Allow affirm to work with macros in the call slot.
  • [@demhydraz] Add some more utilities for dealing with varargs.
  • [@SquidDev] Rewrite the match documentation.
  • [@demhydraz] Add urn/set - a set manipulation library.
  • [@demhydraz] Add partition and exclude.
  • [@demhydraz] Add prompts and other functions for delimited continuations.
  • [@demhydraz] Allow apply to accept additional arguments before the list.

Compiler

  • [@SquidDev] Lookup library definitions in .lib.lua instead.
  • [@SquidDev] Sightly more useful error messages when IO fails.

Optimiser

  • [@SquidDev] Count the number of changes each pass makes.
  • [@SquidDev] Fix bug where cond-elimate marked nodes changed irrespective of whether they'd changed or not.
Pre-release

@SquidDev SquidDev released this Jul 9, 2017 · 425 commits to master since this release

Assets 2

Libraries

  • [@SquidDev] Allow comparison operators to accept multiple arguments.
  • [@demhydraz] Remove get-idx and set-idx! from the prelude.
  • [@demhydraz] Allow nth to accept negative arguments.
  • [@demhydraz] Remove setf! and over!, replacing it with the lens library.
  • [@demhydraz] Rewrite range to use keyword arguments.
  • [@demhydraz] Rename foldl to reduce.
  • [@demhydraz] Export io and add *standard-{output, input,error}*.
  • [@SquidDev] Fix for-pairs evaluating a value multiple times.
  • [@demhydraz] Add string interpolation macro $.
  • [@demhydraz] Add values-list, like CL's values function.

Compiler

  • [@SquidDev] Include variable name in non-top-level definition error message.
  • [@SquidDev] Fix multiple-returns from macros/unquotes corrupting state indicies.
  • [@SquidDev] Add syntax for string interpolation.

Optimiser / Codegen

  • [@SquidDev] Fix several codegen issues with tail-recursive functions.
  • [@SquidDev] Ensure we never emit empty else blocks.
  • [@SquidDev] Do not emit unused temporary variables from tail recursive lambdas.
  • [@SquidDev] Add specialist generation of unless-style constructs.
  • [@SquidDev] Merge multiple bindings into one where possible.
Pre-release

@SquidDev SquidDev released this Jun 24, 2017 · 474 commits to master since this release

Assets 2

Libraries

  • [@SquidDev] Fix slice returning multiple values from macros (and port to Urn).
  • [@SquidDev] Port for-pairs/iter-pairs to Urn.
  • [@SquidDev] Remove string/.. (replacing with native concat operator).
  • [@SquidDev] Add try-var-lookup to compiler API.
  • [@demhydraz] Add tripping, =:= and forall to the check library.
  • [@SquidDev] Replace c[ad]r and c[ad]rs generation with unquote-splice.
  • [@SquidDev] Convert setf!/over! to use compiler API.
  • [@SquidDev] Allow binding multiple values using let*.

Compiler

  • [@SquidDev] Fix several regressions which popped up when from porting from Lua.

Optimiser / Codegen

  • [@SquidDev] Fix loop variables not being set when they have no corresponding expression.
  • [@SquidDev] Fix generation of right associative operators.
  • [@SquidDev] Run several optimisations over nested blocks (instead of just the top level).
  • [@SquidDev] Fold multiple variable definitions into 1.
  • [@SquidDev] Add simplistic top-level definition stripper.
  • [@SquidDev] Only wrap operators in parentheses when needed.
Pre-release

@SquidDev SquidDev released this Jun 7, 2017 · 506 commits to master since this release

Assets 2

Libraries

Compiler

Codegen

  • [@SquidDev] Make variable mangling to be aware of scope
  • [@SquidDev] Allow symbols to provide a "display name" for use in emitted code.
  • [@SquidDev] Detect letrec loops as tail-recursive.
  • [@SquidDev] Inline letrec loops which are only used once.
  • [@SquidDev] Pattern match against common recursion patterns.