Releases: myst-lang/myst
Myst v0.6.2
Myst v0.6.2 is a bump release to support Crystal 0.27.0 (and 0.26.1). There's also some added changes that came in the meantime that are being bundled in for simplicity.
Most notably added in this release are Type Unions. Similar to Crystal's type unions, multiple types can be aggregated together into a single entity to be used for pattern matching and type restrictions. A major benefit of type unions is the ability to explicitly declare nilability on types. When a type is given as a union with Nil (i.e., Integer | Nil
), then the resulting type may either be an integer value or nil
; without the union, the value must be an integer value. This, combined with pattern matching, allows programs to avoid the entire class of nilability problems and cleanly separate logic for handling nil values from the normal flow.
If this is your first experience with Myst, be sure to checkout the getting started guide at http://myst-lang.org/get-started/ for an in-depth introduction to the language! If you want to join our community, get more help with Myst, keep up with real-time project updates, or just generally hang out, feel free to join us on Discord at http://discord.myst-lang.org.
Additions / Changes
- Added
ENV
module for accessing and setting environment variables. (see #196. Thanks, @Jens0512!) - Implement method return types. (see #199)
- Implement Type Unions. (see #199)
Bug Fixes
No bugs were fixed in this release.
Infrastructure
- Added
make check
goal to follow convention. (see #193. Thanks, @Jens0512!) - Update for compatibility with Crystal 0.26.1. (see #198. Thanks, @bmulvihill!)
- Update to Crystal 0.27.0 and add version requirement in the README. (see #200)
v0.6.1
Myst v0.6.1 is mostly a patch release to support external tooling, namely the new version manager (mtenv
), and documentation viewer projects.
mtenv
is an rbenv
-inspired version manager for Myst that simplifies installing, using, and switching between multiple versions of the interpreter. It is now the recommended way of installing Myst on any system. Check it out at https://github.com/myst-lang/mtenv. Also check ou the "Installation" section of the README for how to install this and any other new version of Myst.
myst-docs
(as it's known for now) is a generic documentation viewer for Myst projects, available at https://myst-lang.github.io/myst-docs/. It is powered by the new --docs
tool built into the Myst CLI, which generates a JSON blob from a given file/folder. The documentation viewer then parses that JSON on-the-fly to generate the site. While it only supports the Myst project for now, the hope is to expand this to be available for any Myst project, similar to https://hexdocs.pm for Elixir projects.
Also in the past month, @Jens0512 joined the project to help manage the various tooling projects for Myst, primarily with mtenv
. Welcome aboard :)
If this is your first experience with Myst, be sure to checkout the getting started guide at http://myst-lang.org/get-started/ for an in-depth introduction to the language! If you want to join our community, get more help with Myst, keep up with real-time project updates, or just generally hang out, feel free to join us on Discord at http://discord.myst-lang.org.
Additions / Changes
- Added a common supertype,
Type
, that all types in Myst inherit from. (see #173, #182) - Introduced doc comments (using
#doc
) to explicitly document Myst code. (see #185) - Implmemented static documentation generation outputing a JSON blob of all code documentation in a project. (see #185)
- Added documentation to every type and module in the standard library. (see #186)
- Added fake definitions of native library objects to add documentation to them. (see #185)
- Added the
Range
type for representing intervals of values. (see #190)
Bug Fixes
- ParseError messages now print a newline after their output. (see #183, #187)
- Warning output is finally hidden from specs again. (see #184, #188)
Infrastructure
- Added
mtenv
repo under the myst-lang organization: https://github.com/myst-lang/mtenv - README now says to use
mtenv
to install Myst. (see #181) - Added
myst-docs
repo under the myst-lang organization: https://github.com/myst-lang/myst-docs - I actually bumped the version number before releasing this time o.o
v0.6.0
Myst 0.6.0 is a very minor update, only warranting a minor bump because of a new syntax feature. Other than that, this release is essentially just a standard library update. It is being released now as part of the planned monthly release schedule.
The main new feature is the match
construct, which acts similar to cond
from Elixir, or a more powerful case
from Ruby/Crystal. In actuality, match
is simply syntax sugar for creating and immediately invoking an anonymous function, allowing for pattern matching on multiple arguments in a clean, concise block of code.
The Myst version manager is still in the works, and will hopefully be usable starting with the next release. However, attached to this release is a pre-built version of the language that you can download and use without needing Crystal installed. It includes the binary for the language, as well as the standard library, some examples, and the README. The folder structure must be maintained for this to work properly.
I only have the ability to build on macOS, so if anyone is willing to make linux builds, please let me know so they can be added here.
Additions / Changes
- The new
match
construct acts likecond
from Elixir, or a more powerfulcase
from Ruby. (See #96, #172) - The
assert
library abstracts and expands the assertion DSL that used to live inSpec
. (See #169) - Many new
File
methods for working with Files programatically. (See #177) - More type conversion methods for primitive types (
Integer
,Float
, andString
). (See #179)
Bug Fixes
- Flow control expressions on the right side of logical operations are now handled correctly. (See #168, #170)
Infrastructure
v0.5.0
Myst 0.5.0 has many smaller improvements, but by far the biggest addition in this release is inheritance. Just like type restrictions for method parameters, types can use the same syntax to define their supertype (the type they inherit from). With the addition of type inheritance, the standard library has had some re-writes to make use of it. Namely, IO
is now a type with subtypes of IO.FileDescriptor
and the new TCPSocket
, and File
inherits from IO.FileDescriptor
.
Another major feature is the new "Semantic Analysis" phase, which is responsible for making more complex assertions about a program than the parser is capable of. For now, the only assertion it makes is multiple binding of method parameters, but this will continue to be expanded in future releases.
Lots of bug fixes, general stability improvements, and better usability in the standard library are all also featured in this release.
This release will not be published to the homebrew tap. A new, custom release manager is in the works (similar to rbenv
) that will be replacing the homebrew releases. This will also be cross-platform and work for Linux users. Sorry for the inconvenience, but brew
has just proven to be overly cumbersome and insufficient for what Myst needs.
Additions / Changes
- Many new methods for
String
(see #138. Thanks, @Jens0512). - New "semantic analysis" phase (see #145).
- Naming a variable multiple times in a method parameter raises a semantic-time error (see #145).
- Type restrictions now also check the ancestry of a Type/Module for matches (see #143).
- Type inheritance is now supported with a syntax similar to type restrictions (see #142).
- Re-implemented
IO
as a Type, and addedFileDescriptor
as a base forFile
(see #158). - Spec failures now include the name path of the spec that failed (see #161. Thanks, @Jens0512).
- Added
sleep
as a top-level method (see #162. Thanks, @Jens0512). - Type Paths (e.g.,
Foo.Bar
) can now be used directly in instantiations (see #164). - Primitive types are now implemented directly as Crystal's native types (see #166).
- Added a basic
TCPSocket
implementation for network communication (see #167).
Bug Fixes
- Fixed a potential error leak with
Myst::VM#reset
(see #137. Thanks, @Jens0512). - Functions can no longer override existing variables in the current scope (see #144).
while
anduntil
now actually do the looping thing they're supposed to (see #159).- scopes and
self
values are now properly popped when leaving anInvocation
(see #160). - The callstack is now properly managed throughout the interpreter (see #163).
Infrastructure
v0.4.0
v0.4.0 is a smaller release than v0.3.0, but still brings a lot of value. The main focuses of this release are consistency in the standard library and various bug fixes from v0.3.0.
This is also the first release coming as part of the planned monthly release schedule. For 2018, if no release has happened by the end of the month, a new release will be made with whatever changes are currently on master (with obvious exceptions like broken builds or major bugs). I'm hoping that this schedule will help with exposure, general usability, and consistency, but we'll have to see how it goes.
The syntax for Myst is starting to stabilize, and future releases will likely focus more on semantics, tooling, and the standard library to make Myst a more viable language for the general public. That said, we're always open to feedback and new ideas for the language, so please keep them coming!
Additions
- Added
List#push
,List#pop
,List#shift
, andList#unshift
(see #114, #115. Thanks, @bmulvihill). - Use splats with
List#push
/List#unshift
to add multiple values to the List (see #116. Thanks, @bmulvihill). - Added
Map#[]
,Map#[]=
,Map#==
,Map#!=
, andList#!=
(see #117). - Added
-v
and-vv
CLI flags to print out Myst version information (see #119). - Any expression can now be used as the "name" of a Call (see #123).
- Block parameters are now added as local variables in function scopes (see #124).
- Added
-e
switch for evaluating string input from the CLI (see #126. Thanks, @Jens0512). - Anonymous functions now allow exception handlers with the
do...end
syntax (see #127. Thanks, @Jens0512). - Added
Random.rand
(see #128. Thanks, @Jens0512). - (breaking-change) Blocks now capture the value of
self
from where they are defined (see #131). - Added
Myst::VM
as the public interface for embedding Myst in Crystal projects (see #134. Thanks, @Jens0512).
Bug Fixes
- Wrapping expression with parentheses no longer causes a
ParseError
in conditionals (see #112. Thanks, @bmulvihill). expect_raises
with no expected value no longer masksAssertionFailure
s (see #110. Thanks, @bmulvihill).- Only check the current lexical scope if a Call does not have a receiver (see #122. Thanks, @bmulvihill).
- (breaking-change) Invocations now properly determine the value of
self
to use during execution (see #132).
Miscellaneous
- Improved
Time
implementation. Smaller, smarter, and more precise (see #101. Thanks, @bmulvihill). - All errors raised by the Interpreter are
rescue
-ableRuntimeError
s (see #107). - Almost all native library specs are now implemented in Myst (see #107).
- Catch all multiple-splat errors at parse-time rather than run-time (see #118).
- Moved CLI code into
src/myst/cli
to clean up main file (see #126. Thanks, @Jens0512). - Updated the standard library to use new syntax from
v0.3.0
(see #125).
Infrastructure
- (finally) Updated the Myst version number in
shard.yml
(Thanks, @Jens0512).
Myst v0.3.0
v0.3.0 of Myst adds a lot of new features - to the syntax, the standard library, and outside of the language. This is a huge release. Thank you to everyone who contributed; through PRs, comments on issues, discussion in the community, or just generally bouncing ideas around.
More than anything, this release is focused on improving the user experience with Myst. The standard library has been fleshed out with a solid set of basic methods (all comparison operators for numbers, Enumerable
methods, etc.), and some common bugs have also been fixed to make Myst code less error-prone.
Perhaps the biggest addition in this release, though, isn't part of the language at all. A side component of this release is the new "Get Started" guide (available at https://myst-lang.org/get-started/) that provides an introduction to Myst's syntax, semantics, and a bit of the standard library. This is still a work in progress, so please bring up any issues or suggestions you have either in our discord server or on its repository: https://github.com/myst-lang/website.
The community discord server is also growing! If you want to keep up with Myst development as it happens, get involved in the community, or just generally hang around, we'd love to see you there at https://discord.myst-lang.org :)
Additions
- Many additions to the standard library (See #57. Thanks @bmulvihill, @minirop, @atuley, and @zkayser).
Integer
,Float
, andEnumerable
received big buffs, among other things. - Added a
Time
type andTime#now
to get the current system time (see #85. Thanks, @bmulvihill). - Added the
extend
keyword for adding Module ancestors to the static scope of a Type (see #77. Thanks, @zkayser). - Added support for the Splat operator (
*
) for deconstructing objects into Lists of values (see #71). - Added support for Unary operators Not (
!
) and Negation (-
) (see #52, #46. Thanks, @rainbru). - Allow any functor to be "captured" with the
&
unary operator (see #50). - Added support for anonymous functions using the
fn
keyword (see #47). - Object instantiations can accept captured functions as the block parameter (See #91). This keeps parity with regular method calls.
- Added
__FILE__
,__LINE__
, and__DIR__
magic constants (see #90, #45. Thanks, @bmulvihill).
Bug Fixes
- Properly maintain local scope overrides after rescuing an error (see #95).
- Properly restore the value
self
after rescuing an error (see #65). - Fixed a bug with
List#==
where lists were incorrectly considered equal (see #89. Thanks, @bmulvihill). - Open angle brackets in Strings no longer cause a
ParseError
(see #80. Thanks, @bmulvihill). - Accessing/assigning non-existent elements in a List no longer raises an error (see #72. Thanks, @bmulvihill).
Miscellaneous
- Adding parentheses after a
Var
will always force it to be aCall
, even with no arguments (see #54. Thanks, @bmulvihill).
Infrastructure
- Upgraded to Crystal 0.24.1 (See #99). This should improve the experience of developing Myst, particularly on macOS.
- Fixed the fibonnaci example code to use the correct sequence numbers in the comments (see #55. Thanks, @minirop).
Thanks again to everyone who contributed to this release! It took a lot longer than I had hoped, but 0.3.0 is a great release because of it, and I'm proud of all the work that has been done. Onwards to 0.4.0!
v0.2.0
This release adds a lot of new syntactic features including string interpolations, operator methods, operational assignments, query methods, bang methods, and support for self
. Installation instructions have also been fleshed out a bit, so hopefully installations will go smoother!
Added
- Interpolate any expression into a string using
<(...)>
(#33) - Add operational assignments (e.g.,
||=
and+=
) for shorter, cleaner expressions (#30) - Allow operators as method names (#29)
- Query and bang (
?
and!
) methods (#28) - Warning messages when referencing Underscore variables (#34. Thanks, @rainbru!)
self
returns the interpreter's currentself
value (#40)- Basic Spec library for making assertions in Myst code (#39)
Bug fixes
- Fixed Constant lookup from instances to also check the static scope (#38)
Miscellaneous
- Better linux installation instructions (#32. Thanks, @rainbru!)
v0.1.0
The initial release of Myst!
The expectation of this release is a usable scripting language that is stable enough for small scripts. Help get to v0.2.0 by submitting issues for feature requests and bugs!
We also have a Discord server for discussions about the language, help with getting started, and general community conversations. Come hang out at https://discord.gg/8FtMeac!