Skip to content

Releases: calebh/Juniper

Juniper 4.0.1

16 Nov 04:23
Compare
Choose a tag to compare

Bugfixes and changes:

  • Top level global variables are now forward declared with the extern keyword in compiled C++. This is a partial fix for the ordering of global variables.
  • Critical bug fix for the Prelude:zeros() function. Zeros now initializes values without calling C++ destructors.
  • Fixed compiler bug where types were not being properly resolved and aliases not being properly expanded.
  • Added missing zero arity constructors for tuple types. This allow for arrays of uninitialized tuple types to be created.
  • Changed order of parameters in Io.jun edge transition functions and Button.jun debouncing functions so that the incoming signal is the last argument. This enables better use of the pipe operator with these functions.
  • Fixed compiler output bug related to escaped characters.
  • Compiler no longer allows capacity and type variables to have the same names. This fixes a compilation bug.
  • Fixed issue with closure capture related to function parameters shadowing outer variables with the same name.

Juniper 4.0.0

30 Nov 23:31
Compare
Choose a tag to compare

New features:

  • New syntax for sequences, lambdas, match expressions, templates and more.
  • Upgrade the Juniper compiler to use .NET8.
  • Binary for OSX-ARM64 added.
  • Syntax should now be stable now that the language is mostly feature complete.
  • Add inout parameters, removing remaining need for ref cells.
  • stdlib updates, particularly around inout parameters.
  • Bug fixes for pattern matching on integers and reals.
  • smartpointer constructor is now a stdlib function.
  • rawpointer renamed to ptr, pointer renamed to rcptr.
  • Function arguments can now be set to mut.
  • Fixed bugs relating to reference counting garbage collection
  • Removed parens from syntax for loops.
  • Added assignment operation operators (ie: +=, -=, /=, ...)
  • to keyword in for loops now changed to ..
  • downto keyword in for loops removed.
  • Record fields inside record expressions are now assigned with := instead of =
  • Record fields are now separated by commas.
  • Added support for if statements without else branches (these if statements return unit)
  • Colors added to compiler error messages
  • mutable keyword changed to mut
  • Lambdas now use fat arrow syntax, no need for end keyword
  • You can now mutate fields stored in a ref with a right arrow (->)
  • Added support for wildcards in type expressions via an underscore (_)
  • Various compiler output bugfixes.
  • Constructing an array is now done with stdlib (see Prelude:array) instead of built in array keyword.
  • Added sizeof operator.
  • The closure in function types is now optional in many cases, it desugars to use a type wildcard.
  • Tuple types are now written in paren enclosed comma separated list, instead of asterisk separated lists. ie, we now use (a, b, c) and not a * b * c.
  • In a template you now denote an type level integer argument via ": int". This replaces the semicolon separated list.
  • A for range loop is now inclusive, exclusive [a, b) instead of [a, b].
  • Added prune-unreachable flag to the compiler for ignoring dead code.
  • Cases in match expressions no longer need to be separated with commas.
  • Added suffix for double literals "d"