From bdf5585f9b05f12ed217b637fd07b4654fbfcd09 Mon Sep 17 00:00:00 2001 From: Christopher Swiedler Date: Thu, 11 Feb 2021 09:02:02 -0800 Subject: [PATCH] Clean up pages, add sidebar, shorten top bar --- docs/_config.yml | 2 + docs/_data/navigation.yml | 23 +++++---- docs/_pages/getting-started.md | 5 ++ docs/_pages/lint.md | 3 +- docs/_pages/performance.md | 3 +- docs/_pages/sandbox.md | 2 +- docs/_pages/syntax.md | 3 +- docs/_pages/typecheck.md | 2 +- docs/_pages/why.md | 2 +- docs/assets/images/luau.png | Bin 0 -> 66811 bytes docs/index.md | 90 ++++++++++++++++++++++----------- 11 files changed, 87 insertions(+), 48 deletions(-) create mode 100644 docs/_pages/getting-started.md create mode 100644 docs/assets/images/luau.png diff --git a/docs/_config.yml b/docs/_config.yml index c2bc6acf..ad86c9c5 100644 --- a/docs/_config.yml +++ b/docs/_config.yml @@ -15,3 +15,5 @@ defaults: type: "pages" values: layout: "single" + sidebar: + nav: "pages" diff --git a/docs/_data/navigation.yml b/docs/_data/navigation.yml index a5becb95..55234617 100644 --- a/docs/_data/navigation.yml +++ b/docs/_data/navigation.yml @@ -1,16 +1,21 @@ main: - - title: "Why?" + - title: Home + url: / + - title: Getting Started + url: /getting-started + +pages: + - title: Getting Started + url: /getting-started + - title: Why Luau? url: /why - - title: "Syntax" + - title: Syntax url: /syntax - - title: "Terms of Use" - url: /limited-terms-of-use - - title: "Linting" + - title: Linting url: /lint - - title: "Performance" + - title: Performance url: /performance - - title: "Sandboxing" + - title: Sandboxing url: /sandbox - - title: "Typechecking" + - title: Typechecking url: /typecheck - \ No newline at end of file diff --git a/docs/_pages/getting-started.md b/docs/_pages/getting-started.md new file mode 100644 index 00000000..0252d786 --- /dev/null +++ b/docs/_pages/getting-started.md @@ -0,0 +1,5 @@ +--- +permalink: /getting-started +title: Getting Started +--- + diff --git a/docs/_pages/lint.md b/docs/_pages/lint.md index 69d60a51..1309b23c 100644 --- a/docs/_pages/lint.md +++ b/docs/_pages/lint.md @@ -1,9 +1,8 @@ --- permalink: /lint +title: Linting --- -# Linting - Luau comes with a set of linting passes, that help make sure that the code is correct and consistent. Unlike the type checker, that models the behavior of the code thoroughly and points toward type mismatches that are likely to result in runtime errors, the linter is more opinionated and produces warnings that can often be safely ignored, although it's recommended to keep the code clean of the warnings. Linter produces many different types of warnings; many of these are enabled by default, and can be suppressed by declaring `--!nolint NAME` at the top of the file. In dire situations `--!nolint` at the top of the file can be used to completely disable all warnings (note that the type checker is still active, and requires a separate `--!nocheck` declaration). diff --git a/docs/_pages/performance.md b/docs/_pages/performance.md index 58fab3af..7ac7b197 100644 --- a/docs/_pages/performance.md +++ b/docs/_pages/performance.md @@ -1,9 +1,8 @@ --- permalink: /performance +title: Performance --- -# Performance - One of main goals of Luau is to enable high performance code, with gameplay code being the main use case. This can be viewed as two separate goals: - Make idiomatic code that wasn't tuned faster diff --git a/docs/_pages/sandbox.md b/docs/_pages/sandbox.md index 9c78236b..9162540f 100644 --- a/docs/_pages/sandbox.md +++ b/docs/_pages/sandbox.md @@ -1,7 +1,7 @@ --- permalink: /sandbox +title: Sandboxing --- -# Sandboxing Luau is safe to embed. Broadly speaking, this means that even in the face of untrusted (and in Roblox case, actively malicious) code, the language and the standard library don't allow any unsafe access to the underlying system, and don't have any bugs that allow escaping out of the sandbox (e.g. to gain native code execution through ROP gadgets et al). Additionally, the VM provides extra features to implement isolation of privileged code from unprivileged code and protect one from the other; this is important if the embedding environment (Roblox) decides to expose some APIs that may not be safe to call from untrusted code, for example because they do provide controlled access to the underlying system or risk PII exposure through fingerprinting etc. diff --git a/docs/_pages/syntax.md b/docs/_pages/syntax.md index 5be450f0..6668e272 100644 --- a/docs/_pages/syntax.md +++ b/docs/_pages/syntax.md @@ -1,9 +1,8 @@ --- permalink: /syntax +title: Syntax --- -# Syntax - Luau uses the baseline [syntax of Lua 5.1](https://www.lua.org/manual/5.1/manual.html#2). For detailed documentation, please refer to the Lua manual, this is an example: ```lua diff --git a/docs/_pages/typecheck.md b/docs/_pages/typecheck.md index cca158ba..b5276c4e 100644 --- a/docs/_pages/typecheck.md +++ b/docs/_pages/typecheck.md @@ -1,7 +1,7 @@ --- permalink: /typecheck +title: Type checking --- -# Type checking Luau supports a gradual type system through the use of type annotations and type inference. diff --git a/docs/_pages/why.md b/docs/_pages/why.md index 25da418c..88eef56b 100644 --- a/docs/_pages/why.md +++ b/docs/_pages/why.md @@ -1,7 +1,7 @@ --- permalink: /why +title: Why Luau? --- -# Why Luau? Around 2006, [Roblox](https://www.roblox.com) started using Lua 5.1 as a scripting language for games. Over the years the runtime had to be tweaked to provide a safe, secure sandboxed environment; we gradually started accumulating small library changes and tweaks. diff --git a/docs/assets/images/luau.png b/docs/assets/images/luau.png new file mode 100644 index 0000000000000000000000000000000000000000..a125b13bfb39871ed425150d1d20ffe38fdd26db GIT binary patch literal 66811 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

nc!M`; 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 + Lua*u* (lowercase *u*, /ˈlu.aʊ/) is a fast, small, safe, gradually typed embeddable scripting language derived from Lua. It is used by Roblox game developers to write game code, as well as by Roblox engineers to implement large parts of the user-facing application code as well as portions of the editor (Roblox Studio) as plugins. + +feature_row1: + - + title: Motivation excerpt: > - Around 2006, [Roblox](https://www.roblox.com) started using Lua 5.1 as a scripting language for games. Over the years we ended up substantially evolving the implementation and the language; to support growing sophistication of games on the Roblox platform, growing team sizes and large internal teams writing a lot of code for application/editor (1+MLOC as of 2020), we had to invest in performance, ease of use and language tooling, and introduce a gradual type system to the language. [This page](why) goes into more detail about the road that got us here. - - image_path: - title: "Sandboxing" + Around 2006, [Roblox](https://www.roblox.com) started using Lua 5.1 as a scripting language for games. Over the years we ended up substantially evolving the implementation and the language; to support growing sophistication of games on the Roblox platform, growing team sizes and large internal teams writing a lot of code for application/editor (1+MLOC as of 2020), we had to invest in performance, ease of use and language tooling, and introduce a gradual type system to the language. + url: /why + btn_label: Learn More + btn_class: "btn--primary" + + - + title: Sandboxing excerpt: > - Luau limits the set of standard libraries exposed to the users and implements extra sandboxing features to be able to run unprivileged code (written by our game developers) side by side with privileged code (written by us). This results in an execution environment that is different from what is commonplace in Lua. The sandboxing [is described here](sandbox). - - image_path: - title: "Compatibility" + Luau limits the set of standard libraries exposed to the users and implements extra sandboxing features to be able to run unprivileged code (written by our game developers) side by side with privileged code (written by us). This results in an execution environment that is different from what is commonplace in Lua. + url: /sandbox + btn_label: Learn More + btn_class: "btn--primary" + + - + title: Compatibility excerpt: > Whenever possible, Luau aims to be backwards-compatible with Lua 5.1 and at the same time to incorporate features from later revisions of Lua. However, Luau is not a full superset of later versions of Lua - we do not agree with some design decisions made by the Lua authors, and have different use cases and constraints. All post-5.1 Lua features, along with their support status in Luau, [are documented here](compatibility). + url: /compatibility + btn_label: Learn More + btn_class: "btn--primary" + feature_row2: - - image_path: /assets/images/example.png - title: "Syntax" + - + title: Syntax + image_path: /assets/images/example.png excerpt: > Luau is syntactically backwards-compatible with Lua 5.1 (code that is valid Lua 5.1 is also valid Luau); however, we have extended the language with a set of syntactical features that make the language more familiar and ergonomic. The syntax [is described here](syntax). - url: "/syntax" + url: /syntax + btn:label: Learn More + btn_class: "btn--primary" + feature_row3: - - image_path: - title: "Analysis" + - + title: Analysis excerpt: > - To make it easier to write correct code, Luau comes with a set of analysis tools that can surface common mistakes. These consist of a linter and a type checker, colloquially known as "script analysis", and can be used from [Roblox Studio](https://developer.roblox.com/en-us/articles/The-Script-Analysis-Tool) or using SECRET TOOL. The linting passes are [described here](lint), and the type checking user guide can [be found here](typecheck). - - image_path: - title: "Performance" + To make it easier to write correct code, Luau comes with a set of analysis tools that can surface common mistakes. These consist of a linter and a type checker, colloquially known as script analysis, and can be used from [Roblox Studio](https://developer.roblox.com/en-us/articles/The-Script-Analysis-Tool) or using SECRET TOOL. The linting passes are [described here](lint), and the type checking user guide can [be found here](typecheck). + url: /typecheck + btn_label: Learn More + btn_class: "btn--primary" + + - + title: Performance excerpt: > In addition to a completely custom front end that implements parsing, linting and type checking, Luau runtime features new bytecode, interpreter and compiler that are heavily tuned for performance. Luau currently does not implement Just-In-Time compilation, but its interpreter is often competitive with LuaJIT interpreter on a wide set of benchmarks. We continue to optimize the runtime and rewrite portions of it to be even more efficient, including plans for a new garbage collector and further library optimizations, as well as an eventual JIT/AOT option. While our overall goal is to minimize the amount of time programmers spend tuning performance, some details about the performance characteristics are [provided for inquisitive minds](performance). - - image_path: - title: "Libraries" + url: /performance + btn_label: Learn More + btn_class: "btn--primary" + + - + title: Libraries excerpt: > As a language, Luau is a full superset of Lua 5.1. As far as standard library is concerned, some functions had to be removed from the builtin libraries, and some functions had to be added. Additionally, Luau is currently only runnable from the context of the Roblox engine, which exposes a large API surface [documented on Roblox developer portal](https://developer.roblox.com/en-us/api-reference). --- -{% include feature_row id="intro" type="center" %} +{% include feature_row id="feature_row1" %} -{% include feature_row %} - -{% include feature_row id="feature_row2" type="right" %} +{% include feature_row id="feature_row2" type="left" %} {% include feature_row id="feature_row3" %} + +### Terms of Use + +See [here](limited-terms-of-use) for all of the important legal stuff.