Недавние конференции (статьи доступны)
CGO 2020 (порождение кода и оптимизация)
https://cgo-conference.github.io/cgo2020/program/
СС 2020 (построение компиляторов)
https://conf.researchr.org/program/CC-2020/program-CC-2020
PLDI 2020 (проектирование и реализация языков программирования)
https://pldi20.sigplan.org/program/program-pldi-2020
HOPL IV (история языков программирования)
https://hopl4.sigplan.org/track/hopl-4-papers#List-of-Accepted-Papers
#conf
CGO 2020 (порождение кода и оптимизация)
https://cgo-conference.github.io/cgo2020/program/
СС 2020 (построение компиляторов)
https://conf.researchr.org/program/CC-2020/program-CC-2020
PLDI 2020 (проектирование и реализация языков программирования)
https://pldi20.sigplan.org/program/program-pldi-2020
HOPL IV (история языков программирования)
https://hopl4.sigplan.org/track/hopl-4-papers#List-of-Accepted-Papers
#conf
Статьи по современным легковесным методам порождения кода
Destination-Driven Code Generation
https://pdfs.semanticscholar.org/dcb8/8719880e1f76ad71fb1c5aebb118e2ecfe71.pdf
One-pass Code Generation in V8
https://github.com/eatonphil/one-pass-code-generation-in-v8/blob/master/One-pass%20Code%20Generation%20in%20V8.pdf
HotpathVM: An Effective JIT Compiler for Resource-constrained Devices
https://static.usenix.org/events/vee06/full_papers/p144-gal.pdf
#codegen
Destination-Driven Code Generation
https://pdfs.semanticscholar.org/dcb8/8719880e1f76ad71fb1c5aebb118e2ecfe71.pdf
One-pass Code Generation in V8
https://github.com/eatonphil/one-pass-code-generation-in-v8/blob/master/One-pass%20Code%20Generation%20in%20V8.pdf
HotpathVM: An Effective JIT Compiler for Resource-constrained Devices
https://static.usenix.org/events/vee06/full_papers/p144-gal.pdf
#codegen
CBS — система для описания компонентной спецификации ЯП.
В каком-то смысле это аналог LLVM для формальной семантики. Идея в том, чтобы транслировать ЯП в элементарные, строго определенные конструкции, называемые funcons.
https://plancomps.github.io/CBS-beta/
#semantics
В каком-то смысле это аналог LLVM для формальной семантики. Идея в том, чтобы транслировать ЯП в элементарные, строго определенные конструкции, называемые funcons.
https://plancomps.github.io/CBS-beta/
#semantics
Programming Paradigms for Dummies: What Every Programmer Should Know
Ликбез по основным принципам ЯП: классификация, вопросы представления состояния, конкурентности и параллелизма.
https://www.info.ucl.ac.be/~pvr/VanRoyChapter.pdf
Ликбез по основным принципам ЯП: классификация, вопросы представления состояния, конкурентности и параллелизма.
https://www.info.ucl.ac.be/~pvr/VanRoyChapter.pdf
Крупнейшая конференция по истории ЯП - HOPL IV - была перенесена, но некоторые интересные ретроспективные обзоры уже доступны:
The History of Standard ML
https://smlfamily.github.io/history/SML-history.pdf
Evolution of Emacs Lisp
https://www.iro.umontreal.ca/~monnier/hopl-4-emacs-lisp.pdf
History of Logo
https://escholarship.org/uc/item/1623m1p3
The Early History of F#
https://fsharp.org/history/hopl-final/hopl-fsharp.pdf
A History of Clojure
https://clojure.org/about/history
A History of the Oz Multiparadigm Language
https://www.info.ucl.ac.be/~pvr/hopl20main-p14-p-329dcad--final.pdf
Thriving in a Crowded and Changing World: C++ 2006–2020
https://www.stroustrup.com/hopl20main-p5-p-bfc9cd4--final.pdf
Остальные доклады: https://dl.acm.org/toc/pacmpl/2020/4/HOPL
#conf #history
The History of Standard ML
https://smlfamily.github.io/history/SML-history.pdf
Evolution of Emacs Lisp
https://www.iro.umontreal.ca/~monnier/hopl-4-emacs-lisp.pdf
History of Logo
https://escholarship.org/uc/item/1623m1p3
The Early History of F#
https://fsharp.org/history/hopl-final/hopl-fsharp.pdf
A History of Clojure
https://clojure.org/about/history
A History of the Oz Multiparadigm Language
https://www.info.ucl.ac.be/~pvr/hopl20main-p14-p-329dcad--final.pdf
Thriving in a Crowded and Changing World: C++ 2006–2020
https://www.stroustrup.com/hopl20main-p5-p-bfc9cd4--final.pdf
Остальные доклады: https://dl.acm.org/toc/pacmpl/2020/4/HOPL
#conf #history
Авторы экспериментального компилятора для Emacs Lisp на базе libgccjit опубликовали работу, описывающие основные фазы работы компилятора
Bringing GNU Emacs to Native Code:
https://zenodo.org/record/3736363/files/GCCEMACS_proceeding.pdf?download=1
#lisp
Bringing GNU Emacs to Native Code:
https://zenodo.org/record/3736363/files/GCCEMACS_proceeding.pdf?download=1
#lisp
Работы по практическому применению передовых подходов E-Graphs (дедуктивный синтез программ) и Equality Saturation (решение для проблемы phase ordering).
Особенно интересно, что для серьезных примеров использования взяты области, далекие от традиционных целевых представлений компиляторов. Это показывает, что компиляторные технологии имеют более широкое применение, чем иногда принято думать.
Carpentry Compiler
https://grail.cs.washington.edu/projects/carpentrycompiler/files/CarpentryCompiler.pdf
Synthesizing Structured CAD Models with Equality Saturation and Inverse Transformations
https://jamesrwilcox.com/szalinski.pdf
Для работы с E-Graphs авторами разработана библиотека egg (есть веб-демо).
egg: Easy, Efficient, and Extensible E-graphs
https://arxiv.org/pdf/2004.03082.pdf
https://github.com/mwillsey/egg
#optimization
Особенно интересно, что для серьезных примеров использования взяты области, далекие от традиционных целевых представлений компиляторов. Это показывает, что компиляторные технологии имеют более широкое применение, чем иногда принято думать.
Carpentry Compiler
https://grail.cs.washington.edu/projects/carpentrycompiler/files/CarpentryCompiler.pdf
Synthesizing Structured CAD Models with Equality Saturation and Inverse Transformations
https://jamesrwilcox.com/szalinski.pdf
Для работы с E-Graphs авторами разработана библиотека egg (есть веб-демо).
egg: Easy, Efficient, and Extensible E-graphs
https://arxiv.org/pdf/2004.03082.pdf
https://github.com/mwillsey/egg
#optimization
Основные работы по методу насыщения равенствами (equality saturation)
Denali: A Goal-directed Superoptimizer (в работе описывается применение E-Graphs для задач оптимизации программ)
https://courses.cs.washington.edu/courses/cse501/15sp/papers/joshi.pdf
Equality Saturation: A New Approach to Optimization (вместо E-Graphs используются PEG/E-PEG, поддерживающие управляющие конструкции)
https://www.cs.cornell.edu/~ross/publications/eqsat/
"Доказательство свойств функциональных программ методом насыщения равенствами" (диссертация на русском языке)
https://keldysh.ru/council/1/2017-grechanik/diss.pdf
#optimization #synth
Denali: A Goal-directed Superoptimizer (в работе описывается применение E-Graphs для задач оптимизации программ)
https://courses.cs.washington.edu/courses/cse501/15sp/papers/joshi.pdf
Equality Saturation: A New Approach to Optimization (вместо E-Graphs используются PEG/E-PEG, поддерживающие управляющие конструкции)
https://www.cs.cornell.edu/~ross/publications/eqsat/
"Доказательство свойств функциональных программ методом насыщения равенствами" (диссертация на русском языке)
https://keldysh.ru/council/1/2017-grechanik/diss.pdf
#optimization #synth
Program Analysis
Свежий (весна 2020) курс по анализу программ, с неплохим выбором тем.
https://cmu-program-analysis.github.io/
#analysis
Свежий (весна 2020) курс по анализу программ, с неплохим выбором тем.
https://cmu-program-analysis.github.io/
#analysis
О вычислительной универсальности PEG-парсеров.
The computational power of Parsing Expression Grammars
https://arxiv.org/pdf/1902.08272.pdf
#parsing
The computational power of Parsing Expression Grammars
https://arxiv.org/pdf/1902.08272.pdf
#parsing
Две недавние статьи с участием Alessandro Warth. A. Warth — разработчик системы oMeta и автор известной работы по адаптации Packrat-парсеров для поддержки левосторонней рекурсии.
Incremental Packrat Parsing (оригинальная идея по использованию Pakrat-таблицы для реализации инкрементального разбора)
https://dl.acm.org/doi/pdf/10.1145/3136014.3136022
Recognising and Generating Terms using Derivatives of Parsing Expression Grammars
Использование производных Бржозовского в PEG-парсере для порождения предложений описываемого языка. Может использоваться в задаче тестирования компилятора (fuzzing). Но особенно интересно расширить эту идею на PEG с иерархическими структурами данных -- и порождать тестовые примеры для них.
https://arxiv.org/pdf/1801.10490.pdf
#parsing
Incremental Packrat Parsing (оригинальная идея по использованию Pakrat-таблицы для реализации инкрементального разбора)
https://dl.acm.org/doi/pdf/10.1145/3136014.3136022
Recognising and Generating Terms using Derivatives of Parsing Expression Grammars
Использование производных Бржозовского в PEG-парсере для порождения предложений описываемого языка. Может использоваться в задаче тестирования компилятора (fuzzing). Но особенно интересно расширить эту идею на PEG с иерархическими структурами данных -- и порождать тестовые примеры для них.
https://arxiv.org/pdf/1801.10490.pdf
#parsing
Необычный подход к построению PEG-подобного парсера на основе восходящего разбора.
Pika parsing: parsing in reverse solves the left recursion and error recovery problems
https://arxiv.org/pdf/2005.06444.pdf
#parsing
Pika parsing: parsing in reverse solves the left recursion and error recovery problems
https://arxiv.org/pdf/2005.06444.pdf
#parsing
В Retrofitting Parallelism onto OCaml авторы разбирают технические решения и компромисссы Multicore Ocaml, основное внимание уделяя сборщику мусора:
https://arxiv.org/pdf/2004.11663.pdf
#ocaml #gc #garbagecollection #multicore
https://arxiv.org/pdf/2004.11663.pdf
#ocaml #gc #garbagecollection #multicore
В стадии call for papers
Конференция по ЯП с управляемым кодом и VM
MPLR 2020
Ноябрь 4-6, 2020
https://mplr2020.cs.manchester.ac.uk/index.php/mplr/call-for-papers
Симпозиум по ЯП и системам
APLAS 2020
30 ноября 2020
https://conf.researchr.org/home/aplas-2020
#conf
Конференция по ЯП с управляемым кодом и VM
MPLR 2020
Ноябрь 4-6, 2020
https://mplr2020.cs.manchester.ac.uk/index.php/mplr/call-for-papers
Симпозиум по ЯП и системам
APLAS 2020
30 ноября 2020
https://conf.researchr.org/home/aplas-2020
#conf
Femtolisp — минималистичный интерпретатор диалекта LISP.
https://github.com/JeffBezanson/femtolisp
Автор стал впоследствии работать над Julia. На femtolisp написаны лексер и парсер Julia.
#lisp #interpreter
https://github.com/JeffBezanson/femtolisp
Автор стал впоследствии работать над Julia. На femtolisp написаны лексер и парсер Julia.
#lisp #interpreter
GitHub
GitHub - JeffBezanson/femtolisp: a lightweight, robust, scheme-like lisp implementation
a lightweight, robust, scheme-like lisp implementation - JeffBezanson/femtolisp
Работы Ian Piumarta, участника проекта STEPS
Maru
Миниатюрный расширяемый Лисп-подобный язык с компилятором в IA32-код. Использовался в проекте STEPS.
Open, extensible composition models
https://www.piumarta.com/freeco11/freeco11-piumarta-oecm.pdf
STEPS Toward the Reinvention of Programming, 2012 Final Report
http://www.vpri.org/pdf/tr2012001_steps.pdf
PEG-based transformer provides front-, middleand back-end stages in a simple compiler
http://www.vpri.org/pdf/tr2010003_PEG.pdf
Шедевр изящества и миниатюризации в области генераторов компиляторов.
#lisp #metacompiler
Maru
Миниатюрный расширяемый Лисп-подобный язык с компилятором в IA32-код. Использовался в проекте STEPS.
Open, extensible composition models
https://www.piumarta.com/freeco11/freeco11-piumarta-oecm.pdf
STEPS Toward the Reinvention of Programming, 2012 Final Report
http://www.vpri.org/pdf/tr2012001_steps.pdf
PEG-based transformer provides front-, middleand back-end stages in a simple compiler
http://www.vpri.org/pdf/tr2010003_PEG.pdf
Шедевр изящества и миниатюризации в области генераторов компиляторов.
#lisp #metacompiler
Полезная ссылка для участия в спорах на тему, какой ЯП выбрать для реализации компилятора
Comparing the Same Project in Rust, Haskell, C++, Python, Scala and OCaml
https://thume.ca/2019/04/29/comparing-compilers-in-rust-haskell-c-and-python/
#compiler #implementation #comparison #education #rust #haskell #cpp #python #scala #ocaml
Comparing the Same Project in Rust, Haskell, C++, Python, Scala and OCaml
https://thume.ca/2019/04/29/comparing-compilers-in-rust-haskell-c-and-python/
#compiler #implementation #comparison #education #rust #haskell #cpp #python #scala #ocaml
Работа по синтезу программ с использованием 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
#synthesis #jit #bpf
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
#synthesis #jit #bpf
A Language for Describing Optimization Strategies
Пример использования стратегического переписывания термов в духе Stratego. В статье демонстрируются оптимизирующие преобразования на Scala, для GPU и других ускорителей.
https://arxiv.org/pdf/2002.02268.pdf
#optimization
Пример использования стратегического переписывания термов в духе Stratego. В статье демонстрируются оптимизирующие преобразования на Scala, для GPU и других ускорителей.
https://arxiv.org/pdf/2002.02268.pdf
#optimization
На этой неделе появился официальный self-hosted дистрибутив функционального языка с зависимыми типами Idris 2.
На текущем этапе он использует в качестве бэкенда один из трех компиляторов Scheme: Chez, Racket или Gambit. Как и в первой версии Idris, есть инфраструктура для создания собственных бэкендов на основе нескольких IR c лямбдами (обычный LC, lifted форма, ANF, виртуальная машина с замыканиями).
https://github.com/idris-lang/Idris2/
Why is Idris 2 so much faster than Idris 1?
https://www.type-driven.org.uk/edwinb/why-is-idris-2-so-much-faster-than-idris-1.html
#fp
На текущем этапе он использует в качестве бэкенда один из трех компиляторов Scheme: Chez, Racket или Gambit. Как и в первой версии Idris, есть инфраструктура для создания собственных бэкендов на основе нескольких IR c лямбдами (обычный LC, lifted форма, ANF, виртуальная машина с замыканиями).
https://github.com/idris-lang/Idris2/
Why is Idris 2 so much faster than Idris 1?
https://www.type-driven.org.uk/edwinb/why-is-idris-2-so-much-faster-than-idris-1.html
#fp
GitHub
GitHub - idris-lang/Idris2: A purely functional programming language with first class types
A purely functional programming language with first class types - idris-lang/Idris2