57da5ef1574c — Leonard Ritter 15 days ago
* check-in release notes for 0.16
1 files changed, 613 insertions(+), 0 deletions(-)

A => README.md
A => README.md +613 -0
@@ 0,0 1,613 @@ 
+# Scopes Release 0.16 #
+
+## Downloads ##
+* [Scopes 0.16 for Linux 64-bit](https://hg.sr.ht/~duangle/scopes-binaries/raw/scopes-0.16-glibc_2.27-linux-x86_64.tar.xz)
+* [Scopes 0.16 source](https://hg.sr.ht/~duangle/scopes/archive/release-0.16.tar.gz)
+
+## Documentation ##
+
+Documentation is available [online](http://scopes.readthedocs.io/en/latest/).
+
+## Changes ##
+
+* Update macOS documentation to mention Mojave and both LLVM versions [3a7742497710]
+* macOS dlsym() requires symbol names to not have a leading underscore [3f71f9e9c5cc]
+* Update macOS documentation to mention Mojave and both LLVM versions [9b06d3c7f264]
+* added `qualifiersof` to query qualified type of values [5f025d952ad9]
+* compiler ensures that the argument passed to `__drop` is a view [17cff061862f]
+* `& type` constructs immutable reference by default, analog to `@ type` [929c91751d51]
+* `mutable` can also be applied to reference types [929c91751d51]
+* fixed `free` refusing to free opaque pointers [a5f9fe21fe66]
+* Better dylib search mechanics on macOS for the scopes binary [741e6da44bea] [70d114c02efa]
+* fixed a buffer overflow when escaping more than 512 consecutive printable characters in a string [caca3c4981fe]
+* fixed segfault in `sc_list_compare` when one of the lists is empty and the result is unequal [f1a836d4e237]
+* removed cache for `SourceFile` so repeatedly opening the same file refreshes content for new access [430da3204013]
+* reduced the global number of open file handles [632b7eab12f9]
+* source files are now treated as unique pointers [632b7eab12f9]
+* anchors no longer keep file handles open [632b7eab12f9]
+* fixed assertion on REPL when an error occurs [471a7caf8d9f]
+* REPL: added `sh` command which allows to execute shell commands [1098c145fe1f]
+* include: specifying `"-c" <path>` for `options` will write an object file to the specified location [2858f372e4f4]
+* REPL: prompt history is saved between sessions [9e0d9bf15685] [9adc7e0e0266]
+* REPL: renamed REPL to console and moved it into its own module, `console.sc` [9adc7e0e0266]
+* `compile-object` requires a target triple to be specified [d9f0bfc1cac1]
+* support for generating WebAssembly [d9f0bfc1cac1] [7ae23e7c5afb]
+* fixed issue #25: function `abs` (`sabs`) not correct for unsigned types. sabs will now always perform the abs operation, while abs will leave unsigned integers as-is. [58ea46f5597b]
+* `compile-object` takes additional file kind argument and can now also generate assembly, llvm plaintext and llvm bytecode [7ae23e7c5afb]
+* key-value form of `let` only binds new names after all expressions have been processed [882a99aaf71e]
+* fixed issue #34: Build (Windows): Remove exact path requirement for MSYS2. the genie script will now attempt
+to find the folder via the PATH variable. [59510c3f6334]
+* reimplemented `defer` using view inference [3c5fd789d4ef]
+* argument lists are no longer mutable, and therefore constructed as one [eec8c397e9f5]
+* `sc_argument_list_new` now takes number of values and value array [eec8c397e9f5]
+* removed `sc_argument_list_append` [eec8c397e9f5]
+* small adjustment to how argument list templates are folded [c1e8ee6bd379]
+* array and vector type constructor accept any integer constant for size argument [ebedc1a48c95]
+* added `'swap Array` [fb4d3c3cac7e]
+* improved error message when a module is missing [0eb9601a0b04]
+* `deref` moves unique arguments [42d2c01eee48]
+* fixed `static-if` breaking if the next expression does not start with a symbol [780bbae9eae6]
+* added `a is T` expression to `sugar-match` to match a constant value type without unpacking it [fade136cd5aa]
+* removed stack recursion from `enum` parser [fade136cd5aa]
+* `enum` sugar now works analog to `struct`, permitting to define methods in the enum body. tags can be added procedurally at compile time using `tag` [eb3e10e5385e]
+* `enum.__repr` combines names for tags using the same indices [eb3e10e5385e]
+* support for using enum as sum type [eb3e10e5385e]
+* removed builtin union type and all instruction support for it [946c11dccfb8]
+* CUnion now uses a storage type that matches the union in size and alignment, and a field descriptor [946c11dccfb8]
+* added `sc_const_null` to allow creating constant null instances
+* added `__dispatch` spice to `Enum` as a way to safely and efficiently unpack contents [2851f9736e78]
+* moved `enum` sugar to its own module [6390ea67af27]
+* moved `struct` sugar to its own module [fea133adb1a6]
+* added value constructor for tuples [044b5a7d73ab]
+* added `key` to set a computed argument key at compile time [e224bfa5c121]
+* added `'unpack-keyed` to `tuple` to allow unpacking tuple arguments with keys [e224bfa5c121]
+* `tuple` will unpack with keyed arguments if elements have keys [071500c99cbd]
+* `enum` can be unpacked with `dispatch` sugar [071500c99cbd]
+* small tweaks to `enum` syntax, to make tuple definition the default [f1b278041fcc]
+* `dispatch` will only unpack tuples [f1b278041fcc]
+* `using` evaluates argument. if argument is a type, and said type exports a scope via `'__using` attribute, this scope can will be embedded in the local scope [eafef7433f21]
+* `enum` tags can be imported with `using` [eafef7433f21]
+* `dupe` now creates unique copies of views, which makes it both powerful and dangerous [9a2cfdd32864]
+* unique heap references are no longer autofreed [be94799f21d6]
+* C bridge: fixed a duplicate definition error when a struct or union forward declaration was encountered after a definition. [14f63a96a4e6]
+* improved error output for type conversion errors [093149fce4c2]
+* `compile-glsl` now takes additional GLSL version parameter in first place; if version is set to 0, the most recent default is used [693e892869c4]
+* C bridge: fixed "attempting to use incomplete typename" when binding unnamed structs to multiple names via typedef [d267f657363b]
+* removed `new` and `delete`, as heap values are no longer autofreed, so it makes no sense to pretend we have high level primitives to deal with them [66a8e9485455]
+* fixed `let` not failing when the right hand side contains too many arguments and the left hand side isn't variadic [eae6dc7dd146]
+* `test-compiler-error` also catches syntax errors now [eae6dc7dd146]
+* naive handling of BlockPointer to avoid errors with MacOS includes [8b05b40e2f2f]
+* core.sc: fixed vector comparison [7d07b4de8df7]
+* core.sc: read vector element accessor using `@` [742ed6c653e5]
+* fixed object files generated by `sc_compile_object` not being able to be linked dynamically [840ad4ec461c]
+* changed code model for objects generated by `sc_compile_object` to fix library calls crashing on windows [6f44049f0848]
+* method calls can now be hooked via overriding `'__methodcall` [fb53ae7aecbf]
+* implemented `Box` as new module; `Box` allocates and wraps heap pointers uniquely and ensures that they are properly destroyed. It currently only forwards cast operations, `getattr` and methodcalls. `Box.view <value>` can be used to get a view to the managed object. [446a419c602b]
+* `Box` forwards `countof` and `@` operators [05518b5c0827]
+* catch malformed keyed call arguments which accidentally pass more than one value [9a2628b1c20e]
+* implemented both UTF-8 encoder and decoder as `UTF-8` module [dcb14c92a5b2] [05d22a6cb662] [3eb3dda8bd3a]
+* added test_utf8 to test suite [727be568bc35]
+* embed inline scopes into caller by default if there's no return label [7382d6f9acc1]
+* added `protect` to cast a pointer to read-only [74d1b669ed2f]
+* arrays implicitly cast to their (read-only) pointer type, voidstar and `pointer` [74d1b669ed2f]
+* glm: support for `i8, i16, u8, u16` in vec-type constructor [79534cf1234d]
+* symbol comparisons fold at compile time [79534cf1234d]
+* `empty?` and `countof` used on list constants folds at compile time [0018fee62b27]
+* `unpack` can be used on list constants [0018fee62b27]
+* constant initializers for globals will be stored in data segment
+* initializing a typed global with a closure defines a global constructor
+* generated objects use constant initializers and global constructors
+* stages will call global constructors in order of definition [0abb5232ff4a]
+* real literals can be defined without dot and zero if a suffix is provided [c14e070df283]
+* numerical parser now based on custom function rather than `strtoll` and `strtod`.
+* `0?..` is no longer parsed as an octal number. Instead, the `0o` prefix must be used.
+* FIX: signs not applying to numbers with binary base.
+* `0b`, `0o` and `0x` can be used with floating point numbers. [9956b3ca826a]
+* added global functions `integer->string`, `bin`, `oct`, `dec`, `hex` to convert integers to strings [53c2a5cbb282]
+* FIX: fixed typo in `as?` that made it perform the same as `imply?` [153f188e5784]
+* added `sc_symbol_style` to C API [b886448914a7]
+* added type initializers which allows to pass constructor arguments to functions performing implicit casts [539c1fe73c77]
+* initial work on replacing cons cells with symbolic lists [ad971d8c6f66]
+* added `sc_value_block_depth` to query the block depth of typed values [beb2a2096180]
+* `nullof` translates to const constructor
+* `undef` produces pure value instead of instruction
+* `move` and `insertvalue` accept constants and undefineds as movable [c0f87e30eef8]
+* simplified `undef` node [2cd9dd44294c]
+* `bitcast` is now an instruction node [9a2e4f38b26e]
+* all cast operators have their own value kind now [5d611f5d3151]
+* `?` has its own value kind [ebf7dfa6c0bf]
+* Symbols no longer implicitly convert to string [21cdbe406687]
+* `extractvalue` and `insertvalue` are instructions [439c53efe6c8]
+* `getelementptr` is an instruction now.
+* `getelementref` is directly implemented via bitcast and getelementptr instructions. [614dd7d2fea1]
+* `insertelement`, `extractelement` and `shufflevector` are now instructions [df155240631e]
+* `alloca`, `malloc`, `free`, `load` and `store` are now instructions [5c5bd71b2ae2]
+* `assign` and `deref` are implemented with `store`/`load` instructions [bfc989ea2d7f]
+* `icmp` and `fcmp` are now instructions [9f2bd3c73523]
+* all arithmetic operations are split into unop, binop and triop instructions [6982a4d17604]
+* `move`, `view` and `dupe` are no longer instructions [a0c525d3ec61]
+* all image operations are now instructions
+* call instructions now only operate on function pointers [90b59ad7cb2d]
+* typechecker always uses computed instruction type [e4c21796664e]
+* removed template values for `repeat`, `break`, `raise` and `return` [78d321706868]
+* simplifications in typechecker [fe3fe7c94cff]
+* reduced all cast operations to use a single `cast` instruction type [e3aa46645de7]
+* added lifetime checking hook to ASTContext::append [a74ae7048992]
+* completely removed existing borrow checking routines and related types [0c0874b45774]
+* initial check-in table interface [f753af7aa1ee]
+* fixed gensyms producing hash collisions [36c23c6b3a09]
+* `OrderedMap` permits different key type [3f43422317e1]
+* scope objects now allow mapping arbitrary constants, not just symbols. to reflect this, all existing scope API functions now use values as keys
+* removed `sc_scope_set_symbol` and `sc_scope_del_symbol`
+* added `sc_scope_bind` and `sc_scope_unbind`
+* removed `'set-symbol`, `'set-symbols`, `'define-symbol` and `'define-internal-symbol` from `Scope` objects
+* added `'bind`, `'bind-symbols`, `'define` and `'define-internal` to `Scope` objects
+* fixed symbol constants not getting memoized
+* `sc_scope_next` and `sc_scope_next_deleted` iterate by index rather than key [b1fa0fdbcb20]
+* fixed small problem with `'define Scope` [dc2e28edd3a0]
+* ensure `ptrtoref` and `reftoptr` casts do not generate instructions [bd29af1f88c8]
+* added `sinh cosh tanh asinh acosh atanh` instruction support for SPIR-V backend [246dd3af635a]
+* implemented `atan2` builtin
+* LLVM: implemented all trigonometric functions from C standard library [d43792329fce]
+* GLSL: buffers support readonly, writeonly, coherent and restrict attributes [c37519b6d3b7]
+* implemented `atomicrmw` instruction for LLVM and SPIR-V backends [2c91137d7933]
+* SPIR-V: added support for calling intrinsics using `glsl.std.450.*` namespace [adab679d54b7]
+* GLSL: added `atomic*` functions
+* core: added static type predicate `signed?` [8580fec568a0]
+* GLSL: simplified atomic function declarations [6cff93ba0a0f]
+* SPIR-V: fixed GLSL namespace, it is now `GLSL.std.450.*` [55e9ecd92397]
+* implemented `cmpxchg` instruction for both LLVM and SPIR-V [0059ee2965a3]
+GLSL: implemented `atomicCompSwap` [bc0baa33a8b3]
+* GLSL: added `findLSB` [4936cb4ecb82]
+* SPIR-V: generate `OpSelectionMerge` instructions for condbr branches [6397c4e06c73]
+* added compute shader related global builtins [233191c63fb1]
+* added `__barrier` instruction to specify barriers in shaders
+* GLSL: added `barrier`, `memoryBarrier`, `groupMemoryBarrier`, `memoryBarrierImage`, `memoryBarrierBuffer` and `memoryBarrierShared` [4261febe179a]
+* GLSL: added `gl_PointSize`, `gl_ClipDistance` and `gl_InstanceID`
+* SPIR-V: fixed validation errors for switches [864b54286146]
+* SPIR-V: prevent creating types for ptrtoref/reftoptr casts, so we're not building structs for interface block definitions [7fef2535ede5]
+* GLSL: added image sampler formats [4983674d6da1]
+* GLSL: fixed image sampler format names [df95cd045be4]
+* make image samplers non-opaque, because SPIR-V can dereference them [db67f7374836]
+* GLSL: implemented ceil [c54c469866bb]
+* SPIR-V: fixed broken float not-equal compares [2b1c210bd53e]
+* GLSL: added pack/unpack intrinsics
+* GLM vectors and builtin vector type support shift operations [dfe523525377]
+* SPIR-V: always specify extended image formats when an image is defined [3d3406373416]
+* GLSL: added support for shared memory declarators [9552621979a7]
+* GLSL: added layout statements for geometry shaders and vertex/primitive terminators
+* SPIR-V: exporting `spirv.OpEndPrimitive` and `spirv.OpEmitVertex` as intrinsic [63cce58625f5]
+* SPIR-V: fixed a problem with intrinsic ops interfering with GLSL intrinsic [24588f474769]
+* glsl: added `gl_WorkGroupSize` [732bd007a708]
+* GLM: transpose and dot are now inlined [480074c39c0d]
+* SPIR-V: support for flat decorator
+* GLSL: xvars offer support for flat decorator [f8ccf7ad022d]
+* GLSL: added `fragment_depth` hinting, `dFdx`, `dFdy`, `fwidth` [2098aa672f9d]
+* removed all trailing `!` from builtin symbols (`set-execution-mode`, `discard`, etc.) [af2018e6eec8]
+* GLSL: added `smoothstep` [2ff3151f7575]
+* GLSL: added `fract` [042927b3b073]
+* SPIR-V: removed outdated line [bf6199d99d88]
+* added `argumentsof` to statically unpack the elements of an arguments type [69e6e4a64d00]
+* glm: vectors have default initializers [48f552fbfc6e]
+* LLVM: fix phi node merges where named structs and unnamed structs clash [c94c0328610e]
+* glsl: added `DispatchIndirectCommand` and `DrawArraysIndirectCommand` structs [31aff94c734a]
+* Added syntax for specifying CEnum storage (alternative to plain). [9d7c997f6bb1]
+* merging current tip with my patch [00d1b71ce074]
+* `test-compiler-error` had been taken off so the test for enums would fail. Fixing. [3cb581694633]
+* Made sure setting non type values as the storage type of the enum raises an error instead of being implied to be i32. [bb97c8f24800]
+* Fixed typo on compiler error test. [3691945525b0]
+* updated credits [05492a71c9b3]
+* core: fixed accidentally baking `package.path` into `require-from` [17386fe6cf99]
+* added exponentiation to operator interface, supported by integers and reals
+* `**` can now be used as prefix operator
+* `pow` is now an alias for `**` [9dd6e6c9b1b2]
+* fixed `**` becoming unavailable for float vectors [f70985cd3c2e]
+* `sc_global_new` no longer takes location and binding arguments
+* location and binding for globals is set via `sc_global_set_location` and `sc_global_set_binding`
+* globals accept SPIR-V descriptor set attribute via `sc_global_set_descriptor_set` [edc5b7f78780]
+* export math symbols from mingwex.a [fe64617885fa]
+* added scopes logo to repository [f33e9dc99471]
+* fixed: only array references can be cast to generators; avoid creating a local to override this rule [30f82c26488c]
+* tiny typo fix [abebce74b83d]
+* `cons` and `list` produce constant lists when all arguments are constant [97aecd322454]
+* unit tags defined in unique enums are no longer predefined globals but must be instantiated [2d48c26d568c]
+* removed stack protection as it wouldn't work anyway in an embedded or threaded context
+* split off environment init part of `sc_main` into `sc_init`. after calling `sc_init`, the entire scopes environment is ready to use. [8beb43b9412e]
+* use default terminal colors instead of custom VGA ANSI codes [67530e55094e]
+* fixed alignment and size mismatch for vector types; alignment and size must both be rounded to next highest power of 2 [88fe3f7d27a4]
+* `range` will cause generator to deref `from` on init [81fb26e7199a]
+* API: added `sc_packed_tuple_type`, allowing to construct 1-byte packed tuple types
+* added `'packed tuple` method as well as `tuple.packed-type` to enable static and dynamic construction of packed tuple types [3c0e24ee345a]
+* `struct` supports optional `packed` keyword after subtype qualifiers to indicate a packed tuple storage type
+* `packedtupleof` constructs a packed tuple [469da889c2c9]
+* added `spirv.OpSampledImage` to exported SPIR-V intrinsics [9100a5fc0014]
+* added `-->` expression piping sugar to itertools module [26a8d38551e8]
+* fixed issue #48: Returning Map from a function causes codegen backend failure [24f55582c3a4]
+* added `string.collector` to build simple string collector sinks [a908da961ab6]
+* added `'range` method for strings to iterate substrings [dc1476ec1a42]
+* itertools: added `join` to support joining two or more generators that return the same value type [f71474d90657]
+* typo fix [62e20f008235]
+* added `'lineage` method for scopes to iterate all inherited scopes [a35cbcf8a50a]
+* fixed issue #49: backend failure when storing maps into structs [92e37a2f13ab]
+* fixed `Map` raising the `MapError` factory instead of instantiating a value [0103fe033c48]
+* added new `do` block type for `switch` blocks, which allows to collect all fallthrough switches with `pass` exclusively, rather than having to ensure that the last statement uses `case`.
+* a `pass` block must not be followed by `case` blocks, but can only be followed by `pass`, `do` or `default` blocks.
+* a `do` block must follow one or multiple `pass` blocks. [0cb40a1ecbf2]
+* returning local references automatically dereferences the argument before return [91b164d0b3df]
+* implemented `'offsetof` method for types as well as static operator `offsetof` which, when passed composite type/value and integer index or symbol, returns the byte offset of the element or field. [7b545c2fbd7b]
+* updated codebase for clang/llvm 9.0.0 [72953df8fb2c]
+* added missing clang lib include to other platforms [8a5de16cb89a]
+* updated docs to reference clang 9.0 [fa5be198ea95]
+* added bitwise and arithmetic negation support for C enum values [da202b7fff80]
+* Fixed #19 and added ability to multiply non symmetric matrices as long as it makes sense mathematically. [e0507b57d877]
+* added more tests for asymetric matrices [c7f5c2115205]
+* enum: fixed union payload type having padding ignored by load/store which corrupts the payload. [af53b1829f9c]
+* union storage: fixed crash when none of the members could beat the alignment [1d845fa9dddb]
+* union storage: always use vector member to fix alignment [04e7b65bf19b]
+* improved C ABI compliance for float based union storage types [3961e5c4cee0]
+* fixed segfault when trying to exist non-existing struct fields [b01f37dade68]
+* improved error message for attempting to explicitly retrieve a missing symbol from a scope [d8a2dbc20664]
+* types and scopes no longer support dynamic key lookup for `getattr`, guaranteeing that `getattr` will always succeed at runtime [01fbb4174c8b]
+* accessing a non-existing tuple field gives alternative suggestions
+* `sc_type_field_index` throws an error when the field does not exist [b20b8f2f5f2f]
+* added support for accessing fields inside unnamed C structs and unions [6f5a3b468eb5]
+* added error when defining the same enum field multiple times [abea7a95eb9c]
+* enum: improved error message for duplicated field definition. [380ae5fbda0c]
+* enum: refactored duplicated field checking to a single function and added type name to error message to make it easier to find the mistake. [3b596fa45473]
+* Error on duplicate tag [6a70bce96e26]
+* API: `sc_scope_at`, `sc_scope_local_at` raise error if key is not a constant [907982548137]
+* `Scope` objects have been rewritten to become immutable mappings, which means that mutating a scope always creates a new one.
+* `'bind Scope` no longer operates in-place but returns a new `Scope` object. The same goes for `bind-symbols`.
+* `Scope` constructor only accepts optional `parent` argument. Reparentng can be done using `'reparent Scope` or `'unparent Scope`
+* added `indirect-let` form to allow setting hidden predefined symbols.
+* module docstrings can now be queried with `'module-docstring Scope`. [8d4bc7342fc8]
+* added `chain-typed-symbol-handler` which allows to register a compile type symbol handler. see test for usage example.
+* `and` and `or` always forward variadic arguments whole [e840143d6ff0]
+* added `ipair` to itertools allowing to pair arguments from generators [10a79f4bda62]
+* itertools: not passing a second argument to ipairs assumes `N == 2`
+* error traceback anchors now correctly point to defined functions where referenced [b169928754a7]
+* core: fixed modules being imported recursively not being cached properly [9783c84de7de]
+* speed-up scope lookup when a map is available
+* reparenting no longer reconstructs all entries [effac45da4fa]
+* console: fixed `using import` not importing anything [1b8a4fff908c]
+* updated test-dots.sc [00c07df12900]
+* added static type modifiers `uniqueof` and `viewof` to allow building function signatures that use unique types [684f8e47edf5]
+* fixed `mutable` applied to referenced incomplete typenames resulting in a read-protected reference [e04e6f6bb49c]
+* fixed: reference types are checked for flags and storage class compatibility
+* API: added `sc_type_compatible` to check compatible pointer and reference types [1ad765925f2f]
+* struct constructor stack traces use declaration anchors [428003e12260]
+* added `swap` to core which allows to safely exchange the contents of two references [1e764ea78eb6]
+* better error annotation for `va-map` and `getattr` on structs [7b851bdc7a01]
+* `sc_string_match` returns indices of found substring in addition to boolean indicating success [dd5b43c29fa6]
+* fixed regexp test [89abaf93ea72]
+* fixed `script-launch-args` function generated for main module [0c9032e918a0]
+* implemented issue #54: support for `typeof` qualifier in imported C declarations [3948a1b84061]
+* improved anchors for error messages
+* modules are compiled at optimization level O2 on import
+* `Array`: support for resizing arrays [ce823497be87]
+* removed -O2 flag for `exec-module` because it breaks tests [6b53d6a5cc6a]
+* fixed broken implementation of `@` for `vector` [fe468d5048ae]
+* integer types can be constructed with `integer` [ca0d31e09681]
+* platform ABI: support big integers [a48fe659a33c]
+* don't perform constant conversions when the target type is greater than 64 bits [f2b52b97e68b]
+* initial support for `f80` and `f128` floating point types [9b2ed63b367f]
+* added ordered comparisons for `CEnum` [2d66a1b4c617]
+* fixed `=` operator to not attempt to cast the left hand side [ef0a4b65d095]
+* improved iching example program [68255e07dcb5]
+* fixed size and alignment for large and non-pow2 integers [eceae981a846]
+* console: `read-eval-print-loop` takes a global scope as argument [815e62d1f610]
+* added `rrange` for reverse iteration of ranges [5eb96b92da95]
+* `compile-glsl` and `compile-spirv` use different target environments.
+* both SPIR-V and GL fragment shaders use `ExecutionModeOriginUpperLeft` [4c0638865cd5]
+* console: `read-eval-print-loop` hides logo by default [0ea2905ce6c7]
+* support specifying a custom history file for the REPL [c0dc4399fb20]
+* `enum` module exports `Option` constructor which allows to store null references [13612bed5091]
+* fixed `reftoptr` and `ptrtoref` stripping view qualifiers from viewed plain types
+* implemented `__drop` for enums [fe4350211702]
+* removed struct constructor behavior that auto-converted references to pointers if the target was a pointer [cf4e1b292daf]
+* plain union constructors now accept a keyed argument as constructor and return a new local [8ed509035175]
+* Added glsl builtins specific to the vulkan extension [9db1bb5a7680]
+* `enum`: `Option` can be implicitly converted to `bool` and passed to conditionals directly.
+* `enum`: `Option` allows safely popping the value to a function for safe deconstruction. [49e409aa2988]
+* `enum`: implemented `'swap` method for `Option` which allows to drop the previous value on a mutable before supplying the next one [7b8d1fc1e0e6]
+* initial support for big integer constants
+* added `sc_const_int_words_new` to create integer constants larger than 64 bits
+* `spice-quote` correctly quotes big integer constants [972af3794e9f]
+* analog to `fn` and `inline`, `fn...` and `inline...` no longer bind the function name locally, but make it available under `this-function` [883707f5185d]
+* added support for unpacking big integers [1241f27d71cd]
+* enum: changed `'swap Option` for a simple swap-out [c059d5da17ec]
+* removed `char` from core
+* `UTF-8`: added `char` operator that converts string constants to 32-bit unicode values [ac5bd84fb9c8]
+* fixed `console` for removal of `char` [8167456726e1]
+* glm: added `gvec2`, `gvec3` and `gvec4` supertypes [114a011fa541]
+* `sc_import_c` and `include` return C symbols sorted into individual subscopes `struct`, `union`, `enum`, `define`, `const`, `typedef`, `extern`
+* `include` no longer accepts code blocks in next line; instead, the macro discerns between include file and code block by presence of a newline character at the end
+* `include`: removed `import` modifier; instead, `include` always returns a constant scope object
+* `include`: removed `filter` modifier, as symbols can no longer be imported into the local scope [9aa3d537c621]
+* clang bridge: structs, unions and enums type names are prefixed the way they would be in C [da2053d66983]
+* `sc_import_c` allows specifying a scope with which to replace types
+* `include` supports new `using` option which allows to specify a scope to replace types [b72d2efd5f36]
+* performance improvement: when scope lookup requires more than 16 iterations, create a table at the nearest endpoint and try again [1342cae95f1f]
+* clang bridge: last commit broke alias defines, fixed [59c8b49300e6]
+* ABI: fixed `byval` attributes missing from parameters and call attributes [c062be65cfa1]
+* small typo fix [01dddabab477]
+* LLVM: redeclaration of an extern with the same name resolves to the same global, provided the backend type matches. If types don't match, an error is generated. The type mismatch can perhaps be fixed by using a const bitcast, but I'd have to see a real world example first to test this. [ff8e2a897a06]
+* fixed module docstring propagation across `run-stage`, `using` and scope inheritance
+* updated module documentation
+* updated reference documentation [939ebdc7231f]
+* console: fixed autocomplete scope not being updated [1fca6dd40734]
+* updated C++ Users section in docs, and added new paragraphs for operator overloading, standard library, memory handling and closures. [03ce2e27e1d9]
+* completed the remaining open chapters of the C++ user guide [4e6ccc2c5be0]
+* fixed a symbol missing from itertools
+* small fix in the docs
+* include: `using` allows passing any expandable expression, but expects it to resolve as a scope [ce189c5d606e]
+* `using` allows specifying a sugar time expression for `filter` [463a4a2b2a61]
+* C/C++ user guide: added `typeinit` mention to initializer lists section [94d247b82e8e]
+* clang bridge: if an enum is unnamed and a typedef name is available, use it for the enum's typename string [0c2ef10d7850]
+* added `GlobalString` value type and `sc_globalstring_new` API function
+* `imply` and `as` attempt to cast the qualified type if the stripped type doesn't work [1f178fef0546]
+* global strings do end in a null byte, but the array type's size now only covers the number of characters
+* two externs using the same symbol with a different signature can be used in the same module [a9979cd28895]
+* changed `sc_global_string_new` to take a buffer and size instead of a string object
+* added `sc_global_string_from_cstr` [ea13c504b049]
+* removed `string` class
+* added new `GlobalString` class which encapsulates global strings compiled with modules [197bb857f4a7]
+* fixed implementation for sc_default_styler [a5db293d3a10]
+* small improvement to print function [61936071ae3a]
+* fixed broken constructor of `Set` [8f589f2c5a0c]
+* fixed more issues with dropping owned values in `Map` [59f0229b4a12]
+* fixed ordering error when auto-dropping uniques [1f80454f7cb1]
+* `vectorof` constructs constant vector when all converted arguments are constant [3d13f52fe1d2]
+* `Map` and `Set` both evaluate to true if they're not empty [b21a7c2c8be3]
+* SPIR-V: add the right capabilities for some of the more popular builtins [51985606f440]
+* `enum`: enum type fields are no longer bound to constructors directly, but to their type descriptors, which provide the constructor. Usage doesn't change, but field attributes can now directly be queried. See test. [a00f3787fcda]
+* fixed builder generating code with a too high version number [15741a4b110d]
+* SPIRV: compiling spirv directly uses latest version number [c4fb8c54de11]
+* `try`/`except` has been expanded by a `try`/`else` form, where any kind of exception is caught and the raise type can be polymorphic (as it is being ignored) [a316b318b9ce]
+* added `for ... in`/`else` form to allow users to provide a fallback break value [69f4d53ff388]
+* fixed `repeat` in `fold ... for ... in` so that the loop can be skipped provided the current state [ce4eead16343]
+* `tuple` supports unordered comparisons [fbe0c1380d95]
+* expanded the error message for `try` when an `except` or `else` block is missing [5696d5daf330]
+* Option now handles pointers, is None if pointer is null. [21294446b4b3]
+* changed Option typecall to use same mechanism as __imply if there's a value, and wrote tests [fb2fabb4d669]
+* made Option constructor more terse [a5226dbd7659]
+* added unwrap method to option, refactored payload extracting from enum [e44428704bfe]
+* fixed UnwrapError to have (storageof Nothing) [6a76372919fd]
+* unwrap method for Option [6fb8107992c1]
+* support for accessors: getattr will defer a lookup when an attribute is a type of supertype `Accessor`, calling the type with the value and key to be looked up.
+* added `property` module and test, allowing to define python or java style properties for arbitrary types [190b1de9ad7c]
+* changed accessor protocol so that accessors are closures, like generators, and `getattr` forwards calls directly to the closure [b2755ef4f05a]
+* added unordered comparison support for arrays [14262613949f]
+* overloading: `fn...`/`inline...` will query an argument type's `__typematch` method if available and the argument doesn't match directly, enabling users to write types that perform pattern matching and conversion only [5ee6b9a44760]
+* overloading: if pattern matching type is a reference, the argument must also be of reference type [a77a936c1662]
+* unsized arrays can be used as pattern matcher for overloaded functions [3d9862901e40]
+* initial implementation for C socket API wrapper and test code [c18f4a1a085f]
+* removed temporary comments [9ac45d4fb454]
+* UTF-8: `encoder` forwards individual characters rather than chunks
+* UTF-8: updated test [eb2a0246d5b4]
+* `tupleof` and `arrayof` return constants when all arguments are constant [24f5edeac94f]
+* instantiating structs with `CStruct` supertype with all-constant initializers will produce a constant [2ebf65df42a1]
+* `fn...`: added support for inlining the first case into the declaration [7fe0a6abd575]
+* updated globalstrings to trunk state [7f328d79781d]
+* `Symbol` constructor returns constant if argument is also constant [35802be5d4bd]
+* `global` is initialized with pure value only once, allowing to use `global` to implement persistent variables in functions [203f0282a169]
+* expanded globals test a little [09cdfcd0f6d9]
+* globals declared without initializer will be constructed once if all type constructor arguments are pure [d3d3f3cdadf2]
+* LLVM: fix returning named structs that have been cast from tuples [f9d5c6138ed2]
+* moved `Option` type to its own module, `Option`
+* `Option`: `'unwrap` now merely asserts that the value is available; `try-unwrap` raises an `UnwrapError` [f2fc3086f841]
+* fixed messed up merge from default branch [1f3e0c23c3f8]
+* fixed another broken merge [dc1d62c1a99c]
+* implemented `RC`, a reference counted `Box` [1b9c66527b31]
+* changed `Option` typename [3c10770d5a95]
+* `Option`: perform correct coercion when implicitly converting values to options [a92b6ae9cc74]
+* LLVM: fixed passing named structs by argument causing code generation error [541e822dd3fb]
+* `Array`: added `'pop` method to allow removing last element [72dd75ff7237]
+* `Array`: implemented `'last` method to view the last element of an array [909b615c03df]
+* renamed `RC` module and type to `Rc` [5c3a3f8fc3e6]
+* always bind `repeat` and `break` builtins for `loop` bodies [13cda9c3a915]
+* `Rc`: changed storage type so that payload type can be incomplete at the time of declaration [4ead13458680]
+* `Rc`: added support for weak references using `Weak`; weak references can be upgraded to strong references using `Rc`, and `Rc` can be implicitly converted to weak references [d31f9cdf385b]
+* `Rc`: drop function hints returning void so it can be used recursively [dc2c7c95874b]
+* `Array`: added `'reverse` method, returning a generator that iterates the array in reverse [1696e97a1b04]
+* `Array`: added `remove` function to remove a value at a given index [a8c4e0eb859d]
+* `Rc`: fixed a condition where deleting a strong reference would delete a weak one which would take it upon itself to delete the refcounter storage as the strong reference had already set its refcount to zero [d183bb5c9070]
+* fixed mutarray test [b5dbf51ec383]
+* `Array`: added `'insert` method which allows to insert a value at a specific index [1e4a06557bee]
+* rc: added equality test [800945a5342a]
+* `Array`: support for passing extra parameters to `'sort` which are forwarded to the key function [6c0d07c3b6c8]
+* `Rc`: added singleton test [5514201b9c49]
+* merged default branch [22e6b7277aa4]
+* fixed `rrange` overshooting when `from` is zero and the counter is unsigned [04d97f1df4cb]
+* `alloca`, `malloc`, `alloca-array` and `malloc-array` propagate view qualifier to generated types
+* `Enum`, `Option`: fixed payload extraction not propagating view attributes correctly [3fbc15daa33c]
+* `Rc`: ensure `Rc.clone` properly dereferences source pointers when duping [87c87fcbd7e3]
+* `Rc`: fixed assignment error when assigning strong references directly [74118464ab51]
+* `Option`: renamed `'unwrap` to `'force-unwrap` and `'try-unwrap` to `'unwrap`
+* `Rc`: `'upgrade` no longer returns an option but raises an `UpgradeError`
+* `Rc`: `'force-upgrade` causes a runtime assertion when it fails [94b3cfa730c3]
+* `Rc`: `Weak` can be instantiated as an empty weak reference
+* `Rc`: `'clone` method (aliased through `Rc.clone`) for `Weak` can be used to duplicate weak references
+* `Rc`: added equality test for weak references [5231803703c2]
+* LLVM: fix wrong file being displayed in debugger by switching lexical block [ebf8ff0ee026]
+* `Rc`: fixed an issue where `'upgrade Weak` would omit a dereference [cdd618c6c32a]
+* win32: fixed linker error because of missing symbol [62b9e91cccaa]
+* small fix to `test_rc.sc` [c1721f510e7d]
+* fixed `testing/makemain.sc` [30583020c347]
+* implemented String class [7065ad65ee79]
+* implemented `String` type [6d92e54d4c3b]
+* fixed `test_all` [779df13a6702]
+* fixed compiler warning messages [27be6d52d7ef]
+* added `str` supertype and `sc_str_type` constructor [f7cdbbcf24f0]
+* type of global strings is now subtype of `str` [ebe78003d69e]
+* more work on tests [b97c36393687]
+* moved `-->` operator from itertools to `chaining` module
+* itertools: added `permutate-range` generator [dbd87b15f4ac]
+* implemented `==` for `Nothing` and `Enum` [b824fb9781d7]
+* `Enum`: small simplifications, improved test [bd9db49a2676]
+* removed getattr access error from traceback [e5988671a87c]
+* `Map`: singled out `Set` class into its own `Set` module [6360efa21342]
+* added hashing support for `Nothing`, `Rc` and `Enum` [38ad42cf817d]
+* `Map`, `Set`: added support for specifying custom hash function [545c53b5df36]
+* fixed `swap` accidentally moving arguments
+* `Set`: `insert` returns a reference to the inserted key
+* fixed `Set` operations for unique values [c32d5879c264]
+* smaller fix to `Set` [378c540e2414]
+* API: added `sc_anchor_new` [48e8e75079bd]
+* `enum`: only set special methods when there are no user defined versions [d98d3522ad44]
+* `enum`: added `'apply` method that allows to call an inline for all payload branches [7b89feb102f2]
+* `enum`: method `'apply` does not call function argument for default branch [70a858c1451f]
+* `Set`: fixed `'insert` returning the wrong index if a value was newly inserted [ee25fa596ddb]
+* fixed unsized `array` and `vector` types generating huge types [21ea62c3b423]
+* `enum`: fixed `apply` returning no values
+* `Map`: fix for inserting unique values [d59d4a47a73a]
+* `Map`: more fixes for unique value types [314852df2e0e]
+* fixed broken typematch for unsized arrays after recent fix
+* API: added `sc_type_is_unsized` function, allowing to query if a type is unsized, as element-count will now always return 0 for unsized types
+* added `'unsized?` method for `type`
+* added `unsized?` static operator to check for an unsized type at compile time [14806e5edfd3]
+* `property`: fixed certain implicit conversions failing [400e714131b4]
+* `from`: improved debug info
+* types can alter type attribute access using `__typeattr` [f677df768442]
+* added `methodsof` accessor binder that can be used in conjunction with `from`
+* updated `test_from` [12f622ed0743]
+* improved debug messages [5e909ca8bb4c]
+* improved debug messages [b2724dfa0e03]
+* methodsof uses methodcall rather than attempting to pull attributes directly [9374670b9fe7]
+* `Rc`: fixed returned refcounts to no longer be views
+* `Capture`: fixed captures not working when captured arguments are non-plain [4b8e07ff9abc]
+* added unpack support for properties [03f4de1f8099]
+* moved `dispatch` form from `enum` to core [21ced7098fec]
+* clang: fixed translation of unsized array types [7a5d3697eeaa]
+* `locals` no longer splits up scopes when a dynamic symbol is in the scope [9a5476946a3c]
+* improved error messages [be1a93cdfb66]
+* `property`: methodcall and `toptr`/`toref` operator support
+* static enum values implicitly convert to safe integer values
+* `Rc`: `none` can be converted to an empty weak reference [27ffe3f7d8ee]
+* prover supports registering a handler for type coercion, for which core provides a default handler
+* `switch` cases are coerced to the type of the switch argument
+* `if` uses the new mechanism to coerce conditional arguments to boolean type in favor of the `__tobool` method [f43f124656a6]
+* renamed `libc` namespace to `C` [8430933436d9]
+* `Enum`: allow comparing enums to field definitions [f543219644eb]
+* `icmp` and `fcmp` instructions no longer propagate view status to exit argument [39e5743d6b70]
+* `struct`: non-constant field initializers turn into autogenerated constructor calls [283bb360720b]
+* small change to struct code [12432843a515]
+* glm: support for using `0` and `1` literals in vector element accessors [ecb3ceda547c]
+* `enumerate` allows specifying a type for the enumerator [974a84124515]
+* `array` type constructor supports multi-dimensional definition [0f394de291f7]
+* fixed `bitcast` allowing casts between types of unequal size
+* fixed `bitcast` not allowing casts from vector to integer [61d3bc2ed380]
+* extended alignment test [9fdc358bd999]
+* new native `matrix` storage type to represent matrices in SPIR-V
+* `glm`: use native matrix storage type for `mat-type` instances [0c144b406ec3]
+* fixed missing support for matrix storage type in platform ABI [8f5e9d7f28e1]
+* small comment addition to clang test to demo how to output object files [726dcbe5cd10]
+* removed surprising behavior from tuple constructor [7eb0f3bae249]
+* pointers can be explicitly cast to intptr and back [e9301a71768d]
+* glm: if all vector construction arguments are constant, the vector will be constant [e303619374ab]
+* glm: matrix constructor now returns constants when all arguments are constant
+* `extractvalue`, `insertvalue`, `extractelement` and `insertelement` return constants when all arguments are constant [7205074644b3]
+* implemented `distance` in core [8c3b7d24bbcf]
+* implemented `mod` operator to perform euclidean division [de4ed1e0c150]
+* upgraded `mod` to perform floor division as well [ac49a36a693a]
+* fixed dot notation accidentally matching infix notation [e99ac8ce1ce7]
+* fixed inplace operators failing on properties [6da5b02a8e28]
+* added support for hashing integers more than 64-bit wide [5d8c4e0e52bd]
+* Re: [PATCH] added support for hashing integers more than 64-bit wide [832bacacb188]
+* fixed mismatched swizzle constants for vector sizes < 4 [3de9fe8684b9]
+* SPIR-V: fixed wrong decorations for matrix types in structs [cea8d9653b77]
+* SPIR-V: fixed `test_spirv_loop` and structured selection errors in validator [e2b11990aa7c]
+* SPIR-V: fixed unstructured branch validation error for `if/elseif/else` construct
+* retired `value-kind-if` node in favor of `value-kind-cond-template`
+* removed `sc_if_*` API functions
+* added `sc_cond_new` API function [eeadb6082f44]
+* `Capture`: fixed invalid implicit conversion of template not producing a cast error [390d9380c323]
+* `glsl`: locations, bindings and sets for uniforms, buffers and varying parameters can be of a type that implicitly casts to `i32` [f5c965515f4e]
+* `Rc`: call operator is forwarded correctly
+* `glsl`: initial work on separate sampler types [ce355331ca22]
+* small adjustments to test [2ae006e26c24]
+* added `sc_spirv_to_glsl` API function for debugging spirv shaders / spirv cross [6f867dd7d7d6]
+* `Set`: fixed discarding being broken when the element type is unique
+* `Set`: added `pop` function [da073d23ab09]
+* `repr` no longer attaches type signature to string when `__repr` is defined [9e99eda60a19]
+* types can now be constructed with `type` in addition to `typedef`, with the exact same syntax. analogously, `type+` has been added as a synonym to `typedef+` [daae3023f29b]
+* `tupleof` constructs a viewed tuple when some arguments are views
+* `Capture`: proper handling of all-unique and some-view capture arguments
+* `Capture`: ensure captured values are dropped when capture is dropped [73dd0e0c0b0c]
+* fixed borrowing test for a case that now works [4eb7943d34c8]
+* small cleanup [e2d63fbdac1d]
+* capture: made interior a function [98af3a1739ca]
+* core: implemented `copy` protocol; most basic plain types are copyable by default; types that implement `__copy` can be duplicated using the copy protocol.
+* `Rc`: retired `Weak.clone` and `Rc.clone` in favor of copy protocol [862ad025febb]
+* implemented `bitreverse`, `ctpop`, `ctlz` and `cttz` instructions for CPU and GPU [59c6d9fe1a6c]
+* renamed `ctpop` to `bitcount` and removed `ctlz` and `cttz`
+* added `findmsb` and `findlsb` which work analog to their GPU counterparts [6488874570c0]
+* LLVM: fixed result for `findlsb` when value is zero [230512bb1d9e]
+* added missing include [2b2d04f18414]
+fixed bug in >64-bit hash, added tests [41df7cf9a167]
+* implemented `typematch` syntax to allow constructing type matchers in overloaded function arguments [5d9bb751c2b6]
+* implemented new protocol for `in` infix operator, which allows to check for the presence of an element within a value of aggregate type
+* `tuple`, `Map` and `Set` support `in` operator [25888d6027bf]
+* fixed logo image link [8ed61c65a058]
+* `not` autowraps arguments in a list when mulitple arguments are passed [bad8806132f9]
+* `not` now allows specifying more than one argument, which will treat all arguments in a new expression [4656e5df784e]
+* removed defunct icon theme from vscode package [52f12b75f1dd]
+* `va@` supports selecting arguments by key rather than index [a2de646dd889]
+* added hashing support for tuples [ce93f1c3c991]
+* removed unexpected assertion [31dc00a82239]
+* REPL: locals defined in console scope are automatically converted to globals and remain mutable [913fe7719c61]
+* REPL: fixed problems when globalizing unique locals [27d1f25bb95a]
+* default copy operator now also dereferences the value [d4447cdd5a51]
+* ABI: fixed returning multiple values of reference type; this rarely triggers before we auto-dereference stack references. [14c0c4fbd1b8]
+* structs and arrays report the right size when elements are references [f19c88bc0508]
+* type reprs now largely reflect valid constructor calls so users know how to construct the type
+* `signed integer <width>` or `signed <integer-type>` can be used to construct / convert integer types
+* `_:` is a valid alias for `Arguments`
+* `raises` can be used as an infix operator [b0b66ba9cded]
+* added `<-:` operator for nicer function construction [70b847a649b8]
+* vscode: syntax fixes
+* added one more try test [ea390988632b]
+* added copy support for Error object [2ffd39e9a161]
+* updated LLVM/clang dependency to 10.0.0 [3187bff41ab4]
+* updated links in docs [4cd20735cb31]
+* added mingw polly dependency to docs [84bc7ba5e121]
+* win32: changed compiler version to `gnu++14`
+* win32: polly is not linked [217f6a99ad01]
+* make sure LLVM includedir is used on every platform [39ae7013220b]
+* fixed using `viewing` on plain values [6a37f4a6be82]
+* renamed `sc_prompt_*` API functions
+* removed `sc_set_autocomplete_scope`
+* prefixed all prompt relevant API functions with `sc_prompt_*`
+* added support for prompt autocompletion callback
+* console: use autocompletion callback to implement scope completion [ede14d36bccb]
+* REPL: console now autocompletes after dots if the left hand resolves to a valid scope or type [98cf845071fc]
+* REPL: completion suggestions are first sorted by length, then lexicographic [7fccfb5a02ee]
+* prover.cpp: loop merge conflict error now points to loop header as source. Previously the error message was anchored to the return type that precedes the conflicting one. This makes sense for functions where the return type is inferred by the return points, but not for loops where we always know the type (from the header). [da1f575431d7]
+* sc_value_unwrap: don't cause an assertion when the target type is opaque [effc79a613da]
+* parser: implemented support for user string prefixes [ba993c3ad05f]
+* changed string prefix symbols from `str:` to `prefix:` [85f246ab9c44]
+* for prefixed strings, only `"` can be escaped, all other characters are taken as-is. [db870a62221a]
+* Wording and formatting changes for Scopes' dataformat documentation. [08c7522abc6b]
+* wording changes in about [69e792e3850f]
+* wording changes and additional material in cpp_users [69e792e3850f]
+* wording changes, additional material, and fixes in tutorial [69e792e3850f]
+* aux file check-in [b994af707d35]
+* Add LLVM debugging for parameters and locals
+* Locals are not working yet, because they don't have names. [72decfd4ac22]
+* merged branch [bcda89cbb3fc]
+* small clean ups [646d9ae5bd23]
+* updated credits [2ad5ce50a21c]
+* initial check-in of `String` module [dca56f71b439]
+* quote: lose unique objects when quoted [45d2a01e8ac9]
+* fixed `update_docs` script and regenerated reference [9f43f844af69]
+* added `find-module-path` to core [43b91c76cef7]
+* allow explicit casting of pointers to other types, preserving storage class [01d04a93ddfb]
+* prepare docs for MkDocs conversion [02cdcabe9b7e]
+* initial conversion of docs from restructured text to markdown [093a29cdd014]
+* convert Array.sc to unix format (line endings) [ea7b7d7be5b5]
+* fix doc generation for functions decorated with @@ spice-quote [dfd277ec3bd6]
+* fix syntax highlighting
+* disable highlightjs in favor of codehilite / pygments
+* add pygments css
+* convert scopeslexer into pygments pip-compatible module
+* update scopeslexer to python3 [8a1adb612d90]