Skip to content

21/10/2020, Peter Sovietov

Очередное подтверждение тому факту, что работа над компиляторами – это не только известные проекты-бегемоты в духе LLVM/GCC для 2-3 популярных архитектур и виртуальных машин.

Вы слышали о BPF? Впрочем, что я говорю, если читаете внимательно PLComp, то, конечно, слышали. Но, в любом случае, есть замечательная заметка, которая вводит в предмет:

BPF, XDP, Packet Filters and UDP https://fly.io/blog/bpf-xdp-packet-filters-and-udp/

Посмотрите, сколько всего интересного! Узкая предметная область, виртуальные машины, JIT-компиляция, статический анализ кода, верификация.

В заметке есть ссылка на хорошую статью 1999 года:

BPF+: Exploiting Global Data-flow Optimization in a Generalized Packet Filter Architecture https://andrewbegel.com/papers/bpf.pdf

Ничего себе, да? Такие-то технологии для, вроде бы, заурядной задачи фильтрации пакетов!

И вот кульминация, статья уже совсем свежая:

Specification and verification in the field: Applying formal methods to BPF just-in-time compilers in the Linux kernel https://unsat.cs.washington.edu/papers/nelson-jitterbug.pdf

Складывается ощущение, что BPF – своеобразный полигон для обкатки перспективных технологий компиляции. Это объяснимо: на исходный язык и вычисления накладываются жесткие ограничения, сама виртуальная машина простая – есть где развернуться и применить что-нибудь изощренное. И, разумеется, интересны перспективы использования BPF в специализированных аппаратных решениях.

P.S. Вообще, в области обработки сетевых пакетов компиляторные технологии в целом развиваются очень интересным образом, существуют работающие подходы из области синтеза программ и я к этой теме еще обязательно вернусь.

#bpf #analysis #verification #jit #vm


16/10/2020, Vladimir Kazanov

Обсуждения вокруг эффективности интерпретатора и компилятора LuaJIT не утихают в нишевых сообществах до сих пор, при этом сам автор развернутых пояснений так и не оставил. Отдельные его комментарии можно найти на Reddit и в рассылке lua:

http://lua-users.org/lists/lua-l/2008-07/msg00651.html http://lua-users.org/lists/lua-l/2010-11/msg00437.html http://lua-users.org/lists/lua-l/2011-02/msg00671.html http://lua-users.org/lists/lua-l/2011-02/msg00742.html https://www.reddit.com/r/programming/comments/hkzg8/author_of_luajit_explains_why_compilers_cant_beat/c1w8xyz/?context=3 https://www.reddit.com/r/programming/comments/badl2/luajit_2_beta_3_is_out_support_both_x32_x64/c0lrus0/

JIT #Lua

#jit #lua


25/07/2020, Peter Sovietov

Детальный анализ трассирующего JIT-компилятора Lua

LuaJIT https://github.com/MethodicalAcceleratorDesign/MADdocs/blob/master/luajit/luajit-doc.pdf

JIT

#jit #lua


21/05/2020

Недавно (27-28 апреля, 2020) состоялся европейский симпозиум по Лиспу.

European Lisp Symposium https://www.european-lisp-symposium.org/2020/ Видеозаписи докладов: https://www.youtube.com/playlist?list=PLA66mD-6yK8yjlJCI0Ay2f2IvvmB9Ktga

Ниже краткая информация о 3 докладах по околокомпиляторной тематике:

Partial Evaluation Based CPS Transformation: An Implementation Case Study Описание компилятора для диалекта Лиспа pLisp. В компиляторе используются частичные вычисления и CPS. Слайды: https://www.european-lisp-symposium.org/static/2020/jayaprakash-slides.pdf Текст доклада в сборнике: https://www.european-lisp-symposium.org/static/proceedings/2020.pdf

LLVM Code Generation for Open Dylan Dylan — это диалект Лиспа с Алгол-подобным синтаксисом. В начале 90-х этот язык развивался компанией Apple. В докладе представлено описание генератора кода для Dylan на основе LLVM. Слайды: https://www.european-lisp-symposium.org/static/2020/housel-slides.pdf Текст доклада в сборнике: https://www.european-lisp-symposium.org/static/proceedings/2020.pdf

Later Binding: Just in Time Compilation of a Younger Dynamic Programming Language Краткий анализ компилятора LuaJIT Видео выступления: https://www.youtube.com/watch?v=FBk5XAEhu2s Текст доклада в сборнике: https://www.european-lisp-symposium.org/static/proceedings/2020.pdf

#cps #pe #jit #conf #llvm


19/05/2020

Работа по синтезу программ с использованием Rosette (Racket). Cинтезируется JIT-компилятор DSL BPF (ядро Linux) в машинный код (в примере использован RISC-V) Synthesizing JIT Compilers for In-Kernel DSLs https://www.cs.utexas.edu/~isil/jitsynth.pdf

Подробности о BPF VM: BPF: A New Type of Software http://www.brendangregg.com/blog/2019-12-02/bpf-a-new-type-of-software.html

#jit #synthesis #bpf