Releases: wipplelang/wipple
Releases · wipplelang/wipple
Wipple 1.0
v0.12.0
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 ofcannot 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 theBuild-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
andSet
- 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 toseconds 1
, whereseconds :: 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
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
andremove
toinsert-at
andremove-at
- Add
toggle!
- Add
[convert-from]
toMaybe
andResult
- Implement
Random
forBoolean
- Add
negate
- Rename
Ok
toOK
- 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
andcount
- Add
not
operator for functions - Add
expect
for booleans - Rename
crash
toerror
- Support partial application for most standard library operators
- Rename
iterator
tosequence
(and related APIs) - Add
sample
andtake
sequence functions - Add
find
andfind-index
sequence functions - Add
all?
andany?
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
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
andgraphing
- WIP documentation on the Wipple compiler
Full Changelog: v0.9.0...v0.10.0
Wipple v0.9.0
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
andIterate
- 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
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 usingprint
instead ofshow
- 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
andcrash
- Rewritten exhaustiveness checking algorithm properly handles all cases
- New functions for working with iterators, including
count
,split
,iterator
andnext
- Removed
if?
in favor ofif
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
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 operatorslist
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
In this release
- Improved syntax for dealing with types, traits and instances, including implicit type parameters and more consistent
instance
andwhere
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 earlyof
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
In this release
- Support recursive instances and constants
- Implement various numeric types, including
Integer
,Natural
andFloat
/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
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