Commit graph

143 commits

Author SHA1 Message Date
LoganDark
4373f65fbd
Add back thread identity section as thread userdata instead
Thread userdata shouldn't be overlooked - even though security contexts are
Roblox-specific, the thread userdata can still be used to implement a
permissions model for sandboxing, whether this is based on security contexts
(like Roblox, or like Ring 0/3), on capabilities, or maybe even something else.
I think it is worth it to document this in the sandboxing page.

For everyone's future reference:

* Every lua_State has an associated userdata pointer at the end. It's just a
  pointer at the end called userdata:

    void* userdata;

  This pointer is never accessed or set by Luau itself, except for when
  first initializing the state, where it is set to NULL.

  This userdata can be set by the host after creating the thread, and is 100%
  invisible to Luau code. C functions exposed by the host can access the
  userdata by L->userdata, and, safe in the knowledge that it cannot be tampered
  with, use it to validate the thread.

* The global_State (the VM, as opposed to just the main thread) contains a field
  called cb:

    lua_Callbacks cb;

  The struct is currently defined as:

    /* Callbacks that can be used to reconfigure behavior of the VM dynamically.
     * These are shared between all coroutines.
     *
     * Note: interrupt is safe to set from an arbitrary thread but all other
     * callbacks can only be changed when the VM is not running any code */
    struct lua_Callbacks
    {
        /* gets called at safepoints (loop back edges, call/ret, gc) if set */
        void (*interrupt)(lua_State* L, int gc);

        /* gets called when an unprotected error is raised (if longjmp is
         * used) */
        void (*panic)(lua_State* L, int errcode);


        /* gets called when L is created (LP == parent) or destroyed (LP ==
         * NULL) */
        void (*userthread)(lua_State* LP, lua_State* L);

        /* gets called when a string is created; returned atom can be retrieved
         * via tostringatom */
        int16_t (*useratom)(const char* s, size_t l);


        /* gets called when BREAK instruction is encountered */
        void (*debugbreak)(lua_State* L, lua_Debug* ar);

        /* gets called after each instruction in single step mode */
        void (*debugstep)(lua_State* L, lua_Debug* ar);

        /* gets called when thread execution is interrupted by break in another
         * thread */
        void (*debuginterrupt)(lua_State* L, lua_Debug* ar);

        /* gets called when protected call results in an error */
        void (*debugprotectederror)(lua_State* L);
    };

  Assuming you cache the global_State when creating the main thread (which you
  should - it's just L->global), you can set g->cb->userthread to a C function
  to define what should happen when a new thread is created or destroyed.

  This can be used to:
  * Inherit userdata from parent threads; great for permission models.
  * Run destructors on userdata when threads are collected; great for resources.

That is a lot of information to digest, but if a Luau dev reads this, they'll
probably have said "yep, exactly" at least once. Documenting this small aspect
of the VM will be another step towards making it a bit friendlier for people to
start using Luau.

Obviously, the more technical documentation will remain here (in this commit &
pull request), but even the public facing documentation (which developers, like
me, will reference) should contain information just like the thread identity
section that was removed.

Hopefully, this is a suitable replacement, as thread userdata IS available in
the open-source version of Luau - and is used by Roblox for its "extra space" to
store things like thread identity.
2021-11-07 07:20:42 -08:00
Arseny Kapoulkine
c6de3bd2e4
Update sandbox.md
Remove section on thread identity: this is not part of open-source Luau and as such is now confusing.
2021-11-05 19:50:29 -07:00
Arseny Kapoulkine
c0b95b8961
Update profile.md
Too much future.
2021-11-04 23:24:39 -07:00
Arseny Kapoulkine
adacdcdf4e
Update profile.md
Remove incorrect sentence copied from the incorrect internal documentation :)
2021-11-04 18:07:34 -07:00
Arseny Kapoulkine
dc509b9849
Update navigation.yml
Add profiling page to nav bar
2021-11-04 17:28:24 -07:00
Arseny Kapoulkine
7c76a5a70a
Create profile.md
Add profiler documentation.
2021-11-04 17:27:56 -07:00
Arseny Kapoulkine
e0c4f33217
Add chess-profile.lua 2021-11-04 17:22:04 -07:00
Josh Soref
278e848cc2
Spelling (#119)
Fixed various spelling errors.

Co-authored-by: Josh Soref <jsoref@users.noreply.github.com>
2021-11-04 09:50:46 -05:00
Arseny Kapoulkine
733ae0498d
Update index.md
Cleanup text and remove extra buttons and redundant links
2021-11-03 19:10:49 -07:00
Arseny Kapoulkine
06e79462d0
Update index.md
Remove incorrect text about Luau being Roblox only.
2021-11-03 14:27:42 -07:00
Arseny Kapoulkine
e34586b847
Update sandbox.md
Soften the language around Rust
2021-11-03 12:30:07 -07:00
Arseny Kapoulkine
dc83543f3b
Update 2021-11-03-luau-goes-open-source.md
Fix links in the announcement
2021-11-03 10:28:01 -07:00
Arseny Kapoulkine
e997a4cc57
Update index.md
Fix overlay header - image is not optional :(
2021-11-03 09:43:20 -07:00
Arseny Kapoulkine
586bef6a4c Add open-source announcement 🎉 2021-11-02 15:50:57 -07:00
Arseny Kapoulkine
dd46710280 Update index.md
Remove language about Roblox since it suggests the thought that Luau is Roblox specific.
2021-11-02 15:50:57 -07:00
Arseny Kapoulkine
0ded24c2d5 Switch to releases for build artifacts 2021-11-01 14:52:34 -07:00
Arseny Kapoulkine
650dd30062 Update getting-started and why for open source release 2021-11-01 14:52:34 -07:00
Arseny Kapoulkine
4d168c3543 Add CONTRIBUTING.md and replace README.md
Also add SVG logo to docs/
2021-11-01 14:52:34 -07:00
Arseny Kapoulkine
33cb9d5991
Update performance.md (#94)
Add documentation on shorter atomic pauses

Co-authored-by: vegorov-rbx <75688451+vegorov-rbx@users.noreply.github.com>
2021-11-01 12:08:01 -07:00
vegorov-rbx
e562596bb8
Luau Recap: October 2021 (#92)
* Draft for October post

* Rebuild pages

* Apply suggestions from code review

Co-authored-by: dcope-rbx <91100513+dcope-rbx@users.noreply.github.com>

* Update 2021-10-31-luau-recap-october-2021.md

Add optimizations

* Remove unfinished section

Co-authored-by: dcope-rbx <91100513+dcope-rbx@users.noreply.github.com>
Co-authored-by: Arseny Kapoulkine <arseny.kapoulkine@gmail.com>
2021-10-29 11:37:43 -07:00
dcope-rbx
c1654e34eb
Fixed doc issue that was unaddressed in a previous code review (#93) 2021-10-29 09:48:58 -07:00
dcope-rbx
1b38e3c8f8
Added syntax documentation for if expressions (#91)
* Added syntax documentation for if expressions
2021-10-28 13:44:04 -07:00
Alan Jeffrey
f3a248d1a9
Remove warning about generic functions being disabled (#90) 2021-10-27 11:24:47 -05:00
Arseny Kapoulkine
2341b5014e
Update compatibility.md
Given the new RFC we clearly don't think coroutine.close is never going to happen :)
2021-10-26 17:19:37 -07:00
Arseny Kapoulkine
1ec7be600c
docs: Create library.md (#87)
Full documentation for the standard library, written from scratch by looking at the source code - so hopefully this is reasonably correct/precise.

Some of the function descriptions are probably too concise to be easily understandable - we can flesh this out in the future.

Some of the type specifications aren't using valid Luau syntax; in particular, I've used "function" or "table" in a few places as a human-friendly notion that any function/table suffices, and the iterator functions just say that they return <iterator> without being specific as to what the signature of the generator is.
2021-10-19 13:54:44 -07:00
Alan Jeffrey
4b02be4e0e
September 2021 Luau Recap (#81)
* Added the September Luau Recap

Co-authored-by: Arseny Kapoulkine <arseny.kapoulkine@gmail.com>
2021-09-29 15:05:14 -05:00
Arseny Kapoulkine
ae1c104fd1
Update performance.md (#71)
Add some information about the new GC pacer

Co-authored-by: Alan Jeffrey <403333+asajeffrey@users.noreply.github.com>
2021-09-15 16:19:45 -07:00
Arseny Kapoulkine
4e6ca2531b
Update performance.md (#69)
Remove placeholder sections for performance optimizations - we'll just add individual optimizations to this document as we deploy them.
2021-09-15 16:07:16 -07:00
vegorov-rbx
c738ddc1f0
Luau Recap: August 2021 (#64)
* August post is ready

* Fixes

* Rebuild pages

* Apply suggestions from code review

Co-authored-by: Alan Jeffrey <403333+asajeffrey@users.noreply.github.com>

* Update docs/_posts/2021-08-31-luau-recap-august-2021.md

Co-authored-by: Arseny Kapoulkine <arseny.kapoulkine@gmail.com>

* Fix typo

* Mention additional optimizations

* Fix link

Co-authored-by: Alan Jeffrey <403333+asajeffrey@users.noreply.github.com>
Co-authored-by: Arseny Kapoulkine <arseny.kapoulkine@gmail.com>
2021-08-31 22:16:33 +03:00
Arseny Kapoulkine
ad436994ba
Update performance.md (#65)
Call out table capacity prediction
2021-08-31 07:28:49 -07:00
Arseny Kapoulkine
bb8870a1d4
Update compatibility.md (#63)
Add a note about `pcall` - really the C limit is universal but it will most often be hit during either pcall or coroutine.resume.
2021-08-30 10:31:52 -07:00
Arseny Kapoulkine
81cddbd82c
Update lint.md (#58)
Add documentation for DuplicateLocal
2021-08-04 15:24:25 -07:00
Matthew Pagan
9cc9934370
fix: change variable asserted in documentation (#60) 2021-08-04 09:25:01 -07:00
vegorov-rbx
e9db7cd1dc
Luau Recap: July 2021 (#59)
* July post is ready

* Trigger a build

* Trigger a build

* Added a paragraph for 'DuplicateConditions' lint

* Apply suggestions from code review

Co-authored-by: Arseny Kapoulkine <arseny.kapoulkine@gmail.com>

* Fix mixed tabs and spaces

Co-authored-by: Arseny Kapoulkine <arseny.kapoulkine@gmail.com>
2021-07-30 19:52:21 +03:00
Arseny Kapoulkine
1f548d4753
Update lint.md (#54)
Add documentation for the upcoming DuplicateCondition lint
2021-07-21 16:13:04 -07:00
vegorov-rbx
01d9f8daf9
Luau Recap: June 2021 (#53)
* Template for the June post

* June post is ready

* Fixed post date

* Added a few examples

* Add another equality operator

* Update docs/_posts/2021-06-30-luau-recap-june-2021.md

Co-authored-by: Arseny Kapoulkine <arseny.kapoulkine@gmail.com>

* Note the limitation of current constraint resolver

Co-authored-by: Arseny Kapoulkine <arseny.kapoulkine@gmail.com>
2021-07-07 19:45:01 +03:00
Arseny Kapoulkine
bf17b6447a
Update lint.md (#52)
* Update lint.md

Add documentation for DeprecatedApi (live) and TableOperations (ships on July 7th)

* Update lint.md

Shorten line a bit
2021-07-06 09:06:51 -07:00
Arseny Kapoulkine
c8af786b10
Update compatibility.md
We decided that we can't enforce strict limits for insert/remove based on analysis of Roblox games
2021-06-15 19:05:27 -07:00
Arseny Kapoulkine
b439c9fcdc
Update performance.md
Restore the original sentence with tweaks; this seems like better wording since it highlights the importance of knowing the field name at compile time, no matter the notation.
2021-06-14 18:54:47 -07:00
Arseny Kapoulkine
40a175499e
Update performance.md
Remove outdated statement about table["field"] since we optimize it now the same way as table.field.
2021-06-14 10:53:26 -07:00
Arseny Kapoulkine
0fdf8824f1
Update performance.md (#50)
Add a section about vectors and libraries
2021-06-11 14:10:55 -07:00
Arseny Kapoulkine
50c22abae0
Update syntax.md (#46)
Add documentation for named arguments in function types.
2021-06-02 13:19:46 -07:00
Arseny Kapoulkine
b20601af89
Update lint.md (#44)
Update FunctionUnused and ImportUnused following internal changes that make it possible to suppress the warning using _
2021-06-02 12:49:35 -07:00
Arseny Kapoulkine
b490373454
Update syntax.md (#45)
Add information about type ascription syntax
2021-06-02 12:14:24 -07:00
vegorov-rbx
2a29ba1538
Update 2021-05-31-luau-recap-may-2021.md 2021-06-02 19:50:57 +03:00
vegorov-rbx
5c7a981866
Luau Recap: May 2021 (#42)
* Added May 2021 recap post

* Added missing items and fixed confusing function declaration example

* Apply suggestions from code review

Co-authored-by: Arseny Kapoulkine <arseny.kapoulkine@gmail.com>

* Small fix

Co-authored-by: Arseny Kapoulkine <arseny.kapoulkine@gmail.com>
2021-06-02 13:19:15 +03:00
Arseny Kapoulkine
fff104b439
Rename linting pass to match internal changes
The name is cleaner and more correct
2021-05-30 11:55:52 -07:00
Andy Friesen
fc4cfede58
Document how to actually use an exported type from another module. (#40) 2021-05-28 10:31:47 -07:00
Arseny Kapoulkine
b2b0c33b5e Update CNAME 2021-05-27 19:00:09 -07:00
Arseny Kapoulkine
a4fe638b17 Create CNAME 2021-05-27 18:52:43 -07:00