Skip to content

Releases: wipplelang/wipple

Wipple 1.0

21 Jun 17:45
Compare
Choose a tag to compare

Announcing Wipple 1.0! 🎉

Read the blog post to see what's new.

Full Changelog: v0.12.0...v1.0.0

v0.12.0

31 Dec 00:00
Compare
Choose a tag to compare

In this release

Language

  • String interpolation no longer requires the format keyword
  • Improved diagnostic for building list with mismatched elements
  • Implicit imports remove the need to use dependencies in the playground
  • Custom entrypoints with the [entrypoint] attribute
  • [help-show-code] attribute displays the source code of expressions with the wrong type (eg. cannot display `basketball` on the screen instead of cannot display `Sport` on the screen)
  • Add fix-it to insert parentheses around mistyped expressions containing operators
  • Typechecker now tracks the reason why a type was inferred
  • Allow defining code snippets with the snippet keyword
  • Numbers can now be undefined instead of crashing the program
  • Tuples are now written using ; (, is now for collections and uses the Build-Collection trait)
  • Types can now be [sealed], preventing their construction outside the file in which they are defined
  • Added | operator for composing functions
  • Added Hash, Dictionary and Set
  • Typechecker is more reliable and requires fewer type annotations
  • Improved code formatter that collapses lists to a single line
  • Parser now accepts multi-line statements when there's an operator at the beginning or end of a line
  • Numbers now support units (eg. 1 seconds is equivalent to seconds 1, where seconds :: Number -> Duration)

Playground

  • New course-oriented design and layout
  • New Energy Use and Physics modules
  • New standalone app powered by Electron
  • Improved display of error messages
  • Editor now detects emoji assets and shows an emoji picker when clicked
  • Improved live collaboration
  • Added support for auto-completion
  • Insert button now appears inline
  • Added focus mode that dims inactive lines in the code editor
  • When a program contains errors, output is now persisted until the program is valid again

Full Changelog: v0.11.0...v0.12.0

Wipple v0.11.0

03 Sep 19:58
Compare
Choose a tag to compare

In this release

Language

  • Updated looping API using repeat syntax
  • Load all of a file's dependencies in parallel
  • Raise error when extra expressions are provided to a syntax rule
  • Improved error reporting inside expanded syntax rules
  • syntax rules are now hygienic
  • Add [private] attribute
  • Improved type inference involving default types for type parameters
  • Allow acronyms in naming conventions lint
  • Allow merging structures using where
  • Detect redundant when cases
  • Allow partial application of operators
  • Adjust syntax for placeholders so they don't conflict with the multiplication operator
  • Add [sealed] instances
  • Support block repetition syntax patterns with ...{}

Standard Library

  • Rename insert and remove to insert-at and remove-at
  • Add toggle!
  • Add [convert-from] to Maybe and Result
  • Implement Random for Boolean
  • Add negate
  • Rename Ok to OK
  • Add more default types for type parameters, so manual type annotations are required less often
  • Add more specialized implementations of standard library functions like join and count
  • Add not operator for functions
  • Add expect for booleans
  • Rename crash to error
  • Support partial application for most standard library operators
  • Rename iterator to sequence (and related APIs)
  • Add sample and take sequence functions
  • Add find and find-index sequence functions
  • Add all? and any? sequence functions
  • Add divisible-by? to check if a number is divisible by another number
  • Lists with mismatched element types now show the error on each mismatched element rather than on the list syntax rule

Playground

  • Implement collaborative editing
  • Add game engine inspired by SmileBASIC under the game library
  • Auto-close brackets and auto-indent when beginner mode is off
  • Add lessons for every warning and error message
  • Update beginner lessons and add graphic to top of lessons
  • Add note asset literals and allow choosing a new note using a keyboard

Tooling

  • Updated test runner — tests are now specified in their own .wpl files, and the output is specified in .stdout and .stderr files
  • LSP now supports go-to-definition, go-to-references, and renaming of local symbols

Full Changelog: v0.10.0...v0.11.0

Wipple v0.10.0

29 Jul 17:02
Compare
Choose a tag to compare

In this release

Language

  • Allow splitting statements across multiple lines using \
  • Allow defining simple enums on a single line
  • Added asset literals for inline colors and images
  • Added end for returning from a function early
  • Added type aliases
  • WIP support for compiler plugins

Standard Library

  • More iterator functions
  • Added randomness functions
  • Support by on ranges to form a stride (eg. 1 to 10 by 2)

Playground

  • New playground code editor based on CodeMirror with support for asset literals

Tooling

  • New documentation generator and published documentation for language primitives, std, turtle, music and graphing
  • WIP documentation on the Wipple compiler

Full Changelog: v0.9.0...v0.10.0

Wipple v0.9.0

16 Jun 14:10
Compare
Choose a tag to compare

In this release

  • Simplified syntax: removed tab-based indentation and the need for spaces between names and operators
  • Added code formatter
  • Implement inferred type parameters that improve type inference when using traits like Add and Iterate
  • Added the [convert-from] attribute to specify a fix-it for converting from one type to another
  • Updated playground code editor layout with support for formatting and searching the list of available declarations
  • Expanded the types of declarations that support the [help] attribute
  • Added placeholder expressions that must be filled before running the program

Full Changelog: v0.8.0...v0.9.0

Wipple v0.8.0

29 Apr 02:19
Compare
Choose a tag to compare

Wipple v0.8.0

In this release

  • Added support for interactivity, including prompt, choice, and custom JavaScript-based UI elements in the playground
  • Diagnostics for beginner mistakes like forgetting to quote a Text value or using print instead of show
  • Added turtle graphics, music and graphing to the playground
  • Functions that accept multiple inputs may now list all inputs to the left of a single arrow. This is just syntax sugar — all functions may still be partially applied
  • Enumeration types now have their variants exposed by default, removing the need to use them
  • Implemented default type parameters, useful for functions like prompt and crash
  • Rewritten exhaustiveness checking algorithm properly handles all cases
  • New functions for working with iterators, including count, split, iterator and next
  • Removed if? in favor of if defaulting the else branch to ()
  • Allow specifying a custom message when a trait isn't implemented using [on-unimplemented]
  • Many improvements to the playground, including beginner mode and 30 new interactive lessons
  • Many bug fixes related to type checking and optimization (including tail call optimization)

Full Changelog: v0.7.0...v0.8.0

Wipple v0.7.0

15 Feb 23:42
5dcfe66
Compare
Choose a tag to compare

In this release

  • Rewritten AST expander with context-dependent grammar and (work-in-progress) syntax hygiene
  • syntax definitions replace templates and offer a more flexible way to define new syntax and operators
  • list syntax now accepts values directly instead of requiring that they be wrapped in a tuple
  • Statements in blocks now automatically default to a type of () if a different type cannot be deduced
  • The compiler recursion limit can be set with a new [[recursion-limit]] attribute
  • The Wipple Playground now supports semantic highlighting and documentation tooltips

Full Changelog: v0.6.0...v0.7.0

Wipple v0.6.0

18 Jan 20:31
Compare
Choose a tag to compare

In this release

  • Improved syntax for dealing with types, traits and instances, including implicit type parameters and more consistent instance and where syntax
  • Added support for type-level programming with type-level traits, overlapping instances, and improved type inference for bounded type variables
  • Added several attributes for types and traits that allow you to control the error messages produced by the type checker
  • Specialized constants allow you to override the implementation of a generic constant for a more specific type to improve its performance
  • Improved exhaustiveness checking now tells you which cases are missing from an incomplete when expression
  • end expression allows you to exit from a function early
  • of operator allows you to retrieve a single field from a structure value without destructuring
  • Implemented several IR optimizations, including inlining of functions
  • Added an option in the Wipple Playground to lock a section of text to prevent accidental editing, as well as an option to disable linting for a particular section of code
  • Updated the Wipple Guide with tutorials for people coming from other languages, as well as an Advanced Wipple section and an updated reference
  • Fixed many bugs, crashes and infinite loops throughout the compiler

Full Changelog: v0.5.0...v0.6.0

Wipple v0.5.0

19 Oct 05:04
Compare
Choose a tag to compare

In this release

  • Support recursive instances and constants
  • Implement various numeric types, including Integer, Natural and Float/Double
  • IR is now stack-based and supports tail call optimization, allowing loop and others to be expressed as regular recursive functions
  • Refactor typechecker to be more error tolerant
  • Add language server to replace VSCode extension

Full Changelog: v0.4.0...v0.5.0

Wipple v0.4.0

30 Aug 21:41
Compare
Choose a tag to compare

In this release

  • Implement FFI for calling C functions from Wipple using external "c"
  • Allow importing specific names from a file using { a b c } : use "foo.wpl"
  • Types, traits and constants may now be specified in any order
  • Types may now refer to themselves recursively

Full Changelog: v0.3.1...v0.4.0