mirror of
https://github.com/luau-lang/luau.git
synced 2025-04-10 22:00:54 +01:00
165 lines
5.1 KiB
TeX
165 lines
5.1 KiB
TeX
\documentclass[acmsmall]{acmart}
|
|
|
|
\setcopyright{rightsretained}
|
|
\copyrightyear{2021}
|
|
\acmYear{2021}
|
|
\acmConference[HATRA '21]{Human Aspects of Types and Reasoning Assistants}{October 2021}{Chicago, IL}
|
|
|
|
\begin{document}
|
|
|
|
\title{The Goals of the Luau Type System}
|
|
|
|
\author{Andy Friesen}
|
|
\author{Alan Jeffrey}
|
|
\author{Other People?}
|
|
\affiliation{
|
|
\institution{Roblox}
|
|
\city{San Mateo}
|
|
\state{CA}
|
|
\country{USA}
|
|
}
|
|
|
|
\begin{abstract}
|
|
A position paper about the goals Luau type system.
|
|
\end{abstract}
|
|
|
|
\maketitle
|
|
|
|
\section{Introduction}
|
|
|
|
The Roblox~\cite{Roblox} platform allows anyone to create shared,
|
|
immersive, 3D experiences. At the time of writing, there are
|
|
approximately eight million experiences available on Roblox, created
|
|
by eight million developers. Roblox developers are often young, for
|
|
example there are over 200 Roblox coding camps in over 65 countries
|
|
listed at~\cite{AllEducators}.
|
|
|
|
The Luau programming language~\cite{Luau} is the scripting language
|
|
used by developers of Roblox experiences. Luau is derived from the Lua
|
|
programming language~\cite{Lua}, with additional capabilities,
|
|
including a type inference engine.
|
|
|
|
This paper will discuss some of the goals of the Luau type system, and
|
|
why those goals are slightly different from other type systems.
|
|
|
|
\section{Human Aspects}
|
|
\subsection{Heterogenous developer community}
|
|
|
|
Quoting a 2020 report \cite{RobloxDevelopers}:
|
|
\begin{itemize}
|
|
\item Adopt Me! now has over 10 billion plays and surpassed 1.6 million concurrent users in game earlier this year.
|
|
\item Piggy, launched in January 2020, has close to 5 billion visits in just over six months.
|
|
\item There are now 345,000 developers on the platform who are monetizing their games.
|
|
\end{itemize}
|
|
This demonstrates how heterogenous the Roblox developer community is:
|
|
developers of experiences with plays measured in billions on the same
|
|
platform as children first learning to code. Moreover, \emph{both of
|
|
these groups are important}, as the professional development studios
|
|
bring high-quality experiences to the platform, and the beginning creators
|
|
contribute to the energetic creative community.
|
|
|
|
\subsection{Goal-driven learning}
|
|
|
|
All developers are goal-driven, but this is especially true for
|
|
learners. A learner will download Roblox Studio (the IDE) with an
|
|
experience in mind, often designing an obstacle course (an ``obby'')
|
|
to play in with their friends.
|
|
|
|
The user experience of developing a Roblox experience is
|
|
primarily a 3D interactive one, where the user designs and deploys 3D
|
|
assets such as terrain, parts and joints, and provides them with
|
|
physics attributes such as mass and orientation. The user can interact
|
|
with the experience in Studio, and deploy it to a Roblox server so anyone with
|
|
the Roblox app can play it.
|
|
|
|
\begin{figure}
|
|
\includegraphics[width=0.48\textwidth]{studio-mow.png}
|
|
\includegraphics[width=0.48\textwidth]{studio-script-editor.png}
|
|
\caption{Roblox Studio's 3D environment editor, and script editor}
|
|
\end{figure}
|
|
|
|
At some point during experience design, the user of Studio has a need
|
|
which can't be met by the physics engine alone. ``The stairs should
|
|
light up when a player walks on them'' or ``a firework is set off
|
|
every few seconds.'' At this point they will discover the script
|
|
editor, and the Luau programming language.
|
|
|
|
This workflow is different from many initial exposures to programming,
|
|
in that by the time the user first opens the script editor, they have
|
|
already built much of their creation, and have a very specific
|
|
concrete aim.
|
|
|
|
This workflow suggests a Luau goal for helping the majority of
|
|
creators: \emph{support learning how to perform specific tasks} (for
|
|
example through autocomplete suggestions and documentation).
|
|
|
|
\subsection{Type-driven development}
|
|
|
|
- Code refactoring
|
|
|
|
- Code navigation
|
|
|
|
- Detect detection
|
|
|
|
\section{Types}
|
|
\subsection{Infallible types}
|
|
|
|
Goal: support type-directed tools in all programs
|
|
|
|
- All programs have a type (analogy with infallible parsers)
|
|
|
|
- Used by autocomplete + goto-declaration
|
|
|
|
- Still support red squigglies
|
|
|
|
- Problem: stop the user being swamped by cascading errors
|
|
|
|
- Problem: no ``right'' type, just heuristics
|
|
|
|
\subsection{Strict types}
|
|
|
|
Goal: no false negatives
|
|
|
|
- Appropriate for experienced developers?
|
|
|
|
- Variants of ``usual techniques'' apply, e.g. progress becomes ``if you get stuck, there must be red squigglies''
|
|
|
|
- Related to blame analysis?
|
|
|
|
\subsection{Nonstrict types}
|
|
|
|
Goal: no false positives
|
|
|
|
- Appropriate for the majority of developers?
|
|
|
|
- Usual techniques do not apply, e.g. correctness becomes ``code with red squigglies does not return a result''
|
|
|
|
- Related to success types?
|
|
|
|
\subsection{Mixing types}
|
|
|
|
Goal: support mixed strict/nonstrict development
|
|
|
|
- Strictness is per-script, so programs are mixed
|
|
|
|
- Can the correctness criteria be combined?
|
|
|
|
- Can success types be combined with regular types?
|
|
|
|
- Same types, different red squigglies?
|
|
|
|
- Related: incorrectness logic vs correcness logic?
|
|
|
|
\section{Future work}
|
|
|
|
Draw the damn owl
|
|
|
|
- Mixing types
|
|
|
|
- Other interactions between types and IDEs, e.g. typed holes.
|
|
|
|
- Formalizations of all of this?
|
|
|
|
\bibliographystyle{ACM-Reference-Format} \bibliography{bibliography}
|
|
|
|
\end{document}
|