Changelog
All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog
and this project adheres to Semantic Versioning.
NOTE: Only the latest version with a tag at any given time is considered maintained. Bug fixes will not be back-ported.
The versions exist as part of the git repository under the form of tags.
These changelogs only apply to the wiles-base package. The frontend / backend are not currently versioned.
See all the open and resolved tickets here.
v2.2.2 - 2024-09-22
- Bug fix for syntax highlighting
v2.2.1 - 2024-03-25
- Bug fix (#70): rational division doesn’t have enough precision
- Bug fix with debug mode
v2.2 - 2024-03-23
Implemented the following:
- Create Token information mode for Wiles Base API, to be used for syntax highlighting (#57)
- Generics: stop adding the vertical bars and numbers. E.g.:
T instead of T|1 (#61)
v2.1 - 2024-03-01
- The function
getOutput now returns OutputData instead of Pair<String, String> inside Wiles.jar
- Errors will no longer be forced to be displayed in red
- Better
tokenLocation: now it includes information on where the token ends
- Relatedly, better compilation error messages in console. The entire token, both the start and the end, will be highlighted.
v2.0 - 2024-02-28
- Removed support for
either[type1,type2] syntax (#45). Please use type1 or type2.
- The
writeline function is now write_line (#42).
- Strings are now multiline by default. (#52) The
\ character is not used to make a string multiline (#50).
\ no longer makes comments multiline either (#50).
- New string escaping mechanism with the format
\code;, to replace the HTML-based string escaping. (#53)
- Dollar signs in strings are now reserved, to be used in the future for string interpolation. (#51)
- Remove
import operator: make variables from the outside scope accessible by default (#47)
- Remove list concat operator
+ (#49)
mut operator now only applies to collections, and there’s no set function (#43)
- Make
rational into an exact base 10 rational type (#46)
v1.1.5 - 2024-02-24
- Added support for data objects (#37). Syntax
data{field1 := value1, field2 := value2
- Added support for data object types. Syntax:
data[field1 : type1, field2 : type2]
- Added support for accessing fields of data objects. Syntax:
object.field
- Added support for emoji identifiers (#41). Sometimes you just gotta have fun.
- Various bug fixes, refactoring and improvements.
v1.1.4 - 2024-02-03
- Bug fixes + tests, such as #35 and #36
- Refactoring
v1.1.3 - 2023-07-24
- Refactoring of existing code, such as moving the compiler into the
Wiles Base folder
- Improvements to the Wiles interpreter, such as that a different JVM code can safely run the compilation process multiple times at the same time without any risk of contamination
- Created an alternative way of calling the interpreter, using the
WilesCompiler.getOutput function, that will return a Pair<String,String> containing the interpreter output and the error output, respectively
- Start work on web app project backend
v1.1.2 - 2023-07-11
- Implemented ticket #8: alternative syntax for
either types, i.e. type1 or type2
- Updated specs
- Tests
v1.1.1 - 2023-07-09
- Bug fix in
for and spec clarification: the to statement’s value is always exclusive
- Adjust tests
v1.1 - 2023-07-09
- Extended the range for
int, from using the JVM long to using BigInteger, as per #29
- Most behaviour should work the same, except for overflowing and underflowing which will no longer happen
- Due to longer range, operations between two
ints, such as +, -, *, - and ^ will yield the exact result
- Internal representation change, from
INT64 to just INT
- Minor bug fixes, such as making
fors without a to never stop instead of stopping at Long.MAX_VALUE
- Additional tests
v1.0.3 - 2023-07-09
- Fixes for issues #27 and #28
- Tests
v1.0.2 - 2023-07-09
- Further improvements to error messages, specifically when dealing with generics in function calls, as per issue #26
- Tests for the improvements
v1.0.1 - 2023-07-08
- Implemented #18 : now the compiler will explain why a function cannot be called
- Bug fixes, fixing issues with possible non-determinism
- Updated existing tests and added more tests
v1.0 - 2023-07-04
First official release! No breaking changes except in internal representation as compared to 0.7.1.
Note: while this is the first official release, this is far from guaranteed to be bug-free, especially in edge cases.
Additions:
- Expanded
= and =/= to all types as per #21
- Added
dict.keys as per #24
- Fix issue #25 and other issues discovered in the meantime
- More tests for dict stuff as per #22
v0.7.1 - 2023-05-06
- Added support for
dict, representing hash maps, as per issue #7
- Added support for CRUD functions for
dict
- Tests for
dict
- Updated specs
- Other minor non-breaking changes
v0.7 - 2023-04-20
- Remove
@ operator, as per issue #6. Please use the get function.
- Rewrote tests to reflect the removal of the
@ operator
- Update specifications
- Refactor the JSONService class
v0.6.4 - 2023-04-16
- Fix issue #16
- Test for issue
v0.6.3 - 2023-04-16
- Added
get function for collections. Unlike @, it panics on the index not being found.
- Improvements for type checker.
let func := fun() -> int do panic() now does not generate error.
- Bug fixes.
- Tests.
v0.6.2 - 2023-04-14
- Significant performance improvements in start-up / compilation
- Due to dropping Jackson dependency and replacing it with
minimal-json for the handling of JSON files
- For instance, running all tests went from around 0.5s - 0.55s to around 0.2s - 0.25s
- Size of JAR file also dropped from 7.84 MB to 2.86 MB
- No changes in functionality
v0.6.1 - 2023-04-14
- Added
collection type, mostly for internal use for CRUD functions
- Made CRUD functions use
collection. This will facilitate adding dictionaries later on
- Minor bug fixes
- Tests
v0.6 - 2023-04-08
Note: breaking changes
- Changes in the names of list functions, for standardisation.
list.add(arg value, at) : add an element to a mutable list
list.remove(arg value, at) : remove an element from the list at the index
list.update(arg value, at) : set element at index.
- Various bug fixes, both minor and major
- Update for the minimum value example on the front page
- Added and updated tests for everything here
v0.5.4 - 2023-04-02
- Improvements to type checking algorithm. To put it simply, now this compiles (b is safely int):
let a := maybe(10)
when a is nothing do panic()
let b := a + 10
- Test for this
- Bug fixes
v0.5.3 - 2023-04-02
- Added
content function, which returns content of variable and panics on nothing
- Tests for
content
- Update dependencies
v0.5.2 - 2023-04-01
- Bug fixes in generic functions
- Tests for the fixes
v0.5.1 - 2023-04-01
- Bug fixes in run-time type checking for lists
- Fix in incorrect compilation error message
- More tests
v0.5 - 2023-04-01
Note: breaking changes
mut [list_literal] will no longer make its elements also mutable
- remove a dependency
- changes in error messages
- the scope of function literal parameters no longer includes the outside scope. use the
import keyword for this.
- changes to
when syntax
set_at no longer has a mutable paramater
- bug fixes
v0.4.2 - 2023-03-29
- Add
remove and set_at functions for lists
- Bug fixes
- Tests
v0.4.1 - 2023-03-29
- Various bug fixes
- Allow statements of the form
import a := 10
- Additional tests
v0.4 - 2023-03-28
Note: breaking changes
- Remove
new operator, replaced with clone function
elem.clone() makes a deep clone by default. Make a shallow clone using elem.clone(deep := false)
- Write tests for deep and shallow cloning
v0.3.7 - 2023-03-27
- Support for first-class types. To declare type definition of type, use e.g.
type[int]
- Generic types are also now of
type type. This should be safe.
- Type definitions at compile time:
typedef name := type
- Get type of object at runtime:
object.type
- Bug fixes
v0.3.6 - 2023-03-26
Note: breaking change in compiled file syntax. No breaking change when not using --compile and -run
- Various bug fixes, including major fixes
- Various refactoring and changes in internal representation
- Now inside
fun(x : anything? as T), T is an accessible value of type GENERIC_TYPE. This can’t be used as a regular type because the actual type is not known at compile type.
v0.3.5 - 2023-03-25
- Added
add function for mutable lists, including tests
- Bug fix: disallowed repeating the generic name for functions inside other functions
- Bug fix that didn’t check generic types correctly
- Refactoring / code cleanup
v0.3.4 - 2023-03-23
- Improvements to generics type checking. The return type of
maybe(5) is now un-generified.
- Bug fix in compilation exception handling
v0.3.3 - 2023-03-22
- Non-breaking change in compiled code representation
- Improvements to the
when type checking
- Bug fix where function params referencing other params was allowed
v0.3.2 - 2023-03-19
- Finishing the bug fixing from the previous version
v0.3.1 - 2023-03-19
- Added helper functions with generics
maybe: makes non-nullable type nullable
run: runs a function and yields its result (alternative to func())
- Bug fixes
v0.3 - 2023-03-19
Note: breaking changes from v0.2.*
- Removed the
<- symbol, for changing a mutable value
- Added
set function with the same functionality using generics. Instead of a <- b, do a.set(b)
- Added generics and tests. Bugs could still occur for generics!
- Various bug fixes, including major ones!
- Add support for
writeline without any arguments
- Add support for
=/= with nothing, since = is already supported
- Allow operations such as
2 = nothing. As when casts the value, this is necessary
- Change tests to reflect this change
- Fixed a bug where the internal type after
= operation was incorrect (not boolean)
- Major bug fix:
when statement should not create a copy of the object.
- This made it impossible to modify a variable using
<- after checking its type
- Test for the bug fix
- Refactoring the error messages into one class, and improvements in the messages themselves
- Throw a
panic exception instead of a Java error when trying to multiply a text with a negative number
- In debug mode, add a newline before displaying the variables.
- Added functionality for right side of
. (access operator) to be anything, not just a simple identifier.
- Added support for a subtype of a function type to have additional parameters, as long as they have default values and, in case of unnamed arguments, at the end of the parameter list. This does not break the Liskov Substitution Principle
- Fixed bug which made expressions like
[1,2,3].size not work
- Wrote test for the bug fix
v0.2.9 - 2023-03-12
- Additional functionality for the
. operator: elem.func(params) is now equivalent to func(elem,params)
- Bug fixes for
text.size and list.size
v0.2.8 - 2023-03-12
Note: breaking change in compiled file syntax. No breaking change when not using --compile and -run
- Refactoring
true / false / nothing into normal tokens
- Refactor all standard functions into one
StandardLibrary static class
- Added
Infinity and NaN identifiers
v0.2.7 - 2023-03-12
Note: breaking change in compiled file syntax. No breaking change when not using --compile and -run
- Throw
panic on stack overflow, instead of the default Java error
- Add
@ (elem access) for text
- Text times int operation, for repeating text
as_list function to convert text into list
- Additional tests for new functionality
v0.2.6 - 2023-03-11
- Make
as_text(elem) work as well, not just elem.as_text
- Add
text.size support
- Make the
size function handle lists of nullable subtype, e.g. list[int?]
v0.2.5 - 2023-03-11
- Allow to use
write and writeline with any object, except nothing types
- Fix bug that made
int? a subtype of anything
- Write test to check the bug
v0.2.4 - 2023-03-11
Fixed issue where:
let a := fun() -> nothing do nothing
let b := do if true do yield nothing
would get rejected as incorrect by the checker, despite always yielding nothing.
v0.2.3 - 2023-03-11
- Panic on arithmetic exceptions and input reading errors, instead of throwing Java exception
v0.2.2 - 2023-03-11
Note: breaking change in compiled file syntax. No breaking change when not using --compile and -run
- Bug fix in getting the type of function literals in interpreter
- Fix tests and create new test for function literal types
v0.2.1 - 2023-03-11
- Bug fix in type checker for list addition
v0.2 - 2023-03-11
Note: breaking changes from v0.1
- Support for list concatenation using plus operator. E.g.:
[1,2] + [3] = [1,2,3]
- Remove append to list
+= operator as duplicate. Should be add function once support for generics is added.
v0.1 - 2023-03-09
First official release, with the interpreter being functional. Read the readme for details.