This meta-RFC proposes removing the previously accepted RFC on safe navigation operator. This is probably going to be disappointing but is the best course of action that reflects our ideals in language evolution.
See PR thread for rationale and discussion.
* Run clang-format
* Contains a preliminary implementation of deferred constraint resolution
* Reduce stack usage by some recursive functions
* Fix a bug when smartCloning a BoundTypeVar
* Remove some GC related flags from VM
* Recap is ready
* Change the intro format so it shows up in the news section snippet
* Fixed line breaks that were implied
* Update docs/_posts/2022-06-01-luau-recap-may-2022.md
Co-authored-by: Arseny Kapoulkine <arseny.kapoulkine@gmail.com>
* Drop Autocomplete improvements and extend compiler optimization section
In the cross-post to Roblox developer forum, Autocomplete section will be restored, while compiler optimization section can be optionally removed (although it might interest some developers)
* One more optimization
* Update docs/_posts/2022-06-01-luau-recap-may-2022.md
Co-authored-by: dcope-rbx <91100513+dcope-rbx@users.noreply.github.com>
Co-authored-by: Arseny Kapoulkine <arseny.kapoulkine@gmail.com>
Co-authored-by: dcope-rbx <91100513+dcope-rbx@users.noreply.github.com>
* Adds a currently unused x86-64 assembler as a prerequisite for possible future JIT compilation
* Fix a bug in table iteration (closes Possible table iteration bug #504)
* Improved warning method when function is used as a type
* Fix a bug with unsandboxed iteration with pairs()
* Type of coroutine.status() is now a union of value types
* Bytecode output for tests/debugging now has labels
* Improvements to loop unrolling cost estimation
* Report errors when the key obviously doesn't exist in the table
* Respect useLineBreaks for union/intersect toString
* Apply suggestions from code review
Co-authored-by: Andy Friesen <andy.friesen@gmail.com>
Co-authored-by: Andy Friesen <andy.friesen@gmail.com>
Adds an option to hide the `self: type` argument as the first argument in the string representation of a named function type var if the ftv hasSelf.
Also added in a test for the original output (i.e., if the option was disabled)
I didn't apply this option in the normal `Luau::toString()` function, just the `Luau::toStringNamedFunction()` one (for my usecase, that is enough + I felt like a named function would include the method colon `:` to signify self). If this is unintuitive, I can also add it to the general `Luau::toString()` function.
Update `__pairs` note with `__iter`, change `__len` to unsure as with `__iter` lack of `__len` on tables is the only issue preventing complete user created containers.
Update the typecheck.md page to talk about singleton types and their uses, tagged unions.
As a driveby, improve the documentation on type refinements. And delete the unknown symbols part, this is really dated.
* Update docs/_pages/typecheck.md to fix a typo
Co-authored-by: Arseny Kapoulkine <arseny.kapoulkine@gmail.com>
This is a meta-RFC. I'd like to propose to remove the postfix `!` operator from the language.
I'd like to argue that this operator will eventually become useless and can only be used incorrectly at some point in the future, and that there are likely ways for them to be sound without having to reach for the `!` hammer.
With that, I present these counterarguments:
Shortcoming <span>#</span>1: Refinements does not apply to the block after `return`/`break`/`continue`.
```lua
if not x or not y then return end
-- both x and y are truthy
```
This will be solved by implementing control flow analysis where it'd apply the inverse of the condition leading up to the control transfer statement to the rest of the scope.
Shortcoming <span>#</span>2: Type checker is not aware of the actual state of various locations.
```lua
type Foo = { x: { y: number }? }?
local foo: Foo = { x = { y = 5 } }
print(foo.x.y) -- prints 5 at runtime, type checker warns on this
```
This will be solved by implementing type states where it would inspect the initialization sites as well as assignments to know their actual states. That is, rather than trusting the type annotation `Foo` as the state which gets us far enough, we'd start seeing these type annotations as a subtype constraint for the location `foo`.
---
If there are other use cases not covered in this message, we should talk about that and see if there exists an alternative direction that can solve these use cases soundly.
* Luau Recap: February 2022
* Rebuild pages
* Fixed Markdown linter warnings, converted tabs to spaces and added a note on 'select' optimization
* Apply suggestions from code review
Co-authored-by: Alexander McCord <11488393+alexmccord@users.noreply.github.com>
* Added information about new lint
* Update docs/_posts/2022-02-28-luau-recap-february-2022.md
Co-authored-by: Alexander McCord <11488393+alexmccord@users.noreply.github.com>
Co-authored-by: Alexander McCord <11488393+alexmccord@users.noreply.github.com>
Prototypes booleans and relational operators.
As part of this I removed `FFI/Data/Bool.agda`, because it was getting in the way - we already use `Agda.Builtin.Bool` instead for other cases.