mirror of
https://github.com/luau-lang/luau.git
synced 2024-11-15 14:25:44 +08:00
Slides for HATRA talk (#74)
* Added HATRA talk slides Co-authored-by: Andy Friesen <afriesen@roblox.com>
This commit is contained in:
parent
2834eece1b
commit
341afd9f63
3
papers/.gitignore
vendored
3
papers/.gitignore
vendored
@ -7,3 +7,6 @@
|
||||
*.log
|
||||
*.out
|
||||
*.xcp
|
||||
*.nav
|
||||
*.snm
|
||||
*.toc
|
||||
|
BIN
papers/hatra21/Logo-Roblox-Black-Full.png
Normal file
BIN
papers/hatra21/Logo-Roblox-Black-Full.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 69 KiB |
@ -27,8 +27,10 @@ sudo tlmgr install preprint
|
||||
sudo tlmgr install libertine
|
||||
sudo tlmgr install inconsolata
|
||||
sudo tlmgr install newtx
|
||||
sudo tlmgr install latexmk
|
||||
```
|
||||
sudo tlmgr install latexmk`
|
||||
sudo tlmgr install montserrat
|
||||
sudo tlmgr install ly1
|
||||
``
|
||||
|
||||
## Building the paper
|
||||
|
||||
|
BIN
papers/hatra21/talk.pdf
Normal file
BIN
papers/hatra21/talk.pdf
Normal file
Binary file not shown.
203
papers/hatra21/talk.tex
Normal file
203
papers/hatra21/talk.tex
Normal file
@ -0,0 +1,203 @@
|
||||
\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}
|
Loading…
Reference in New Issue
Block a user