diff options
Diffstat (limited to 'users/tazjin/presentations/tvix-eval-2023/presentation.pdfpc')
-rw-r--r-- | users/tazjin/presentations/tvix-eval-2023/presentation.pdfpc | 143 |
1 files changed, 96 insertions, 47 deletions
diff --git a/users/tazjin/presentations/tvix-eval-2023/presentation.pdfpc b/users/tazjin/presentations/tvix-eval-2023/presentation.pdfpc index 458624ff2d3f..ab5cba68bf45 100644 --- a/users/tazjin/presentations/tvix-eval-2023/presentation.pdfpc +++ b/users/tazjin/presentations/tvix-eval-2023/presentation.pdfpc @@ -1,49 +1,98 @@ { - "pdfpcFormat": 2, - "disableMarkdown": false, - "noteFontSize": 20, - "pages": [ - { - "idx": 0, - "label": "1", - "overlay": 0, - "note": "Ничего особенного, просто кто я?\nЧто такое ТВЛ?" - }, - { - "idx": 2, - "label": "3", - "overlay": 0, - "note": "Ленив: надо создать объекты, которые репрезентируют отложенное вычисление.\nОрганично: много фичей работают только случайно, без документации, через рандомное поведение. Нам придется в принципе заниматься reverse-engineering, и типа diff-driven-development.\nМонорепо: Большинство всего Nix-кода есть в nixpkgs, значит что мы можем его использовать в качестве ултимативного интеграционного теста." - }, - { - "idx": 3, - "label": "4", - "overlay": 0, - "note": "Видем тут кусок лексера C++ Никса. Такой код там обычный. Лексер создает структуры, которые используется в рантайм, а вообще нет разделение забот" - }, - { - "idx": 4, - "label": "5", - "overlay": 0, - "note": "Еще кусок. В стракте Env есть массив поинтеров типа Value, но на самом деле, там добавляют поинтеры других типов, например Expr, потому что это было 'удобный' способ передать эти данные. Рассказ про первый попыток твикса - форк." - }, - { - "idx": 5, - "label": "6", - "overlay": 0, - "note": "Мы решили переписать Nix. Пришлось разберется с вопромос, на каком языке. Нам ответ был очевидный: на Rust. Мы хотели строго и хорошо типизированный язык, современные фичи и так далее. Не буду вам тут Rust продать - вы уже знаете. Нам еще помогло, что кто-то уже написал хороший парсер Nix на Rust" - }, - { - "idx": 6, - "label": "7", - "overlay": 0, - "note": "Шведский парень с юзернэймом, который нельзя произносить, написал rnix пару лет назад. Очень удобный, быстрый парсер с хорошей репрезентацией AST Никса. К сожалению, он умер в 2021 и сам никогда не видел, к чему привел его проект. Мы очень благодарны ему за его работу, и я просто хотел упомянуть его здесь." - }, - { - "idx": 7, - "label": "8", - "overlay": 0, - "note": "Существующий парсер, не только потому что нам лень, но тоже, потому что в коммюнити разработываются много тулинга с помощью этого парсера. Значит, у нас единный кодбейз для этого.\nБайткод - объязнить.\nобяъзнить tvix и его чатей" - } - ] + "pdfpcFormat": 2, + "duration": 40, + "disableMarkdown": false, + "noteFontSize": 20, + "pages": [ + { + "idx": 1, + "label": "2", + "overlay": 0, + "note": "Привет, меня зовут .... Я уже много лет, с 2016г. примерно, пишу на Расте, и хотя на работе у меня часто бывают другие языки, Раст - любимый мой язык.\n\nПару лет назад, во время Кодида, я создал онлайн-коммюнити ТВЛ, и сегодня хочу вам об одном из наших проектов рассказать." + }, + { + "idx": 2, + "label": "3", + "overlay": 0, + "note": "монорепо: объяснить. Весь код орга в одном месте. Единный тулинг. Много из нас раньше работали в компаниях, где так делают (нп Гугл).\n\nМы хотели создать такой же тулинг, но открыто. Но у нас меньше ресурсов чем у Гугла, намного меньше. Пришлось выбрать эфф. способ.\nФокусируем на Никс, потому что (...). Есть доклад.\n\nМы начали его не только для пакетов использовать (конфиг и тд.), хотелось решение, которое работает везде." + }, + { + "idx": 3, + "label": "4", + "overlay": 0, + "note": "Будем фокусировать только на язык сейчас. Остальные части интересные, но не сегодня.\nЯзык ленивый, значит только вычисляем код, когда его результат нужен где-то.\nЗначит, нам нужен рантайм-представление отложенных вычислений.\nОрганично развивался: добавили фичи, когда нуждались. Много функтции работают только случайно, комбинации фич - часто странно. (шутка про С++?)\nНо есть хороший фактор: весь публичный код в принципе в одном репо. Объяснять nixpkgs." + }, + { + "idx": 4, + "label": "5", + "overlay": 0, + "note": "Текушая имплементация на С++. Вот пример. Кто-то здесь понимает, что мы видем? Это часть парсера в як, но тут создают рантайм-значения во время парсинга. Очень сложно понимать, читать, дебажить и так далее.\nЧитали парсер, и даже нашли там неизвестные фичи языка." + }, + { + "idx": 5, + "label": "6", + "overlay": 0, + "note": "Второй пример. Есть стракт Env, которая используется во многих местах в коде. Там массив типа Value.\nВот использование этого массива. Что мы видем? Кто понимает?\nДа, там на самом деле происходит каст на другой тип. Значит, в структуре добавляют данные, которые не подойдет. Очень unsafe!\n\nДа, что же делать? Пытались почистить код, но случилось burnout очень быстро. Меняешь одну маленькую штуку -> segfaults.\nПочему код вот такой? -> объяснять.\nПришлась очевидная идея." + }, + { + "idx": 6, + "label": "6", + "overlay": 1, + "note": "Переписать проекты полностью, обычно очень сложно. Но мы можем менять арх., и обходить переписивание некоторых частей.\nРаст - нам очевидный выбор для имплементация языка. Много нас знают Раст, и в целом, почему именно Раст, вы уже сами понимаете.\n\nМы от NLNet, организация, ..., получили денги за этого и начали с языком. Этот проект называем tvix-eval.\n\nЕсть еще одна важная причина для выбора Раста." + }, + { + "idx": 7, + "label": "6", + "overlay": 2, + "note": "Пару лет назад, шведский парень юзернеймом, который нельзя происносить, написал на Расте очень быстрый и в целом хороший парсер для Никса.\nЭтот парсер уже используется в разных с Никсом связанных проектах. Он скорее всего в пути стать дефольтним парсером Никса.\nКонечно, неплохо если мы его тоже используем.\nК сожалению, автор рникса умерл в 2021 году. Мали исвестно о том, что случилось. Мы ему очень благодарные, и я просто хотел его здесь упомянуть." + }, + { + "idx": 9, + "label": "8", + "overlay": 0, + "note": "показать opcode.rs, compiler/mod (compile_binop)\n\nчтобы он не разжирел (про variant_size_differences)\n" + }, + { + "idx": 10, + "label": "9", + "overlay": 0, + "note": "показать value/mod.rs, потом value/list.rs\n\nкороткая объяснение ситуации с Gc<...> vs. Rc<...>" + }, + { + "idx": 11, + "label": "10", + "overlay": 0, + "note": "показать vm/mod.rs\n\nпоследовательно выпольняет инструктции в execute_bytecode\n\nсначала на алфавитным порядке, потом с помощью профайлера меняли это" + }, + { + "idx": 12, + "label": "10", + "overlay": 1, + "note": "показать диаграмму\n\nгенераторый можно приостановить\n\nTCO - хвостовый вызов\n\nasync - очень наязчивный (intrusive), надо было его везде добавить, неудоб" + }, + { + "idx": 13, + "label": "10", + "overlay": 2, + "note": "Зависимо от времени, можно либо только про tvixbolt, либо тоже про тесты из cppnix" + }, + { + "idx": 14, + "label": "11", + "overlay": 0, + "note": "на самом деле удивительно легко, но сталкивались с проблемой, что он иногда перестал работать\n\nпоказать пример с SystemTime::now\n\nесть кое-какие библиотеки, которые мб помогут, но мы их пока не проверили\n\nв целом, wasm на расте довольно удобно" + }, + { + "idx": 15, + "label": "12", + "overlay": 0, + "note": "открытый проект, принимаем коммиты от всех\n\nесть еще баги, TODOs, и тд в tvix-eval\n\nно есть тоже остальные части твикса, что-то найдется" + }, + { + "idx": 16, + "label": "13", + "overlay": 0, + "note": "спасибо всем, вот ссылки, на QR-коде есть все вот этот вот, и там тоже потом добавлю сам доклад\n\nеще завтра начинается NixCon, если вам вдруг интересно, можно онлайн посмотреть. Там будет доклад про tvix тоже, но об остальных частях." + } + ] } |