\documentclass[aspectratio=169]{beamer}

\usecolortheme{whale}
\setbeamertemplate{navigation symbols}{}
\definecolor{background}{rgb}{0.945,0.941,0.96}
\definecolor{bluish}{rgb}{0.188,0.455,0.863}
\usepackage{montserrat}
\setbeamerfont{frametitle}{size=\Large,series=\bfseries}
\setbeamerfont{title}{size=\Huge,series=\bfseries}
\setbeamerfont{date}{shape=\itshape}
\setbeamercolor{title}{bg=bluish}
\setbeamercolor{frametitle}{bg=bluish}
\setbeamercolor{background canvas}{bg=background}
\setbeamercolor{itemize item}{fg=bluish}
\setbeamercolor{part name}{fg=background}
\setbeamercolor{part title}{bg=bluish}
\setbeamertemplate{footline}[text line]{\hfill\raisebox{5ex}{\insertshorttitle~~~~\insertframenumber/\inserttotalframenumber~~~~\includegraphics[width=5em]{Logo-Roblox-Black-Full.png}}}
\AtBeginPart{{\setbeamertemplate{footline}{}\frame{\partpage}}}

\newcommand{\erase}{\mathsf{erase}}

\title{Goals of the Luau~Type~System}
\author{Lily Brown \and Andy Friesen \and Alan Jeffrey}
\institute[Roblox]{\includegraphics[width=15em]{Logo-Roblox-Black-Full.png}}
\date[HATRA '21]{\textit{Human Aspects of Types and Reasoning Assistants} 2021}

\begin{document}

{\setbeamertemplate{footline}{}\frame{\titlepage}}

\part{Creator Goals}

\begin{frame}

\frametitle{Roblox}

A platform for creating shared immersive 3D experiences: 
\begin{itemize}
  \item \textbf{Many}: 20 million experiences, 8 million creators.
  \item \textbf{At scale}: e.g.~\emph{Adopt Me!} has 10 billion plays.
  \item \textbf{Learners}: e.g.~200+ kids' coding camps in 65+ countries.
  \item \textbf{Professional}: 345k creators monetizing experiences.
\end{itemize}
A very heterogeneous community.

\end{frame}

\begin{frame}

\frametitle{Roblox developer community}

All developers are important:
\begin{itemize}
  \item \textbf{Learners}: energetic creative community.
  \item \textbf{Professionals}: high-quality experiences.
  \item \textbf{Everyone inbetween}: some learners become professionals!
\end{itemize}
Satisfying everyone is sometimes challenging.

\end{frame}

\begin{frame}

\frametitle{Roblox Studio}

Demo time!

\end{frame}

\begin{frame}

\frametitle{Learners have immediate goals}

E.g. ``when a player steps on the button, advance the slide''.
\begin{itemize}
  \item \textbf{3D scene editor} meets most goals, e.g.~model parts.
  \item \textbf{Programming} is needed for reacting to events, e.g.~collisions.
  \item \textbf{Onboarding} is very different from ``let's learn to program''.
  \item \textbf{Google Stack Overflow} is a common workflow.
  \item \textbf{Type-driven tools} are useful, e.g.~autocomplete or API help.
  \item \textbf{Type errors} may be useful (e.g.~catching typos) but some are not.
\end{itemize}
Type systems should help or get out of the way.

\end{frame}

\begin{frame}

\frametitle{Professionals have long-term goals}

E.g. ``decrease user churn'' or ``improve frame rate''.
\begin{itemize}
\item \textbf{Code planning}: programs are incomplete.
\item \textbf{Code refactoring}: programs change.
\item \textbf{Defect detection}: programs have bugs.
\end{itemize}
Type-driven development is a useful technique!

\end{frame}

\part{Luau Type System}

\begin{frame}

\frametitle{Infallible types}

Goal: \emph{support type-driven tools (e.g. autocomplete) for all programs.}
\begin{itemize}
\item \textbf{Traditional typing judgment} says nothing about ill-typed terms.
\item \textbf{Infallible judgment}: every term gets a type.
\item \textbf{Flag type errors}: elaboration introduces \emph{flagged} subterms.
\end{itemize}

\emph{Related work}:
\begin{itemize}
\item Type error reporting, program repair.
\item Typed holes (e.g. in Hazel).
\end{itemize}

\end{frame}

\begin{frame}

\frametitle{Strict types}

Goal: \emph{no false negatives}.

\begin{itemize}
\item \textbf{Strict mode} enabled by developers who want defect detection.
\item \textbf{Business as usual} soundness via progress + preservation.
\item \textbf{Gradual types} for programs with flagged type errors.
\end{itemize}

\emph{Related work}:
\begin{itemize}
\item Lots and lots for type safety.
\item Gradual typing, blame analysis, migratory types\dots
\end{itemize}

\end{frame}

\begin{frame}

\frametitle{Nonstrict types}

Goal: \emph{no false positives}.

\begin{itemize}
\item \textbf{Nonstrict mode} enabled by developers who want type-drive tools.
\item \textbf{Victory condition} does not have an obvious definition!
\item \textbf{A shot at it}: a program is \emph{incorrectly flagged} if it contains
  a flagged value (i.e.~a flagged program has successfully terminated).
\item \textbf{Progress + correct flagging} is what we want???
\end{itemize}

\emph{Related work}:
\begin{itemize}
\item Success types (e.g. Erlang Dialyzer).
\item Incorrectness Logic.
\end{itemize}

\end{frame}

\begin{frame}

\frametitle{Mixing types}

Goal: \emph{support mixed strict/nonstrict development}.

\begin{itemize}
\item \textbf{Per-module} strict/nonstrict mode.
\item \textbf{Combined} progress + preservation with progress + correct flagging?
\end{itemize}

\emph{Related work}:
\begin{itemize}
\item Some on mixed languages, but with shared safety properties.
\end{itemize}
  
\end{frame}

\begin{frame}

\frametitle{Type inference}

Goal: \emph{provide benefits of type-directed tools to everyone}.

\begin{itemize}
\item \textbf{Infer types} for all variables.  Resist the urge to give up and ascribe a top type when an error is encountered.
\item \textbf{System F} is in Luau, so everything is undecidable. Yay heuristics!
\item \textbf{Different modes} currently infer different types. Boo!
\end{itemize}

\emph{Related work}:
\begin{itemize}
\item Lots, though not on mixed modes.
\end{itemize}

\end{frame}

\part{Thank you!\\Roblox is hiring!}

\end{document}
