# Changelog All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). ## [Unreleased] ### Added - Builtin function documentation generation from C++ Musique implementation source code - New builtins: digits - Negative numbers! - Introduced start synchronization with builtins: `peers` and `start` - Serial communication with dedicated device including - knob and button updates - support for CV as MIDI output inside Musique ### Removed - Release builder, since it's separate part of the project ### Fixed - `ceil`, `round`, `floor` didn't behave well with negative numbers - `duration` wasn't filling note length from context and summed all notes inside chord, when it should take max - `try` evaluated arguments too quickly ## [0.3.1] ### Fixed - release build script was producing executable with wrong path - `examples/for-elise.mq` had bug in it - in error reporting printing garbage instead of function name was fixed - sending proper program change message ## [0.3.0] ### Added - new builtins: map, while, set_len, set_oct, duration, pick - `` notation like `c4` that mimics [scientific notation](https://en.wikipedia.org/wiki/Scientific_pitch_notation) - operator pretty printing while printing values - macros: builtin functions that takes AST and produces value - early text-based snapshot system available via `:snap` command inside interactive session - polish basic tutorial ### Changed - Block can be called with more parameters then it requires - reorganized fold argument order - Moved from `( )` invocation to `( )` - Moved from '[]' to '()' notation for blocks - Moved from `a.n` index operator to `a[n]` - Moved from ';' to ',' notation for expression separator - Moved 'if', 'while' from beeing functions to macros - side effect of new notation - Build system uses now Docker - Array repetition using `number * array` like `3 * (c, e) == (c, e, c, e, c, e)` ### Fixed - Index operation using booleans behaves like a mask and not fancy way of spelling 0 and 1 - Blocks are check against beeing a collection at runtime to prevent treating anonymous functions as collections and cousing assertions - On Windows default terminal emulator ansi escape codes are conditionally supported. Review musique/pretty.cc for details ### Removed - Removed `` chord notation like `c47` meaning c-major - Removed obsolete documentation - `h` as note literal ## [0.2.1] - 2022-10-21 ### Fixed - Windows build doesn't require pthread dll ## [0.2.0] - 2022-10-21 ### Added * Added `scan` builtin, which computes prefix sum of passed values when provided with addition operator * Added [rtmidi](https://github.com/thestk/rtmidi/) dependency which should provide multiplatform MIDI support * Support for Windows (with only basic REPL) (`make os=windows`) * Support for MacOS (`make os=macos`) * Release package now with compiled Windows binary * `:load` REPL command to load Musique files inside Musique session. Allows for delayed file execution after a connection * `:quit` REPL command that mirrors `:exit` command * Virtual MIDI output port creation as default action (--output connects to existing one) * Added build instructions * `-f` commandline argument that will turn file into deffered function ### Changed * Integrated libmidi library into Musique codebase * Moved from custom ALSA interaction to using rtmidi for MIDI I/O operations * VSCode extension has been re-created ### Removed * Support for incoming MIDI messages handling due to poor implementation that didn't statisfy user needs ### Fixed * Prevented accidental recursive construction of Arrays and Values by making convinience constructor `Value::Value(std::vector&&)` explicit ## [0.1.0] - 2022-09-25 ### Added * Musique programming language initial implementation that supports: * Chord system * Playing MIDI notes using par, sim and play * Notes and chords as first-class citizens of Musique * Bunch of builtins like math and array operations * All numerical values as fractions (like in JavaScript but better) * Primitive interactive mode * Only ALSA MIDI Sequencer output * Simple regression testing framework * Basic documentation of builtin functions and operators