\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}