Skip to content

Releases: myst-lang/myst

Myst v0.6.2

02 Jan 18:07
dc9581a
Compare
Choose a tag to compare

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

29 Apr 21:05
2bfcfc2
Compare
Choose a tag to compare

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

v0.6.0

01 Apr 16:37
b799d89
Compare
Choose a tag to compare

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 like cond from Elixir, or a more powerful case from Ruby. (See #96, #172)
  • The assert library abstracts and expands the assertion DSL that used to live in Spec. (See #169)
  • Many new File methods for working with Files programatically. (See #177)
  • More type conversion methods for primitive types (Integer, Float, and String). (See #179)

Bug Fixes

  • Flow control expressions on the right side of logical operations are now handled correctly. (See #168, #170)

Infrastructure

  • Many Makefile improvements for a better, easier development workflow. (See #171. Thanks, @Jens0512!)
  • More explicit Travis CI configuration, in preparation for building on macOS. (See #176)
  • Grammar fixes for installation instructions in the README. (See #175)

v0.5.0

01 Mar 15:47
272781e
Compare
Choose a tag to compare

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 added FileDescriptor as a base for File (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 and until now actually do the looping thing they're supposed to (see #159).
  • scopes and self values are now properly popped when leaving an Invocation (see #160).
  • The callstack is now properly managed throughout the interpreter (see #163).

Infrastructure

  • Add help make rule to show all available make commands (see #147. Thanks, @Jens0512).

v0.4.0

28 Jan 01:45
1fb8724
Compare
Choose a tag to compare

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, and List#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#!=, and List#!= (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 masks AssertionFailures (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-able RuntimeErrors (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

28 Dec 20:38
53861e6
Compare
Choose a tag to compare

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, and Enumerable received big buffs, among other things.
  • Added a Time type and Time#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 a Call, 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

11 Nov 15:58
3ac7556
Compare
Choose a tag to compare

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 current self 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

04 Nov 20:41
Compare
Choose a tag to compare

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!