\documentclass[12pt]{beamer} \usepackage[utf8]{inputenc} \usepackage[main=russian,english]{babel} \usepackage{fontspec} \usepackage{listings} \setmainfont{JetBrains Mono} \setsansfont{JetBrains Mono} \usetheme{metropolis} \newenvironment{code}{\ttfamily}{\par} \title{tvix-eval \\ компилятор и рантайм для Nix, на Rust} \titlegraphic{\vspace{4.8cm}\flushright\includegraphics[width=6cm,keepaspectratio=true]{tvix-logo.png}} \date{2023-09-07} \author{Винсент Амбо} \institute{TVL} \begin{document} %% Slide -1 (before counter): \begin{frame} \begin{center} \titlepage \end{center} \end{frame} %% Slide 0 (title): \begin{frame} \begin{center} \titlepage \end{center} \end{frame} %% Slide 1: \begin{frame}{\textbf{Т}he \textbf{V}irus \textbf{L}ounge} \begin{itemize} \item онлайн-комьюнити, занимающееся тулингом для монорепо \item основной фокус на Nix \item Nix не только для сборки пакетов \item Хотелось решение, чтобы использовать Nix везде \end{itemize} \end{frame} %% Slide 2: \begin{frame}{Особенности языка Nix} \begin{itemize} \item Ленивый язык. Вычислять все сразу нельзя. \item Язык развивался органично. \item Большинство кода на Nix --- в одном месте: \begin{code}nixpkgs\end{code} \end{itemize} \end{frame} %% Slide 3: \begin{frame}{Текущая имплементация: C++ Nix} \lstinputlisting[ language=c++, basicstyle={\scriptsize} ]{cppnix-example-lexer.cpp} \end{frame} %% Slide 4: \begin{frame}{Текущая имплементация: C++ Nix} \lstinputlisting[ language=c++, basicstyle={\scriptsize} ]{cppnix-example-smuggling.cpp} \end{frame} %% Slide 5: \section{``Let's rewrite it in Rust!''} %% Slide 6: \section*{Спасибо, jD91mZM2!\\\normalsize{автор ``rnix-parser''; *2002 - \textdagger 2021}} %% Slide 7: \begin{frame}{tvix-eval, - (язык) Nix, на Rust} \begin{itemize} \item написано с существующим парсером \item bytecode-интерпретатор, вместо tree-walk \item должна работать не только для остальных частей tvix \end{itemize} \end{frame} %% Slide 8: \begin{frame}{tvix-eval, основные части} \begin{enumerate} \item собственный байткод и компилятор \end{enumerate} \end{frame} %% показать opcode.rs, быстро показать compiler/mod.rs %% Slide 9: \begin{frame}{tvix-eval, основные части} \begin{enumerate} \item собственный байткод и компилятор \item представление значений языка в рантайме \end{enumerate} \end{frame} %% показать Value %% Slide 10: \begin{frame}{tvix-eval, основные части} \begin{enumerate} \item собственный байткод и компилятор \item представление значении языка в рантайме \item ... и сам рантайм! \end{enumerate} \end{frame} %% показать VM \section{``Подожди, написать рантайм же не так просто?''} %% объяснить проблему со стеком и решение, показать диаграмму \section{``А откуда знаешь, что это все правильно работает?''} %% показать как тесты работают %% объяснить дебагинг, Твиксболт и тд %% Slide 10: \begin{frame}{tvix-eval, в браузере} \begin{itemize} \item удивительно легко делать \item но есть сложности в \begin{code}std::\end{code} % показать пример \end{itemize} \end{frame} %% Slide 11: \begin{frame}{А что дальше?} В tvix-eval есть еще кое-какие интересные проблемы. Может ты их решишь? \end{frame} \begin{frame}{Спасибо!} \begin{center} \includegraphics[width=6cm,keepaspectratio=true]{qrcode.png} https://tazj.in/blog/tvix-eval-talk-2023 \\ t.me/tazjin | t.me/tazlog \end{center} \end{frame} \end{document}