- Allow the http module to be used without a tcp listener (c45353d2)
- Format seq expressions without seq (5c0cec2d)
- Compile block expressions as monadic sequences (bce59737, closes #884)
- std:
- Recognize raw string literals without any
#
(4d66fbb3, closes #885) - Prevent zero-argument functions from being created in Rust (e91ea06d, closes #873)
- Give tuple fields a span (2a1c2c71)
- xor_shift_new inconsistent description (591b64b3)
- Disable inlining until it can be made sound (97b63c42)
- Inline functions that are re-exports (bcf87838)
- opt:
- Keep type field arguments on the same line as the name (b1e40d37)
- std:
- vm:
- Update salsa (a60a444f)
- Report multiple kindcheck errors in the same type (00eb1167)
- Record record fields as symbols (b3b65c75)
- Add function arguments to all symbol queries (1f063f9e)
- Recover on most tokenization errors (18692100)
- completion:
- parser: Recover on unterminated string literals (b0422366)
- std:
- Gracefully error on concurrently loaded cyclic modules (e6f1aa95)
- Make tokio an optional dependency (c3450a99, closes #843)
- Update to codespan_reporting 0.9 (a6f214ce)
- Handle errors when pushing a BTreeMap (bd8ad34f, closes #847)
- Convert rust tuples such that they can be used polymorphically (6c4d5731, closes #848)
- Allow find_type etc to work without calling global (6e469b9a)
- Make the query code compatible with the language server (14e8f1de)
- Add Default for Root/OwnedExpr (fedb7322)
- Allow bitoperations to be deserialized (ed36ed9c)
- Strategically inline comment productions (78e733e7)
- Shrink the metadata stored in the AST (842c1080)
- Use T::Generics in AliasData (4cb575fa)
- Shrink the symbol type in the parser (a8fc8f39)
- Rework how hanging lambda/parens are handled (732f09f3)
- Accept filenames that start with
.
/..
as modules (01e450bb) - Don't deadlock when collecting and cloning a thread concurrently (5886f59f)
- check: Reject programs which misspecifies the number of patterns (248387d9, closes #807)
- doc: Correct the style.css path (4e629ab5)
- format: Improve tuple multiline formatting (5122fe38)
- Add AstClone to clone arena allocated ASTs (3ee7bd28)
- Compile modules in parallel using salsa-async (e0ab1811)
- Compile modules in parallel (57fca165)
- Add Function::call_any (2c06104f)
- Export Array from the prelude (16eb3456)
- Allow serde_json::Value to be marshalled to std.json.Value (aabdec86)
- check:
- Avoid some unnecessary allocations (089bae4c)
- Shrink the size of Pattern (75fb8840)
- Avoid hashing symbols twice (0cfb52c8)
- Allocate all temporaries into the same Vec (af945c4a)
- compiler: Hoist a remove_alias call out from match alternatives (c13172e2)
- Don't deadlock when collecting and cloning a thread concurrently (d7368950)
- doc: Correct the style.css path (2cee5cff)
- Only do one hash lookup when creating a Symbol (a709c712)
- Shrink Type's size to 48 bytes (from 64) (178180f8)
- Avoid RefCell in Fixed* structurs (-1%) (de32dbd6)
- Avoid recursion in implicits.rs (89eb836a)
- Only mark types with unbound generics as HAS_GENERICS (3d835a8a)
- Avoid computing the plain name in name_eq (-3%) (a7ac9f80)
- check:
- Use RefCell::get_mut when possible (12441438)
- Remove redundant operations in union (f3d4203a)
- No need to lookup the type again before querying the level (5e4efe37)
- Remove some branches in the occurs check¨ (03e7c3b4)
- Only initialize the variable generator when it is necessary (-3%) (793b6580)
- Only do one lookup/insertion on the implicit definition map (0ea13ff1)
- Narrow down the implicit parititioning further (-10%) (a9c965b4)
- Avoid looking through metadata when checking for an implicit type (4a3662e9)
- Only add implicit fields if the binding is implicit (da861eba, breaks #)
- optimize: Allocate core syntax directly into arenas (723ec4d6)
- parser:
- vm:
- Add function inlining (5093137a)
- Eliminate redundant match expressions (945fb83d)
- Implement inter-module dead code elimination (ab1b1b80)
- Avoid tracing global values unless we are in the root gc (-7%) (48a5313e)
- Avoid the bounds check when fetching instructions (c2778e7f)
- Faster updates to the stack frame (2b94a3af)
- Cache the frame offset for the stack (-20%) (0469cb2e)
- Copy instead of clone unrooted gc values (a0396f40)
- Replace Compiler with the ThreadExt trait (c16132eb, breaks #)
- check: Only add implicit fields if the binding is implicit (da861eba, breaks #)
- Don't leak implicit bindings into adjacent scopes (5681ffc5, closes #783)
- ignore formatting in std.test due to a bug (bdccee6f)
- rerefix formatting (31166161)
- refix formatting (fcb7f0bb)
- fix formatting and apply naming suggesions (6bb0d87c)
- Make the behaviour consistent for
Show Char
(0ff89870) - Avoid infinite loops/extremely slow optimization (dc7ec72a)
- Expand macros inside macros (5a294330)
- Invalidate text properly so rexpect tests work (92e45081)
- Don't depend on ansi_term in windows to make windows 7 work (58e2a8b9, closes #777)
- Add tests and fix the regression with clone_userdata (df078725)
- Ensure that threads are dropped when using child threads (b9efb513)
- check: Handle aliases better in
do
(770e52ea, closes #766) - repl: make the REPL respect --no-std (e7974706)
- std: export missing assertions in std.test (41f4fc52)
- vm:
- Use implicit Monoids in std.foldable (295b8c3d)
- Add a mutable string type to the ST monad (9ec946b4)
- Allow attributes to be specified on fields inside types (fb35db51)
- Provide std.effect.io as a mirror of std.io (66e49b37)
- Replace Compiler with the ThreadExt trait (c16132eb, breaks #)
- Use salsa for incremental compilation (7bc82532)
- Add history hints and bracket highlight to the REPL (10ef8cdf)
- Use line/column numbers in lambda names (201fdfb9)
- codegen: Map Rust's struct enums to records in Gluon. (afb682e5)
- repl: add --no-std option to gluon.exe (f2c1819f)
- std:
- vm: Make macro errors implement PartialEq, Eq, Hash and Clone (039825ab)
- Remove Userdata and Trace impls for RwLock and Mutex (e90f02b5)
- Add missing negate function from the prelude (0091f475)
- Refer to registered types by their full name (a2daace6, breaks #)
- Handle newtypes with a public field (d1fef968, closes #713)
- Don't ICE on unapplied, aliased constructors (2a44a0db)
- check:
- codegen: Return exactly the same type on VmType derive on enum (375d3e9a)
- compiler: Don't panic when matching a tuple against an alias (777bd310, closes #749)
- std:
- vm:
- Use NonNull for garbage collected pointers (9c66eded)
- Don't recurse into already visited records to find implicits (b50061f5)
- Avoid recursing into non-implicit types (c35b29e6)
- Use SmallVec in Partition (d8c549bf)
- Use a scoped collections over a persistent in implicit resolution (d13097e2)
- Memoize implicit attribute lookups (-3%) (254af75e)
- Speedup Symbol::module (9566a377)
- Avoid creating function types unnecessarily (170f4673)
- compiler:
- Add gc::Mutex (d6e12460)
- Automatically unroot values stored in
Gc
allocated values (6ebc398f, closes #746) - Add derive for Traverseable (844418df)
- Allow mutable references to be passed to gluon (602220b5)
- Add std.env (b561c8d6)
- Implement woobly type propagation (a0b84525)
- codegen: Add the newtype attribute (40854638)
- completion:
- doc: Link to the github source (da75875b)
- vm: Allow references to be passed through (3a92b176)
- doc: Don't display the full path to types in the documentation (a669faaa)
- Ignore mdbook for osx builds (7755967a)
- check: The alias reduction stack must be cleared between unifying function arguments (170072a4)
- doc:
- Don't build release artifacts with full debug info (fe935835)
- check: Subsume implicit functions with forall correctly (6de5c256)
- Re-use the value buffers used in fixed structures (40ca7bfd)
- Avoid recursing when zonking a type without variables (4a482c76)
- Avoid recursing in gather_foralls (6a38f437)
- Optimized definition_name for the non-
:
case (1713a442) - Avoid recursing more in occurs check (c0acb066)
- Use VecMap for type variable -> type lookup (e5f086c9)
- Avoid some clones when adding implicit bindings (86b2c9a6)
- Use HashTrie over RedBlackTree (878f311a)
- Avoid allocating new ArcKind in Type::kind (2911d7ef)
- Properly rename type projections (fb6f3e14)
- Don't allocate individual boxes for values in Fixed{Map,Vec} (b2532a17)
- Speedup global metadata lookup (2c0477c7)
- Intern alias groups in translation (e20a1dba)
- Avoid some recursion when unpacking aliases with
AliasRef::typ
(64edfb05) - Avoid recomputing generalization for the same type (0732ce1a)
- Compare and hash types by the minimum necessary (75174cdf)
- Avoid doing two hash lookups in interning (e3a3556c)
- base: Remove an indirection in aliases (8327a035)
- check:
- Re-use the allocations for variables (d569cdc2)
- Cuts the max memory use roughly in half on the lisp benchmark (5b91b6d3)
- Avoid allocations for the field duplication check (18abf71e)
- Partition implicit lookup more (e80f683d)
- Don't look in the global context for non-globals (45bc2ad6)
- Optmize occurs check (2ce4ec07)
- kindcheck:
- metadata: Use Arc to do shallow clones of Metadata (-4%) (4faf41b0)
- parser:
- translate: Fix N^2 behavior in translation due to type replacements. (14fc70fb)
- Honor the compiler settings through all import!'s (4da5b5f9)
- check: Take the parameters of record type fields into account when inserting forall (b390db10)
- doc: Don't display an empty module section (39478e07)
- kindcheck: Force scoped type variables to have the same type in each scope (cadbc29c)
- rename: Don't try to rename symbols if they are only defined in an earlier compilation (56c115ed)
- std.http: Don't let one slow TLS connection block the server (68cc1286)
- Use &mut to get better LLVM optimization (-2%) (7bd988e5)
- Take the type directly from the pattern during record pattern compile (5fc9b2e8)
- parser:
- vm:
- vm/translate:
- Always do a gluon panic on arithemtic overflow (82838a96)
- std.http: Don't return NotReady if the http stream is broken (a93ed235)
- Implement extensible effects (40185f22)
- Recover from more parser errors and errors in imports (693b560a)
- Improve error recovery in let and do (ed5670c3)
- Make std.json.de.deserialize simpler to use (0a6b2517, breaks #)
- Add seq expressions (f452c2e3)
- Display submodules in module documentation (fdab790f)
- Add --open to gluon doc (89a93c59)
- Don't have format depend on the main crate (55005236)
- Add std.effect.alt (b9d65fb1)
- Allow the prompt and color to be set from the REPL (3aa8f7d8)
- Let row polymorphic record types be parsed (fb41cde3)
- Use i64 as the integer type in the vm (7ed0c1ef)
- Add feature to switch debug status inside repl (b48d180c)
- Add general purpose debugging status (92797784)
- check:
- std:
- Move
when
to std.applicative (2fd47247) - Add the Reader effect (14322f7e)
- Add the State effect (092a0d05)
- Add open_file_with and create_file to std.io (5b2a031f)
- Add std.io.throw (ef756280)
- Add Read File and Write File instances (1b86ae44, breaks #)
- Add std.array.is_empty (8a65bc0f)
- Add std.io.write (571e827c)
- Add std.array.slice (d5f8e190)
- Add std.io.read (689a42cc)
- Add std.disposable (066655d1)
- Expose functions for overflowing/saturating arithmetic in std.int and std.byte (ebfb68a0)
- Move
- Don't have generalize_type be N^2 (16ba38a2)
- Remove redundant HashMap (7a07da19)
- doc: Parallelize the documentation output (f3b24712)
- Sort the modules in the documentation (1193d729)
- Rewrite higher ranked type inference to support ST (b52a1471)
- Display the alias in type errors in more cases (61a9a6fe)
- Consistently put
then
on the same line asif
(6d00a89c, closes #495) - Handle implicit forall insertion better (27be87ef)
- Handle exhaustive matching on forall wrapper variants (8789f6a3)
- Handle forall before variant constructors (8b2fcbed)
- Handle forall before variant constructors (7e472abd)
- Fix get_debug_level method to return cloned value instead of using lock (f1c40257)
- Use fmt::Display trait to obtain to_string method (cdc13ce4)
- Prevent printing out the contents of functions to the repl when debug status is not set (3824695a)
- check:
- Abort implicit checking immediately on infinite loops (b4e859c5)
- Multiple fixes with higher ranked types (67a502f7, closes #603)
- Distionguish forall in the top of aliases (69b0753b)
- Avoid instantiating higher ranked types in function arguments (2750d242)
- Distionguish forall in the top of aliases (aee2389c)
- Avoid instantiating higher ranked types in function arguments (f4fc5451)
- std:
- vm: Forward all functions in the VmType impl of RuntimeResult (9d6c7f45)
- Make std.json.de.deserialize simpler to use (0a6b2517, breaks #)
- std: Add Read File and Write File instances (1b86ae44, breaks #)
- codegen: Fix Type::variant call for VmType derive (48e1e11b)
- Allow headers to be part of the response (69dba621)
- Allow std.http to use https (fb30fda2)
- vm: Add thread.join (514fd3b5)
- Ensure all futures on the stack gets polled (d5862e14)
- Don't generate warnings for VmType and Userdata derives (5979c967)
- Allow implicit resolution if the same binding is included twice (e62a0523)
- Support non-static type parameters in VMType derive (bdc7ecaf)
- vm: Allow module loaders to contain state (bee61dd8, closes #634)
- Use the field order of the base record in record updates (b60c3e12, closes #509)
- Don't error on Serialize/Deserialize derives because of missing imports (a598fe23)
- check: Correct the order of expected and actual hints (beb30ae4, closes #627)
- vm: Don't remove parent frames in when calling into the vm (4a4fd3b6)
- Avoid allocating Strings in JSON [de]serialization (694dd14f)
- recursion: No need to keep state between top level bindings (208d8b74)
- Handle multiple doc comments and attributes between recursive let bindings (1767019c)
- Break function types with implicit arguments correctly (2f537e66)
- Resolve aliases that are hidden behind type variables (b61ea5e9)
- Resolve types through function aliases (be5374ef)
- check:
- Always inserted implicit arguments to implicit_args (f7ffc701, closes #601)
- Plug soundness holes with higher ranked types (731a9ecd)
- Don't return non-skolemized types from lambda (b0f283f2)
- Non-polymorphic records which are a prefix of another do not unify (cc85aae2)
- Don't panic on partially applied aliases (cc1e613e)
- doc:
- format: Keep the brackets around implicit arguments on the same line (03a1d9f6)
- repl: Extract record fields using name_eq instead of Symbol::eq (160c1c9c)
- std: Don't panic if an error is found compiling a std module (b02fa812)
- vm:
- Handle out of order drops with RootedValue (2fdc16b6)
- Restore the vm to a valid state after error has occured (d4f4ec5e)
- Set the field names of record! created records (8e58159e)
- Allow spawned actions to be forced multiple times (8b27d649)
- Correctly assign record field names derive(Pushable) (4a36d825, closes #591)
- Allow Pushable to to call back into the vm (8d100dd2, breaks #)
- Migrate tokio_core uses to tokio (18aa1f0f, closes #462, breaks #)
- parser: Define recursive bindings with
rec
(552c8f21, breaks #) - vm:
- Hint towards rec let if old 'and' bindings are used (a879194c)
- Print a hint/warning towards necessary feature gates when importing modules (9b96e511)
- Prevent type errors from creating cascading errors (7976bcd5)
- Bound derive(Getable) by 'value byte default (597b6963)
- Add derive(Serialize) (31799a94)
- Treat Pushable/Getable derives on newtypes as their inner type (62ad61d9)
- Allow OpaqueValue to be converted into its inner value (1147ab59)
- Add JSON serialization (b028ab2d)
- Support the crate_name attribute in getable (81ba45f5)
- Allow Pushable to to call back into the vm (8d100dd2, breaks #)
- Migrate tokio_core uses to tokio (18aa1f0f, closes #462, breaks #)
- Implement Getable for Vec (727e279b)
- Allow displaying the post-macro expansion AST (53f5cbf9)
- Add derive(Show) (d8689a73)
- Add derive(Eq) (c6da284d)
- check: Let non-function values be used recursively in some contexts (c2027add)
- codegen: Allow structs to generate record types using derive(VmType) (7a9fb16c)
- doc:
- parser:
- vm:
- Reject programs which use lowercase letters for types (bd54a83f)
- Display type fields with the parameters on the left side of = (ef6fc9bc)
- Handle type projection in kind check (3b78e370)
- Print the correct source on errors in the repl (159eaf99, closes #568)
- check: Don't shadow more general variant constructors (182c3960, closes #548)
- completion: Avoid panicking on env_type_of calls (c63cf2fb)
- format:
- repl:
- Remove Substitution::set_type (4c751ab6)
- Avoid running skolemize and instantiate when there is no variables (1a09a745)
- Don't trim anything when just derefing symbols (~12%) (703e0529)
- Avoid cloning the name inside Symbols unnecessarily (c1c061a0)
- Avoid allocating a new Arc for each type hole during parsing (8ecdccf1)
- check: Partition the implicit bindings to reduce the search space (c26c12f3)
- parser:
- Ensure that missing identifier gets reported despite the infix reparser errors on it (390b2a2c)
- Emit the correct type Deserialize generated array types (112fe346, closes #542)
- Emit a span inside the actual source for eof parse errors (3d598fbe)
- Resolve aliases properly in call expressions (b6ac8b65)
- Ignore symbols outside of the current source for all_symbols (b8a408a1)
- Get the http example working again (d151ab10)
- Print a newline between each unification error (2241c296)
- Don't allow string references to be returned from run_expr (b133bf08)
- Don't lose error messages from sub-modules (5e1bbbef)
- Take implicits into account in type queries on infix expressions (8651be33)
- Insert implicit arguments when none one has not been specified (c9a42268)
- Indent type signatures that are on multiple lines (27eea994)
- Only report errors from imported modules once (6f3bbd8f)
- Provide proper line and source information for macro errors (7e924c2c)
- Don't panic if let bindings has more arguments than declared type (15bf3072)
- check:
- Put variants into scope even behind aliases (2d1ba6cb)
- Propagate the expected type through array expressions (9f0f6571)
- Don't guess at what type a record is (a4ae10f0, closes #510)
- Make the pattern's type the expected type (8b075f6f)
- Propagate type fields even if the type was undefined (f79f1a7e)
- Point to the exact field that did not exist in type patterns (88865cd4)
- Replace the type hole with the actual type during subsumption (f2ae746e)
- Don't generalize tail expressions before replacing implicits.rs (7d7bede2)
- Don't overwrite implicit variables in renaming (b8de950f)
- Don't bail out if record fields are undefined (e0863b93)
- compiler: Merge pattern bindings which appear in multiple alternatives (f8657776)
- completion:
- format:
- metadata: Propagate metadata from function arguments (025c73c6)
- rename: Rename implicit imports (6a3409d1)
- std:
- vm:
- Provide metadata for type patterns (67fcb19e)
- Display the kind of a type when hovered over (f407d976)
- Break apart the prelude into separate modules (966750b2, breaks #)
- Allow primitive types to be exported with record! (6700dc29)
- Detect and format tuple types as (Int, String, abc) (8697e348)
- Use #[IDENTIFIER(..)] as the attribute syntax (0300590d, closes #515, breaks #)
- Improve the error message for unresolved implicits (2bda18b3)
- Return an error when infix operators are used without fixity (89c7e4a8)
- Obey the new @infix attribute for operator fixity (1a143b80)
- Update to lalrpop 0.15 (4f59c4c2)
- Add conversion functions betwen ints and floats (187ac79f)
- Treat a pattern matched type as if it exists even on type errors (42059db7)
- Display sibling modules on the left side of module documentation (c18c6729)
- Use bootstrap to get some prettier documentation (bbfee5d0)
- Make gluon_doc into an executable (dd046531)
- Generate an index.html file with links to all documented modules (788d2c7e)
- Emit html from the documentation generator (30565c1e)
- Allow configuring the import search paths when creating a vm (87e92198)
- Allow explicit bindings of implicit arguments (79869285)
- Replace make_ functions with implicits (2a51ece7)
- Add implicit arguments (9eb8aafd)
- Filter out unrelated fields in some type errors (63d2ab43)
- check:
- completion:
- doc: Add documentation generation (1d199936)
- repl: Displayed colored errors in the repl (4d053f32)
- std:
- vm:
- Break apart the prelude into separate modules (966750b2, breaks #)
- Use #[IDENTIFIER(..)] as the attribute syntax (0300590d, closes #515, breaks #)
- std: Re-export all std.map functions as implicit functions (64bb7899, breaks #)
- Deploy builds using trust and cross (372a278f)
- Export expr pretty printing function to format (646b7c66)
- Make dependencies unavailable in wasm optional (6e666f73)
- completion:
- parser: Introduce literal pattern for match expressions (6f4dd7f6)
- Actually return the stack size from the stack_size function (87e4c95e)
- c-api: Mark C functions as no_mangle (8eee8619)
- check:
- vm:
- Don't crash in renaming on partial patterns (fdea1724)
- Don't format Value::String as GcStr() (c8c8ba99)
- Set the correct spans for renamed identifiers (545f8911)
- Lock the garbage collector before the interner to prevent dead locks (794cdce1)
- Rename variables in record base expressions (d4270a84)
- Handle fields being omitted when removing intermediate records (bfac0823)
- Correctly use traverse_with_key to get access to the keys (abff3b90)
- base:
- check:
- Don't panic on nested patterns on parameterized types (7e6ef364)
- Remove spurious println! (95177345)
- Don't panic if a type is undefined in a variant (e476b1e0)
- Typecheck a module even if macro expansion fails (5f78fec0)
- Don't consider global variables for overload resolution (aeade634)
- generalize_type must not return unified variables ... (437c5224)
- completion:
- doc: Rearranged sections to make it easier for a first time user to get started and added a section on testing (f4ed3134)
- format:
- import: Prevent multiple threads from compiling the same module (cb522854)
- parser:
- repl:
- Avoid overflowing the stack when printing values (cd1505ad)
- Don't exit the repl if compilation errors occur in load (3cf289f5)
- Print out Char as the "character" instead of code point integer in the repl (6612ceb2, closes #395)
- Run io expression when running files from the command line (64ed556e, closes #365)
- vm:
- Run IO expressions with io.run_expr (e308f1f2)
- Don't rely on frame_levels to clear frames after errors (3a3205df)
- Allow async functions to run within the io primitives (e6f611a0)
- Indent the pretty printing of Value (5d646515)
- Fix deadlock caused by inconsistent lock ordering (8024d57d)
- Deep clone partial applications properly (d7877cac)
- Lock all child gc's and child-threads when collecting (5642b97a)
- Handle polymorphic records created in parent threads (8570ace5)
- Don't let rustc think the Array type can't exist (a8db3d5d)
- child_threads must be traversed for all threads (eac571b9)
- Tuple indices start at 0, not 6 (655e4526)
- Don't deadlock when returning the result of
resume
(99c8d148)
- Accept @ patterns in the repl (1b6838ec)
- Add more character parsers to parser.glu (a74726b9)
- Wrap all macro errors with a span (20c8339a)
- Display kinds when completing types (1dd43c14)
- Teach import to accept a path as argument (ed3d0b19)
- Let the run_script functions execute IO actions (8373f8f5, breaks #)
- Improve the error message of cyclic dependencies (db540fd7)
- base:
- check:
- completion:
- Provide completion for primitive modules (ce7100bf)
- Provide completion for the import! macro (6e791ecb)
- Provide completion when writing fields before another field (e89f8df7)
- Don't suggest fields already written in a pattern (bb371410)
- Suggest type fields inside record patterns (a37222a4)
- Suggest what fields are available in record patterns (6e1dca2a)
- Provide completion on do expressions (e45de697)
- Provide completion for type variables (3b164a45)
- Provide auto completion for types in let bindings (e7a0c5c8)
- Provide auto completion in type definitions (79688de8)
- format: Format do expressions (71157dbd)
- parser:
- repl:
- std.list: Add filter and sort (d67fc29e)
- std.parser:
- vm:
- Add discriminant_value primitive (3d65a559)
- Return type and value separately from run_expr (6aa5c471)
- Add a basic wrapper around the rand crate (7210d8dd)
- Let the record macros have non-rust identifiers for field names (55ccbe1c)
- Let primitive modules be loaded via import! (91bb7d3f)
- Re-export map.empty (577cb08b)
- Format all files (recusively) when a directory is given (6ce97c6f)
- Add a trailing comman on records that take multiple lines (8c3aa951)
- Pretty print record expressions with the
..
operator (aeb1d75b) - Add the '..' operator to distribute the fields of a record (d6b03cc9)
- Error on undefined variables in type bindings (ed442110)
- Return and error on duplicate fields defined in another module (0973b264)
- format/tests/pretty_print.rs (de858796)
- Replace 'env!("OUT_DIR")' with 'env::var("OUT_DIR").unwrap()' (366c6306)
- Preserve comments inside types (4a216da8)
- Mark lines of recursive function definitions (4d5a4b67)
- Don't crash when querying types on unit expressions (1c36bbbd)
- Report completions in let patterns (c6172991)
- Visit
Expr::Tuple { typ }
(640154b2) - Deserilize partial applications properly (0efed42b)
- Preserve parentheses in nested patterns (d7e238da)
- Correctly visit all core expressions when walking the tree (0ad8ce00)
- Preserve newlines between record fields properly (8f169ad3)
- Don't lose parts of literals when formatting (7b538496)
- check: Indent types in error messages correctly (6ff9a217)
- completion:
- Complete type constructors which are implicitly imported (d336ad37)
- format:
- repl: Evaluate IO expressions automatically in the repl (d9e6e952, closes #334)
- resolve: Leave aliases over opque types alone (3ac0fd61)
- Add impls of VmType, Pushable, Getable for all integer types (0a53bd52)
- Allow gluon types to be generated from rust types (35d9b804)
- Provide a way to get all* symbols of a module (d6df46fd)
- Add find_all_symbols (0602f8d6)
- Allow doc comments on fields in types (3e9ce940)
- Vastly improve when comments are kept during formatting (91522578)
- Display type information about function arguments (fe2ec28d)
- Fallback to returning information about the enclosing expression (3a8e4c0b)
- Give more control over what data is returned for completions (7d0bc359)
- Constant fold binary expressions (10b77ac3)
- Print the commit hash when passing --version to the gluon executable (3a1e5969)
- Rewrite the parser to be Result based instead of continuation based (488b6bdf)
- Add bytecode serialization and loading (f5d6c752)
- Make serde an optional dependency (a17c0c75)
- base: Allow the width to be adjusted before displaying types (2d1d3867)
- parser:
- vm:
- vm: Avoid generating unnecessary catch-alls (ebcdba96)
Highlights for 0.5 include code formatting of gluon code and automatic marshalling between Rust
and Gluon through serde. Formatting can be done either via the gluon fmt
sub-command or with
directly in Visual Studio Code with the language-server plugin.
Type errors should now be formatted much better and have more precise types.
- Separate all errors with a newline (86f159fd)
- check:
- parser: Give correct location information for unindentation errors (30541c1e)
- pretty: Always format empty records as unit types (03f07f16)
- vm:
- Add a fmt sub-command to the gluon executable (b9c6ea6c)
- Bump version of pretty (29808fce)
- base:
- check: Auto complete pattern matches (712dc412)
- parser:
- vm:
Version 0.4.0 is a primarily a bug fix release with only a single significant feature as the upcoming features are all still WIP.
- Name the the parser's tokens fit better in error messages (33f733c8)
- Use the async branch of hyper in the http example (46f1dc39)
- http: Add multiple routes for the http server example (e93109d0)
- repl: Allow binding variables in the repl for later use (4f0dcf99)
- Display what tokens are expected when the parser fails (6925c7b5, closes #270)
- Update the http server example to conform to a newer hyper version (c841e4f3)
- check:
- http: Move the handler creation of the http server to a file (248474e6)
- Reuse an existing Kind::Type instance when creating a type variable (81befe0c)
- Add a kind cache as well to mirror the type cache (f3c9efd2)
- Reuse the Arc pointers for builtin types (ff3ab278)
Version 0.3.0 improves the experience of writing gluon by a significant amount thanks to a few different improvements. The main reason for this is the rewrite of gluon's parser to use LALRPOP which just started with the intent of making the parser easier to maintain but with error recovery added to LALRPOP the parser is now able to typecheck broken code which is used to drive code completion.
Another big addition to the usability of gluon is that an experimental debugger has been added to the visual code plugin! This initial implementation provides breakpoints, pausing and variable inspection.
Lastly gluon has gotten support for asynchronous functions through tokio! It is now possible to write
Rust functions which return a Future
and gluon will automatically suspend the running gluon program
and return a new future which drives the program until completion. As an example of this a http server
built on hyper is currently in the PR queue just waiting for a tokio based release of hyper.
- Ensure that the gluon library can be built without any features (347adea5)
- Print closures as
name: value
using debug information (880e6006) - Allow lambdas to appear on the right side of an infix expression (1f587349)
- Avoid rebuilding the parser crate even if nothing has changed (322e7ed2)
- Don't panic when compiling partially compiled constructors (6fb552ea, closes #202)
- check:
- compiler:
- completion: Don't pick the wrong types from unordered record patterns (f283de18)
- parser:
- vm:
- Allow hook functions to return asynchronous results (52820e94)
- Don't introduce an Unknown scope when calling functions (f4f81fd7)
- Don't return an error for exiting to a locked scope (81f6d956)
- Don't emit line information for macro expanded code (4f056beb)
- Deep clone OpaqueValue when it is sent between disjoint threads (ba7f316c)
- Make get_global's type check act as a type signature check (eee79952)
- Implement Getable for Function<RootedThread, _> (73f4feb0)
- Allocate AppVec directly instead of using intermediate Vecs (b0bc41f2)
- Use SmallVec in the Type::App variant (a26c1062)
- Make load_script return a future (a8df68a5)
- Add a future which can avoid creating an event loop for sync calls (d2132fc8)
- Implement explicit kinds on type alias parameters (8a82cfdd)
- Allow querying the number of frames on the stack in the debug api (a012274c)
- Provide the index for each local through the debug interface (6ba5b44f)
- Add a function to query upvars from a Frame (cf67386a)
- Add a compiler option for controlling whether to emit debug information (6c552806)
- Add an iterator over upvariable names (a098c902)
- Allow the hook to yield and later resume execution (2aea009f)
- Add variable name retrieval for the debug interface (aa47e4dd)
- Add an extra parameter to HookFn which can be queried for debug information (01a041a9)
- Add flags to control when the hook function is called (29230dbe)
- Allow the width to be specified in the value printer (1481f3f4)
- Allow the value printer to limit the depth of the printed value (8d92cf08)
- Rewrite parser using LALRPOP (cc3d3267)
- Add a macro for encoding gluon records into rust types (1d5f67b3)
- Add a macro for describing gluon record patterns (e0151e2f)
- Visit and reparse all nested infix expressions (0c531107)
- parser: Return valid a valid AST after parsing an invalid expression (1cdd0e31)
- vm:
- Make the compiler pipeline return futures for executing (c0d355e2)
- Allow extern functions to return futures (120f9d1d)
- Add types to all variables in the debug info (38674f1f)
- Add a pretty printer on vm values (0288e0a4)
- Add a from_ut8 method for converting
Array Byte
intoString
(a336a49f) - Implement clone on OpaqueValue and Function (b56549c4)
Version 0.2.0 consists of a few critical bug fixes, numerous usability improvements such as prettier printing of types and auto completion in the REPL as well as two additions to the language itself.
Row-polymorphic records are added to the type system (albeit in a slightly limited capacity) as well as type holes. More additions building on these features will be added in a backwards compatible way in upcoming versions.
In addition to the user visible changes listed here the internals have seen a lot of legacy cruft removed, in major part thanks to @brendanzab.
- Use InFile to display source information for parse errors (7026d8a3)
- Use starts_with and ends_with from Rust instead of gluon (5144ee29)
- Rename io.print to io.println and add io.print (0a6b65bd)
- Implement unification of row polymorphic records (df007c6e)
- Improve readability of large types by splitting them onto multiple lines (1c296ac9)
- Add holes to the type syntax, and use them when building the AST (fb9bd82c)
- Rename (*) to Type (8a3e1945)
- Repl UX improvements (2ed0a35b)
- base: Use quick-error for instantiate::Error (96a8c631)
- check:
- Attempt to generate variable starting with a unique letter (f3c2e625)
- parser:
- repl: Add completion to the repl (ee4d0b60)
- vm:
- Don't gluon panic when writing only a colon (
:
) in the repl (7864c449) - Only print a Stacktrace on panics (c059bfd3)
- Surround operators with parens when pretty-printing (7ccc6f22, closes #60)
- Rename windows file separators characters ('\') to '.' as well (207bfc9a)
- Add a space before : when pretty printing types (a9b160c3)
- Print ',' as separator between each type of a record (d72d3e1b)
- Don't return None from Source::location when byte is at end of file (5aee09a5)
- check:
- completion:
- Give completion for local variables when pointing to whitespace (5c59a795)
- repl: