Finished first draft of HATRA talk

This commit is contained in:
ajeffrey@roblox.com 2021-09-21 17:50:24 -05:00
parent c0f009fca1
commit 4113b520fa
2 changed files with 32 additions and 36 deletions

Binary file not shown.

View file

@ -38,10 +38,10 @@ A platform for creating shared immersive 3D experiences:
\begin{itemize} \begin{itemize}
\item \textbf{Many}: 20 million experiences, 8 million creators. \item \textbf{Many}: 20 million experiences, 8 million creators.
\item \textbf{At scale}: e.g.~\emph{Adopt Me!} has 10 billion plays. \item \textbf{At scale}: e.g.~\emph{Adopt Me!} has 10 billion plays.
\item \textbf{Young}: 200+ kids' coding camps in 65+ countries. \item \textbf{Learners}: e.g.~200+ kids' coding camps in 65+ countries.
\item \textbf{Professional}: 345k creators monetizing experiences. \item \textbf{Professional}: 345k creators monetizing experiences.
\end{itemize} \end{itemize}
A very heterogenous community. A very heterogeneous community.
\end{frame} \end{frame}
@ -73,12 +73,12 @@ Demo time!
E.g. ``when a player steps on the button, advance the slide''. E.g. ``when a player steps on the button, advance the slide''.
\begin{itemize} \begin{itemize}
\item Most goals can be met by the 3D environment editor. \item \textbf{3D scene editor} meets most goals, e.g.~model parts.
\item Some need programming, e.g. reacting to collisions or timers. \item \textbf{Programming} is needed for reacting to events, e.g.~collisions.
\item Very different onboarding than ``let's learn to program''. \item \textbf{Onboarding} is very different from ``let's learn to program''.
\item ``Google Stack Overflow'' is a common workflow. \item \textbf{Google Stack Overflow} is a common workflow.
\item Type-driven tools (e.g. autocomplete or API help) are useful. \item \textbf{Type-driven tools} are useful, e.g.~autocomplete or API help.
\item Some type errors (e.g. catching typos) are useful, but many are not. \item \textbf{Type errors} may be useful (e.g.~catching typos) but some are not.
\end{itemize} \end{itemize}
Type systems should help or get out of the way. Type systems should help or get out of the way.
@ -90,9 +90,9 @@ Type systems should help or get out of the way.
E.g. ``decrease user churn'' or ``improve frame rate''. E.g. ``decrease user churn'' or ``improve frame rate''.
\begin{itemize} \begin{itemize}
\item Code planning \item \textbf{Code planning}: programs are incomplete.
\item Code refactoring \item \textbf{Code refactoring}: programs change.
\item Defect detection \item \textbf{Defect detection}: programs have bugs.
\end{itemize} \end{itemize}
Type-driven development is a useful technique! Type-driven development is a useful technique!
@ -104,12 +104,11 @@ Type-driven development is a useful technique!
\frametitle{Infallible types} \frametitle{Infallible types}
\emph{Goal}: support type-driven tools (e.g. autocomplete) for all programs. Goal: \emph{support type-driven tools (e.g. autocomplete) for all programs.}
\begin{itemize} \begin{itemize}
\item Traditional typing judgment: $\Gamma\vdash M:T$ \item \textbf{Traditional typing judgment} says nothing about ill-typed terms.
\item Infallible judgment: $\Gamma\vdash M \Rightarrow N:T$, where $N$ may flag type errors \item \textbf{Infallible judgment}: every term gets a type.
\item For every $M$ and $\Gamma$, \item \textbf{Flag type errors}: elaboration introduces \emph{flagged} subterms.
there are $N$ and $T$ such that $\Gamma \vdash M \Rightarrow N : T$.
\end{itemize} \end{itemize}
\emph{Related work}: \emph{Related work}:
@ -124,12 +123,12 @@ Type-driven development is a useful technique!
\frametitle{Strict types} \frametitle{Strict types}
\emph{Goal}: no false negatives. Goal: \emph{no false negatives}.
\begin{itemize} \begin{itemize}
\item \emph{Strict mode} enabled by developers who want defect detection. \item \textbf{Strict mode} enabled by developers who want defect detection.
\item \emph{Business as usual} soundness via progress + preservation. \item \textbf{Business as usual} soundness via progress + preservation.
\item \emph{Gradual types} for programs with flagged type errors. \item \textbf{Gradual types} for programs with flagged type errors.
\end{itemize} \end{itemize}
\emph{Related work}: \emph{Related work}:
@ -144,14 +143,14 @@ Type-driven development is a useful technique!
\frametitle{Nonstrict types} \frametitle{Nonstrict types}
\emph{Goal}: no false positives. Goal: \emph{no false positives}.
\begin{itemize} \begin{itemize}
\item \emph{Nonstrict mode} enabled by developers who want type-drive tools. \item \textbf{Nonstrict mode} enabled by developers who want type-drive tools.
\item Not even obvious how to state the goals! \item \textbf{Victory condition} does not have an obvious definition!
\item A shot at it: a program is \emph{incorrectly flagged} if it contains \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). a flagged value (i.e.~a flagged program has successfully terminated).
\item Is progress + correct flagging what we want? \item \textbf{Progress + correct flagging} is what we want???
\end{itemize} \end{itemize}
\emph{Related work}: \emph{Related work}:
@ -169,14 +168,13 @@ Type-driven development is a useful technique!
Goal: \emph{support mixed strict/nonstrict development}. Goal: \emph{support mixed strict/nonstrict development}.
\begin{itemize} \begin{itemize}
\item Strict/nonstrict mode is enabled per-module. \item \textbf{Per-module} strict/nonstrict mode.
\item What happens when a codebase is mixed? \item \textbf{Combined} progress + preservation with progress + correct flagging?
\item Combine progress + preservation with progress + correct flagging?
\end{itemize} \end{itemize}
\emph{Related work}: \emph{Related work}:
\begin{itemize} \begin{itemize}
\item Not much? \item Some on mixed languages, but with shared safety properties.
\end{itemize} \end{itemize}
\end{frame} \end{frame}
@ -188,20 +186,18 @@ Goal: \emph{support mixed strict/nonstrict development}.
Goal: \emph{provide benefits of type-directed tools to everyone}. Goal: \emph{provide benefits of type-directed tools to everyone}.
\begin{itemize} \begin{itemize}
\item Infer types for all variables, don't just give them type any. \item \textbf{Infer types} for all variables, don't just give them type any.
\item Luau includes System F, so everything is undecidable. Yay heuristics! \item \textbf{System F} is in Luau, so everything is undecidable. Yay heuristics!
\item Currently, strict and nonstrict mode infer different types. Boo! \item \textbf{Different modes} currently infer different types. Boo!
\end{itemize} \end{itemize}
\emph{Related work}: \emph{Related work}:
\begin{itemize} \begin{itemize}
\item Lots. \item Lots, though not on mixed modes.
\end{itemize} \end{itemize}
\end{frame} \end{frame}
\part{Thank you!} \part{Thank you!\\Roblox is hiring!}
\part{Roblox is hiring!}
\end{document} \end{document}