PLComp
Open in Telegram
Π―Π·ΡΠΊΠΈ ΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΡ: Π²ΠΎΠΏΡΠΎΡΡ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΎΡ Π²Ρ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ° Π΄ΠΎ ΠΏΠΎΡΠΎΠΆΠ΄Π΅Π½ΠΈΡ ΠΌΠ°ΡΠΈΠ½Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°. ΠΠ²ΡΠΎΡΡ: @vekazanov @igorjirkov @true_grue @clayrat @eupp7 @alexanius @AntonTrunov @GabrielFallen @graetestofnoldor
Show moreThe country is not specifiedThe category is not specified
485
Subscribers
No data24 hours
-17 days
+530 days
Posts Archive
485
ΠΡΠ° Π½Π΅Π±ΠΎΠ»ΡΡΠ°Ρ Π·Π°ΠΌΠ΅ΡΠΊΠ° ΠΏΠΎΡΠ²ΡΡΠ΅Π½Π° Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΠΌ Π½ΠΎΠ²ΠΎΡΡΡΠΌ ΠΏΠΎ Π½Π°ΡΠ΅ΠΉ ΡΠ΅ΠΌΠ°ΡΠΈΠΊΠ΅.
ΠΠΎ-ΠΏΠ΅ΡΠ²ΡΡ
, Ρ
ΠΎΡΡ Π½Π°ΠΏΠΎΠΌΠ½ΠΈΡΡ, ΡΡΠΎ Π² ΠΈΡΠ½Π΅ ΠΏΡΠΎΡΠ»Π° ΠΊΠΎΠ½ΡΠ΅ΡΠ΅Π½ΡΠΈΡ PLDI 2022 ΠΈ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ ΠΈΠ· ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½Π½ΡΡ
ΡΠ°ΠΌ ΡΠ°Π±ΠΎΡ ΠΈΠΌΠ΅ΡΡ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠ½ΡΡ ΡΠ΅ΠΌΠ°ΡΠΈΠΊΡ. ΠΠΎΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° ΠΊΠΎΠ½ΡΠ΅ΡΠ΅Π½ΡΠΈΠΈ: https://pldi22.sigplan.org/program/program-pldi-2022/
ΠΠΎ-Π²ΡΠΎΡΡΡ
, Π΄Π°Π²Π°ΠΉΡΠ΅ ΠΏΠΎΠ³ΠΎΠ²ΠΎΡΠΈΠΌ ΠΎ Π²Π΅ΡΡΠΌΠ° Π΄ΠΎΡΡΠΎΠΉΠ½ΡΡ
ΠΊΠ½ΠΈΠ³Π°Ρ
, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΎΡΠΈΡΠΈΠ°Π»ΡΠ½ΠΎ ΡΠΎΠ»ΡΠΊΠΎ Π³ΠΎΡΠΎΠ²ΡΡΡΡ ΠΊ ΠΏΠ΅ΡΠ°ΡΠΈ ΠΈ Π²ΡΠΉΠ΄ΡΡ Π² 2022-2023 Π³Π³.
ΠΠ°Ρ ΠΆΠ΄Π΅Ρ ΡΡΠ΅ΡΡΠ΅ ΠΈΠ·Π΄Π°Π½ΠΈΠ΅ ΠΊΠ»Π°ΡΡΠΈΠΊΠΈ Engineering a Compiler. ΠΡΠΎΡΠΎΠ΅ ΠΈΠ·Π΄Π°Π½ΠΈΠ΅ Π²ΡΡΠ»ΠΎ Π² 2012 Π³ΠΎΠ΄Ρ ΠΈ ΠΌΠ½Π΅, ΡΠ²Ρ, ΠΏΠΎΠΊΠ° Π½Π΅ ΡΠ΄Π°Π»ΠΎΡΡ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ, Π² ΡΠ΅ΠΌ ΠΆΠ΅ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡΠΈ Π½ΠΎΠ²ΠΎΠ³ΠΎ ΠΈΠ·Π΄Π°Π½ΠΈΡ. Π‘ΡΠ΄Ρ ΠΏΠΎ Π²ΡΠ΅ΠΌΡ, Π½ΠΎΠ²Π°Ρ Π²Π΅ΡΡΠΈΡ Π·Π½Π°ΠΌΠ΅Π½ΠΈΡΠΎΠ³ΠΎ ΡΡΠ΅Π±Π½ΠΈΠΊΠ° Π²ΡΠΉΠ΄Π΅Ρ Π² ΡΡΠΎΠΌ ΡΠ΅Π½ΡΡΠ±ΡΠ΅: https://www.amazon.com/Engineering-Compiler-Keith-D-Cooper/dp/0128154128
Π ΡΠ΅Π²ΡΠ°Π»Π΅ 2023 Π³ΠΎΠ΄Π° Π²ΡΠΉΠ΄Π΅Ρ Essentials of Compilation Π² ΠΈΠ·Π΄Π°ΡΠ΅Π»ΡΡΡΠ²Π΅ MIT: https://mitpress.mit.edu/books/essentials-compilation ΠΠ°ΡΠ΅ΡΠΈΠ°Π» Π² ΡΠ°Π·Π½ΡΡ
ΡΠ΅Π΄Π°ΠΊΡΠΈΡΡ
Π΄Π°Π²Π½ΠΎ ΡΠΆΠ΅ ΠΏΡΠ±Π»ΠΈΠΊΠΎΠ²Π°Π»ΡΡ Π½Π° github: https://github.com/IUCompilerCourse/Essentials-of-Compilation
ΠΡΠ΅ ΠΎΠ΄Π½Π° Π΄ΠΎΠ²ΠΎΠ»ΡΠ½ΠΎ ΠΈΠ·Π²Π΅ΡΡΠ½Π°Ρ ΠΎΠ½Π»Π°ΠΉΠ½-ΠΊΠ½ΠΈΠ³Π° ΡΠΊΠΎΡΠΎ Π±ΡΠ΄Π΅Ρ Π½Π°ΠΏΠ΅ΡΠ°ΡΠ°Π½Π°. Π Π΅ΡΡ ΠΎΠ± SSA Book. ΠΡΠΈΡΠΈΠ°Π»ΡΠ½ΠΎ ΠΎΠ½Π° ΡΠ΅ΠΏΠ΅ΡΡ Π½Π°Π·ΡΠ²Π°Π΅ΡΡΡ SSA-based Compiler Design: https://link.springer.com/book/9783030805142 ΠΠ΄Π΅ΠΌ Π΅Π΅ Π±Π»ΠΈΠΆΠ΅ ΠΊ ΡΠ΅Π²ΡΠ°Π»Ρ 2023 Π³ΠΎΠ΄Π°.
ΠΠ°ΠΊΠΎΠ½Π΅Ρ, ΡΠΏΠΎΠΌΡΠ½Ρ ΠΎ Π½Π°ΡΡΠΎΡΡΠ΅ΠΌ "Π΄ΠΎΠ»Π³ΠΎΡΡΡΠΎΠ΅": Π½ΠΎΠ²ΠΎΠΉ Π²Π΅ΡΡΠΈΠΈ ΠΊΠ»Π°ΡΡΠΈΠΊΠΈ Programming Languages: An Interpreter-Based Approach" ΠΎΡ Samuel Kamin. ΠΠΎΠ²ΡΠΉ Π°Π²ΡΠΎΡ ΠΈ ΠΈΠ·Π²Π΅ΡΡΠ½ΡΠΉ ΠΊΠΎΠΌΠΏΡΡΡΠ΅ΡΠ½ΡΠΉ ΡΡΠ΅Π½ΡΠΉ, Norman Ramsey, ΡΠ°Π±ΠΎΡΠ°Π» Π½Π°Π΄ ΡΠ²ΠΎΠ΅ΠΉ Π²Π΅ΡΡΠΈΠ΅ΠΉ Π΅ΡΠ΅, ΠΊΠ°ΠΆΠ΅ΡΡΡ, Ρ 2005 Π³ΠΎΠ΄Π°. ΠΠ° ΠΏΡΠΎΡΡΠΆΠ΅Π½ΠΈΠΈ ΠΌΠ½ΠΎΠ³ΠΈΡ
Π»Π΅Ρ ΡΠ΅ΡΠ½ΠΎΠ²ΡΠ΅ Π²Π°ΡΠΈΠ°Π½ΡΡ ΡΡΠ΅Π±Π½ΠΈΠΊΠ° Π°Π΄ΡΠ΅ΡΠ½ΠΎ ΡΠ°ΡΡΡΠ»Π°Π»ΠΈΡΡ ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΠΌ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠ°ΠΌ Π² ΡΠ°Π·Π½ΡΡ
ΡΠ½ΠΈΠ²Π΅ΡΡΠΈΡΠ΅ΡΠ°Ρ
. Π, Π²ΠΎΡ, Π½Π°ΠΊΠΎΠ½Π΅Ρ, Π² ΡΡΠΎΠΌ ΠΎΠΊΡΡΠ±ΡΠ΅ ΠΊΠ½ΠΈΠ³Π° ΠΏΠΎΠ΄ ΠΎΡΠΈΡΠΈΠ°Π»ΡΠ½ΡΠΌ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ Programming Languages Build, Prove, and Compare Π±ΡΠ΄Π΅Ρ Π½Π°ΠΏΠ΅ΡΠ°ΡΠ°Π½Π°: https://www.cambridge.org/ru/academic/subjects/computer-science/programming-languages-and-applied-logic/programming-languages-build-prove-and-compare
485
ΠΠ΅ΡΠ²Π°Ρ ΡΠ°ΡΡΡ ΡΠΈΠΊΠ»Π° Π΄ΠΎΠΊΠ»Π°Π΄ΠΎΠ² ΠΎΠ± Π°Π²ΡΠΎΠΌΠ°ΡΠΈΠ·Π°ΡΠΈΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π² Π‘Π‘Π‘Π Π΄ΠΎΡΡΡΠΏΠ½Π° Π½Π° youtube.
Π¦Π΅Π»Ρ β Π½Π°ΠΏΠΎΠΌΠ½ΠΈΡΡ ΠΎ Ρ
ΠΎΡΠΎΡΠΎ Π·Π°Π±ΡΡΡΡ
ΠΈΠ΄Π΅ΡΡ
ΠΈ Π°Π»Π³ΠΎΡΠΈΡΠΌΠ°Ρ
, Π½Π΅ Π²Π΄Π°Π²Π°ΡΡΡ Π² ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΠΎΡΡΠΈ Π±ΠΈΠΎΠ³ΡΠ°ΡΠΈΠΉ ΠΈΡ
Π°Π²ΡΠΎΡΠΎΠ² ΠΈ Π΄Π΅ΡΠ°Π»ΠΈ ΡΡΡΡΠΎΠΉΡΡΠ²Π° Π²ΡΡΠΈΡΠ»ΠΈΡΠ΅Π»ΡΠ½ΡΡ
ΠΌΠ°ΡΠΈΠ½.
Π¦ΠΈΠΊΠ» ΡΠΎΡΡΠΎΠΈΡ ΠΈΠ· ΡΠ΅ΡΡΡΠ΅Ρ
ΡΠ°ΡΡΠ΅ΠΉ:
1. ΠΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΡΡΡΠΈΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ (50-Π΅ Π³ΠΎΠ΄Ρ).
2. Π’ΡΠ°Π½ΡΠ»ΡΡΠΎΡΡ (60-70-Π΅ Π³ΠΎΠ΄Ρ).
3. ΠΠ΅ΡΠ°Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΡ.
4. Π‘ΠΈΠ½ΡΠ΅Π· ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ.
ΠΡΡΠ°ΡΠΈ, ΠΈΠ΄Π΅Ρ Π΄ΠΎΠΊΠ»Π°Π΄Π° Π²ΠΎΠ·Π½ΠΈΠΊΠ»Π° ΡΠ»ΡΡΠ°ΠΉΠ½ΠΎ. ΠΠ»Ρ ΠΏΠ»Π°Π½ΠΈΡΡΠ΅ΠΌΠΎΠΉ ΠΊ ΠΈΠ·Π΄Π°Π½ΠΈΡ ΡΠ½ΡΠΈΠΊΠ»ΠΎΠΏΠ΅Π΄ΠΈΠΈ Β«ΠΡΡΠΎΡΠΈΠΈ ΠΎΡΠ΅ΡΠ΅ΡΡΠ²Π΅Π½Π½ΠΎΠ³ΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡΒ» Π½ΡΠΆΠ½Ρ Π±ΡΠ»ΠΈ ΡΡΠ°ΡΡΠΈ. ΠΠΎ ΠΌΠ½Π΅ ΠΎΠ±ΡΠ°ΡΠΈΠ»ΠΈΡΡ ΠΏΠΎΠ·Π΄Π½ΠΎ ΠΈ Ρ Π½Π°ΠΏΠΈΡΠ°Π» ΠΎΠ±Π·ΠΎΡΠ½ΡΡ Π·Π°ΠΌΠ΅ΡΠΊΡ, ΡΠ΅ΠΊΡΡΠΎΠΌ ΠΊΠΎΡΠΎΡΠΎΠΉ Π±ΡΠ» Π½Π΅ ΠΎΡΠ΅Π½Ρ Π΄ΠΎΠ²ΠΎΠ»Π΅Π½. Π£Π²Ρ, ΠΏΡΠΎΠ΅ΠΊΡ ΡΠ½ΡΠΈΠΊΠ»ΠΎΠΏΠ΅Π΄ΠΈΠΈ ΡΠ°ΠΊ, ΠΏΠΎΡ
ΠΎΠΆΠ΅, ΠΈ Π½Π΅ ΡΠΎΡΡΠΎΡΠ»ΡΡ. ΠΠΎ ΡΡΡΠ»ΠΊΠΈ ΠΈΠ½ΡΠ΅ΡΠ½Π΅Ρ Ρ
ΡΠ°Π½ΠΈΡ: https://rcc.msu.ru/ru/enciklopediya-istoriya-otechestvennogo-programmirovaniya
Π ΡΡΠ°ΡΡΡΡ, ΠΌΠ°ΡΠ΅ΡΠΈΠ°Π» Π½Π΅ ΠΏΡΠΎΠΏΠ°Π», Π° Π±ΡΠ» ΡΠ΅ΡΡΠ΅Π·Π½ΠΎ ΡΠ°Π·Π²ΠΈΡ ΠΈ ΠΏΠ΅ΡΠ΅ΡΠ°Π±ΠΎΡΠ°Π½ Π΄Π»Ρ Π²ΡΡΡΡΠΏΠ»Π΅Π½ΠΈΡ Π½Π° C++ Russia (ΡΠΏΠ°ΡΠΈΠ±ΠΎ Π’ΠΈΠΌΡΡΡ Π‘Π°ΡΠΈΠ½Ρ Π·Π° ΠΏΡΠΈΠ³Π»Π°ΡΠ΅Π½ΠΈΠ΅ Π²ΡΡΡΡΠΏΠΈΡΡ!).
https://youtube.com/watch?v=0bTdplAlGYg
P.S. ΠΠ° Π΄Π½ΡΡ
Π½Π° C++ Russia ΡΠΎΡΡΠΎΠΈΡΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠ½ΡΡ
Π΄ΠΎΠΊΠ»Π°Π΄ΠΎΠ² Ρ ΡΠΊΠ»ΠΎΠ½ΠΎΠΌ Π² LLVM. Π― Π΄Π»Ρ ΡΠ΅Π±Ρ Π²ΡΠ΄Π΅Π»ΠΈΠ» ΡΡΠΎΡ Π΄ΠΎΠΊΠ»Π°Π΄: https://cppconf.ru/talks/595fef990d9342c1b34179bff9c057ab/
485
https://arxiv.org/pdf/1810.07951.pdf
Don't Unroll Adjoint: Differentiating SSA-form Programs
Michael J Innes, 2019
https://proceedings.neurips.cc/paper/2020/file/9332c513ef44b682e9347822c2e457ac-Paper.pdf
Instead of Rewriting Foreign Code for Machine Learning, Automatically Synthesize Fast Gradients
William S. Moses and Valentin Churavy, NeurIPS 2020
ΠΠ±Π΅ ΡΡΠ°ΡΡΠΈ ΠΏΠΎΡΠ²ΡΡΠ΅Π½Ρ (ΠΎΠ±ΡΠ°ΡΠ½ΠΎΠΌΡ aka reverse-mode) Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠΌΡ (ΠΈΠ»ΠΈ Π°Π»Π³ΠΎΡΠΈΡΠΌΠΈΡΠ΅ΡΠΊΠΎΠΌΡ) Π΄ΠΈΡΡΠ΅ΡΠ΅Π½ΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΡΡΠ½ΠΊΡΠΈΠΉ, ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½Π½ΡΡ
Π² ΡΠΎΡΠΌΠ΅ Single Static Assignment aka SSA. Π ΡΠ΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅, ΠΎΠ½ΠΈ ΠΎΠΏΠΈΡΡΠ²Π°ΡΡ ΡΡΡΠ΅ΡΡΠ²Π΅Π½Π½ΠΎ ΡΠ°Π·Π»ΠΈΡΠ½ΡΠ΅ ΠΏΠΎΠ΄Ρ
ΠΎΠ΄Ρ.
ΠΠ΅ΡΠ²Π°Ρ ΡΡΠ°ΡΡΡ Π΄Π°ΡΡ ΠΊΡΠ°ΡΠΊΠΎΠ΅ Π²Π²Π΅Π΄Π΅Π½ΠΈΠ΅ Π² ΠΎΠ±ΡΠ°ΡΠ½ΠΎΠ΅ Π΄ΠΈΡΡΠ΅ΡΠ΅Π½ΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈ ΡΠ°ΡΠΏΡΠΎΡΡΡΠ°Π½ΡΠ½Π½ΡΠΉ ΠΏΠΎΠ΄Ρ
ΠΎΠ΄ Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ Wengert Lists. Π§ΡΠΎΠ±Ρ ΠΏΠ΅ΡΠ΅ΠΉΡΠΈ ΠΊ SSA ΡΠΎΡΠΌΠ΅, ΠΊ Wengert Lists Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ ΠΌΠ΅ΡΠΊΠΈ, ΡΡΠ»ΠΎΠ²Π½ΡΠ΅ ΠΈ Π±Π΅Π·ΡΡΠ»ΠΎΠ²Π½ΡΠ΅ ΠΏΠ΅ΡΠ΅Ρ
ΠΎΠ΄Ρ ΠΈ ΡΠΈ-ΡΠ·Π»Ρ (Ο nodes). Π‘ΠΎΠΎΡΠ²Π΅ΡΡΡΠ²Π΅Π½Π½ΠΎ, ΡΡΠ°ΡΡΡ Π²Π²ΠΎΠ΄ΠΈΡ ΠΏΡΠ°Π²ΠΈΠ»Π° Π΄ΠΈΡΡΠ΅ΡΠ΅Π½ΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΡΡΠΈΡ
ΡΠΏΡΠ°Π²Π»ΡΡΡΠΈΡ
ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΈΠΉ (control flow constructs). ΠΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΠΎ Π²Π²ΠΎΠ΄ΡΡΡΡ ΠΏΡΠ°Π²ΠΈΠ»Π° Π΄ΠΈΡΡΠ΅ΡΠ΅Π½ΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π΄Π»Ρ ΡΡΠ΅Π½ΠΈΡ ΠΈ Π·Π°ΠΏΠΈΡΠΈ Π² ΡΡΠ΅ΠΉΠΊΠΈ ΠΏΠ°ΠΌΡΡΠΈ, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΉ ΠΏΡΠΈΡΠ΅Π» ΡΡΠ°ΡΡΠΈ β ΠΈΠΌΠΏΠ΅ΡΠ°ΡΠΈΠ²Π½ΡΠ΅ ΡΠ·ΡΠΊΠΈ (ΠΈ Julia Π² ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡΠΈ). ΠΠ°Π±Π°Π²Π½ΠΎ, ΡΡΠΎ Π½Π° ΠΏΡΠ°ΠΊΡΠΈΠΊΠ΅ (Π½Π° ΡΠ΅ΠΊΡΡΠΈΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ) ΠΎΡΠ½ΠΎΠ²Π°Π½Π½Π°Ρ Π½Π° ΠΎΠΏΠΈΡΠ°Π½Π½ΠΎΠΌ ΠΏΠΎΠ΄Ρ
ΠΎΠ΄Π΅ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° Zygote Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ Π΄Π΅ΡΡΡΡΠΊΡΠΈΠ²Π½ΡΡ ΠΌΠΎΠ΄ΠΈΡΠΈΠΊΠ°ΡΠΈΡ ΠΌΠ°ΡΡΠΈΠ²ΠΎΠ², Π½Π΅ΡΠΌΠΎΡΡΡ Π½Π° Π΅Ρ (Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ) ΡΠΈΡΠΎΠΊΠΎΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅, Π² ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡΠΈ Π²ΠΎ ΡΡΠ΅ΠΉΠΌΠ²ΠΎΡΠΊΠ΅ Π΄Π»Ρ ΠΌΠ°ΡΠΈΠ½Π½ΠΎΠ³ΠΎ ΠΎΠ±ΡΡΠ΅Π½ΠΈΡ Flux. π
ΠΠ΅ΡΠΌΠΎΡΡΡ Π½Π° ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ SSA-ΡΠΎΡΠΌΡ, ΠΏΠ΅ΡΠ²Π°Ρ ΡΡΠ°ΡΡΡ ΠΏΠΎΠ΄ΡΠ°Π·ΡΠΌΠ΅Π²Π°Π΅Ρ ΡΡΠ°Π²Π½ΠΈΡΠ΅Π»ΡΠ½ΠΎ Π²ΡΡΠΎΠΊΠΎΡΡΠΎΠ²Π½Π΅Π²ΠΎΠ΅ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΠ΅, Π±Π»ΠΈΠ·ΠΊΠΎΠ΅ ΠΊ ΠΈΡΡ
ΠΎΠ΄Π½ΠΎΠΌΡ ΡΠ·ΡΠΊΡ, Π΄ΠΎ ΠΏΡΠΎΠ²Π΅Π΄Π΅Π½ΠΈΡ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΠΉ. ΠΡΠΎΡΠ°Ρ ΠΆΠ΅ ΡΡΠ°ΡΡΡ ΡΠ°ΡΡΠΌΠ°ΡΡΠΈΠ²Π°Π΅Ρ Π²Π½Π΅Π΄ΡΠ΅Π½ΠΈΠ΅ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ Π΄ΠΈΡΡΠ΅ΡΠ΅Π½ΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π½Π΅ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²Π΅Π½Π½ΠΎ Π² ΡΡΠ΅ΠΉΠΌΠ²ΠΎΡΠΊ LLVM Π² Π²ΠΈΠ΄Π΅ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ· ΠΏΡΠΎΡ
ΠΎΠ΄ΠΎΠ² ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ, Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΠΎΠ³ΠΎ Π½Π°Π΄ Π½ΠΈΠ·ΠΊΠΎΡΡΠΎΠ²Π½Π΅Π²ΡΠΌ SSA-ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ΠΌ, Π½Π΅ Π·Π°Π²ΠΈΡΡΡΠΈΠΌ ΠΎΡ ΠΈΡΡ
ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΡΠ·ΡΠΊΠ° ΠΈ ΠΏΡΠΎΡΠ΅Π΄ΡΠ΅Π³ΠΎ ΡΡΠ΄ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΠΉ. ΠΠΎΡΡΠΎΠΌΡ ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ ΠΎΠ½Π° ΡΠ΄Π΅Π»ΡΠ΅Ρ Π½ΠΈΠ·ΠΊΠΎΡΡΠΎΠ²Π½Π΅Π²ΡΠΌ Π°ΡΠΏΠ΅ΠΊΡΠ°ΠΌ: ΡΠ΅Π½Π΅Π²ΠΎΠΉ ΠΏΠ°ΠΌΡΡΠΈ (shadow memory), ΠΊΠ΅ΡΠ°ΠΌ, ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ΅ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Π΅ΠΉ, Π² ΡΠΎΠΌ ΡΠΈΡΠ»Π΅ β Π²ΡΠ·ΠΎΠ²Π°ΠΌ ΡΡΠ½ΠΊΡΠΈΠΉ ΠΏΠΎ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ, ΠΈ ΠΏΠ΅ΡΠ΅ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ Ρ Π΄ΡΡΠ³ΠΈΡ
ΠΏΡΠΎΡ
ΠΎΠ΄ΠΎΠ², ΡΠ°ΠΊΠΈΡ
ΠΊΠ°ΠΊ type-based alias analysis.
Π‘ΡΡΠ΅ΠΌΠ»Π΅Π½ΠΈΠ΅ ΠΏΡΠΎΠ²ΠΎΠ΄ΠΈΡΡ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠ΅ Π΄ΠΈΡΡΠ΅ΡΠ΅Π½ΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ Π½Π°ΡΡΠΎΠ»ΡΠΊΠΎ Π½ΠΈΠ·ΠΊΠΎΡΡΠΎΠ²Π½Π΅Π²ΠΎΠ³ΠΎ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΡ ΠΏΡΠΎΠ΄ΠΈΠΊΡΠΎΠ²Π°Π½ΠΎ Π΄Π²ΡΠΌΡ ΡΠΎΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡΠΌΠΈ. ΠΠΎ-ΠΏΠ΅ΡΠ²ΡΡ
, Π½Π΅ΠΌΠ΅Π΄Π»Π΅Π½Π½Π°Ρ ΠΏΡΠΈΠΌΠ΅Π½ΠΈΠΌΠΎΡΡΡ ΠΊ Π±ΠΎΠ»ΡΡΠΎΠΌΡ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²Ρ ΠΏΡΠΎΠΌΡΡΠ»Π΅Π½Π½ΡΡ
ΡΠ·ΡΠΊΠΎΠ² β C, C++, Rust, Julia β Π±Π΅Π· ΠΊΠ°ΠΊΠΈΡ
-Π»ΠΈΠ±ΠΎ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ Π² ΡΠ°ΠΌΠΎΠΌ ΡΠ·ΡΠΊΠ΅. ΠΠΎ-Π²ΡΠΎΡΡΡ
, ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΡ ΠΈΡΡ
ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° ΠΌΠΎΠΆΠ΅Ρ ΡΠΈΠ»ΡΠ½ΠΎ ΡΠΏΡΠΎΡΡΠΈΡΡ ΠΈ ΡΡΠΊΠΎΡΠΈΡΡ ΠΏΠΎΡΠΎΠΆΠ΄Π°Π΅ΠΌΡΠΉ ΠΊΠΎΠ΄ ΡΠ°ΡΡΡΡΠ° Π³ΡΠ°Π΄ΠΈΠ΅Π½ΡΠ° ΡΡΠ½ΠΊΡΠΈΠΈ, Π² Π½Π΅ΠΊΠΎΡΠΎΡΡΡ
ΡΠ»ΡΡΠ°ΡΡ
β ΠΏΠΎΠ½ΠΈΠ·ΠΈΡΡ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡΡ Ρ ΠΊΠ²Π°Π΄ΡΠ°ΡΠΈΡΠ½ΠΎΠΉ Π΄ΠΎ Π»ΠΈΠ½Π΅ΠΉΠ½ΠΎΠΉ ΠΏΠΎΡΠ»Π΅ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΡ loop-invariant code motion ΠΊ ΠΈΡΡ
ΠΎΠ΄Π½ΠΎΠΌΡ ΠΊΠΎΠ΄Ρ.
ΠΠ»Ρ ΠΏΠΎΠ΄ΡΠ²Π΅ΡΠΆΠ΄Π΅Π½ΠΈΡ ΡΡΠΊΠΎΡΠ΅Π½ΠΈΡ, Π°Π²ΡΠΎΡΡ ΠΏΡΠΎΠ²Π΅Π»ΠΈ Π·Π°ΠΌΠ΅ΡΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ ΠΈ ΡΡΠ°Π²Π½Π΅Π½ΠΈΡ Ρ ΡΡΠ°Π΄ΠΈΡΠΈΠΎΠ½Π½ΡΠΌΠΈ ΠΏΠΎΠ΄Ρ
ΠΎΠ΄Π°ΠΌΠΈ Π½Π° Π·Π°Π΄Π°ΡΠ°Ρ
ADBench ΠΎΡ Microsoft ΠΈ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ
ΡΡΠΎΡΠΎΠ½Π½ΠΈΡ
ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡΡ
ΡΠΈΡΠ»Π΅Π½Π½ΠΎΠ³ΠΎ ΡΠ΅ΡΠ°ΡΠ΅Π»Ρ Π΄ΠΈΡΡΠ΅ΡΠ΅Π½ΡΠΈΠ°Π»ΡΠ½ΡΡ
ΡΡΠ°Π²Π½Π΅Π½ΠΈΠΉ. Π Π΅Π·ΡΠ»ΡΡΠ°ΡΡ ΠΈ Π³ΡΠ°ΡΠΈΠΊΠΈ ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Ρ Π² ΡΡΠ°ΡΡΠ΅. π
Π Π»ΡΠ±ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅, ΠΎΠ±Π΅ ΡΠ°Π±ΠΎΡΡ ΠΏΠΎΠ»Π°Π³Π°ΡΡΡΡ Π½Π° "ΠΊΠ»Π°ΡΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠ½ΡΠ΅ ΡΠ΅Ρ
Π½ΠΈΠΊΠΈ", ΡΠ°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ dataflow analysis, alias analysis, abstract interpretation, ΠΈ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΠΈ. Π ΠΏΠΎΡΠΎΠΌΡ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΡΡ ΡΠΎΠ±ΠΎΠΉ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½Π΅ΠΉΡΠ΅Π΅ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΠ΅ "ΠΏΠΎΠ»Ρ Π΄Π΅ΡΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΡΠΈΠΊΠΎΠ²" Π² ΡΡΠ°Π²Π½ΠΈΡΠ΅Π»ΡΠ½ΠΎ Π½ΠΎΠ²ΡΡ, Π½ΠΎ ΡΡΡΠ΅ΠΌΠΈΡΠ΅Π»ΡΠ½ΠΎ Π½Π°Π±ΠΈΡΠ°ΡΡΡΡ ΠΏΠΎΠΏΡΠ»ΡΡΠ½ΠΎΡΡΡ, ΠΎΠ±Π»Π°ΡΡΡ.
485
https://arxiv.org/abs/2001.10490
Beyond Notations: Hygienic Macro Expansion for Theorem Proving Languages
Sebastian Ullrich, Leonardo de Moura
ΠΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²ΠΎ ΡΠΈΡΡΠ΅ΠΌ ΠΈΠ½ΡΠ΅ΡΠ°ΠΊΡΠΈΠ²Π½ΠΎΠ³ΠΎ Π΄ΠΎΠΊΠ°Π·Π°ΡΠ΅Π»ΡΡΡΠ²Π° ΡΠ΅ΠΎΡΠ΅ΠΌ ΡΠ°Π·ΡΠ°Π±Π°ΡΡΠ²Π°ΡΡΡΡ Ρ ΠΏΡΠΈΡΠ΅Π»ΠΎΠΌ Π½Π° ΡΠΎΡΠΌΠ°Π»ΠΈΠ·Π°ΡΠΈΡ ΠΌΠ°ΡΠ΅ΠΌΠ°ΡΠΈΠΊΠΈ. ΠΠΊΠ»ΡΡΠ°Ρ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΡΠΏΠ΅ΡΠΈΡΠΈΡΠ΅ΡΠΊΠΎΠΉ ΠΌΠ°ΡΠ΅ΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠΉ Π½ΠΎΡΠ°ΡΠΈΠΈ, ΡΠ°Π·ΡΠ°Π±ΠΎΡΠ°Π½Π½ΠΎΠΉ Π΄Π»Ρ Π½Π΅ΠΊΠΎΡΠΎΡΠΎΠΉ ΡΠ΅ΠΎΡΠΈΠΈ. Π’Π°ΠΊΠΎΠΉ ΠΊΠ°ΠΊ π΄, π± ΠΈΠ»ΠΈ β«, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ Π½Π΅ ΡΠΎΠ»ΡΠΊΠΎ Π² ΠΌΠ°ΡΠ΅ΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠΌ Π°Π½Π°Π»ΠΈΠ·Π΅, Π½ΠΎ ΠΈ Π² ΡΠ΅ΠΎΡΠΈΠΈ ΠΊΠ°ΡΠ΅Π³ΠΎΡΠΈΠΉ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ. Π₯Π°ΡΠ°ΠΊΡΠ΅ΡΠ½Π°Ρ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡΡ ΠΏΡΠΈΠ²Π΅Π΄ΡΠ½Π½ΡΡ
ΠΎΠ±ΠΎΠ·Π½Π°ΡΠ΅Π½ΠΈΠΉ, ΠΊΠ°ΠΊ ΠΈ ΠΌΠ½ΠΎΠ³ΠΈΡ
Π΄ΡΡΠ³ΠΈΡ
β "Π·Π°Ρ
Π²Π°Ρ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ
" Π°Π½Π°Π»ΠΎΠ³ΠΈΡΠ½ΠΎ ΡΠΎΠΌΡ, ΠΊΠ°ΠΊ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ Π·Π°Ρ
Π²Π°ΡΡΠ²Π°ΡΡΡΡ ΠΊΠ²Π°Π½ΡΠΎΡΠ°ΠΌΠΈ Π² Π»ΠΎΠ³ΠΈΠΊΠ΅ ΠΈ Π»ΡΠΌΠ±Π΄Π°-Π°Π±ΡΡΡΠ°ΠΊΡΠΈΠ΅ΠΉ Π² Π»ΡΠΌΠ±Π΄Π°-ΠΈΡΡΠΈΡΠ»Π΅Π½ΠΈΠΈ. ΠΡΠΈ ΡΡΠΎΠΌ, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΡΠΈΡΡΠ΅ΠΌΡ ΠΈΠ½ΡΠ΅ΡΠ°ΠΊΡΠΈΠ²Π½ΠΎΠ³ΠΎ Π΄ΠΎΠΊΠ°Π·Π°ΡΠ΅Π»ΡΡΡΠ²Π° ΡΡΡΠΎΡΡΡΡ ΠΏΠΎΠ²Π΅ΡΡ
ΡΠΎΠ³ΠΎ ΠΈΠ»ΠΈ ΠΈΠ½ΠΎΠ³ΠΎ Π²Π°ΡΠΈΠ°Π½ΡΠ° Π»ΡΠΌΠ±Π΄Π°-ΠΈΡΡΠΈΡΠ»Π΅Π½ΠΈΡ, ΠΌΠ°ΡΠ΅ΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΡΡ Π½ΠΎΡΠ°ΡΠΈΡ ΠΏΡΠΈΠ΄ΡΡΡΡ Π²ΡΡΠ°ΠΆΠ°ΡΡ ΠΈΠΌΠ΅Π½Π½ΠΎ ΡΠ΅ΡΠ΅Π· Π»ΡΠΌΠ±Π΄Ρ, ΠΈ ΠΊΠ°ΠΊ-ΡΠΎ Ρ Π½ΠΈΠΌΠΈ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΎΠ²Π°ΡΡ.
Π ΡΡΠΎΡ ΠΌΠΎΠΌΠ΅Π½Ρ Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ Π²ΠΎΠΏΡΠΎΡ "Π³ΠΈΠ³ΠΈΠ΅Π½Ρ": ΠΌΡ Π½Π΅ Ρ
ΠΎΡΠΈΠΌ, ΡΡΠΎΠ±Ρ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ ΠΏΠ΅ΡΠ΅ΠΏΡΡΠ°Π»ΠΈΡΡ ΠΈ Π±ΡΠ»ΠΈ ΡΠ²ΡΠ·Π°Π½Ρ Ρ Π½Π΅ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎΠΉ Π»ΡΠΌΠ±Π΄Π°-Π°Π±ΡΡΡΠ°ΠΊΡΠΈΠ΅ΠΉ, ΠΎΠΎΠ±Π΅Π½Π½ΠΎ "Π½Π΅Π²ΠΈΠ΄ΠΈΠΌΠΎΠΉ" Π»ΡΠΌΠ±Π΄ΠΎΠΉ, ΠΊΠΎΡΠΎΡΠ°Ρ Π±ΡΠ»Π° Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ ΡΠ³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°Π½Π° Π² ΠΏΡΠΎΡΠ΅ΡΡΠ΅ ΡΡΠ°Π½ΡΠ»ΡΡΠΈΠΈ Π΄ΡΡΠ³ΠΎΠΉ Π½ΠΎΡΠ°ΡΠΈΠΈ. ΠΠΎΠΏΡΠΎΡ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΠΎ ΠΎΡΠ»ΠΎΠΆΠ½ΡΠ΅ΡΡΡ Π΅ΡΡΠ΅ΡΡΠ²Π΅Π½Π½ΡΠΌ "ΠΈΠ½ΠΆΠ΅Π½Π΅ΡΠ½ΡΠΌ" ΡΡΠ΅Π±ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ: ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ ΠΎΠ±ΠΎΠ·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΡΠΉ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡ ΡΠ²ΡΠ·ΡΠ²Π°Π½ΠΈΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ
, ΠΌΡ Ρ
ΠΎΡΠ΅Π»ΠΈ Π±Ρ ΠΎΠΏΠΈΡΠ°ΡΡ ΡΡΠΎΡ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡ ΠΈ Π΅Π³ΠΎ ΡΠ΅ΠΌΠ°Π½ΡΠΈΠΊΡ ΠΎΠ΄ΠΈΠ½ ΡΠ°Π·, ΠΈ ΠΏΡΠΎΡΡΠΎ ΠΏΠ΅ΡΠ΅ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π²ΠΎ Π²ΡΠ΅Ρ
ΠΏΠΎΠ΄Ρ
ΠΎΠ΄ΡΡΠΈΡ
ΡΠ»ΡΡΠ°ΡΡ
. ΠΡΠΈΠΌΠ΅ΡΠ°ΠΌΠΈ ΠΏΠ΅ΡΠ΅ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ° ΡΠ²ΡΠ·ΡΠ²Π°Π½ΠΈΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ
ΠΌΠΎΠ³ΡΡ ΡΠ»ΡΠΆΠΈΡΡ ΡΠ΅ ΠΆΠ΅ Π½ΠΎΡΠ°ΡΠΈΠΈ Π΄Π»Ρ ΡΡΠΌΠΌ ΠΈ ΠΏΡΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½ΠΈΠΉ: π΄ ΠΈ π±.
Π‘ΡΠ°ΡΡΡ Π΄Π΅ΠΌΠΎΠ½ΡΡΡΠΈΡΡΠ΅Ρ ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΅ΡΠΈΡΡ ΡΡΡ Π·Π°Π΄Π°ΡΡ ΠΏΡΠΈ ΠΏΠΎΠΌΠΎΡΠΈ ΡΠΈΠΏΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΡ ΠΌΠ°ΠΊΡΠΎΡΠΎΠ² ΠΈ Π½Π΅ΡΠ»ΠΎΠΆΠ½ΠΎΠ³ΠΎ Π°Π»Π³ΠΎΡΠΈΡΠΌΠ°, ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΠ²Π°ΡΡΠ΅Π³ΠΎ Π³ΠΈΠ³ΠΈΠ΅Π½Ρ. Π‘Π°ΠΌΠΎ ΡΠΎΠ±ΠΎΠΉ, Π·Π° ΠΏΡΠΎΡΡΠΎΡΡ ΠΏΡΠΈΡ
ΠΎΠ΄ΠΈΡΡΡ ΡΠ΅ΠΌ-ΡΠΎ Π·Π°ΠΏΠ»Π°ΡΠΈΡΡ. Π Π΄Π°Π½Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ β ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½Π½ΠΎΠΉ ΠΏΡΠΈΠΌΠ΅Π½ΠΈΠΌΠΎΡΡΡΡ, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ Π°Π»Π³ΠΎΡΠΈΡΠΌ ΠΏΠΎΠ»Π°Π³Π°Π΅ΡΡΡ Π½Π° ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ½Π½ΡΠ΅ ΡΠ²ΠΎΠΉΡΡΠ²Π° ΡΠ·ΡΠΊΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ. ΠΠ°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΡΡΡΠ΅ΡΡΠ²Π΅Π½Π½ΠΎΠ΅ ΠΈΠ· Π½ΠΈΡ
: Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΠΎΡΡΡΠ΅ΡΡΠ²Π»ΡΠ΅ΡΡΡ "ΠΏΠΎΡΡΡΠΎΡΠ½ΠΎ", ΠΏΠΎ ΠΎΠ΄Π½ΠΎΠΌΡ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡ Π²Π΅ΡΡ
Π½Π΅Π³ΠΎ ΡΡΠΎΠ²Π½Ρ Π·Π° ΡΠ°Π·, Π² ΠΏΠΎΡΡΠ΄ΠΊΠ΅ ΠΈΡ
Π·Π°ΠΏΠΈΡΠΈ Π² ΡΠ°ΠΉΠ»Π΅. ΠΠΎΠ²ΡΡ Π½ΠΎΡΠ°ΡΠΈΡ (Π½Π° ΡΠ°ΠΌΠΎΠΌ Π΄Π΅Π»Π΅, Π»ΡΠ±ΠΎΠΉ ΠΌΠ°ΠΊΡΠΎΡ) ΠΌΠΎΠ³ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΠΎΠ»ΡΠΊΠΎ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡ, Π·Π°ΠΏΠΈΡΠ°Π½Π½ΡΠ΅ Π½ΠΈΠΆΠ΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ ΠΌΠ°ΠΊΡΠΎΡΠ°. Π Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ Π΄ΡΡΠ³ΠΈΠ΅ ΡΠΏΡΠΎΡΠ°ΡΡΠΈΠ΅ ΠΏΡΠ΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΡ. Π’Π°ΠΊΠΎΠ΅ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΡΠ°ΡΡΠΎ Π²ΡΡΡΠ΅ΡΠ°Π΅ΡΡΡ Π² ΡΠΈΡΡΠ΅ΠΌΠ°Ρ
ΠΈΠ½ΡΠ΅ΡΠ°ΠΊΡΠΈΠ²Π½ΠΎΠ³ΠΎ Π΄ΠΎΠΊΠ°Π·Π°ΡΠ΅Π»ΡΡΡΠ²Π° ΡΠ΅ΠΎΡΠ΅ΠΌ, Π½ΠΎ ΡΠΈΠ»ΡΠ½ΠΎ ΠΎΠ³ΡΠ°Π½ΠΈΡΠΈΠ²Π°Π΅Ρ ΠΏΡΠΈΠΌΠ΅Π½ΠΈΠΌΠΎΡΡΡ Π² ΡΠ·ΡΠΊΠ°Ρ
ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΎΠ±ΡΠ΅Π³ΠΎ Π½Π°Π·Π½Π°ΡΠ΅Π½ΠΈΡ. ΠΠ»Ρ ΡΠ°ΠΊΠΈΡ
ΡΠ·ΡΠΊΠΎΠ² ΠΏΡΠΈΠ΄ΡΡΡΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ Π½Π°ΠΌΠ½ΠΎΠ³ΠΎ Π±ΠΎΠ»Π΅Π΅ ΡΠ»ΠΎΠΆΠ½ΡΠΌ Π°Π»Π³ΠΎΡΠΈΡΠΌΠΎΠΌ Π³ΠΈΠ³ΠΈΠ΅Π½Ρ, ΠΊΠ°ΠΊ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Π² Racket.
ΠΡΠΎΠΌΠ΅ ΡΠΎΠ³ΠΎ, Π² ΡΡΠ°ΡΡΠ΅ ΡΠ°ΡΡΠΌΠ°ΡΡΠΈΠ²Π°ΡΡΡΡ Π²ΠΎΠΏΡΠΎΡΡ ΠΈΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΠΈ ΠΌΠ°ΠΊΡΠΎ-ΡΠΈΡΡΠ΅ΠΌΡ ΠΈ ΡΠΈΡΡΠ΅ΠΌ "ΡΡΠΎΡΠ½Π΅Π½ΠΈΡ" (elaboration) ΠΈ type-driven expansion, ΠΏΠ»ΡΡ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ ΡΠ°ΠΊΡΠΈΠΊ Π² Π²ΠΈΠ΄Π΅ Π³ΠΈΠ³ΠΈΠ΅Π½ΠΈΡΠ΅ΡΠΊΠΈΡ
ΠΌΠ°ΠΊΡΠΎΡΠΎΠ², ΡΠ΅Π³ΠΎ Π΄ΠΎ ΡΠΈΡ
ΠΏΠΎΡ Π½Π΅ Π²ΡΡΡΠ΅ΡΠ°Π»ΠΎΡΡ Π² ΡΠΈΡΡΠ΅ΠΌΠ°Ρ
ΠΈΠ½ΡΠ΅ΡΠ°ΠΊΡΠΈΠ²Π½ΡΡ
Π΄ΠΎΠΊΠ°Π·Π°ΡΠ΅Π»ΡΡΡΠ².
Π ΠΈΡΠΎΠ³Π΅, Π½Π΅ΡΠΌΠΎΡΡΡ Π½Π° ΠΎΡΠ΅Π²ΠΈΠ΄Π½ΡΡ Π½Π°ΠΏΡΠ°Π²Π»Π΅Π½Π½ΠΎΡΡΡ Π½Π° ΡΠΈΡΡΠ΅ΠΌΡ ΠΈΠ½ΡΠ΅ΡΠ°ΠΊΡΠΈΠ²Π½ΠΎΠ³ΠΎ Π΄ΠΎΠΊΠ°Π·Π°ΡΠ΅Π»ΡΡΡΠ²Π°, ΡΡΠ°ΡΡΡ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΎΡΠ»ΠΈΡΠ½ΡΠΌ Π²Π²Π΅Π΄Π΅Π½ΠΈΠ΅ΠΌ Π² ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ°ΡΠΈΠΊΡ, ΡΠ²ΡΠ·Π°Π½Π½ΡΡ Ρ ΠΌΠ°ΠΊΡΠΎΡΠ°ΠΌΠΈ, ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠ΅Π½ΠΈΠ΅ΠΌ Π³ΠΈΠ³ΠΈΠ΅Π½Ρ, ΡΠΈΠΏΠΈΠ·Π°ΡΠΈΠ΅ΠΉ ΠΌΠ°ΠΊΡΠΎΡΠΎΠ², Π΄Π΅ΠΊΠ»Π°ΡΠ°ΡΠΈΠ²Π½ΡΠΌ ΠΈ ΠΈΠΌΠΏΠ΅ΡΠ°ΡΠΈΠ²Π½ΡΠΌ Π·Π°Π΄Π°Π½ΠΈΠ΅ΠΌ ΠΌΠ°ΠΊΡΠΎΡΠΎΠ². Π Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡΡ Π²ΡΠ΅ΠΌ ΡΠΈΡΠ°ΡΠ΅Π»ΡΠΌ, Π΅ΡΡ Π½Π΅ Π·Π½Π°ΠΊΠΎΠΌΡΠΌ, Π½ΠΎ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΡΡΡΠΈΠΌΡΡ Π²ΠΎΠΏΡΠΎΡΠ°ΠΌΠΈ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΌΠ°ΠΊΡΠΎ-ΡΠΈΡΡΠ΅ΠΌ Π² ΡΠ·ΡΠΊΠ°Ρ
ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ.
#macros #lean #elaboration #proofassistants
485
ΠΠ° Π΄Π½ΡΡ
, ΠΈ Π΄Π°ΠΆΠ΅ Π² ΠΎΠ΄Π½ΠΎ ΠΈ ΡΠΎ ΠΆΠ΅ Π²ΡΠ΅ΠΌΡ, ΠΏΡΠΎΡΠ»ΠΈ Π΄Π²Π° Π΅ΠΆΠ΅Π³ΠΎΠ΄Π½ΡΡ
ΡΠΎΡΡΠΈΠΉΡΠΊΠΈΡ
ΠΌΠ΅ΡΠΎΠΏΡΠΈΡΡΠΈΡ, Π² ΡΠΎΠΌ ΡΠΈΡΠ»Π΅ ΠΈ Π½Π° ΡΠ΅ΠΌΡ ΡΠ·ΡΠΊΠΎΠ² ΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠΎΠ². ΠΡΠΎ -- ΠΠ°ΡΠΈΠΎΠ½Π°Π»ΡΠ½ΡΠΉ Π‘ΡΠΏΠ΅ΡΠΊΠΎΠΌΠΏΡΡΡΠ΅ΡΠ½ΡΠΉ Π€ΠΎΡΡΠΌ (ΠΠ‘ΠΠ€) ΠΈ ΠΡΠΊΡΡΡΠ°Ρ ΠΊΠΎΠ½ΡΠ΅ΡΠ΅Π½ΡΠΈΡ ΠΠ‘Π Π ΠΠ.
ΠΠΎ ΠΠ‘ΠΠ€ Π΄ΠΎΡΡΡΠΏΠ½Ρ ΡΠ΅Π·ΠΈΡΡ Π΄ΠΎΠΊΠ»Π°Π΄ΠΎΠ²: https://2021.nscf.ru/nauchno-prakticheskaya-konferenciya/tezisy-dokladov/
Π ΡΠ΅Π»Π΅Π³ΡΠ°ΠΌ-ΠΊΠ°Π½Π°Π»Π΅ ΠΡΠΊΡΡΡΠΎΠΉ ΠΊΠΎΠ½ΡΠ΅ΡΠ΅Π½ΡΠΈΠΈ Π΅ΡΡΡ ΡΡΡΠ»ΠΊΠΈ Π½Π° Π²ΠΈΠ΄Π΅ΠΎΠ·Π°ΠΏΠΈΡΠΈ Π΄ΠΎΠΊΠ»Π°Π΄ΠΎΠ²: https://t.me/ispras/390
Π― Π²ΡΠ±ΡΠ°Π» ΠΏΠΎ ΠΎΠ΄Π½ΠΎΠΌΡ Π΄ΠΎΠΊΠ»Π°Π΄Ρ Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΌΠ΅ΡΠΎΠΏΡΠΈΡΡΠΈΡ ΠΈ Π΄Π°Π»Π΅Π΅ ΡΠ°ΡΡΠΊΠ°ΠΆΡ, ΡΠ΅ΠΌ ΡΡΠΈ Π΄ΠΎΠΊΠ»Π°Π΄Ρ ΠΌΠ΅Π½Ρ ΠΏΡΠΈΠ²Π»Π΅ΠΊΠ»ΠΈ.
ΠΠ° ΠΠ‘ΠΠ€ ΠΌΠ΅Π½Ρ Π±ΠΎΠ»Π΅Π΅ Π²ΡΠ΅Π³ΠΎ Π·Π°ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠΎΠ²Π°Π» Π΄ΠΎΠΊΠ»Π°Π΄ "Π’Π΅ΠΎΡΠΈΠΈ ΠΈΠΌΠ΅Π½ Π.ΠΠΈΡΡΡΠ° ΠΈ Π.ΠΠ°Π±Π±Π°Ρ ΠΈ Π΄Π΅ΡΠ΅ΡΠΌΠΈΠ½ΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠ΅ ΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΡΠ½ΠΎΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΠ½ΠΎ-ΠΎΡΠΈΠ΅Π½ΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈΠΌΠ΅ΡΡ ΠΎΠ±ΡΡΡ ΠΎΡΠ½ΠΎΠ²Ρ" ΠΎΡ ΠΠ»ΠΈΠΌΠΎΠ²Π° Π. Π. ΠΈ ΠΠ΄Π°ΠΌΠΎΠ²ΠΈΡΠ° Π. Π.
ΠΡΠΎΡ Π΄ΠΎΠΊΠ»Π°Π΄ ΠΎΡΠ½ΠΎΠ²Π°Π½ Π½Π° ΡΡΠ°ΡΡΠ΅ "ΠΠ΄Π°ΠΌΠΎΠ²ΠΈΡ Π. Π., ΠΠ»ΠΈΠΌΠΎΠ² Π. Π. Π ΡΠ΅ΠΎΡΠΈΡΡ
ΠΈΠΌΠ΅Π½ ΠΈ ΡΡΡΠ»ΠΎΠΊ Π² ΡΠΎΡΠΌΠ°Π»ΡΠ½ΡΡ
ΡΠ·ΡΠΊΠ°Ρ
ΠΈ ΠΏΠΎΡΠ»Π΅Π΄ΡΡΠ²ΠΈΡΡ
Π΄Π»Ρ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΠ³ΠΎ ΠΈ ΠΎΠ±ΡΠ΅ΠΊΡΠ½ΠΎ-ΠΎΡΠΈΠ΅Π½ΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ //ΠΠ°ΡΡΠ½ΡΠΉ ΡΠ΅ΡΠ²ΠΈΡ Π² ΡΠ΅ΡΠΈ ΠΠ½ΡΠ΅ΡΠ½Π΅Ρ. β 2021. β Π’. 23. β Π‘. 3-21.". Π‘ΡΠ°ΡΡΡ, ΠΊΡΡΠ°ΡΠΈ Π³ΠΎΠ²ΠΎΡΡ, Π΄ΠΎΡΡΡΠΏΠ½Π° ΠΎΠ½Π»Π°ΠΉΠ½: https://keldysh.ru/abrau/2021/theses/30.pdf
ΠΠ²ΡΠΎΡΡ ΡΠ°ΡΡΠΌΠ°ΡΡΠΈΠ²Π°ΡΡ ΡΡΠ½Π΄Π°ΠΌΠ΅Π½ΡΠ°Π»ΡΠ½ΡΠ΅ Π²ΠΎΠΏΡΠΎΡΡ ΡΠΎΡΠΌΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΏΠΎΠ½ΡΡΠΈΠΉ ΠΈΠΌΠ΅Π½ ΠΈ ΡΡΡΠ»ΠΎΠΊ, Π° ΡΠ°ΠΊΠΆΠ΅ ΠΏΡΡΠ°ΡΡΡΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ ΠΏΡΠΎΠΌΠ΅ΠΆΡΡΠΎΡΠ½ΡΠΉ ΠΊΠ»Π°ΡΡ ΡΠ·ΡΠΊΠΎΠ² ΠΌΠ΅ΠΆΠ΄Ρ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΡΠΌΠΈ (ΡΠΈΡΠΎΠΊΠΈΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ Π°Π½Π°Π»ΠΈΠ·Π° ΠΈ ΡΡΠ°Π½ΡΡΠΎΡΠΌΠ°ΡΠΈΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ) ΠΈ ΠΎΠ±ΡΠ΅ΠΊΡΠ½ΠΎ-ΠΎΡΠΈΠ΅Π½ΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠΌΠΈ (ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½Π°Ρ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ° ΡΠ»ΠΎΠΆΠ½ΡΡ
ΡΡΡΡΠΊΡΡΡ Π΄Π°Π½Π½ΡΡ
).
ΠΡΠΈΠ³ΠΈΠ½Π°Π»ΡΠ½ΡΠ΅ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΡ Π² ΡΡΠΎΠΉ ΡΡΠ°ΡΡΠ΅ Π½Π΅ ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Ρ, Π½ΠΎ ΠΏΡΠΈΠ²Π»Π΅ΡΠ΅Π½ΠΈΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΡ ΠΊ ΡΠ°Π±ΠΎΡΠ°ΠΌ ΠΏΠΎ Π½ΠΎΠΌΠΈΠ½Π°Π»ΡΠ½ΡΠΌ ΡΠ΅Ρ
Π½ΠΈΠΊΠ°ΠΌ ΠΎΡ Π. Pitts ΠΈ Π΅Π³ΠΎ ΠΊΠΎΠ»Π»Π΅Π³, ΡΡΠΈΡΠ°Ρ ΠΏΠΎΠ»Π΅Π·Π½ΡΠΌ.
ΠΠΎΠ±Π°Π²Π»Ρ, ΡΡΠΎ ΠΈΡΡΠ»Π΅Π΄ΠΎΠ²Π°Π½ΠΈΡ Π°Π²ΡΠΎΡΠΎΠ² ΡΡΠ°Π½ΡΡ ΠΏΠΎΠ½ΡΡΠ½Π΅Π΅, Π΅ΡΠ»ΠΈ ΠΏΠΎΡΠΌΠΎΡΡΠ΅ΡΡ ΠΈΡ
Π±ΠΎΠ»Π΅Π΅ ΡΠ°Π½Π½ΡΡ ΡΡΠ°ΡΡΡ "ΠΠΎΠ΄Ρ
ΠΎΠ΄ ΠΊ ΠΏΠΎΡΡΡΠΎΠ΅Π½ΠΈΡ ΡΠΈΡΡΠ΅ΠΌΡ Π΄Π΅ΡΠ΅ΡΠΌΠΈΠ½ΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ ΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΡΠ½ΠΎΠ³ΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ ΠΌΠΎΠ½ΠΎΡΠΎΠ½Π½ΡΡ
ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ²": https://pat.keldysh.ru/~anklimov/papers/2019-Adamovich_Klimov--An_Approach_to_Construction_of_a_Deterministic_Parallel_Programming_System--Vestnik_SibGUTI--submitted-revised.pdf
ΠΠ° ΠΡΠΊΡΡΡΠΎΠΉ ΠΊΠΎΠ½ΡΠ΅ΡΠ΅Π½ΡΠΈΠΈ ΠΠ‘Π Π ΠΠ Π±ΡΠ»ΠΎ ΠΌΠ½ΠΎΠ³ΠΎ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½ΡΡ
Π΄ΠΎΠΊΠ»Π°Π΄ΠΎΠ² ΠΈ Ρ Π½Π°Π΄Π΅ΡΡΡ, ΡΡΠΎ ΠΊ Π½Π΅ΠΊΠΎΡΠΎΡΡΠΌ ΠΈΠ· Π½ΠΈΡ
ΠΌΡ Π΅ΡΠ΅ Π½Π° PLComp Π²Π΅ΡΠ½Π΅ΠΌΡΡ. Π― Π²ΡΠ΄Π΅Π»ΠΈΠ» Π΄Π»Ρ ΡΠ΅Π±Ρ Π΄ΠΎΠΊΠ»Π°Π΄ "Π‘ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠΉ Π°Π½Π°Π»ΠΈΠ·, Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΎΠ΅ ΡΠΎΡΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈ ΠΊΠΎΠΎΠΏΠ΅ΡΠ°ΡΠΈΠ²Π½Π°Ρ Π²Π΅ΠΊΡΠΎΡΠΈΠ·Π°ΡΠΈΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ Π΄Π»Ρ Π³ΠΈΠ±ΡΠΈΠ΄Π½ΡΡ
many-core ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠΎΠ²", ΠΌΠΎΠ΅Π³ΠΎ Π±ΡΠ²ΡΠ΅Π³ΠΎ ΠΊΠΎΠ»Π»Π΅Π³ΠΈ ΠΠ»Π°Π΄ΠΈΠΌΠΈΡΠ° Π ΠΎΠ³Π°Π½ΠΎΠ²Π°. ΠΡΠ±ΠΎΡ Π΄ΠΎΠΊΠ»Π°Π΄Π°, ΡΠ°Π·ΡΠΌΠ΅Π΅ΡΡΡ, ΡΡΠ±ΡΠ΅ΠΊΡΠΈΠ²Π½ΡΠΉ, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ Π² ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ΅ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠ°Π»ΡΠ½ΠΎΠ³ΠΎ ΠΠ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠ°, ΠΎ ΠΊΠΎΡΠΎΡΠΎΠΌ ΡΠ°ΡΡΠΊΠ°Π·ΡΠ²Π°Π΅Ρ ΠΠ»Π°Π΄ΠΈΠΌΠΈΡ, Ρ ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π» Π°ΠΊΡΠΈΠ²Π½ΠΎΠ΅ ΡΡΠ°ΡΡΠΈΠ΅ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ Π»Π΅Ρ Π½Π°Π·Π°Π΄.
Π’Π°ΠΊ ΠΈΠ»ΠΈ ΠΈΠ½Π°ΡΠ΅, ΠΌΠ½Π΅ ΠΊΠ°ΠΆΠ΅ΡΡΡ, ΠΏΠΎΠ»Π΅Π·Π½ΠΎ ΠΈ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½ΠΎ ΡΠ·Π½Π°ΡΡ, ΠΊΠ°ΠΊΠΈΠ΅ Π½Π΅ΠΎΠ±ΡΡΠ½ΡΠ΅ ΠΈ Π½Π΅ΠΏΡΠΎΡΡΡΠ΅ Π·Π°Π΄Π°ΡΠΈ ΡΡΠΎΡΡ ΠΏΠ΅ΡΠ΅Π΄ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ°ΠΌΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠΎΠ²/ΡΠΈΠΌΡΠ»ΡΡΠΎΡΠΎΠ²/Π°ΡΡΠ΅ΠΌΠ±Π»Π΅ΡΠΎΠ²/... ΡΠΏΠ΅ΡΡΠΈΠΏΠΎΠ² Ρ Π³Π΅ΡΠ΅ΡΠΎΠ³Π΅Π½Π½ΠΎΠΉ ΠΈ ΠΌΠ°ΡΡΠΎΠ²ΠΎ-ΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΡΠ½ΠΎΠΉ Π°ΡΡ
ΠΈΡΠ΅ΠΊΡΡΡΠΎΠΉ. Π ΠΏΡΠΈΠΌΠ΅ΡΡ β JIT-ΡΠ°ΡΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΠΈΠ²Π°Π½ΠΈΠ΅ Π½Π° ΡΡΠΎΠ²Π½Π΅ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ² ΡΠ΄Π΅Ρ ΠΈΠ»ΠΈ Π²ΠΎΠΏΡΠΎΡΡ Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΡ ΠΊΠΎΠ΄Π° Π΄Π»Ρ VLIW-ΡΡΠΊΠΎΡΠΈΡΠ΅Π»Ρ c Π½Π΅ΠΎΠ΄Π½ΠΎΡΠΎΠ΄Π½ΡΠΌ Π΄ΠΎΡΡΡΠΏΠΎΠΌ ΠΊ ΡΠ΅ΡΡΡΡΠ°ΠΌ.
P.S. ΠΠ΅ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²Π΅Π½Π½ΠΎ ΠΏΠ΅ΡΠ΅Π΄ ΠΠ»Π°Π΄ΠΈΠΌΠΈΡΠΎΠΌ Π²ΡΡΡΡΠΏΠ°Π» Ρ, Π½ΠΎ ΡΠ΅ΠΌΠ° ΠΌΠΎΠ΅Π³ΠΎ Π΄ΠΎΠΊΠ»Π°Π΄Π° ΡΠΆΠ΅ ΡΠΎΠ²ΡΠ΅ΠΌ ΡΠΊΠ·ΠΎΡΠΈΡΠ΅ΡΠΊΠ°Ρ :)
#conf
485
ΠΠ²ΠΎΠ΄Π½Π°Ρ ΡΡΠ΅Ρ
ΡΠ°ΡΠΎΠ²Π°Ρ Π»Π΅ΠΊΡΠΈΡ ΠΎ ΠΏΠ΅ΡΡΠΏΠ΅ΠΊΡΠΈΠ²Π½ΡΡ
Π½Π°ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡΡ
Π² ΠΎΠ±Π»Π°ΡΡΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ Π΄Π»Ρ ΡΠΏΠ΅ΡΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠΎΠ² ΠΈ Π°ΠΏΠΏΠ°ΡΠ°ΡΠ½ΡΡ
ΡΡΠΊΠΎΡΠΈΡΠ΅Π»Π΅ΠΉ
https://www.youtube.com/watch?v=1m8oAQCTSeY
#dsl #smt #autotuning #superoptimization #egraph
485
Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΌΠΎΠΌΠ΅Π½ΡΠΎΠ² Π²ΡΠ·ΡΠ²Π°ΡΡ Π²ΠΎΠΏΡΠΎΡΡ, Π΅ΡΠ»ΠΈ Π½Π΅ ΠΊ ΠΏΠΎΠ΄Ρ
ΠΎΠ΄Ρ Π² ΡΠ΅Π»ΠΎΠΌ, ΡΠΎ ΠΊ Π΅Π³ΠΎ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ Π² JastAdd.
ΠΠΎ-ΠΏΠ΅ΡΠ²ΡΡ
, ΠΊΠ°ΠΊ ΡΠΏΠΎΠΌΠΈΠ½Π°Π»ΠΎΡΡ ΡΠ°Π½Π΅Π΅, ΠΎΡΠ½ΠΎΡΠ΅Π½ΠΈΡ (Relations) Π·Π°Π΄Π°ΡΡΡΡ "Π²Π½Π΅ΡΠ½ΠΈΠΌ" ΠΏΠΎ ΠΎΡΠ½ΠΎΡΠ΅Π½ΠΈΡ ΠΊ Π΄Π΅ΡΠ΅Π²Ρ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, ΠΈ Π°Π²ΡΠΎΡΡ Π΄Π»Ρ ΡΡΠΎΠ³ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡ ΠΎΠ±ΡΡΠ½ΡΠΉ ΠΈΠΌΠΏΠ΅ΡΠ°ΡΠΈΠ²Π½ΡΠΉ ΠΊΠΎΠ΄ Π½Π° Java, Π΄Π° Π΅ΡΡ ΠΈ ΠΎΠΏΠΈΡΠ°ΡΡΠΈΠΉΡΡ Π½Π° Π½Π΅ΡΠ²Π½ΡΠ΅, Π³Π΅Π½Π΅ΡΠΈΡΡΠ΅ΠΌΡΠ΅ ΡΡΠ΅ΠΉΠΌΠ²ΠΎΡΠΊΠΎΠΌ ΠΌΠ΅ΡΠΎΠ΄Ρ. ΠΠ½Π΅ ΡΠ°ΠΊΠΎΠΉ ΡΠΏΠΎΡΠΎΠ± Π½Π΅ ΠΊΠ°ΠΆΠ΅ΡΡΡ Π΄Π΅ΠΊΠ»Π°ΡΠ°ΡΠΈΠ²Π½ΡΠΌ ΠΈ ΠΎΡΠΎΠ±ΠΎ Π²ΡΡΠΎΠΊΠΎΡΡΠΎΠ²Π½Π΅Π²ΡΠΌ.
ΠΠΎ-Π²ΡΠΎΡΡΡ
, Π½Π΅ΡΠΌΠΎΡΡΡ Π½Π° ΡΠΎ, ΡΡΠΎ Π΄Π΅ΡΠ΅Π²ΠΎ ΡΠ°Π·Π±ΠΎΡΠ° ΠΏΡΠ΅Π²ΡΠ°ΡΠ°Π΅ΡΡΡ Π² Π½Π°ΠΏΡΠ°Π²Π»Π΅Π½Π½ΡΠΉ Π³ΡΠ°Ρ ΠΎΠ±ΡΠ΅Π³ΠΎ Π²ΠΈΠ΄Π°, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ Control Flow Analysis ΠΈ Data Flow Analysis ΠΎΡΡΠ°ΡΡΡΡ ΠΏΠΎΠ΄ Π²ΠΎΠΏΡΠΎΡΠΎΠΌ. ΠΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, ΡΡΠΎΠΌΡ ΠΌΠ΅ΡΠ°ΡΡ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡ Π½Π° Π½Π΅ΠΈΠ·ΠΌΠ΅Π½ΡΠ΅ΠΌΠΎΡΡΡ Π³ΡΠ°ΡΠ°, ΡΠ²ΡΠ·Π°Π½Π½ΡΠ΅ Ρ ΠΌΠ΅ΠΌΠΎΠΈΠ·Π°ΡΠΈΠ΅ΠΉ (Π² ΡΠ²ΠΎΡ ΠΎΡΠ΅ΡΠ΅Π΄Ρ, Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎΠΉ Π΄Π»Ρ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΠΎΠΉ ΡΠ°Π±ΠΎΡΡ Π°Π»Π³ΠΎΡΠΈΡΠΌΠΎΠ²). Π ΡΠ°ΡΡΠ½ΠΎΡΡΠΈ, ΡΡΠΎ Π½Π°ΠΊΠ»Π°Π΄ΡΠ²Π°Π΅Ρ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡ Π½Π° ΠΏΠΎΡΡΡΠΎΠ΅Π½ΠΈΠ΅ ΠΎΡΠ½ΠΎΡΠ΅Π½ΠΈΠΉ ΠΌΠ΅ΠΆΠ΄Ρ "ΠΎΠ±ΡΡΠ½ΡΠΌΠΈ" ΠΈ ΡΠ·Π»Π°ΠΌΠΈ Π² NTA.
Π Π»ΡΠ±ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅, Π΄Π»Ρ ΠΏΡΠΎΡΡΠ½Π΅Π½ΠΈΡ Π΄Π΅ΡΠ°Π»Π΅ΠΉ ΠΏΡΠ΅Π΄Π»Π°Π³Π°Π΅ΠΌΠΎΠ³ΠΎ ΠΏΠΎΠ΄Ρ
ΠΎΠ΄Π° ΡΠΈΡΠ°ΡΠ΅Π»Ρ ΠΏΡΠ΅Π΄Π»Π°Π³Π°Π΅ΡΡΡ ΠΎΠ·Π½Π°ΠΊΠΎΠΌΠΈΡΡΡΡ ΡΠΎ ΡΡΠ°ΡΡΡΠΉ, Π±Π»Π°Π³ΠΎ, ΠΎΠ½Π° Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ ΠΏΡΠΎΡΡΠ° Π΄Π»Ρ ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΡ. ΠΠ΅Ρ
Π°Π½ΠΈΠ·ΠΌ Relational RAGs Π²Π΅ΡΡΠΌΠ° ΠΌΠΎΡΠ½ΡΠΉ ΠΈ ΡΠ½ΠΈΠ²Π΅ΡΡΠ°Π»ΡΠ½ΡΠΉ β Π΅Π³ΠΎ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ ΠΈΠΌΠ΅ΡΡ Π² Π²ΠΈΠ΄Ρ ΠΏΡΠΈ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΡΠ°ΠΌΡΡ
ΡΠ°Π·Π½ΡΡ
Π°ΡΠΏΠ΅ΠΊΡΠΎΠ² ΡΠ°Π±ΠΎΡΡ Ρ ΡΠ·ΡΠΊΠ°ΠΌΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ, Π½Π΅ ΡΠΎΠ»ΡΠΊΠΎ ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ Π°Π½Π°Π»ΠΈΠ·Π°. π
#dsl #rag #static #analysis
485
https://arxiv.org/pdf/2002.06187v1.pdf
Reusing Static Analysis across Different Domain-Specific Languages using Reference Attribute Grammars
ΠΠ²ΡΠΎΡΡ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠΎΡΠΊΡΠΎΠΌΠ½ΠΈΡΠ°Π»ΠΈ Ρ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ ΡΡΠ°ΡΡΠΈ β Π² ΡΠ°Π±ΠΎΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ Π½Π΅ ΠΏΡΠΎΡΡΠΎ ΡΡΡΠ»ΠΎΡΠ½ΡΠ΅ Π°ΡΡΠΈΠ±ΡΡΠ½ΡΠ΅ Π³ΡΠ°ΠΌΠΌΠ°ΡΠΈΠΊΠΈ (Reference Attribute Grammars, RAGs), Π° ΠΈΡ
ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΠ΅ β ΡΠ΅Π»ΡΡΠΈΠΎΠ½Π½ΡΠ΅ ΡΡΡΠ»ΠΎΡΠ½ΡΠ΅ Π°ΡΡΠΈΠ±ΡΡΠ½ΡΠ΅ Π³ΡΠ°ΠΌΠΌΠ°ΡΠΈΠΊΠΈ (Relational Reference Attribute Grammars) ΠΈ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΎ ΡΡΠ΅ΠΉΠΌΠ²ΠΎΡΠΊ JastAdd.
ΠΡΠ»ΠΈ Π³ΠΎΠ²ΠΎΡΠΈΡΡ ΡΠΎΠ²ΡΠ΅ΠΌ ΠΏΠΎ-ΠΏΡΠΎΡΡΠΎΠΌΡ, ΡΠΎ Π°Π²ΡΠΎΡΡ ΠΏΡΠ΅Π΄Π»Π°Π³Π°ΡΡ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ Π°Π½Π°Π»ΠΎΠ³Π° Expression Problem Π² ΠΎΠ±Π»Π°ΡΡΠΈ ΡΠ·ΡΠΊΠΎΠ² ΠΈ Π°Π»Π³ΠΎΡΠΈΡΠΌΠΎΠ² ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ Π°Π½Π°Π»ΠΈΠ·Π° (N ΡΠ·ΡΠΊΠΎΠ² x M Π°Π»Π³ΠΎΡΠΈΡΠΌΠΎΠ²) ΠΏΡΠΈ ΠΏΠΎΠΌΠΎΡΠΈ ΡΠ·ΡΠΊΠ° ΠΏΡΠΎΠΌΠ΅ΠΆΡΡΠΎΡΠ½ΠΎΠ³ΠΎ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΡ (Intermediate Representation, IR). ΠΠ΄Π΅Ρ Π½Π΅ Π½ΠΎΠ²Π°, Π½ΠΎ Π΅ΡΡΡ Π½ΡΠ°Π½Ρ. π
ΠΡΠΈ ΡΡΠ°Π΄ΠΈΡΠΈΠΎΠ½Π½ΠΎΠΌ ΠΏΠΎΠ΄Ρ
ΠΎΠ΄Π΅ ΠΊ (ΡΠ½ΠΈΠ²Π΅ΡΡΠ°Π»ΡΠ½ΠΎΠΌΡ) IR, ΠΊΠ°ΠΊ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Π² ΠΏΡΠΎΠ΅ΠΊΡΠ΅ LLVM, ΠΎΠ΄ΠΈΠ½ ΠΈ ΡΠΎΡ ΠΆΠ΅ IR ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π΄Π»Ρ Π²ΡΠ΅Ρ
ΡΠΈΠΏΠΎΠ² ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ Π°Π½Π°Π»ΠΈΠ·Π° ΠΈ ΡΡΠ°Π½ΡΡΠΎΡΠΌΠ°ΡΠΈΠΉ. Π‘ ΠΎΠ΄Π½ΠΎΠΉ ΡΡΠΎΡΠΎΠ½Ρ, ΡΡΠΎ Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΏΠ΅ΡΠ΅ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π°Π»Π³ΠΎΡΠΈΡΠΌΡ Π°Π½Π°Π»ΠΈΠ·Π° Π΄Π»Ρ Π²ΡΠ΅Ρ
ΡΠ·ΡΠΊΠΎΠ², ΠΊΠΎΡΠΎΡΡΠ΅ ΡΡΠ°Π½ΡΠ»ΠΈΡΡΡΡΡΡ Π² Π΄Π°Π½Π½ΡΠΉ IR. ΠΠΎ Ρ Π΄ΡΡΠ³ΠΎΠΉ ΡΡΠΎΡΠΎΠ½Ρ, ΡΠ°ΠΊΠΎΠΉ IR Ρ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎΡΡΡΡ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ, ΡΡΠ΅Π±ΡΡΡΡΡΡΡ ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½ΠΎΠΌΡ Π°Π»Π³ΠΎΡΠΈΡΠΌΡ ΠΈ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΡ. ΠΡΠΎ ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΡ ΠΊ "ΡΠ°Π·Π΄ΡΠ²Π°Π½ΠΈΡ" IR, ΠΊΠ°ΠΊ Π²ΠΈΠ΄Π½ΠΎ ΠΏΠΎ ΡΠΎΠΌΡ ΠΆΠ΅ LLVM, Π½ΠΎ ΡΠ°ΠΊΠΆΠ΅ ΡΡΠΎ ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΡ ΠΈ ΠΊ "ΡΠ°Π΄ΡΠ²Π°Π½ΠΈΡ" ΡΡΠ°Π½ΡΠ»ΡΡΠΎΡΠ° ΡΠ·ΡΠΊ->IR, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΡ ΠΏΡΠΈΡ
ΠΎΠ΄ΠΈΡΡΡ ΡΡΡΠΎΠΈΡΡ ΠΊΠΎΡΡΠ΅ΠΊΡΠ½ΡΠΉ IR ΡΠΎ Π²ΡΠ΅ΠΉ ΡΡΠ΅Π±ΡΠ΅ΠΌΠΎΠΉ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠ΅ΠΉ Π΄Π°ΠΆΠ΅ Π΅ΡΠ»ΠΈ ΠΎΠ½ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ΄ΠΈΠ½ Π°Π»Π³ΠΎΡΠΈΡΠΌ Π°Π½Π°Π»ΠΈΠ·Π°, ΠΊΠΎΡΠΎΡΡΠΉ ΠΎΠΏΠΈΡΠ°Π΅ΡΡΡ Π½Π° ΠΎΠ΄Π½Ρ Π΄Π΅ΡΡΡΡΡ Π΄ΠΎΡΡΡΠΏΠ½ΡΡ
Π΄Π°Π½Π½ΡΡ
. ΠΡΠΎ Π΅Π΄Π²Π° Π»ΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΡΡΠΈΡΠ°ΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠΎΠΉ General-Purpose ΡΡΠ΅ΠΉΠΌΠ²ΠΎΡΠΊΠ°, Π½ΠΎ Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ Ρ Domain-Specific ΡΠ·ΡΠΊΠ°ΠΌΠΈ ΠΌΠΎΠΆΠ΅Ρ Π·Π°ΠΌΠ΅ΡΠ½ΠΎ ΠΏΠΎΠ²ΡΡΠΈΡΡ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡΡ ΠΈ ΡΡΡΠ΄ΠΎΡΠΌΠΊΠΎΡΡΡ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ.
ΠΡΡΠ³ΠΎΠΉ ΠΏΡΠΈΠΌΠ΅Ρ Π½Π΅ΠΆΠ΅Π»Π°ΡΠ΅Π»ΡΠ½ΠΎΠ³ΠΎ Π΄ΡΠ±Π»ΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΌΠΎΠΆΠ΅Ρ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΡΡΡ ΠΏΡΠΈ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠΈ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈ ΡΠΎΠ³ΠΎ ΠΆΠ΅ Π°Π»Π³ΠΎΡΠΈΡΠΌΠ° ΠΊ ΡΠ°Π·Π½ΡΠΌ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ°ΠΌ IR. Π’Π°ΠΊ, Π°Π²ΡΠΎΡΡ ΡΠ°ΡΡΠΌΠ°ΡΡΠΈΠ²Π°ΡΡ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Π°Π»Π³ΠΎΡΠΈΡΠΌΠ° Π½Π°Ρ
ΠΎΠΆΠ΄Π΅Π½ΠΈΡ ΡΠΈΠΊΠ»ΠΈΡΠ΅ΡΠΊΠΈΡ
Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠ΅ΠΉ Π² ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ°Ρ
Π½Π° Java ΠΊΠ°ΠΊ Π½Π° ΡΡΠΎΠ²Π½Π΅ ΠΊΠ»Π°ΡΡΠΎΠ², ΡΠ°ΠΊ ΠΈ Π½Π° ΡΡΠΎΠ²Π½Π΅ ΠΏΠ°ΠΊΠ΅ΡΠΎΠ². ΠΠΎΡΠΊΠΎΠ»ΡΠΊΡ Π² IR ΡΡΠΈ ΠΊΠΎΠ½ΡΠ΅ΠΏΡΠΈΠΈ Π±ΡΠ΄ΡΡ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½Ρ ΡΠ°Π·Π½ΡΠΌΠΈ ΡΠ·Π»Π°ΠΌΠΈ, ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Π² ΡΠΎΡΠ½ΠΎΡΡΠΈ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈ ΡΠΎΠ³ΠΎ ΠΆΠ΅ Π°Π»Π³ΠΎΡΠΈΡΠΌΠ° ΠΊ Π½ΠΈΠΌ ΠΌΠΎΠΆΠ΅Ρ ΠΎΠΊΠ°Π·Π°ΡΡΡΡ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, ΠΈ ΠΏΠΎΡΡΠ΅Π±ΡΠ΅Ρ Π΄ΡΠ±Π»ΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΊΠΎΠ΄Π°. Π Π°Π·ΡΠΌΠ΅Π΅ΡΡΡ, Π½Π° ΡΡΠΎΡ ΡΠ°ΠΊΡΠΎΡ Π²Π»ΠΈΡΡΡ ΠΊΠ°ΠΊ Π²ΡΡΡΠΎΠ΅Π½Π½ΡΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ ΠΎΠ±ΠΎΠ±ΡΡΠ½Π½ΠΎΠ³ΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΡΠ·ΡΠΊΠ° ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ, ΡΠ°ΠΊ ΠΈ Π°ΡΡ
ΠΈΡΠ΅ΠΊΡΡΡΠ° ΡΠΈΡΡΠ΅ΠΌΡ Π°Π½Π°Π»ΠΈΠ·Π° ΠΈ ΡΡΠ°Π½ΡΡΠΎΡΠΌΠ°ΡΠΈΠΈ Π²ΠΎΠΊΡΡΠ³ IR.
ΠΠΎ Π°Π²ΡΠΎΡΡ ΠΏΡΠ΅Π΄Π»Π°Π³Π°ΡΡ ΠΏΠΎΠ΄Ρ
ΠΎΠ΄, ΠΏΠΎ ΠΏΠΎΡΡΡΠΎΠ΅Π½ΠΈΡ Π»ΠΈΡΡΠ½Π½ΡΠΉ ΡΠΊΠ°Π·Π°Π½Π½ΡΡ
ΠΏΡΠΎΠ±Π»Π΅ΠΌ: Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Π²ΠΈΠ΄Π° ΠΈ Π°Π»Π³ΠΎΡΠΈΡΠΌΠ° ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ Π°Π½Π°Π»ΠΈΠ·Π° ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΠΉ IR, ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠΈΠΉ ΡΠΎΠ»ΡΠΊΠΎ ΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ, ΠΊΠΎΡΠΎΡΠ°Ρ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠ°, ΠΈ Π½ΠΈΡΠ΅Π³ΠΎ Π»ΠΈΡΠ½Π΅Π³ΠΎ! π
ΠΠ΅ΡΠΎΠΌΠ½Π΅Π½Π½ΠΎ, ΡΠ°ΠΊΠΎΠΉ ΠΏΠΎΠ΄Ρ
ΠΎΠ΄ Π±ΡΠ» Π±Ρ ΠΊΡΠ°ΠΉΠ½Π΅ Π½Π΅ΡΠ΄ΠΎΠ±Π½ΡΠΌ ΠΈ Π½Π΅ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΡΠΌ, Π΅ΡΠ»ΠΈ Π±Ρ Π½Π΅ ΡΡΠ΅ΠΉΠΌΠ²ΠΎΡΠΊ ΡΠ΅Π»ΡΡΠΈΠΎΠ½Π½ΡΡ
ΡΡΡΠ»ΠΎΡΠ½ΡΡ
Π°ΡΡΠΈΠ±ΡΡΠ½ΡΡ
Π³ΡΠ°ΠΌΠΌΠ°ΡΠΈΠΊ. ΠΠ½ Π·ΠΈΠΆΠ΄ΠΈΡΡΡ Π½Π° Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ
ΡΡΠΎΠ»ΠΏΠ°Ρ
:
1. Π½Π΅ΡΠ΅ΡΠΌΠΈΠ½Π°Π»ΡΠ½ΡΠ΅ Π°ΡΡΠΈΠ±ΡΡΡ (Nonterminal Attributes, NTA aka Higher-Order Attributes) ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡ Π»Π°ΠΊΠΎΠ½ΠΈΡΠ½ΠΎ ΠΈ Π΄Π΅ΠΊΠ»Π°ΡΠ°ΡΠΈΠ²Π½ΠΎ Π·Π°Π΄Π°Π²Π°ΡΡ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΡ AST->AST, ΡΡΠΎ ΡΠΈΠ»ΡΠ½ΠΎ ΠΎΠ±Π»Π΅Π³ΡΠ°Π΅Ρ ΠΏΠΎΡΡΡΠΎΠ΅Π½ΠΈΠ΅ ΡΠΏΠ΅ΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΡΡ
IR Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΎΡΠ΄Π΅Π»ΡΠ½ΠΎΠ³ΠΎ Π²ΠΈΠ΄Π° ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ Π°Π½Π°Π»ΠΈΠ·Π°;
2. ΡΡΡΠ»ΠΎΡΠ½ΡΠ΅ Π°ΡΡΠΈΠ±ΡΡΡ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡ Π΄ΠΎΠ±Π°Π²Π»ΡΡΡ ΡΡΠ±ΡΠ°, ΡΠ²ΡΠ·ΡΠ²Π°ΡΡΠΈΠ΅ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ»ΡΠ½ΡΠ΅ ΡΠ·Π»Ρ, ΠΏΡΠ΅Π²ΡΠ°ΡΠ°Ρ Π΄Π΅ΡΠ΅Π²ΠΎ Π² Π½Π°ΠΏΡΠ°Π²Π»Π΅Π½Π½ΡΠΉ Π³ΡΠ°Ρ ΠΎΠ±ΡΠ΅Π³ΠΎ Π²ΠΈΠ΄Π°, ΡΡΠΎ ΡΠΈΠ»ΡΠ½ΠΎ ΡΠ°ΡΡΠΈΡΡΠ΅Ρ ΡΠΏΠ΅ΠΊΡΡ ΠΏΡΠΈΠΌΠ΅Π½ΠΈΠΌΡΡ
Π°Π»Π³ΠΎΡΠΈΡΠΌΠΎΠ² Π°Π½Π°Π»ΠΈΠ·Π°;
3. Π½Π°ΠΊΠΎΠ½Π΅Ρ, ΠΎΡΠ½ΠΎΡΠ΅Π½ΠΈΡ (Relations) ΠΌΠ΅ΠΆΠ΄Ρ ΡΠ·Π»Π°ΠΌΠΈ Π·Π°Π΄Π°ΡΡ ΡΡΠ±ΡΠ° "Π²Π½Π΅ΡΠ½ΠΈΠΌ" ΠΏΠΎ ΠΎΡΠ½ΠΎΡΠ΅Π½ΠΈΡ ΠΊ Π³ΡΠ°ΡΡ ΡΠΏΠΎΡΠΎΠ±ΠΎΠΌ, ΡΡΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ "Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ" ΠΏΠΎΠ»ΡΡΠΈΡΡ ΡΡΡΠ»ΠΊΠΈ ΠΈΠ· ΡΠ·Π»ΠΎΠ² IR ΠΊ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠΌ ΡΠ·Π»Π°ΠΌ Π² ΠΈΡΡ
ΠΎΠ΄Π½ΠΎΠΌ Π΄Π΅ΡΠ΅Π²Π΅ DSL.
Π ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΈΠ»Π»ΡΡΡΡΠΈΡΡΡΡΠΈΡ
ΠΏΡΠΈΠΌΠ΅ΡΠΎΠ² Π°Π²ΡΠΎΡΡ ΠΏΡΠΈΠ²ΠΎΠ΄ΡΡ ΡΠΆΠ΅ ΡΠΏΠΎΠΌΡΠ½ΡΡΡΠΉ Π°Π½Π°Π»ΠΈΠ· ΡΠΈΠΊΠ»ΠΎΠ² ΠΊΠ°ΠΊ Π΄Π»Ρ DSL, ΠΎΠΏΠΈΡΡΠ²Π°ΡΡΠ΅Π³ΠΎ ΠΊΠΎΠ½Π΅ΡΠ½ΡΠ΅ Π°Π²ΡΠΎΠΌΠ°ΡΡ, ΡΠ°ΠΊ ΠΈ Π΄Π»Ρ ΡΠ·ΡΠΊΠ° Java Π½Π° ΡΡΠΎΠ²Π½Π΅ ΠΊΠ»Π°ΡΡΠΎΠ² ΠΈ ΠΏΠ°ΠΊΠ΅ΡΠΎΠ² ΠΏΠΎ ΠΎΡΠ΄Π΅Π»ΡΠ½ΠΎΡΡΠΈ, ΠΈ Π°Π»Π³ΠΎΡΠΈΡΠΌ Π²ΡΡΠ²Π»Π΅Π½ΠΈΡ ΡΠ»ΡΡΠ°Π΅Π² "Π·Π°ΡΠ΅Π½Π΅Π½ΠΈΡ" ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ
, ΡΠ½ΠΎΠ²Π° Π΄Π»Ρ Java ΠΈ Π΄Π»Ρ ΡΠ·ΡΠΊΠ° Modelica.
ΠΠ»Ρ ΠΏΠΎΠ»Π½ΠΎΡΡ ΠΊΠ°ΡΡΠΈΠ½Ρ, Π°Π²ΡΠΎΡΡ ΠΏΡΠΈΠ²ΠΎΠ΄ΡΡ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΡ Π°Π½Π°Π»ΠΈΠ·Π° ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½ΡΡ
Π°Π»Π³ΠΎΡΠΈΡΠΌΠΎΠ² Π½Π° Π½Π°Π±ΠΎΡΠ΅ ΠΎΡΠΊΡΡΡΡΡ
Java-ΠΏΡΠΎΠ΅ΠΊΡΠΎΠ² ΠΏΠΎ ΡΡΠ°Π²Π½Π΅Π½ΠΈΡ Ρ ΡΡΠ°Π΄ΠΈΡΠΈΠΎΠ½Π½ΠΎΠΉ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠ΅ΠΉ Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ ΠΏΠ°ΡΡΠ΅ΡΠ½Π° "ΠΏΠΎΡΠ΅ΡΠΈΡΠ΅Π»Ρ" (Visitor Pattern). ΠΠ»Π°Π³ΠΎΠ΄Π°ΡΡ ΠΌΠ΅Ρ
Π°Π½ΠΈΠ·ΠΌΠ°ΠΌ ΠΌΠ΅ΠΌΠΎΠΈΠ·Π°ΡΠΈΠΈ Π²Π½ΡΡΡΠΈ ΡΡΠ΅ΠΉΠΌΠ²ΠΎΡΠΊΠ° Relational RAGs (ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π»ΡΡ JastAdd), ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡ Π½Π΅ ΡΡΡΡΠΏΠ°Π΅Ρ, Π° Π² Π½Π΅ΠΊΠΎΡΠΎΡΡΡ
ΡΠ»ΡΡΠ°ΡΡ
ΠΈ ΠΏΡΠ΅Π²ΠΎΡΡ
ΠΎΠ΄ΠΈΡ ΡΡΠ°Π΄ΠΈΡΠΈΠΎΠ½Π½ΡΡ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ, ΠΊΠΎΡΠΎΡΡΡ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅ΡΠ΅ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ.
485
ΠΠ΅ΠΊΠΎΡΠΎΡΡΠ΅ ΠΈΠ΄Π΅ΠΈ ΠΎΠΏΠ΅ΡΠ΅ΠΆΠ°ΡΡ ΡΠ²ΠΎΡ ΡΠΏΠΎΡ
Ρ Π½Π° Π΄Π΅ΡΡΡΠΈΠ»Π΅ΡΠΈΡ. ΠΠ²ΡΠΎΡ Π΄Π°Π½Π½ΠΎΠΉ Π·Π°ΠΌΠ΅ΡΠΊΠΈ ΠΊ ΠΎΠ½ΡΠΌ Π±Π΅Π·ΡΡΠ»ΠΎΠ²Π½ΠΎ ΠΎΡΠ½ΠΎΡΠΈΡ ΡΠΈΡΡΠ΅ΠΌΡ META II, ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½Π½ΡΡ Π΅ΡΠ΅ Π² 1964 Π³ΠΎΠ΄Ρ. Π‘ΡΠ΅Π΄ΠΈ ΠΏΡΠΎΡΠΈΡ
ΡΡΠ° ΡΠ°Π±ΠΎΡΠ° Π²ΠΏΠ΅ΡΠ°ΡΠ»ΠΈΠ»Π° ΠΠΎΠ½Π°Π»ΡΠ΄Π° ΠΠ½ΡΡΠ°, ΠΏΠΎΡΠ»ΡΠΆΠΈΠ² ΠΎΠ΄Π½ΠΈΠΌ ΠΈΠ· ΠΈΡΡΠΎΡΠ½ΠΈΠΊΠΎΠ² Π²Π΄ΠΎΡ
Π½ΠΎΠ²Π΅Π½ΠΈΡ Π΄Π»Ρ Π°ΡΡΠΈΠ±ΡΡΠ½ΡΡ
Π³ΡΠ°ΠΌΠΌΠ°ΡΠΈΠΊ.
ΠΠ²ΡΠΎΡ Π²ΡΠ΅Π³ΠΎ Π½Π° 6 ΡΡΡΠ°Π½ΠΈΡΠ°Ρ
Π»Π΅Π³ΠΊΠΎΠ³ΠΎ ΡΠ΅ΠΊΡΡΠ° ΡΡΠ°ΡΡΠΈ[1] ΠΎΠΏΠΈΡΡΠ²Π°Π΅Ρ Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΡΡ ΠΌΠ°ΡΠΈΠ½Ρ Π΄Π»Ρ ΡΠ°Π·Π±ΠΎΡΠ° Π²Ρ
ΠΎΠ΄Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠΈ ΠΈ ΠΏΡΠ΅Π΄ΠΌΠ΅ΡΠ½ΠΎ-ΠΎΡΠΈΠ΅Π½ΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ ΡΠ·ΡΠΊ, ΡΡ
ΠΎΠΆΠΈΠΉ Ρ ΡΠ°ΡΡΠΈΡΠ΅Π½Π½ΠΎΠΉ Π²Π΅ΡΡΠΈΠ΅ΠΉ ΠΠΠ€ (ΡΠΎΡΠΌΠ΅ ΠΡΠΊΡΡΠ°-ΠΠ°ΡΡΡΠ°). Π ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΈΠ»Π»ΡΡΡΡΠ°ΡΠΈΠΈ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠ΅ΠΉ META II ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ, ΠΊΠ°ΠΊ ΡΡΠΎΡ ΠΏΡΠ΅Π΄ΠΌΠ΅ΡΠ½ΠΎ-ΠΎΡΠΈΠ΅Π½ΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ ΡΠ·ΡΠΊ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΡΡΠ°Π½ΡΠ»ΠΈΡΠΎΠ²Π°ΡΡ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡ ΠΈΠ· ΡΠΏΡΠΎΡΠ΅Π½Π½ΠΎΠ³ΠΎ Π²Π°ΡΠΈΠ°Π½ΡΠ° ΠΠ»Π³ΠΎΠ»Π° (VALGOL) Π² ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ Π°Π±ΡΡΡΠ°ΠΊΡΠ½ΠΎΠΉ ΡΡΠ΅ΠΊΠΎΠ²ΠΎΠΉ ΠΌΠ°ΡΠΈΠ½Ρ; Π΅ΡΡΠ΅ΡΡΠ²Π΅Π½Π½ΠΎ, ΡΡΠΎ ΠΈ ΡΠ·ΡΠΊΠΈ Π°Π»Π³Π΅Π±ΡΠ°ΠΈΡΠ΅ΡΠΊΠΈΡ
Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠΉ[3] ΡΠΎΠΆΠ΅ Π»Π΅Π³ΠΊΠΎ ΡΠ°Π·Π±ΠΈΡΠ°ΡΡΡΡ META II.
ΠΠΎ ΡΠ°ΠΌΡΠΉ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½ΡΠΉ Π°ΡΠΏΠ΅ΠΊΡ META II ΡΡΠΎ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΠΌΠ΅ΡΠ°ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ: ΠΎΠΏΠΎΡΠ½ΡΠΉ ΠΏΡΠ΅Π΄ΠΌΠ΅ΡΠ½ΠΎ-ΠΎΡΠΈΠ΅Π½ΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ ΡΠ·ΡΠΊ ΠΌΠΎΠΆΠ½ΠΎ Π²ΡΡΠ°Π·ΠΈΡΡ Π² ΡΠ΅ΡΠΌΠΈΠ½Π°Ρ
ΡΠ°ΠΌΠΎΠ³ΠΎ ΡΠ΅Π±Ρ, ΡΡΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΏΠΎΡΠ°Π³ΠΎΠ²ΠΎ ΡΠ°ΡΡΠΈΡΡΡΡ ΠΈΡΡ
ΠΎΠ΄Π½ΡΠ΅ Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΡΡ ΠΌΠ°ΡΠΈΠ½Ρ ΠΈ ΡΠ·ΡΠΊ (ΡΠΌ. ΠΈΠ½ΡΡΡΡΠΊΡΠΈΡ Π² [3]). ΠΡΠ΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π»ΠΎΡΡ, ΡΡΠΎ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΠΈ ΡΠ΅Π°Π»ΠΈΠ·ΡΡΡ Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΡΡ ΠΌΠ°ΡΠΈΠ½Ρ (Π²ΡΠ΅Π³ΠΎ 19 ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΉ), ΠΏΠΎΡΠ»Π΅ ΡΠ΅Π³ΠΎ, Π·Π°ΠΏΡΡΡΠΈΠ² Π½Π° Π½Π΅ΠΉ ΠΊΠΎΠ΄ Π΄Π»Ρ ΡΠ·ΡΠΊΠ° META II, Π±ΡΠ΄ΡΡ ΡΠ°ΡΠΊΡΡΡΠΈΠ²Π°ΡΡ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ Π΄ΠΎ Π½ΡΠΆΠ½ΠΎΠ³ΠΎ ΡΠΎΡΡΠΎΡΠ½ΠΈΡ. ΠΠΎΠ»Π΅Π΅ ΡΠΎΠ³ΠΎ, ΠΏΠ΅ΡΠ²Π°Ρ Π²Π΅ΡΡΠΈΡ META II ΡΠΎΠΆΠ΅ Π±ΡΠ»Π° Π½Π°ΠΏΠΈΡΠ°Π½Π° Π½Π° ΠΌΠ΅ΡΠ°ΡΠ·ΡΠΊΠ΅-ΠΏΡΠ΅Π΄ΡΠ΅ΡΡΠ²Π΅Π½Π½ΠΈΠΊΠ΅ (META), ΠΏΠΎΡΠ»Π΅ ΡΠ΅Π³ΠΎ ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π° ΡΠΆΠ΅ Π½Π° ΡΠ°ΠΌΠΎΠΉ META II. ΠΡΠ»ΡΠΌΠΈΠ½Π°ΡΠΈΠ΅ΠΉ ΠΏΡΠ±Π»ΠΈΡΠ½ΡΡ
ΠΈΡΡΠ»Π΅Π΄ΠΎΠ²Π°Π½ΠΈΠΉ Π°Π²ΡΠΎΡΠ° ΡΡΠ°Π» ΡΠ·ΡΠΊ TREE-META[2], ΠΏΡΠΈΠΌΠ΅Π½ΡΠ²ΡΠΈΠΉ ΡΠ΅ ΠΆΠ΅ ΠΈΠ΄Π΅ΠΈ ΠΊ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΡ Π΄Π΅ΡΠ΅Π²Π° Π°Π±ΡΡΡΠ°ΠΊΡΠ½ΠΎΠ³ΠΎ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ°.
ΠΠΎΠΌΠΈΠΌΠΎ ΡΠ΅ΠΎΡΠ΅ΡΠΈΡΠ΅ΡΠΊΠΈΡ
ΡΠ°Π±ΠΎΡ ΠΠ½ΡΡΠ° META II ΡΡΠ°Π»Π° ΠΏΡΠ΅Π΄ΡΠ΅ΡΠ΅ΠΉ Π±ΠΎΠ»Π΅Π΅ ΡΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠ³ΠΎ ΡΠΎΡΠΌΠ°Π»ΠΈΠ·ΠΌΠ° - PEG, ΠΊΠΎΡΠΎΡΡΠΉ Π½Π°Π±ΠΈΡΠ°Π΅Ρ Π²ΡΠ΅ Π±ΠΎΠ»ΡΡΡΡ ΠΏΠΎΠΏΡΠ»ΡΡΠ½ΠΎΡΡΡ Π² ΠΏΡΠΈΠΊΠ»Π°Π΄Π½ΡΡ
ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ°Ρ
[4]. Π‘Ρ
ΠΎΠΆΠΈΠ΅ ΠΈΠ΄Π΅ΠΈ Π»Π΅Π³Π»ΠΈ Π² ΠΎΡΠ½ΠΎΠ²Ρ ΡΠΈΡΡΠ΅ΠΌ OMeta[5] ΠΈ Ohm[6]. Π META II ΡΠ΅ΠΏΠ»ΠΎ ΠΎΡΠ·ΡΠ²Π°Π»ΠΈΡΡ ΠΠ»Π°Π½ ΠΡΠΉ, ΠΠΆΠΎ ΠΡΠΌΡΡΡΠΎΠ½Π³ ΠΈ Π΄ΡΡΠ³ΠΈΠ΅ ΠΈΠ·Π²Π΅ΡΡΠ½ΡΠ΅ ΠΈΡΠ»Π»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΠΈ ΡΠ·ΡΠΊΠΎΠ² ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ. Π ΠΠ½ΡΠ΅ΡΠ½Π΅ΡΠ΅ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡΠΈ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΉ Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΠΎΠΉ ΠΌΠ°ΡΠΈΠ½Ρ META II, ΡΡΠ΅Π΄ΠΈ ΠΊΠΎΡΠΎΡΡΡ
ΠΈ Π²Π΅ΡΡΠΈΡ Π΄Π»Ρ Python 3[7] ΠΎΡ Π°Π²ΡΠΎΡΠ° Π·Π°ΠΌΠ΅ΡΠΊΠΈ.
ΠΠΈΡΠ΅ΡΠ°ΡΡΡΠ°:
1. http://www.chilton-computing.org.uk/acl/literature/reports/p025.htm - ΠΈΡΡ
ΠΎΠ΄Π½Π°Ρ ΠΏΡΠ±Π»ΠΈΠΊΠ°ΡΠΈΡ
2. https://en.wikipedia.org/wiki/TREE-META - ΠΊΡΠ»ΡΠΌΠΈΠ½Π°ΡΠΈΡ ΡΠ°Π·Π²ΠΈΡΠΈΡ ΠΈΡΡ
ΠΎΠ΄Π½ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΡ Π°Π²ΡΠΎΡΠ°ΠΌΠΈ
3. http://www.bayfronttechnologies.com/mc_tutorial.html - ΠΏΠΎΠ΄ΡΠΎΠ±Π½Π°Ρ ΠΈΠ½ΡΠ΅ΡΠ°ΠΊΡΠΈΠ²Π½Π°Ρ Π΄Π΅ΠΌΠΎΠ½ΡΡΡΠ°ΡΠΈΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠ΅ΠΉ ΠΌΠ΅ΡΠ°ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΡΡΡΠΈΡ
ΡΠΈΡΡΠ΅ΠΌ, ΠΎΡΡΠ°Π»ΠΊΠΈΠ²Π°ΡΡΠ΅Π΅ΡΡ ΠΎΡ META II
4. https://www.python.org/dev/peps/pep-0617/ - ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ ΡΠ°Π·Π±ΠΎΡΠ° Π² Python 3
5. https://en.wikipedia.org/wiki/OMeta - ΡΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠ΅ ΡΠ°Π·Π²ΠΈΡΠΈΠ΅ ΠΈΠ΄Π΅ΠΉ META II
6. https://ohmlang.github.io/ - Π΅ΡΠ΅ Π±ΠΎΠ»Π΅Π΅ ΡΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ ΡΠΈΡΡΠ΅ΠΌΠ°
7. https://github.com/vkazanov/pymetaii - ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ META II Π½Π° Python 3 ΠΎΡ Π°Π²ΡΠΎΡΠ° Π΄Π°Π½Π½ΠΎΠΉ Π·Π°ΠΌΠ΅ΡΠΊΠΈ
8. https://github.com/stevenbagley/metaii - ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ Π½Π° Common Lisp
9. https://github.com/EyeBool/Meta-II-Compiler - ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ Π½Π° C++
10. https://github.com/siraben/meta-II - ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ Π½Π° Scheme
#classic #parsing #metaii #peg
485
https://dl.acm.org/doi/pdf/10.1145/3428297
Macros for Domain-Specific Languages
"Yo dawg I heard you like macros so I put macros in your macros so you can expand while you expand!"
ΠΠ°ΠΊ Π½ΠΈ Π·Π°Π±Π°Π²Π½ΠΎ, ΡΡΠ° ΡΡΠ°Π·Π° Π²Π΅ΡΠ½ΠΎ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡ ΡΠΎΠ΄Π΅ΡΠΆΠ°Π½ΠΈΠ΅ ΡΡΠ°ΡΡΠΈ, Π° ΠΈΠΌΠ΅Π½Π½ΠΎ, Π΄Π²Π° Π³Π»Π°Π²Π½ΡΡ
Π½ΠΎΠ²ΠΎΠ²Π²Π΅Π΄Π΅Π½ΠΈΡ Π°Π²ΡΠΎΡΠΎΠ²: 1) Π²Π²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΎΠΉ ΠΌΠ°ΠΊΡΠΎΡΠΈΡΡΠ΅ΠΌΡ Π΄Π»Ρ ΡΠ°Π·ΡΠ°Π±Π°ΡΡΠ²Π°Π΅ΠΌΠΎΠ³ΠΎ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΌ ΠΆΠ΅ DSL (Π½Π° ΠΌΠ°ΠΊΡΠΎΡΠ°Ρ
Ρ
ΠΎΡΡ-ΡΠ·ΡΠΊΠ°, Racket Π² Π΄Π°Π½Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅), ΠΈ 2) ΠΏΠ΅ΡΠ΅ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ macro expander ΠΈΠ· Ρ
ΠΎΡΡ-ΡΠ·ΡΠΊΠ° Π΄Π»Ρ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΡ ΠΌΠ°ΠΊΡΠΎΡΠΎΠ² (Π·Π° ΡΡΡΡ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»Π΅Π½ΠΈΡ API ΠΊ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ½Π½ΡΠΌ ΡΡΠ½ΠΊΡΠΈΡΠΌ macro expander).
ΠΠ²ΡΡΠΈΡ ΠΊΡΡΡΠΎ, Π½ΠΎ Π·Π°ΡΠ΅ΠΌ ΡΡΠΎ Π½ΡΠΆΠ½ΠΎ? ΠΠΎΡΠ΅ΠΌΡ Π½Π΅Π»ΡΠ·Ρ ΠΎΠ±ΠΎΠΉΡΠΈΡΡ ΠΌΠ°ΠΊΡΠΎΡΠ°ΠΌΠΈ Ρ
ΠΎΡΡ-ΡΠ·ΡΠΊΠ°? ΠΠ° ΡΡΠΎ ΡΠ½ΠΎΠ²Π° ΠΌΠΎΠΆΠ½ΠΎ Π²ΡΠ΄Π΅Π»ΠΈΡΡ Π΄Π²Π΅ ΠΏΡΠΈΡΠΈΠ½Ρ.
ΠΠ΅ΡΠ²ΠΎΠ΅ β ΡΡΠΎ Π½ΠΎΠ²ΡΠ΅ name binding constructs, ΡΠ°Π±ΠΎΡΠ°ΡΡΠΈΠ΅ Π½Π΅ ΡΠ°ΠΊ, ΠΊΠ°ΠΊ Π² Ρ
ΠΎΡΡ-ΡΠ·ΡΠΊΠ΅. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π² ΡΡΠ°ΡΡΠ΅ ΡΠ°ΡΡΠΌΠ°ΡΡΠΈΠ²Π°Π΅ΡΡΡ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ PEG DSL, Π² ΠΊΠΎΡΠΎΡΠΎΠΌ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΈΠΈ Π·Π°Ρ
Π²Π°ΡΠ° ΠΏΠΎΠ΄Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡ ΠΈ ΡΠ²ΡΠ·ΡΠ²Π°Π½ΠΈΡ Π΅Π³ΠΎ Ρ ΠΈΠΌΠ΅Π½Π΅ΠΌ ΠΌΠΎΠ³ΡΡ Π½Π°Ρ
ΠΎΠ΄ΠΈΡΡΡΡ Π²Π½ΡΡΡΠΈ Π·Π²Π΅Π·Π΄Ρ ΠΠ»ΠΈΠ½ΠΈ. ΠΠΎ Π² ΡΠ°ΠΊΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΡΡΠΈ ΠΈΠΌΠ΅Π½Π° ΡΠ²ΡΠ·ΡΠ²Π°ΡΡΡΡ Π½Π΅ Ρ ΠΎΠ΄Π½ΠΈΠΌ ΠΏΠΎΠ΄Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ΠΌ, Π° ΡΠΎ Π²ΡΠ΅ΠΌ ΠΏΠΎΠ΄ΡΠΏΠΈΡΠΊΠΎΠΌ Π²Π½ΡΡΡΠΈ ΡΠΏΠΈΡΠΊΠ° Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠΉ, ΠΏΠΎΡΠΎΠΆΠ΄ΡΠ½Π½ΠΎΠ³ΠΎ Π·Π²Π΅Π·Π΄ΠΎΠΉ ΠΠ»ΠΈΠ½ΠΈ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π² Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠΈ
(define-peg arith-expr
(=> (seq (: e1 term) (* (seq (: op* (alt "+" "-")) (: e* term))))
(left-associate-binops e1 op* e*)))
ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΡ op* ΠΈ e* ΡΠ²ΡΠ·ΡΠ²Π°ΡΡΡΡ ΡΠΎ ΡΠΏΠΈΡΠΊΠ°ΠΌΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠΎΠ² ΠΈ ΡΠ΅ΡΠΌΠΎΠ² ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²Π΅Π½Π½ΠΎ (ΡΠ°ΠΊ ΠΊΠ°ΠΊ Π½Π°Ρ
ΠΎΠ΄ΡΡΡΡ "ΠΏΠΎΠ΄ Π·Π²ΡΠ·Π΄ΠΎΡΠΊΠΎΠΉ"), Π² ΡΠΎ Π²ΡΠ΅ΠΌΡ ΠΊΠ°ΠΊ e1 ΡΠ²ΡΠ·ΡΠ²Π°Π΅ΡΡΡ Ρ ΠΎΠ΄Π½ΠΈΠΌ ΡΠ΅ΡΠΌΠΎΠΌ.
ΠΠΎ ΡΡΠ°Π²Π½Π΅Π½ΠΈΡ ΡΠΎ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΠΌ ΡΠ²ΡΠ·ΡΠ²Π°Π½ΠΈΠ΅ΠΌ ΠΈΠΌΡΠ½ Π² ΡΡΠ½ΠΊΡΠΈΡΡ
ΠΈΠ»ΠΈ let-Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡΡ
ΡΠ°ΠΊΠΈΠ΅ ΡΠ²ΡΠ·ΡΠ²Π°Π½ΠΈΡ ΡΠ°Π±ΠΎΡΠ°ΡΡ "ΡΠΈΠ²ΠΎΡΠΎΡ Π½Π°Π²ΡΠ²ΠΎΡΠΎΡ", Π° ΠΏΠΎΡΠΎΠΌΡ ΡΡΠ΅Π±ΡΡΡ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ "ΡΡΠΊΠ°ΠΌΠΈ". Π Π΄Π°Π½Π½ΠΎΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ ΡΠ°ΠΊΠ°Ρ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ Π½Π°ΠΏΠΈΡΠ°Π½Π° Π°Π²ΡΠΎΡΠ°ΠΌΠΈ PEG DSL Π½Π° ΠΌΠ°ΠΊΡΠΎΡΠ°Ρ
Ρ
ΠΎΡΡ-ΡΠ·ΡΠΊΠ°, Π½ΠΎ Π΅ΡΠ»ΠΈ ΠΌΡ Ρ
ΠΎΡΠΈΠΌ ΡΡΠΎΠ±Ρ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΠΈ DSL ΠΌΠΎΠ³Π»ΠΈ Π·Π°ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°ΡΡ binding constructs ΠΏΠΎ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΠΎΠΌΡ Π²ΠΊΡΡΡ, Π½Π°ΠΌ ΠΏΡΠΈΠ΄ΡΡΡΡ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²ΠΈΡΡ ΠΈΠΌ ΡΠ°Π·Π²ΠΈΡΡΡ ΠΌΠ°ΠΊΡΠΎ-ΡΠΈΡΡΠ΅ΠΌΡ ΠΏΠΎΠ²Π΅ΡΡ
Π½Π°ΡΠ΅Π³ΠΎ DSL.
ΠΡΠΎΡΠ°Ρ ΠΏΡΠΈΡΠΈΠ½Π° ΡΠ²ΡΠ·Π°Π½Π° Ρ ΡΠ΅ΠΌ, ΡΡΠΎ Π°Π²ΡΠΎΡΡ Π½Π°Π·ΡΠ²Π°ΡΡ "hosted DSL". ΠΠ½Π΅ ΠΊΠ°ΠΆΠ΅ΡΡΡ, ΠΈΠ½Π°ΡΠ΅ ΡΡΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π±ΡΠ»ΠΎ Π±Ρ Π½Π°Π·Π²Π°ΡΡ "deeply embedded DSL". Π‘ΡΡΡ Π² ΡΠΎΠΌ, ΡΡΠΎ DSL, ΠΊΠΎΡΠΎΡΡΠΉ ΠΌΡ ΡΠ΅Π°Π»ΠΈΠ·ΡΠ΅ΠΌ Π½Π° ΠΌΠ°ΠΊΡΠΎΡΠ°Ρ
, ΡΠ²Π»ΡΠ΅ΡΡΡ Π½Π΅ ΠΏΡΠΎΡΡΠΎ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈΠΌ ΡΠ°Ρ
Π°ΡΠΎΠΌ, Π° ΡΡΠ΅Π±ΡΠ΅Ρ ΠΏΠΎΠ»Π½ΠΎΡΠ΅Π½Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅ΡΠ° ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ, Π½Π°ΡΠΈΠ½Π°Ρ (ΠΏΠΎΡΠ΅Π½ΡΠΈΠ°Π»ΡΠ½ΠΎ) Ρ ΠΏΠ°ΡΡΠ΅ΡΠ° Π²Π²ΠΎΠ΄ΠΈΠΌΠΎΠ³ΠΎ Π½Π°ΠΌΠΈ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ°, ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠ°Ρ ΡΠΏΠ΅ΡΠΈΡΠΈΡΠ΅ΡΠΊΠΈΠΌ ΡΠ°Π·ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ΠΌ ΠΈΠΌΡΠ½, Π½Π΅ΡΡΠΈΠ²ΠΈΠ°Π»ΡΠ½ΡΠΌΠΈ binding context ΠΈ scoping rules, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, ΠΏΡΠΎΠ²Π΅ΡΠΊΠΎΠΉ ΡΠΈΠΏΠΎΠ² ΠΈΠ»ΠΈ Π΄ΡΡΠ³ΠΈΠΌ ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠΌ Π°Π½Π°Π»ΠΈΠ·ΠΎΠΌ ΠΊΠΎΡΡΠ΅ΠΊΡΠ½ΠΎΡΡΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ, ΠΈ Π·Π°ΠΊΠ°Π½ΡΠΈΠ²Π°Ρ ΠΏΠΎΠ»Π½ΠΎΡΠ΅Π½Π½ΡΠΌ IR ΠΈ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΡΠΌΠΈ. ΠΠ»Ρ ΡΠΎΠ³ΠΎ ΡΡΠΎΠ±Ρ Π΄Π°ΡΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΠΌ ΠΏΠΈΡΠ°ΡΡ ΠΌΠ°ΠΊΡΠΎΡΡ Π΄Π»Ρ ΡΠ°ΠΊΠΎΠ³ΠΎ DSL Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΌΠ°ΠΊΡΠΎ-ΡΠΈΡΡΠ΅ΠΌΡ Ρ
ΠΎΡΡ-ΡΠ·ΡΠΊΠ°, Π½Π°ΠΌ ΠΏΡΠΈΠ΄ΡΡΡΡ ΠΎΡΠΊΡΡΡΡ Π΄ΠΎΡΡΡΠΏ ΠΊ Π²Π½ΡΡΡΠ΅Π½Π½ΠΎΡΡΡΠΌ Π½Π°ΡΠ΅Π³ΠΎ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠ° ΡΡΠΎΠ±Ρ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΠΈ ΠΌΠΎΠ³Π»ΠΈ ΠΏΠΎΡΠΎΠΆΠ΄Π°ΡΡ AST ΠΈΠ»ΠΈ Π΄Π°ΠΆΠ΅ IR Π½Π°ΡΠ΅Π³ΠΎ DSL, ΠΈ "ΡΠΊΠ°ΡΠΌΠ»ΠΈΠ²Π°ΡΡ" Π΅Π³ΠΎ Π΄Π°Π»Π΅Π΅ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΡ. Π ΠΏΡΠΎΡΠΈΠ²Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΠΌΠ°ΠΊΡΠΎΡΡ ΡΠΌΠΎΠ³ΡΡ ΠΏΠΎΡΠΎΠΆΠ΄Π°ΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΡΠ°Π·ΡΠΎΠ·Π½Π΅Π½Π½ΡΠ΅ ΠΊΡΡΠΊΠΈ (ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ) DSL, ΡΠ²ΡΠ·Π°Π½Π½ΡΠ΅ ΠΌΠ΅ΠΆΠ΄Ρ ΡΠΎΠ±ΠΎΠΉ Π²ΡΠ·ΠΎΠ²Π°ΠΌΠΈ Π°Π½ΠΎΠ½ΠΈΠΌΠ½ΡΡ
(ΠΈΠ»ΠΈ Π½Π΅ ΠΎΡΠ΅Π½Ρ) ΡΡΠ½ΠΊΡΠΈΠΉ Ρ
ΠΎΡΡ-ΡΠ·ΡΠΊΠ°, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ Π½Π°ΡΠ΅Π³ΠΎ DSL ΠΏΡΠΎΠ°Π½Π°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ ΠΈ ΠΎΠΏΡΠΈΠΌΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ ΡΠΆΠ΅ Π½Π΅ ΡΠΌΠΎΠΆΠ΅Ρ.
Π’Π°ΠΊ Π²ΠΎΡ, ΡΡΠΎΠ±Ρ ΠΏΠΎΠ»ΡΡΠΈΡΡ ΠΏΡΠ΅ΠΈΠΌΡΡΠ΅ΡΡΠ²Π° ΠΈ ΡΠΎΠ³ΠΎ, ΠΈ Π΄ΡΡΠ³ΠΎΠ³ΠΎ, Π½Π°ΠΌ ΠΏΡΠΈΠ΄ΡΡΡΡ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²ΠΈΡΡ ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΡ ΠΌΠ°ΠΊΡΠΎ-ΡΠΈΡΡΠ΅ΠΌΡ ΠΏΠΎΠ²Π΅ΡΡ
Π½Π°ΡΠ΅Π³ΠΎ hosted DSL. Π ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°ΡΡ Ρ
ΠΎΡΠΎΡΡΡ ΠΌΠ°ΠΊΡΠΎΡΠΈΡΡΠ΅ΠΌΡ (Π³ΠΈΠ³ΠΈΠ΅Π½ΠΈΡΠ½ΡΡ, Ρ ΡΠ°Π·Π΄Π΅Π»Π΅Π½ΠΈΠ΅ΠΌ ΡΠ°Π· ΠΈ ΠΈΠ½ΡΠ΅Π³ΡΠΈΡΡΡΡΡΡΡΡ Ρ ΡΠΈΡΡΠ΅ΠΌΠΎΠΉ ΠΌΠΎΠ΄ΡΠ»Π΅ΠΉ Ρ
ΠΎΡΡ-ΡΠ·ΡΠΊΠ°) ΠΎΡΠ΅Π½Ρ Π½Π΅ΠΏΡΠΎΡΡΠΎ, Π±ΡΠ»ΠΎ Π±Ρ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ ΠΏΠ΅ΡΠ΅ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ macro-expander Ρ
ΠΎΡΡ-ΡΠ·ΡΠΊΠ°. Π‘ΡΠ°ΡΡΡ ΠΏΡΠ΅Π΄Π»Π°Π³Π°Π΅Ρ API, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡΠΈΠΉ ΡΡΠΎ ΡΠ΄Π΅Π»Π°ΡΡ.
#scheme #racket #macros #dsl485
ΠΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½Π½ΡΠΉ Π² 1969 Π³ΠΎΠ΄Ρ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ Fortran-H ΠΏΡΠΈΠΌΠ΅Π½ΡΠ» ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ ΠΏΡΠ΅ΠΆΠ΄Π΅ ΡΡΡΠ΄Π½ΡΡ
ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΠΉ. ΠΠ»ΡΡΠΎΠΌ ΠΊ Π½ΠΈΠΌ ΡΡΠ°Π»Π° Π½ΠΎΠ²Π°ΡΠΎΡΡΠΊΠ°Ρ ΡΠ΅Ρ
Π½ΠΈΠΊΠ° ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ Π°Π½Π°Π»ΠΈΠ·Π°: ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ Π΄ΠΎΠΌΠΈΠ½Π°ΡΠΎΡΠΎΠ² ΡΠ·Π»ΠΎΠ² Π³ΡΠ°ΡΠ° ΠΏΠΎΡΠΎΠΊΠ° ΠΈΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΡ.
ΠΠΎΠΌΠΈΠ½Π°ΡΠΎΡΠΎΠΌ Π·Π°Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΡΠ·Π»Π° Π½Π°Π·ΡΠ²Π°ΡΡ ΡΠ°ΠΊΠΎΠΉ ΡΠ·Π΅Π», ΡΠ΅ΡΠ΅Π· ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΡΠΎΡ
ΠΎΠ΄ΡΡ Π²ΡΠ΅ ΠΏΡΡΠΈ ΠΎΡ Π²Ρ
ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΡΠ·Π»Π° ΠΊ Π·Π°Π΄Π°Π½Π½ΠΎΠΌΡ. ΠΠ΅ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²Π΅Π½Π½ΡΠ΅ (ΡΠΎ Π΅ΡΡΡ Π±Π»ΠΈΠΆΠ°ΠΉΡΠΈΠ΅ ΠΊ ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡ ΠΈΠ· ΡΠ·Π»ΠΎΠ²) Π΄ΠΎΠΌΠΈΠ½Π°ΡΠΎΡΡ ΠΎΠ±ΡΠ°Π·ΡΡΡ Π΄Π΅ΡΠ΅Π²ΠΎ Π΄ΠΎΠΌΠΈΠ½Π°ΡΠΎΡΠΎΠ² Ρ ΠΊΠΎΡΠ½Π΅ΠΌ Π²ΠΎ Π²Ρ
ΠΎΠ΄Π½ΠΎΠΌ ΡΠ·Π»Π΅ Π³ΡΠ°ΡΠ°.
Fortran-H ΠΏΠΎΠΊΠ°Π·Π°Π», ΡΡΠΎ Π² ΡΠΎΡΠ΅ΡΠ°Π½ΠΈΠΈ Ρ Π°Π½Π°Π»ΠΈΠ·ΠΎΠΌ ΠΏΠΎΡΠΎΠΊΠΎΠ² Π΄Π°Π½Π½ΡΡ
ΠΎΡΠ½ΠΎΡΠ΅Π½ΠΈΠ΅ Π΄ΠΎΠΌΠΈΠ½ΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΡΠ°ΡΡΠΈΡΠΈΡΡ Π΄ΠΎ Π³Π»ΠΎΠ±Π°Π»ΡΠ½ΠΎΠΉ ΠΎΠ±Π»Π°ΡΡΡ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΡ Π»ΠΎΠΊΠ°Π»ΡΠ½ΡΡ
ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΠΉ. Π ΠΏΡΠΈΠΌΠ΅ΡΡ, ΠΏΡΠΈ ΠΏΠΎΠΌΠΎΡΠΈ Π΄ΠΎΠΌΠΈΠ½Π°ΡΠΎΡΠΎΠ² ΠΏΡΠΎΠ²ΠΎΠ΄ΠΈΠ»ΠΎΡΡ ΡΠ΄Π°Π»Π΅Π½ΠΈΠ΅ ΠΎΠ±ΡΠΈΡ
ΠΏΠΎΠ΄Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠΉ: Π΅ΡΠ»ΠΈ ΡΡΠ΅Π΄ΠΈ Π΄ΠΎΠΌΠΈΠ½Π°ΡΠΎΡΠΎΠ² ΡΠ΅ΠΊΡΡΠ΅Π³ΠΎ ΡΠ·Π»Π° ΡΠΆΠ΅ Π²ΡΡΠΈΡΠ»ΡΠ»ΠΎΡΡ ΠΊΠ°ΠΊΠΎΠ΅-Π»ΠΈΠ±ΠΎ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ ΠΈ Π½ΠΈ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· ΠΎΠΏΠ΅ΡΠ°Π½Π΄ΠΎΠ² Π½Π° ΠΏΡΡΠΈ ΠΊ ΡΠ·Π»Ρ Π½Π΅ ΠΌΠ΅Π½ΡΠ»ΡΡ, ΡΠΎ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡ ΠΌΠΎΠΆΠ½ΠΎ Π½Π΅ Π²ΡΡΠΈΡΠ»ΡΡΡ ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎ.
ΠΠ΄Π½ΠΎΠΉ ΠΈΠ· ΠΏΡΠΎΠ±Π»Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ Π² Fortran-H ΠΌΠ΅ΡΠΎΠ΄Π° ΠΏΠΎΠΈΡΠΊΠ° Π΄ΠΎΠΌΠΈΠ½Π°ΡΠΎΡΠΎΠ² ΡΡΠ°Π»Π° Π²ΡΡΠΎΠΊΠ°Ρ Π°Π»Π³ΠΎΡΠΈΡΠΌΠΈΡΠ΅ΡΠΊΠ°Ρ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡΡ. ΠΠ»Π³ΠΎΡΠΈΡΠΌ ΠΡΡΠ΄ΠΎΠΌΠ°-ΠΡΡΠ° (Purdom-Moore, ΠΏΠΎ ΠΈΠΌΠ΅Π½Π°ΠΌ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΎΠ² ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠ°) ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ°ΡΠ½ΠΎ ΠΎΠ±ΡΡΡΠ½ΡΠ΅ΡΡΡ ΠΈ ΡΠ΅Π°Π»ΠΈΠ·ΡΠ΅ΡΡΡ, Π½ΠΎ ΠΈΠΌΠ΅Π΅Ρ ΠΊΠ²Π°Π΄ΡΠ°ΡΠΈΡΠ½ΡΡ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡΡ.
ΠΠΎΠ»Π΅Π΅ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½Π°Ρ Π²Π΅ΡΡΠΈΡ Π°Π»Π³ΠΎΡΠΈΡΠΌΠ° ΡΠ»ΠΎΠΆΠ½ΠΎΡΡΡΡ Π² O(m*log n) Π±ΡΠ΄Π΅Ρ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½Π° ΡΠΎΠ»ΡΠΊΠΎ ΡΠ΅ΡΠ΅Π· 10 Π»Π΅Ρ Π² ΡΡΠ°ΡΡΠ΅ 1979 Π³ΠΎΠ΄Π° A Fast Algorithm for Finding Dominators in a Flowgraph Π·Π° Π°Π²ΡΠΎΡΡΡΠ²ΠΎΠΌ Π’ΠΎΠΌΠ°ΡΠ° ΠΠ΅Π½Π³Π°ΡΡΡΠ° (Thomas Lengauer) ΠΈ Π ΠΎΠ±Π΅ΡΡΠ° Π’Π°ΡΡΡΠ½Π° (Robert Tarjan).
ΠΠ΅ΡΠΌΠΎΡΡΡ Π½Π° Π½Π°Π»ΠΈΡΠΈΠ΅ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΠΎΠ³ΠΎ Π°Π»Π³ΠΎΡΠΈΡΠΌΠ° Π΄ΠΎΠΌΠΈΠ½Π°ΡΠΎΡΡ ΡΠΈΡΠΎΠΊΠΎ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π»ΠΈΡΡ, ΠΏΠΎΠΊΠ° Π² Π·Π½Π°ΠΌΠ΅Π½ΠΈΡΠΎΠΉ ΠΏΡΠ±Π»ΠΈΠΊΠ°ΡΠΈΠΈ 1989 Π³ΠΎΠ΄Π° (Efficiently Computing Static Single Assignment Form and the Control Dependence Graph) Π΄ΠΎΠΌΠΈΠ½Π°ΡΠΎΡΡ Π½Π΅ Π±ΡΠ»ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½Ρ Π΄Π»Ρ ΡΠ°Π·ΠΌΠ΅ΡΠ΅Π½ΠΈΡ phi-ΡΠ·Π»ΠΎΠ² ΠΏΡΠΈ ΠΏΠΎΡΡΡΠΎΠ΅Π½ΠΈΠΈ SSA.
ΠΠ° Π²ΠΎΠ»Π½Π΅ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½Π½ΠΎΠ³ΠΎ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ° Π±ΡΠ»ΠΈ ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠ΅Π½Ρ Π½ΠΎΠ²ΡΠ΅ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΡ Π΄ΠΎΠΌΠΈΠ½Π°ΡΠΎΡΠΎΠ²: Π³Π»ΠΎΠ±Π°Π»ΡΠ½Π°Ρ Π½ΡΠΌΠ΅ΡΠ°ΡΠΈΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ, Π³Π»ΠΎΠ±Π°Π»ΡΠ½ΠΎΠ΅ ΠΏΠ»Π°Π½ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΉ ΠΈ ΠΏΡΠΎΡΠΈΠ΅. ΠΡΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΠΈ ΡΡΠ°Π»ΠΈ ΠΏΡΠ΅Π΄Π»Π°Π³Π°ΡΡ Π°Π»ΡΡΠ΅ΡΠ½Π°ΡΠΈΠ²Π½ΡΠ΅ Π°Π»Π³ΠΎΡΠΈΡΠΌΡ ΠΏΠΎΠΈΡΠΊΠ° Π΄ΠΎΠΌΠΈΠ½Π°ΡΠΎΡΠΎΠ², ΠΊΠΎΡΠΎΡΡΠ΅, Π²ΠΏΡΠΎΡΠ΅ΠΌ, ΡΠΈΡΠΎΠΊΠΎΠ³ΠΎ ΡΠ°ΡΠΏΡΠΎΡΡΡΠ°Π½Π΅Π½ΠΈΡ Π½Π΅ ΠΏΠΎΠ»ΡΡΠΈΠ»ΠΈ, Π° Π°Π»Π³ΠΎΡΠΈΡΠΌ ΠΠ΅Π½Π³Π°ΡΡΡΠ°-Π’Π°ΡΡΡΠ½Π° (ΠΈΠ»ΠΈ ΠΏΡΠΎΡΡΠΎ ΠΠ’) Π΄ΠΎ ΡΠΈΡ
ΠΏΠΎΡ ΡΠΈΡΠΎΠΊΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ, Π² ΡΠΎΠΌ ΡΠΈΡΠ»Π΅ Π² GCC ΠΈ LLVM.
https://en.wikipedia.org/wiki/Dominator_(graph_theory)
https://www.cs.princeton.edu/courses/archive/fall03/cs528/handouts/a%20fast%20algorithm%20for%20finding.pdf - Π°Π»Π³ΠΎΡΠΈΡΠΌ ΠΠ΅Π½Π³Π°ΡΡΡΠ°-Π’Π°ΡΡΡΠ½Π° (1979)
https://www.researchgate.net/profile/Edward-Lowry/publication/220421196_Object_code_optimization/links/564ca77708aedda4c13432b4/Object-code-optimization.pdf - ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ Fortran-H (1969), Π³Π΄Π΅ Π²ΠΏΠ΅ΡΠ²ΡΠ΅ ΡΠΎΡΠΌΡΠ»ΠΈΡΡΠ΅ΡΡΡ Π°Π»Π³ΠΎΡΠΈΡΠΌ ΠΡΡΠ΄ΠΎΠΌΠ°-ΠΡΡΠ°.
http://pages.cs.wisc.edu/~fischer/cs701.f08/ssa.pdf - ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΠ΅ SSA (1989)
https://www.doc.ic.ac.uk/~livshits/classes/CO444H/reading/dom14.pdf - ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΡΠΏΠ΅ΡΠ° ΠΏΠΎ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ Π΄ΠΎΠΌΠΈΠ½Π°ΡΠΎΡΠΎΠ² ΠΏΡΡΠ΅ΠΌ Π°Π½Π°Π»ΠΈΠ·Π° ΠΏΠΎΡΠΎΠΊΠΎΠ² Π΄Π°Π½Π½ΡΡ
(2001)
https://github.com/gcc-mirror/gcc/blob/master/gcc/dominance.c - ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ Π°Π»Π³ΠΎΡΠΈΡΠΌΠ° ΠΠ’ Π² GCC
#dominator #lengauertarjan #fortranh #llvm #gcc
485
Π£ΠΈΠ»ΡΡΠΌ ΠΡΠ»ΡΡ (William Wulf) - ΠΈΡΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»Ρ Π² ΠΎΠ±Π»Π°ΡΡΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠΎΠ², ΡΠΎΡΡΡΠ΄Π½ΠΈΡΠ°Π²ΡΠΈΠΉ ΡΠΎ Π·Π½Π°ΠΌΠ΅Π½ΠΈΡΠΎΠΉ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠ΅ΠΉ DEC. ΠΡΠ»ΡΡ - ΡΠΎΠ·Π΄Π°ΡΠ΅Π»Ρ ΡΠ°Π½Π½Π΅Π³ΠΎ ΠΎΠΏΡΠΈΠΌΠΈΠ·ΠΈΡΡΡΡΠ΅Π³ΠΎ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠ° ΡΠ·ΡΠΊΠ° BLISS ΠΈ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· Π°Π²ΡΠΎΡΠΎΠ² ΠΊΠ»Π°ΡΡΠΈΡΠ΅ΡΠΊΠΎΠΉ ΠΊΠ½ΠΈΠ³ΠΈ The Design of an Optimizing Compiler (1975).
ΠΠΎΡΠ»Π΅ ΡΠ°Π±ΠΎΡΡ Π½Π°Π΄ BLISS ΠΊΠΎΠΌΠ°Π½Π΄Π° ΠΡΠ»ΡΡΠ° ΠΏΠ΅ΡΠ΅ΠΊΠ»ΡΡΠΈΠ»Π°ΡΡ Π½Π° Π°ΠΌΠ±ΠΈΡΠΈΠΎΠ·Π½ΡΠΉ ΠΏΡΠΎΠ΅ΠΊΡ PQCC (Production-Quality Compiler-Compiler Project), Π² ΡΠ°ΠΌΠΊΠ°Ρ
ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ ΡΠ»Π° ΡΠ°Π±ΠΎΡΠ° Π½Π°Π΄ ΡΠ½ΠΈΠ²Π΅ΡΡΠ°Π»ΡΠ½ΡΠΌ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠΎΠΌ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠΎΠ², ΡΠ΅Π»ΡΡ ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ Π±ΡΠ»ΠΎ ΠΏΠΎΡΠΎΠΆΠ΄Π΅Π½ΠΈΠ΅ Π²ΡΠ΅Ρ
ΡΡΠ°ΠΏΠΎΠ² ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠ° Π΄Π»Ρ Π½ΠΎΠ²ΡΡ
Π°ΡΡ
ΠΈΡΠ΅ΠΊΡΡΡ ΠΈΠ· Π΄Π΅ΠΊΠ»Π°ΡΠ°ΡΠΈΠ²Π½ΡΡ
ΠΎΠΏΠΈΡΠ°Π½ΠΈΠΉ - Π°ΠΊΡΡΠ°Π»ΡΠ½ΠΎΠΉ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ Π΄Π»Ρ DEC, ΠΏΡΠΎΠ΄Π°Π²Π°Π²ΡΠ΅ΠΉ ΡΠ°Π·Π½ΠΎΡΠΎΠ΄Π½ΡΠ΅ ΠΏΠ»Π°ΡΡΠΎΡΠΌΡ (ΡΠ΅ΠΌΠ΅ΠΉΡΡΠ²Π° PDP ΠΈ VAX, ΠΏΠΎΠ·ΠΆΠ΅ - Alpha).
Π‘ΡΠ°ΡΡΡ Compilers and Computer Architecture (1981) - Π²ΡΠ²ΠΎΠ΄Ρ ΠΈΠ· ΡΡΠΎΠΉ ΡΠ°Π±ΠΎΡΡ. Π Π½Π΅ΠΉ ΠΡΠ»ΡΡ ΡΠΊΠ°Π·ΡΠ²Π°Π΅Ρ, ΡΡΠΎ ΡΠΊΠΎΠ½ΠΎΠΌΠΈΠΊΡ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ Π½ΠΎΠ²ΡΡ
Π°ΡΡ
ΠΈΡΠ΅ΠΊΡΡΡ Π½Π΅Π»ΡΠ·Ρ ΡΠ°ΡΡΠΌΠ°ΡΡΠΈΠ²Π°ΡΡ Π±Π΅Π· ΡΡΠΎΠΈΠΌΠΎΡΡΠΈ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ ΡΠΎΠΏΡΡΡΡΠ²ΡΡΡΠ΅Π³ΠΎ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠ°. Π’ΠΎ Π΅ΡΡΡ Π΄ΠΈΠ·Π°ΠΉΠ½ Π½Π°Π±ΠΎΡ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΉ Π½Π΅Π»ΡΠ·Ρ ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ Π±Π΅Π· ΡΡΠ΅ΡΠ° Π±ΡΠ΄ΡΡΠΈΡ
ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠΎΠ².
ΠΡΡ
ΠΎΠ΄Ρ ΠΈΠ· ΡΡΠΈΡ
Π½Π°Π±Π»ΡΠ΄Π΅Π½ΠΈΠΉ ΠΡΠ»ΡΡ ΠΏΡΠ΅Π΄Π»Π°Π³Π°Π΅Ρ ΠΏΡΠΈΠ½ΡΠΈΠΏΡ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ ΠΊΠΎΠΌΠΏΡΡΡΠ΅ΡΠ½ΡΡ
Π°ΡΡ
ΠΈΡΠ΅ΠΊΡΡΡ ΠΎΠ±ΡΠ΅Π³ΠΎ Π½Π°Π·Π½Π°ΡΠ΅Π½ΠΈΡ:
1. Π Π΅Π³ΡΠ»ΡΡΠ½ΠΎΡΡΡ (regularity) - Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±ΡΡΡ ΠΎΠ΄ΠΈΠ½ ΡΠΏΠΎΡΠΎΠ± Π΄Π΅Π»Π°ΡΡ ΡΡΠΎ-Π»ΠΈΠ±ΠΎ, ΠΈ ΠΎΠ½ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±ΡΡΡ ΠΏΡΠΈΠΌΠ΅Π½ΠΈΠΌ Π²Π΅Π·Π΄Π΅ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ADD ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Π΄Π»Ρ Π²ΡΠ΅Ρ
ΡΠ΅Π³ΠΈΡΡΡΠΎΠ² ΠΈ ΡΠΈΠΏΠΎΠ² Π΄Π°Π½Π½ΡΡ
).
2. ΠΡΡΠΎΠ³ΠΎΠ½Π°Π»ΡΠ½ΠΎΡΡΡ (orthogonality) - Π°ΡΠΏΠ΅ΠΊΡΡ Π°ΡΡ
ΠΈΡΠ΅ΠΊΡΡΡΡ Π΄ΠΎΠ»ΠΆΠ½Ρ ΠΎΠ±ΡΡΠΆΠ΄Π°ΡΡΡΡ Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΠΎ, Π±Π΅Π· Π²Π·Π°ΠΈΠΌΠ½ΠΎΠ³ΠΎ Π²Π»ΠΈΡΠ½ΠΈΡ (ΡΠ΅ΠΆΠΈΠΌ Π°Π΄ΡΠ΅ΡΠ°ΡΠΈΠΈ, ΠΊ ΠΏΡΠΈΠΌΠ΅ΡΡ, Π½Π΅ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π²Π»ΠΈΡΡΡ Π½Π° Π²ΡΠ±ΠΎΡ ΠΏΡΠΈΠΌΠΈΡΠΈΠ²ΠΎΠ²).
3. ΠΠΎΠΌΠΏΠΎΠ·ΠΈΡΠΈΠΎΠ½Π½ΠΎΡΡΡ (composability) - Π² ΡΠ΅Π³ΡΠ»ΡΡΠ½ΠΎΠΉ ΠΈ ΠΎΡΡΠΎΠ³ΠΎΠ½Π°Π»ΡΠ½ΠΎΠΉ Π°ΡΡ
ΠΈΡΠ΅ΠΊΡΡΡΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ΅Π΄ΠΈΠ½ΠΈΡΡ ΡΠ°Π·Π»ΠΈΡΠ½ΡΠ΅ Π°ΡΠΏΠ΅ΠΊΡΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ»ΡΠ½ΡΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ (ΠΊΠ°ΠΆΠ΄Π°Ρ ΠΈΠ· ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΉ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ ΡΠ°Π±ΠΎΡΡ Ρ Π»ΡΠ±ΡΠΌ ΡΠ΅Π³ΠΈΡΡΡΠΎΠΌ ΠΈ ΡΠ΅ΠΆΠΈΠΌΠΎΠΌ Π°Π΄ΡΠ΅ΡΠ°ΡΠΈΠΈ).
ΠΡ Π±Π°Π·ΠΎΠ²ΡΡ
ΠΏΡΠΈΠ½ΡΠΈΠΏΠΎΠ² ΡΡΠ°ΡΡΡ ΠΏΠ΅ΡΠ΅Ρ
ΠΎΠ΄ΠΈΡ ΠΊ ΠΏΡΠΈΠ½ΡΠΈΠΏΠ°ΠΌ-ΡΠ»Π΅Π΄ΡΡΠ²ΠΈΡΠΌ: Π²ΠΎΠΏΡΠΎΡΠ°ΠΌ Π°Π΄ΡΠ΅ΡΠ°ΡΠΈΠΈ, Π²ΡΠ±ΠΎΡΠ° ΠΏΡΠΈΠΌΠΈΡΠΈΠ²ΠΎΠ², ΠΎΡΠΊΠ»ΠΎΠ½Π΅Π½ΠΈΡ ΠΎΡ ΠΏΡΠΈΠ½ΡΠΈΠΏΠΎΠ². ΠΠ½ΡΠ΅ΡΠ΅ΡΠ½ΡΠΉ Π²ΡΠ²ΠΎΠ΄ ΠΊΠ°ΡΠ°Π΅ΡΡΡ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠΈ ΠΏΡΠΈΠΌΠΈΡΠΈΠ²ΠΎΠ², ΡΠΏΠ΅ΡΠΈΡΠΈΡΠ½ΡΡ
Π΄Π»Ρ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΡΡ
ΡΠ·ΡΠΊΠΎΠ² Π²ΡΡΠΎΠΊΠΎΠ³ΠΎ ΡΡΠΎΠ²Π½Ρ: "In many cases these turn out to be more trouble than they are worth".
ΠΡΠΎ ΠΎΡΠ΅Π½Ρ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½Π°Ρ ΠΈ ΠΏΠΎ-ΠΏΡΠ΅ΠΆΠ½Π΅ΠΌΡ Π°ΠΊΡΡΠ°Π»ΡΠ½Π°Ρ ΡΡΠ°ΡΡΡ ΠΎΡ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ· ΠΈΠ·Π²Π΅ΡΡΠ½Π΅ΠΉΡΠΈΡ
ΡΠΏΠ΅ΡΠΈΠ°Π»ΠΈΡΡΠΎΠ² ΠΏΠΎ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠ°ΠΌ ΡΠ²ΠΎΠ΅ΠΉ ΡΠΏΠΎΡ
ΠΈ. ΠΠ΅ΡΠ΅ΡΠΊΠ°Π·ΡΠ²Π°ΡΡ Π΅Π΅ ΠΏΠΎΠ»Π½ΠΎΡΡΡΡ Π½Π΅Ρ ΡΠΌΡΡΠ»Π°, ΠΎΡΡΠ°Π΅ΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄ΠΎΠ²Π°ΡΡ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΡΡΡΠΈΠΌΡΡ ΡΠ΅ΠΌΠΎΠΉ ΠΊΠΎΠΌΠΏΡΡΡΠ΅ΡΠ½ΡΡ
Π°ΡΡ
ΠΈΡΠ΅ΠΊΡΡΡ ΠΈ Π½Π΅ΠΎΡΠ΄Π΅Π»ΠΈΠΌΠΎΠΉ ΠΎΡ Π½Π΅Π΅ ΡΠ΅ΠΌΠΎΠΉ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠΎΠ².
Compilers and Computer Architecture (1981) - ΡΡΠ°ΡΡΡ
https://en.wikipedia.org/wiki/William_Wulf - Π°Π²ΡΠΎΡ
https://en.wikipedia.org/wiki/BLISS - ΠΈΠ·Π²Π΅ΡΡΠ½Π΅ΠΉΡΠ°Ρ ΡΠ°Π±ΠΎΡΠ° Π°Π²ΡΠΎΡΠ°
https://en.wikipedia.org/wiki/The_Design_of_an_Optimizing_Compiler - ΠΊΠ»Π°ΡΡΠΈΡΠ΅ΡΠΊΠ°Ρ ΠΊΠ½ΠΈΠ³Π° Π°Π²ΡΠΎΡΠ°
#bliss #pqcc #architecture #isa #history
485
Π ΡΡΠ°Π΄ΠΈΡΠΈΠΎΠ½Π½ΡΡ
Π°Π»Π³ΠΎΡΠΈΡΠΌΠ°Ρ
ΡΠ°ΡΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ ΡΠ΅Π³ΠΈΡΡΡΠΎΠ² Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ Π·Π°Π΄Π°Ρ ΡΠΏΠ°ΠΊΠΎΠ²ΠΊΠΈ Π² ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΡ ΠΈΠ»ΠΈ ΡΠ°ΡΠΊΡΠ°ΡΠΊΠΈ Π³ΡΠ°ΡΠΎΠ² ΡΡΡΠ΄Π½ΠΎ ΡΡΠ΅ΡΡΡ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠ΅ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡ Π½Π° Π΄ΠΎΡΡΡΠΏ ΠΊ ΡΠ΅Π³ΠΈΡΡΡΠ°ΠΌ.
Π Π΅ΡΡ ΠΈΠ΄Π΅Ρ ΠΎΠ± Π°ΡΡ
ΠΈΡΠ΅ΠΊΡΡΡΠ°Ρ
Ρ Π½Π΅ΡΠ΅Π³ΡΠ»ΡΡΠ½ΡΠΌ Π΄ΠΎΡΡΡΠΏΠΎΠΌ ΠΊ ΡΠ΅Π³ΠΈΡΡΡΠ°ΠΌ (register aliasing, ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡ Π½Π° ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΡΡ
ΡΠ΅Π³ΠΈΡΡΡΠΎΠ² Π² ΠΊΠΎΠΌΠ°Π½Π΄Π°Ρ
). Π ΡΡΠΎ ΠΎΡΠ½ΠΎΡΠΈΡΡΡ ΠΊ x86, Π½ΠΎ Π² Π΅ΡΠ΅ Π±ΠΎΠ»ΡΡΠ΅ΠΉ ΠΌΠ΅ΡΠ΅ β ΠΊ DSP-ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠ°ΠΌ ΠΈ Π΄ΡΡΠ³ΠΈΠΌ ΡΠΏΠ΅ΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΡΠΌ Π°ΡΡ
ΠΈΡΠ΅ΠΊΡΡΡΠ°ΠΌ.
ΠΠ° ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠ΅ 3 Π΄Π΅ΡΡΡΠΈΠ»Π΅ΡΠΈΡ ΠΈΡΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΠΈ ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠΈΠ»ΠΈ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΏΠΎΠ΄Ρ
ΠΎΠ΄ΠΎΠ² ΠΊ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ΅, Π² ΡΠΎΠΌ ΡΠΈΡΠ»Π΅ ΠΌΠ΅ΡΠΎΠ΄ Π½Π° Π±Π°Π·Π΅ Π·Π°Π΄Π°ΡΠΈ ΠΎ ΠΊΠ²Π°Π΄ΡΠ°ΡΠΈΡΠ½ΠΎΠΌ ΠΏΡΠΈΡΠ²Π°ΠΈΠ²Π°Π½ΠΈΠΈ (quadratic assignment problem, ΠΈΠ»ΠΈ QAP), Π²Π΅ΡΠ½Π΅ΠΉ ΡΠ°ΡΡΠ½ΠΎΠΌ Π΅Π΅ ΡΠ»ΡΡΠ°Π΅: partitioned boolean quadratic optimization problem, ΠΈΠ»ΠΈ PBQP.
ΠΠ΅ΡΠ½Π°ΡΠ΄ Π¨ΠΎΠ»ΡΡ (Bernhard Scholz) Π² ΡΠ°Π±ΠΎΡΠ΅ 2002 Π³ΠΎΠ΄Π° ΡΡΠΎΡΠΌΡΠ»ΠΈΡΠΎΠ²Π°Π» ΡΠ°ΡΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΡΠ΅Π³ΠΈΡΡΡΠΎΠ² ΠΊΠ°ΠΊ Π·Π°Π΄Π°ΡΡ PBQP ΠΈ ΠΏΠΎΠΊΠ°Π·Π°Π», ΡΡΠΎ ΠΌΠ΅ΡΠΎΠ΄ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΌΠΎΠ΄Π΅Π»ΠΈΡΠΎΠ²Π°ΡΡ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡΠΈ ΡΠ»ΠΎΠΆΠ½ΡΡ
Π°ΡΡ
ΠΈΡΠ΅ΠΊΡΡΡ. PBQP - NP-ΠΏΠΎΠ»Π½Π°Ρ Π·Π°Π΄Π°ΡΠ°, ΠΏΠΎΡΡΠΎΠΌΡ Π²ΠΏΠΎΡΠ»Π΅Π΄ΡΡΠ²ΠΈΠΈ Π΄Π»Ρ ΠΌΠ΅ΡΠΎΠ΄Π° Π±ΡΠ»ΠΈ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠ°Π½Ρ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΡΠ΅ ΡΠ²ΡΠΈΡΡΠΈΠΊΠΈ, Π΄Π΅Π»Π°ΡΡΠΈΠ΅ Π²ΡΠ΅ΠΌΡ ΠΏΠΎΠΈΡΠΊΠ° ΡΠ΅ΡΠ΅Π½ΠΈΠΉ ΠΏΡΠΈΠ΅ΠΌΠ»Π΅ΠΌΡΠΌ.
ΠΠ½ΡΠ΅ΡΠ΅ΡΠ½ΡΠΌ ΠΌΠ΅ΡΠΎΠ΄ ΡΠ²Π»ΡΠ΅ΡΡΡ Π½Π΅ ΡΠΎΠ»ΡΠΊΠΎ ΠΈΠ·-Π·Π° ΠΏΡΠΈΠΌΠ΅Π½ΠΈΠΌΠΎΡΡΠΈ ΠΊ ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΠΌ Π°ΡΡ
ΠΈΡΠ΅ΠΊΡΡΡΠ°ΠΌ:
- Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΅Π³ΡΠ»ΠΈΡΠΎΠ²Π°ΡΡ Π²ΡΠ΅ΠΌΡ ΡΠ°Π±ΠΎΡΡ ΡΠ΅ΡΠ°ΡΠ΅Π»Ρ, ΡΠΎ Π΅ΡΡΡ Π°Π»Π³ΠΎΡΠΈΡΠΌ ΡΡΠ°Π½ΠΎΠ²ΠΈΡΡΡ ΠΏΡΠΎΠ³ΡΠ΅ΡΡΠΈΠ²Π½ΡΠΌ;
- ΡΠ΅ΡΠ°ΡΠ΅Π»Ρ ΠΌΠΎΠΆΠ΅Ρ, ΠΏΡΠΈΠΌΠ΅Π½ΡΡ ΠΈΠ»ΠΈ Π½Π΅ ΠΏΡΠΈΠΌΠ΅Π½ΡΡ ΡΠ²ΡΠΈΡΡΠΈΠΊΡ, Π½Π°Ρ
ΠΎΠ΄ΠΈΡΡ ΡΡΠ±ΠΎΠΏΡΠΈΠΌΠ°Π»ΡΠ½ΡΠ΅ ΠΈΠ»ΠΈ ΠΎΠΏΡΠΈΠΌΠ°Π»ΡΠ½ΡΠ΅ ΡΠ΅ΡΠ΅Π½ΠΈΡ;
- Π°Π»Π³ΠΎΡΠΈΡΠΌ ΠΏΡΡΠ°Π΅ΡΡΡ ΠΈΠ·Π±Π΅Π³Π°ΡΡ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΡ ΡΠ²ΡΠΈΡΡΠΈΠΊΠΈ ΠΈ Π² Π±ΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²Π΅ ΡΠ»ΡΡΠ°Π΅Π² Π½Π°Ρ
ΠΎΠ΄ΠΈΡ ΠΎΠΏΡΠΈΠΌΠ°Π»ΡΠ½ΡΠ΅ ΡΠ΅ΡΠ΅Π½ΠΈΡ.
ΠΠ°ΠΈΠ»ΡΡΡΠΈΠ΅ ΠΎΡΠ½ΠΎΡΠΈΡΠ΅Π»ΡΠ½ΠΎ Π΄ΡΡΠ³ΠΈΡ
ΠΏΠΎΠ΄Ρ
ΠΎΠ΄ΠΎΠ² ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΡ PBQP ΠΏΠΎΠΊΠ°Π·ΡΠ²Π°Π΅Ρ ΠΈΠΌΠ΅Π½Π½ΠΎ Π² Π½Π΅ΡΠ΅Π³ΡΠ»ΡΡΠ½ΡΡ
Π°ΡΡ
ΠΈΡΠ΅ΠΊΡΡΡΠ°Ρ
, ΡΠ°Π΄ΠΈ ΠΊΠΎΡΠΎΡΡΡ
ΡΠ΅ΡΠ°ΡΠ΅Π»Ρ PBQP Π±ΡΠ» ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ ΡΠ½Π°ΡΠ°Π»Π° Π² libfirm, ΠΏΠΎΡΠ»Π΅ - ΠΈ Π² LLVM.
ΠΠΏΠΎΡΠ»Π΅Π΄ΡΡΠ²ΠΈΠΈ ΠΈΡΡΠ»Π΅Π΄ΠΎΠ²Π°Π½ΠΈΡ ΠΏΡΠΈΠΌΠ΅Π½ΠΈΠΌΠΎΡΡΠΈ PBQP Π² ΡΠ°ΡΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠΈ ΡΠ΅Π³ΠΈΡΡΡΠΎΠ² ΠΈ ΠΏΠΎΡΠΎΠΆΠ΄Π΅Π½ΠΈΠΈ ΠΊΠΎΠ΄Π° Π²Π΄ΠΎΡ
Π½ΠΎΠ²ΠΈΠ»ΠΈ ΡΠΊΡΠΏΠ΅ΡΠΈΠΌΠ΅Π½ΡΡ Π² ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠΈ ΠΌΠ΅ΡΠΎΠ΄Π°, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΊ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΏΠ°ΠΌΡΡΠΈ ΠΈΠ»ΠΈ ΠΌΠ΅ΡΠΎΠ΄Π°ΠΌ ΠΌΠ°ΡΠΈΠ½Π½ΠΎΠ³ΠΎ ΠΎΠ±ΡΡΠ΅Π½ΠΈΡ.
ΠΠΎΠ½ΡΡΠΈΡ ΡΠ΅Π³ΡΠ»ΡΡΠ½ΠΎΡΡΠΈ ΠΈ ΠΎΡΡΠΎΠ³ΠΎΠ½Π°Π»ΡΠ½ΠΎΡΡΠΈ Π°ΡΡ
ΠΈΡΠ΅ΠΊΡΡΡ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠΎΠ² Π² ΠΊΠ»Π°ΡΡΠΈΡΠ΅ΡΠΊΠΎΠΉ ΡΠ°Π±ΠΎΡΠ΅ (1981): https://www.cs.auckland.ac.nz/compsci703s1c/resources/Wulf.pdf
ΠΡΠΈΠ³ΠΈΠ½Π°Π»ΡΠ½Π°Ρ ΠΏΡΠ±Π»ΠΈΠΊΠ°ΡΠΈΡ, ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΡΡΠ°Ρ PBQP (2002): http://www.complang.tuwien.ac.at/scholz/publications/lctes02.ps.gz
Π Π°Π·Π²ΠΈΡΠΈΠ΅ ΠΈΠ΄Π΅ΠΉ, ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½Π½ΡΠΉ Π°Π»Π³ΠΎΡΠΈΡΠΌ ΠΈ Π½ΠΎΠ²Π°Ρ ΡΠ²ΡΠΈΡΡΠΈΠΊΠ° (2006): https://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.131.4551&rep=rep1&type=pdf
Π Π°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΈ libfirm ΠΎ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠΈ ΠΊ SSA (2011): https://link.springer.com/content/pdf/10.1007/978-3-642-19861-8_4.pdf
ΠΠ΅ΡΠΎΡΠΌΠ°Π»ΡΠ½ΡΠΉ ΠΏΠΎΡΡ ΠΎΡ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΎΠ² libfirm (2011): https://beza1e1.tuxen.de/articles/pbqp.html
Π‘Π°ΠΌΠ° Π·Π°Π΄Π°ΡΠ°: https://en.wikipedia.org/wiki/Quadratic_assignment_problem
Π’Π΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΠ°ΠΌΡΡΠΈ (2020): https://dl.acm.org/doi/fullHtml/10.1145/3427378
ΠΠ°ΡΠΈΠ½Π½ΠΎΠ΅ ΠΎΠ±ΡΡΠ΅Π½ΠΈΠ΅ (2018): https://arxiv.org/pdf/1710.01079.pdf
#pbqp #registeralloc #libfirm #llvm
485
https://hal.inria.fr/hal-01499946/document
"A modular module system", Xavier Leroy
Π£ΡΠ²Π΅ΡΠΆΠ΄Π΅Π½ΠΈΠ΅, ΡΡΠΎ (ML-style) ΡΠΈΡΡΠ΅ΠΌΠ° ΠΌΠΎΠ΄ΡΠ»Π΅ΠΉ Π½Π΅ Π·Π°Π²ΠΈΡΠΈΡ ΠΎΡ "Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ" ΡΠ·ΡΠΊΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ, ΠΈ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π° ΠΏΠΎΡΡΠΈ Π΄Π»Ρ Π»ΡΠ±ΠΎΠ³ΠΎ, Π° Π½Π΅ ΡΠΎΠ»ΡΠΊΠΎ ML, ΡΠΈΡΠΎΠΊΠΎ ΠΈΠ·Π²Π΅ΡΡΠ½ΠΎ ΠΈ ΠΎΠ·Π²ΡΡΠΈΠ²Π°Π»ΠΎΡΡ Π² Π»ΠΈΡΠ΅ΡΠ°ΡΡΡΠ΅. ΠΠ°Π½Π½Π°Ρ ΡΡΠ°ΡΡΡ ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΡ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΈΠ²Π½ΠΎΠ΅ Π΄ΠΎΠΊΠ°Π·Π°ΡΠ΅Π»ΡΡΡΠ²ΠΎ ΡΡΠΎΠ³ΠΎ ΡΠ΅Π·ΠΈΡΠ°, ΡΠ΅Π°Π»ΠΈΠ·ΡΡ ΡΠ°ΠΊΡΡ (ΡΠ»Π΅Π³ΠΊΠ° ΡΠΏΡΠΎΡΡΠ½Π½ΡΡ) ΡΠΈΡΡΠ΅ΠΌΡ ΠΌΠΎΠ΄ΡΠ»Π΅ΠΉ, Π² Π²ΠΈΠ΄Π΅, ΡΠ²Π½ΠΎ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΈΠ·ΠΎΠ²Π°Π½Π½ΠΎΠΌ ΠΎΡΠ½ΠΎΡΠΈΡΠ΅Π»ΡΠ½ΠΎ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ° ΠΈ ΡΠΈΡΡΠ΅ΠΌΡ ΡΠΈΠΏΠΎΠ² Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ ΡΠ·ΡΠΊΠ°.
ΠΠ΅ΡΠΌΠΎΡΡΡ Π½Π° ΡΡΠ΄ ΡΠΏΡΠΎΡΠ΅Π½ΠΈΠΉ ΠΏΠΎ ΡΡΠ°Π²Π½Π΅Π½ΠΈΡ Ρ ΡΠΈΡΡΠ΅ΠΌΠΎΠΉ ΠΌΠΎΠ΄ΡΠ»Π΅ΠΉ ΡΠΎΠ³ΠΎ ΠΆΠ΅ Standard ML, ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½Π½Π°Ρ ΠΌΠΎΠ΄Π΅Π»ΡΠ½Π°Ρ ΡΠΈΡΡΠ΅ΠΌΠ° ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ (ΠΈ ΠΊΠΎΡΡΠ΅ΠΊΡΠ½ΠΎ ΡΠ΅Π°Π»ΠΈΠ·ΡΠ΅Ρ) Π²ΡΠ΅ Π±Π°Π·ΠΎΠ²ΡΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ, Π²ΠΊΠ»ΡΡΠ°Ρ ΡΡΡΡΠΊΡΡΡΠ½ΡΡ ΡΠΈΠΏΠΈΠ·Π°ΡΠΈΡ ΠΌΠΎΠ΄ΡΠ»Π΅ΠΉ, Π°Π±ΡΡΡΠ°ΠΊΡΠ½ΡΠ΅ ΡΠΈΠΏΡ, ΡΡΠ½ΠΊΡΠΎΡΡ, Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΡ (ΡΠΈΠΏΠ°) ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ° ΡΡΠ½ΠΊΡΠΎΡΠ° ΠΎΡ (ΡΠΈΠΏΠ°) Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ° Π° ΡΠ°ΠΊΠΆΠ΅ ΡΠ°Π²Π΅Π½ΡΡΠ²Π° ΠΌΠ΅ΠΆΠ΄Ρ (Π°Π±ΡΡΡΠ°ΠΊΡΠ½ΡΠΌΠΈ) ΡΠΈΠΏΠ°ΠΌΠΈ.
> All in all, module type matching resembles subtyping in a functional language with records, with some extra complications due to the dependencies in functor types and signatures.
Π‘ΡΠ°ΡΡΡ ΡΠΎΡΡΠ°Π²Π»Π΅Π½Π° Π² Π΄ΡΡ
Π΅ Literate Programming, ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΠΆΠ°Ρ ΠΏΠΎΡΡΠ½ΠΈΡΠ΅Π»ΡΠ½ΡΠΉ ΡΠ΅ΠΊΡΡ ΠΈ ΡΠ΅Π°Π»ΡΠ½ΡΠΉ ΡΠ°Π±ΠΎΡΠΈΠΉ ΠΊΠΎΠ΄ Π½Π° ΡΠ·ΡΠΊΠ΅ OCaml. Π Π΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ ΡΠΈΡΡΠ΅ΠΌΡ ΠΌΠΎΠ΄ΡΠ»Π΅ΠΉ ML Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΠΈΡΡΠ΅ΠΌΡ ΠΌΠΎΠ΄ΡΠ»Π΅ΠΉ ML ΠΎΡΡΡΠ»Π°Π΅Ρ ΠΊ ΡΡΠ°Π΄ΠΈΡΠΈΠΈ ΠΌΠ΅ΡΠ°ΡΠΈΡΠΊΡΠ»ΡΡΠ½ΡΡ
ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΎΡΠΎΠ² ΠΠΈΡΠΏ. ΠΠ΅ΡΡΠ° Π²ΡΡΠ°ΠΆΠ°Π΅Ρ Π½Π°Π΄Π΅ΠΆΠ΄Ρ, ΡΡΠΎ ΡΠ°ΠΊΠΎΠΉ ΡΠΏΠΎΡΠΎΠ± ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΡ ΠΌΠ°ΡΠ΅ΡΠΈΠ°Π»Π° Π½Π΅ ΡΠΎΠ»ΡΠΊΠΎ Π½Π΅ Π·Π°ΠΏΡΡΠ°Π΅Ρ ΡΠΈΡΠ°ΡΠ΅Π»Ρ, Π½ΠΎ ΠΈ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΠΎ ΠΏΡΠΎΡΡΠ½ΠΈΡ ΡΠ²ΡΠ·Ρ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΎΠ³ΠΎ ΠΈ Π°Π±ΡΡΡΠ°ΠΊΡΠ½ΠΎΠ³ΠΎ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ° ΠΊΠ°ΠΊ ΠΈ ΠΏΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΡΡ ΠΏΠΎΠ»Π΅Π·Π½ΠΎΡΡΡ (ΠΈ Π΄Π°ΠΆΠ΅ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎΡΡΡ) Π²ΡΠ΅Ρ
Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠ΅ΠΉ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½Π½ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΡ. (ΠΠΎ-Π²ΠΈΠ΄ΠΈΠΌΠΎΠΌΡ, ΠΌΠ΅ΡΠ°ΡΠΈΡΠΊΡΠ»ΡΡΠ½ΠΎΡΡΡ ΡΠΈΡΡΠ΅ΠΌΡ Π½Π΅ ΠΎΡΡΠ°Π²ΠΈΠ»Π° ΠΠΈΡΠΏΠ΅ΡΠΎΠ² ΡΠ°Π²Π½ΠΎΠ΄ΡΡΠ½ΡΠΌΠΈ, ΡΡΠΎ ΠΏΡΠΈΠ²Π΅Π»ΠΎ ΠΊ ΠΏΠΎΡΠ²Π»Π΅Π½ΠΈΡ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ MiniML Ρ ΠΏΠΎΠ»Π½ΠΎΡΠ΅Π½Π½ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΠΎΠΉ ΠΌΠΎΠ΄ΡΠ»Π΅ΠΉ Π½Π° Scheme: http://wiki.call-cc.org/eggref/4/miniML π)
ΠΠ»Ρ ΠΈΠ»Π»ΡΡΡΡΠ°ΡΠΈΠΈ ΠΏΡΠΈΠ²ΠΎΠ΄ΡΡΡΡ Π΄Π²Π° ΠΏΡΠΈΠΌΠ΅ΡΠ° "Π½Π°Π΄ΡΡΡΠ°ΠΈΠ²Π°Π½ΠΈΡ" ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΡ ΠΌΠΎΠ΄ΡΠ»Π΅ΠΉ Π½Π°Π΄ "ΡΠΏΡΠΎΡΡΠ½Π½ΡΠΌ C" Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΈΠΌΠΏΠ΅ΡΠ°ΡΠΈΠ²Π½ΠΎΠ³ΠΎ (ΠΏΡΠΎΡΠ΅Π΄ΡΡΠ½ΠΎΠ³ΠΎ) Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ ΡΠ·ΡΠΊΠ° ΠΈ Mini-ML Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΠ³ΠΎ, ΠΏΡΠΈΠ±Π»ΠΈΠΆΠ΅Π½Π½ΠΎΠ³ΠΎ ΠΊ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΠΌ Π½Π° ΠΏΡΠ°ΠΊΡΠΈΠΊΠ΅, Π² ΡΠ°ΡΡΠ½ΠΎΡΡΠΈ, ΡΠ΅Π°Π»ΠΈΠ·ΡΡΡΠ΅Π³ΠΎ ΡΠΈΠΏΡ Π²ΡΡΡΠΈΡ
ΠΏΠΎΡΡΠ΄ΠΊΠΎΠ² (Higher-Kinded Types).
ΠΡΠ°ΡΠΊΠΎ ΠΎΠ±ΡΡΠΆΠ΄Π°ΡΡΡΡ Π²ΠΎΠΏΡΠΎΡΡ (ΠΌΠΎΠ΄ΡΠ»ΡΠ½ΠΎΠΉ) ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ ΡΠ°ΠΊΠΈΡ
ΠΌΠΎΠ΄ΡΠ»Π΅ΠΉ. Π£ΠΏΠΎΠΌΠΈΠ½Π°ΡΡΡΡ ΡΡΠΈ ΠΎΡΠ½ΠΎΠ²Π½ΡΡ
Π²Π°ΡΠΈΠ°Π½ΡΠ°: ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΡ ΡΠ°ΠΌΠΈΡ
ΠΌΠΎΠ΄ΡΠ»Π΅ΠΉ Π² Π²ΠΈΠ΄Π΅ ΡΡΡΡΠΊΡΡΡ Π΄Π°Π½Π½ΡΡ
, Π° ΡΡΠ½ΠΊΡΠΎΡΠΎΠ² β Π² Π²ΠΈΠ΄Π΅ (ΠΏΠΎΠ»ΠΈΠΌΠΎΡΡΠ½ΡΡ
) ΡΡΠ½ΠΊΡΠΈΠΉ, ΡΠΏΠ΅ΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΡ ΡΡΠ½ΠΊΡΠΎΡΠΎΠ² Π΄Π»Ρ Π²ΡΠ΅Ρ
ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠΉ Π² Π΄ΡΡ
Π΅ C++ templates ΠΈ ΠΏΠΎΠ»Π½ΠΎΠ΅ ΡΡΠΈΡΠ°Π½ΠΈΠ΅ ΠΌΠΎΠ΄ΡΠ»Π΅ΠΉ Π²ΠΎ Π²ΡΠ΅ΠΌΡ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ (Π°Π½Π°Π»ΠΎΠ³ΠΈΡΠ½ΠΎ Π΄Π΅Π²ΠΈΡΡΡΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ Π²ΡΠ·ΠΎΠ²ΠΎΠ² ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ² Π² ΠΠΠ). ΠΠΎ Π·Π° Π΄Π΅ΡΠ°Π»ΡΠΌΠΈ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΡΡΡΠΈΠ΅ΡΡ ΡΠΈΡΠ°ΡΠ΅Π»ΠΈ ΠΎΡΡΡΠ»Π°ΡΡΡΡ ΠΊ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠΌ ΠΏΡΠ±Π»ΠΈΠΊΠ°ΡΠΈΡΠΌ.
Π Π·Π°ΠΊΠ»ΡΡΠΈΡΠ΅Π»ΡΠ½ΠΎΠΉ ΡΠ°ΡΡΠΈ ΠΠ΅ΡΡΠ° ΠΎΠ±ΡΡΠΆΠ΄Π°Π΅Ρ ΡΡΠ΄ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΠΉ ΠΌΠΎΠ΄Π΅Π»ΡΠ½ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΡ ΠΌΠΎΠ΄ΡΠ»Π΅ΠΉ β ΠΊΠ°ΠΊ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½ΡΡ
Π½Π° ΠΏΡΠ°ΠΊΡΠΈΠΊΠ΅, ΡΠ°ΠΊ ΠΈ Π½Π΅ Π΄ΠΎ ΠΊΠΎΠ½ΡΠ° ΠΏΡΠΎΡΠ°Π±ΠΎΡΠ°Π½Π½ΡΡ
Π΄Π°ΠΆΠ΅ Π² ΡΠ΅ΠΎΡΠΈΠΈ β Π½ΠΎ ΡΠΆΠ΅ Π±Π΅Π· ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΎΠΉ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ.
Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, ΡΡΠ°ΡΡΡ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅Ρ ΡΠΎΠ±ΠΎΠΉ ΠΏΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΎΠ΅ Π²Π²Π΅Π΄Π΅Π½ΠΈΠ΅ Π² ML-style ΡΠΈΡΡΠ΅ΠΌΡ ΠΌΠΎΠ΄ΡΠ»Π΅ΠΉ ΠΈ ΡΠ²ΡΠ·Π°Π½Π½ΡΠ΅ Π²ΠΎΠΏΡΠΎΡΡ, ΠΏΠΎΠ»Π΅Π·Π½ΠΎΠ΅ ΠΊΠ°ΠΊ Π΄Π»Ρ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΉ ΡΠ°ΠΊΠΈΡ
ΡΠΈΡΡΠ΅ΠΌ, ΡΠ°ΠΊ ΠΈ Π΄Π»Ρ Π°Π²ΡΠΎΡΠΎΠ² ΡΠ·ΡΠΊΠΎΠ² ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ, ΠΆΠ΅Π»Π°ΡΡΠΈΡ
ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°ΡΡ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΡ ΡΠΈΡΡΠ΅ΠΌΡ ΠΌΠΎΠ΄ΡΠ»Π΅ΠΉ. π
#modules #sml #ocaml #leroy #classic
485
Π Π°ΡΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΡΠ΅Π³ΠΈΡΡΡΠΎΠ² ΠΈ ΠΏΠ»Π°Π½ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΉ - Π²Π°ΠΆΠ½ΡΠ΅ Π°ΡΠΏΠ΅ΠΊΡΡ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ Π±ΡΠΊΠ΅Π½Π΄Π° ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠ°. ΠΠ±Π΅ Π·Π°Π΄Π°ΡΠΈ NP-ΠΏΠΎΠ»Π½Ρ ΠΈ ΡΠ²ΡΠ·Π°Π½Ρ ΠΌΠ΅ΠΆΠ΄Ρ ΡΠΎΠ±ΠΎΠΉ: ΡΠ°ΡΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ΅Ρ Π²Π½Π΅ΡΡΠΈ Π² ΠΊΠΎΠ΄ Π½ΠΎΠ²ΡΠ΅ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ, ΠΏΠ»Π°Π½ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΆΠ΅ ΠΌΠ΅Π½ΡΠ΅Ρ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ ΠΌΠ΅ΡΡΠ°ΠΌΠΈ. ΠΠ΅ΡΠΌΠΎΡΡΡ Π½Π° ΡΡΠΎ Π² ΠΏΠΎΠΏΡΠ»ΡΡΠ½ΡΡ
ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠ°Ρ
ΡΠ΅ΡΠ°ΡΡΡΡ ΠΎΠ½ΠΈ, ΠΊΠ°ΠΊ ΠΏΡΠ°Π²ΠΈΠ»ΠΎ, ΡΠ°Π·Π΄Π΅Π»ΡΠ½ΠΎ ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡ ΡΠ²ΡΠΈΡΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΠΏΠΎΠ΄Ρ
ΠΎΠ΄Ρ.
ΠΠΎΡΠ»Π΅Π΄Π½ΠΈΠ΅ Π΄Π²Π° Π΄Π΅ΡΡΡΠΈΠ»Π΅ΡΠΈΡ ΠΌΠ½ΠΎΠ³ΠΎ ΠΈΡΡΠ»Π΅Π΄ΠΎΠ²Π°Π½ΠΈΠΉ Π±ΡΠ»ΠΎ ΠΏΠΎΡΠ²ΡΡΠ΅Π½ΠΎ ΡΠΎΡΠ½ΡΠΌ ΠΊΠΎΠΌΠ±ΠΈΠ½Π°ΡΠΎΡΠ½ΡΠΌ ΠΌΠ΅ΡΠΎΠ΄Π°ΠΌ ΡΠ΅ΡΠ΅Π½ΠΈΡ ΡΠ΅Ρ
ΠΆΠ΅ ΡΠ°ΠΌΡΡ
Π·Π°Π΄Π°Ρ: ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠ΅Π½Ρ ΠΌΠ΅ΡΠΎΠ΄Ρ Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ ΡΠ΅Π»ΠΎΡΠΈΡΠ»Π΅Π½Π½ΠΎΠ³ΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ, PBQP, ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π² ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡΡ
ΠΈ Π΄Ρ. Π‘Π»Π°Π±ΠΎΡΡΡ ΡΠ°ΠΊΠΈΡ
ΠΏΠΎΠ΄Ρ
ΠΎΠ΄ΠΎΠ² - Π±ΠΎΠ»ΡΡΠΎΠ΅ Π²ΡΠ΅ΠΌΡ ΠΏΠΎΠΈΡΠΊΠ° ΠΎΠΏΡΠΈΠΌΠ°Π»ΡΠ½ΡΡ
ΡΠ΅ΡΠ΅Π½ΠΈΠΉ, ΡΡΠΎ Π·Π°ΡΡΠ°Π²Π»ΡΠ΅Ρ ΠΈΡΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΉ ΡΠΏΡΠΎΡΠ°ΡΡ Π·Π°Π΄Π°ΡΡ, Π΄Π΅Π»Π°Ρ ΠΌΠ΅ΡΠΎΠ΄Ρ Π½Π΅ΠΏΡΠΈΠΌΠ΅Π½ΠΈΠΌΡΠΌΠΈ Π² ΡΠ½ΠΈΠ²Π΅ΡΡΠ°Π»ΡΠ½ΡΡ
ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠ°Ρ
.
Π ΠΎΠ±Π΅ΡΡΠΎ ΠΠΎΠ·Π°Π½ΠΎ (Roberto Castaneda Lozano) Π·Π°Π΄Π°Π»ΡΡ ΡΠ΅Π»ΡΡ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠ°ΡΡ ΠΎΠ΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ ΡΠΎΡΠ½ΡΠΉ ΠΈ Π»Π΅Π³ΠΊΠΈΠΉ Π² ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΏΠΎΠ΄Ρ
ΠΎΠ΄, ΠΏΡΠΈΡΠ΅ΠΌ ΡΠ΅ΡΠ°ΡΡΠΈΠΉ Π·Π°Π΄Π°ΡΠΈ ΠΏΠ»Π°Π½ΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΉ ΠΈ ΡΠ°ΡΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ ΡΠ΅Π³ΠΈΡΡΡΠΎΠ² ΡΠΎΠ²ΠΌΠ΅ΡΡΠ½ΠΎ. ΠΠ° ΠΎΡΠ½ΠΎΠ²Ρ ΠΎΠ½ Π²Π·ΡΠ» ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ Π² ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡΡ
(constraint programming), ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡΠ΅Π΅ ΡΠ΄ΠΎΠ±Π½ΠΎ Π²ΡΡΠ°Π·ΠΈΡΡ ΡΡΠ»ΠΎΠ²ΠΈΡ ΠΎΠ±Π΅ΠΈΡ
Π·Π°Π΄Π°Ρ ΠΈ Π΄Π»Ρ ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ ΡΡΡΠ΅ΡΡΠ²ΡΡΡ ΠΌΠΎΡΠ½ΡΠ΅ ΡΠ΅ΡΠ°ΡΠ΅Π»ΠΈ.
ΠΡΠΎΠ΅ΠΊΡ Unison Π·Π°ΠΌΠ΅Π½ΡΠ΅Ρ ΡΡΠΈ ΡΠ°Π·Ρ LLVM: ΠΏΡΠ΅Π΄Π²Π°ΡΠΈΡΠ΅Π»ΡΠ½ΠΎΠ΅ ΠΏΠ»Π°Π½ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΉ, ΡΠ°ΡΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΡΠ΅Π³ΠΈΡΡΡΠΎΠ² ΠΈ ΡΠΈΠ½Π°Π»ΡΠ½ΠΎΠ΅ ΠΏΠ»Π°Π½ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅. Π Π°ΡΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΏΡΠΎΠ²ΠΎΠ΄ΠΈΡΡΡ Π³Π»ΠΎΠ±Π°Π»ΡΠ½ΠΎΠ΅, ΠΏΠ»Π°Π½ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΆΠ΅ Π»ΠΎΠΊΠ°Π»ΡΠ½ΠΎΠ΅ - ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅Π΅ ΡΠΏΡΠΎΡΠ΅Π½ΠΈΠ΅ Π΄Π°Π΅Ρ ΠΎΡΡΡΠΈΠΌΡΠΉ ΡΡΡΠ΅ΠΊΡ ΠΏΡΠΈ ΡΠΌΠ΅ΡΠ΅Π½Π½ΠΎΠΉ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡΠΈ.
Π ΠΎΡΠ»ΠΈΡΠΈΠ΅ ΠΎΡ ΠΏΡΠ΅Π΄ΡΠ΅ΡΡΠ²Π΅Π½Π½ΠΈΠΊΠΎΠ² Unison Π½Π΅ ΡΠΏΡΠΎΡΠ°Π΅Ρ Π·Π°Π΄Π°ΡΡ ΡΠ°ΡΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ. ΠΡΠ΅ ΠΏΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ Π°ΡΠΏΠ΅ΠΊΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ ΡΡΠΈΡΡΠ²Π°ΡΡΡΡ Π² ΡΠ΅ΡΠ΅Π½ΠΈΡΡ
: ΡΠΏΠΈΠ»Π»ΠΈΠ½Π³, Π°Π»ΠΈΠ°ΡΠΈΠ½Π³ (aliasing), ΡΠ΅ΠΌΠ°ΡΠ΅ΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΡ (rematerialisation), ΡΠ°Π·Π±ΠΈΠ΅Π½ΠΈΠ΅ ΠΎΠ±Π»Π°ΡΡΠ΅ΠΉ ΠΆΠΈΠ·Π½ΠΈ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ
(live range splitting), ΡΠ»ΠΈΡΠ½ΠΈΠ΅ (coalescing) ΠΈ Π΄Ρ. ΠΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ Π² ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡΡ
ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π²ΡΡΠ°Π·ΠΈΡΡ Π»ΡΠ±ΡΠ΅ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ ΡΠ°ΡΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ ΡΠ΅Π³ΠΈΡΡΡΠΎΠ² Π»Π°ΠΊΠΎΠ½ΠΈΡΠ½ΠΎ ΠΈ ΠΏΡΠΎΡΡΠΎ.
ΠΠΏΡΠΈΠΌΠ°Π»ΡΠ½ΠΎΡΡΡ ΠΈΠΌΠ΅Π΅Ρ ΡΠ²ΠΎΡ ΡΠ΅Π½Ρ: ΠΏΠΎΠΈΡΠΊ ΡΠ΅ΡΠ΅Π½ΠΈΠΉ Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ ΠΌΠ½ΠΎΠ³ΠΎ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ. Π Π°Π·ΠΌΠ΅Ρ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΡΠ΅ΠΌΡΡ
ΡΡΠ½ΠΊΡΠΈΠΉ - Π΄ΠΎ 1000 ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΉ. ΠΠ°ΠΈΠ±ΠΎΠ»ΡΡΠΈΠΉ ΡΡΡΠ΅ΠΊΡ ΠΎΡ Unison Π±ΡΠ» ΠΏΠΎΠΊΠ°Π·Π°Π½ Π½Π° ΡΠΏΠ΅ΡΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠ΅ Hexagon Ρ Π΄Π»ΠΈΠ½Π½ΡΠΌ ΠΌΠ°ΡΠΈΠ½Π½ΡΠΌ ΡΠ»ΠΎΠ²ΠΎΠΌ (VLIW), Π³Π΄Π΅ Π²Π°ΠΆΠ½ΠΎ ΠΎΠΏΡΠΈΠΌΠ°Π»ΡΠ½ΠΎΠ΅ ΡΠ°ΡΠΏΠΈΡΠ°Π½ΠΈΠ΅: Π½Π° Π½Π΅ΠΊΠΎΡΠΎΡΡΡ
ΡΠ΅ΡΡΠ°Ρ
ΡΠ΅Π°Π»ΡΠ½ΠΎΠ΅ Π²ΡΠ΅ΠΌΡ ΠΈΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΡΠ½ΠΈΠΆΠ°Π΅ΡΡΡ Π½Π° 40%.
ΠΠΎΠ·Π°Π½ΠΎ ΠΏΡΠ΅Π΄Π»Π°Π³Π°Π΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Unison ΠΊΠ°ΠΊ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½Ρ Π΄Π»Ρ ΠΏΠΎΡΠΎΠΆΠ΄Π΅Π½ΠΈΡ ΠΊΠΎΠ΄Π° ΠΊ ΡΠΏΠ΅ΡΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠ°ΠΌ, ΠΎΡΠ΅Π½ΠΊΠΈ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΠΎΡΡΠΈ ΡΠ²ΡΠΈΡΡΠΈΡΠ΅ΡΠΊΠΈΡ
ΡΠ΅ΡΠ΅Π½ΠΈΠΉ, ΠΏΠΎΠΈΡΠΊΠ° ΠΎΠΏΡΠΈΠΌΠ°Π»ΡΠ½ΡΡ
ΡΠ΅ΡΠ΅Π½ΠΈΠΉ Π² ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΡ
ΡΡΠ½ΠΊΡΠΈΡΡ
.
ΠΡΠ΅Π·Π΅Π½ΡΠ°ΡΠΈΡ Π½Π° ΠΊΠΎΠ½ΡΠ΅ΡΠ΅Π½ΡΠΈΠΈ LLVM (2017): https://www.youtube.com/watch?v=kx64V74Mba0
ΠΠ±ΠΎΠ±ΡΠ°ΡΡΠ°Ρ ΠΈΡΡΠ»Π΅Π΄ΠΎΠ²Π°Π½ΠΈΡ ΠΠΎΠ·Π°Π½ΠΎ Π΄ΠΈΡΡΠ΅ΡΡΠ°ΡΠΈΡ (2018 Π³ΠΎΠ΄): http://kth.diva-portal.org/smash/get/diva2:1232941/FULLTEXT01.pdf
ΠΡΠ΅Π½ΠΊΠ° ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ Unison (2017): https://www.diva-portal.org/smash/get/diva2:1119107/FULLTEXT01.pdf
Π‘Π°ΠΉΡ ΠΏΡΠΎΠ΅ΠΊΡΠ°: https://unison-code.github.io/
ΠΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ Π² ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡΡ
: https://ru.wikipedia.org/wiki/ΠΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅_Π²_ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡΡ
ΠΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½Π°Ρ ΡΡΠ°ΡΡΡ ΠΎΡ ΠΈΠΌΠ΅Π½ΠΈΡΡΡ
ΠΈΡΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΉ (Nuno P. Lopes ΠΈ John Regehr) ΠΎ ΡΠΎΠ»ΠΈ ΡΠΎΡΠ½ΡΡ
ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ² Π² Π±ΡΠ΄ΡΡΠΈΡ
ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠ°Ρ
: https://arxiv.org/pdf/1809.02161.pdf
#registeralloc #instructionscheduling #constraintprogramming #unison #llvm
485
https://grosskurth.ca/bib/1997/cardelli.pdf
"Program Fragments, Linking, and Modularization" Luca Cardelli.
Π‘ΡΠ°ΡΡΡ ΠΏΠΎΠ΄Π½ΠΈΠΌΠ°Π΅Ρ Π²ΠΎΠΏΡΠΎΡ ΠΊΠΎΡΡΠ΅ΠΊΡΠ½ΠΎΡΡΠΈ ΡΠ°Π·Π΄Π΅Π»ΡΠ½ΠΎΠΉ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ ΠΈ Π»ΠΈΠ½ΠΊΠΎΠ²ΠΊΠΈ, ΠΈ ΠΏΠΎΡΠΎΠΌΡ β Ρ ΡΡΠΈΡΠ°Ρ β ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½Π° ΠΊ ΠΏΡΠΎΡΡΠ΅Π½ΠΈΡ Π΄Π»Ρ Π²ΡΠ΅Ρ
Π°Π²ΡΠΎΡΠΎΠ² ΡΠ·ΡΠΊΠΎΠ² ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ! π
Π£ΠΆΠ΅ Π²ΠΎ Π²Π²Π΅Π΄Π΅Π½ΠΈΠΈ Π½Π° ΠΏΡΠΎΡΡΠ΅ΠΉΡΠ΅ΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ Π²ΠΎΠΎΠ±ΡΠ°ΠΆΠ°Π΅ΠΌΠΎΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, ΡΠΎΡΡΠΎΡΡΠ΅ΠΉ Π²ΡΠ΅Π³ΠΎ ΠΈΠ· Π΄Π²ΡΡ
ΠΌΠΎΠ΄ΡΠ»Π΅ΠΉ, ΡΠ°Π·ΡΠ°Π±Π°ΡΡΠ²Π°Π΅ΠΌΡΡ
Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΠΎ, Π°Π²ΡΠΎΡ ΠΈΠ»Π»ΡΡΡΡΠΈΡΡΠ΅Ρ, Π½Π°Π²Π΅ΡΠ½ΠΎΠ΅, Π²ΡΠ΅ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ, ΠΏΡΠΈ ΡΡΠΎΠΌ Π²ΠΎΠ·Π½ΠΈΠΊΠ°ΡΡΠΈΠ΅. ΠΠ΅ΠΆΠ΄Ρ Π΄Π΅Π»ΠΎΠΌ ΠΠ°ΡΠ΄Π΅Π»Π»ΠΈ ΡΠΏΠΎΠΌΠΈΠ½Π°Π΅Ρ ΠΏΡΠ±Π»ΠΈΡΠ½ΡΠ΅ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΈ Π°ΡΡΠ΅ΡΠ°ΠΊΡΠΎΠ² (ΡΠΈΠΏΠ° Maven Central ΠΈΠ»ΠΈ Nuget. ΠΠ°ΠΏΠΎΠΌΠ½Ρ, ΡΡΠΎ ΡΡΠ°ΡΡΡ ΠΎΠΏΡΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½Π° Π² 1996 Π³ΠΎΠ΄Ρ!). ΠΠ½ΠΎΠ³ΠΈΠ΅ ΠΈΠ· ΠΎΠ±ΠΎΠ·Π½Π°ΡΠ΅Π½Π½ΡΡ
ΠΏΡΠΎΠ±Π»Π΅ΠΌ Π»ΠΈΠ½ΠΊΠΎΠ²ΠΊΠΈ ΡΠ°Π·Π΄Π΅Π»ΡΠ½ΠΎ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°Π½Π½ΡΡ
ΠΌΠΎΠ΄ΡΠ»Π΅ΠΉ Π΄ΠΎ ΡΠΈΡ
ΠΏΠΎΡ Π½Π΅ ΡΠ΅ΡΠ΅Π½Ρ Π½ΠΈ Π² ΠΌΠ΅ΠΉΠ½ΡΡΡΠΈΠΌΠ½ΡΡ
, Π½ΠΈ Π² ΠΈΡΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΈΡ
ΡΠ·ΡΠΊΠ°Ρ
.
Π ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠ³ΠΎ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ° ΠΠ°ΡΠ΄Π΅Π»Π»ΠΈ ΠΏΡΠ΅Π΄Π»Π°Π³Π°Π΅Ρ, Π²Π΅ΡΠΎΡΡΠ½ΠΎ, ΠΏΠ΅ΡΠ²ΡΡ ΡΠΎΡΠΌΠ°Π»ΡΠ½ΡΡ ΠΌΠΎΠ΄Π΅Π»Ρ ΡΠ°Π·Π΄Π΅Π»ΡΠ½ΠΎΠΉ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ ΠΈ ΠΏΠΎΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΉ Π»ΠΈΠ½ΠΊΠΎΠ²ΠΊΠΈ, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡΡΡ ΡΡΡΠΎΠ³ΠΎ ΡΠ°ΡΡΠΌΠΎΡΡΠ΅ΡΡ Π²ΠΎΠΏΡΠΎΡ ΠΎ ΠΊΠΎΡΡΠ΅ΠΊΡΠ½ΠΎΡΡΠΈ ΡΡΠΈΡ
ΠΏΡΠΎΡΠ΅ΡΡΠΎΠ². ΠΠΎΡΡΠ΅ΠΊΡΠ½ΠΎΡΡΡ Π² ΡΡΠΎΠΌ ΡΠΌΡΡΠ»Π΅ ΠΏΡΠΈΠ²Π΅Π΄ΡΠ½Π½ΠΎΠΉ ΠΏΡΠΎΡΡΠ΅ΠΉΡΠ΅ΠΉ ΡΠΈΡΡΠ΅ΠΌΡ ΠΌΠΎΠ΄ΡΠ»Π΅ΠΉ Π΄Π»Ρ ΠΏΡΠΎΡΡΠΎ ΡΠΈΠΏΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ Π»ΡΠΌΠ±Π΄Π°-ΠΈΡΡΠΈΡΠ»Π΅Π½ΠΈΡ (Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΌΠΎΠ΄Π΅Π»ΡΠ½ΠΎΠ³ΠΎ ΡΠ·ΡΠΊΠ°) ΡΠΎΡΠΌΠ°Π»ΡΠ½ΠΎ Π΄ΠΎΠΊΠ°Π·ΡΠ²Π°Π΅ΡΡΡ. ΠΠ²ΡΠΎΡ, ΠΊΠΎΠ½Π΅ΡΠ½ΠΎ ΠΆΠ΅, ΡΠΊΠ°Π·ΡΠ²Π°Π΅Ρ Π½Π° Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎΡΡΡ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΡ ΠΌΠΎΠ΄Π΅Π»ΠΈ ΠΊΠ°ΠΊ Π² ΡΡΠΎΡΠΎΠ½Ρ Π±ΠΎΠ»Π΅Π΅ ΡΠ°Π·Π²ΠΈΡΡΡ
ΡΠ·ΡΠΊΠΎΠ² (ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΈΡΠ΅ΡΠΊΠΈΠΉ ΠΏΠΎΠ»ΠΈΠΌΠΎΡΡΠΈΠ·ΠΌ, ΠΠΠ), ΡΠ°ΠΊ ΠΈ Π² ΡΡΠΎΡΠΎΠ½Ρ Π±ΠΎΠ»Π΅Π΅ ΡΠ»ΠΎΠΆΠ½ΡΡ
ΡΠΈΡΡΠ΅ΠΌ ΠΌΠΎΠ΄ΡΠ»Π΅ΠΉ (ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΈΠ·ΠΎΠ²Π°Π½Π½ΡΠ΅ ΠΌΠΎΠ΄ΡΠ»ΠΈ, "ΡΡΠ½ΠΊΡΠΎΡΡ" Π² Π΄ΡΡ
Π΅ Standard ML, ΠΏΠ΅ΡΠ²ΠΎΠΊΠ»Π°ΡΡΠ½ΡΠ΅ ΠΌΠΎΠ΄ΡΠ»ΠΈ). Π‘ΡΡΠ΅ΡΡΠ²ΡΡΡ Π»ΠΈ ΡΠ°ΠΊΠΈΠ΅ ΡΠ°Π±ΠΎΡΡ, Π½Π΅ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²Π΅Π½Π½ΠΎ ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠ°ΡΡΠΈΠ΅ ΡΡΠΎ ΠΈΡΡΠ»Π΅Π΄ΠΎΠ²Π°Π½ΠΈΠ΅, ΠΌΠ½Π΅ Π½Π΅ ΠΈΠ·Π²Π΅ΡΡΠ½ΠΎ.
ΠΠ΄Π½Π°ΠΊΠΎ, Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ related work ΠΈ Π΄Π°Π»ΡΠ½Π΅ΠΉΡΠ΅Π³ΠΎ ΡΡΠ΅Π½ΠΈΡ ΠΌΠΎΠ³Ρ ΡΠΊΠ°Π·Π°ΡΡ Π½Π° ΡΠ°Π±ΠΎΡΡ ΠΏΠΎ ΡΠΎΡΠΌΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ (ΠΈ Π΄ΠΎΠΊΠ°Π·Π°ΡΠ΅Π»ΡΡΡΠ²Ρ ΠΊΠΎΡΡΠ΅ΠΊΡΠ½ΠΎΡΡΠΈ) ΡΠ°Π·Π΄Π΅Π»ΡΠ½ΠΎΠΉ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ Π΄Π»Ρ ΡΠ·ΡΠΊΠ° C Π² ΡΠ°ΠΌΠΊΠ°Ρ
ΠΏΡΠΎΠ΅ΠΊΡΠ° CompCert.
#separatecompilation #linking #modules #stlc
485
ΠΠ° Π₯Π°Π±ΡΠ΅ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ Π΄Π½Π΅ΠΉ Π½Π°Π·Π°Π΄ ΠΏΠΎΡΠ²ΠΈΠ»Π°ΡΡ ΡΡΠ°ΡΡΡ, ΠΏΠΎΠΏΡΠ»ΡΡΠ½ΠΎ ΠΏΠΎΡΡΠ½ΡΡΡΠ°Ρ Π·Π½Π°ΠΌΠ΅Π½ΠΈΡΡΡ ΡΠ΅Ρ
Π½ΠΈΠΊΡ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΡΠ·ΡΠΊΠ° Scheme - Cheney on the M.T.A. Π‘ΡΠ°ΡΡΡ ΠΈΠ·Π»Π°Π³Π°Π΅Ρ ΠΈΡΡΠΎΡΠΈΡ Π½Π°Π·Π²Π°Π½ΠΈΡ ΠΈ ΠΎΠ±ΡΡΡΠ½ΡΠ΅Ρ ΡΠ°Π±ΠΎΡΡ ΠΎΡΡΡΠΎΡΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠΎΠ΄Ρ
ΠΎΠ΄Π° ΠΊ ΡΠ±ΠΎΡΠΊΠ΅ ΠΌΡΡΠΎΡΠ°.
ΠΡΡ
ΠΎΠ΄Π½ΡΠΉ ΠΊΠΎΠ΄ Scheme Π·Π΄Π΅ΡΡ ΡΠ½Π°ΡΠ°Π»Π° Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±ΡΡΡ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ Π² ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ Ρ ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠ΅Π½ΠΈΡΠΌΠΈ (ΡΠΌ., Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΊΠ½ΠΈΠ³Ρ Compiling with Continuations). Π€ΡΠ½ΠΊΡΠΈΠΈ ΡΡΠΎΠ³ΠΎ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΡ ΠΎΠ΄ΠΈΠ½ ΠΊ ΠΎΠ΄Π½ΠΎΠΌΡ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΡΡΡΡΡ Π² ΡΡΠ½ΠΊΡΠΈΠΈ Π½Π° ΡΠ·ΡΠΊΠ΅ C. ΠΠ½ΠΎΠ³ΠΎΡΠΈΡΠ»Π΅Π½Π½ΡΠ΅ Π²ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ, Ρ
Π°ΡΠ°ΠΊΡΠ΅ΡΠ½ΡΠ΅ Π΄Π»Ρ Scheme, ΡΠ½Π°ΡΠ°Π»Π° ΡΠ°Π·ΠΌΠ΅ΡΠ°ΡΡΡΡ Π½Π° ΡΡΠ΅ΠΊΠ΅ Π²ΡΠ·ΠΎΠ²ΠΎΠ² C. ΠΠΎ Π²ΡΠ΅ΠΌΡ ΡΠ°Π±ΠΎΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΡΡΠ΅ΠΊ Π²ΡΠ·ΠΎΠ²ΠΎΠ² ΡΡΠ½ΠΊΡΠΈΠΉ C Π±ΡΠ΄Π΅Ρ ΡΠ°ΡΡΠΈ, ΡΠ°ΠΊ ΠΊΠ°ΠΊ ΠΏΡΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ Ρ ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠ΅Π½ΠΈΡΠΌΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ Π½Π΅ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°ΡΡΡΡ ΠΊ ΡΠΎΡΠΊΠ΅ ΠΈΡΡ
ΠΎΠ΄Π½ΠΎΠ³ΠΎ Π²ΡΠ·ΠΎΠ²Π°.
ΠΡΠΈ ΠΏΡΠ΅Π²ΡΡΠ΅Π½ΠΈΠΈ Π΄ΠΎΠΏΡΡΡΠΈΠΌΠΎΠ³ΠΎ ΡΠ°Π·ΠΌΠ΅ΡΠ° ΡΡΠ΅ΠΊ ΡΠ±ΡΠ°ΡΡΠ²Π°Π΅ΡΡΡ Π²ΡΠ·ΠΎΠ²ΠΎΠΌ longjmp. Π Π°Π·ΠΌΠ΅Ρ ΠΏΡΠΎΠ²Π΅ΡΡΠ΅ΡΡΡ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΠ΅ΡΠ΅Π· ΡΠΈΡΠ»Π΅Π½Π½ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π°Π΄ΡΠ΅ΡΠ° Π²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ. ΠΠ΅ΡΠ΅Π΄ ΡΠ±ΡΠΎΡΠΎΠΌ ΠΆΠΈΠ²ΡΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΈΠ· ΡΡΠ΅ΠΊΠ° ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΠ°ΡΡΡΡ Π² ΠΊΡΡΡ Π΄Π»Ρ Π·Π°ΡΠΈΡΡΠΊΠΈ Π°Π»Π³ΠΎΡΠΈΡΠΌΠΎΠΌ Π§Π΅ΠΉΠ½ΠΈ, ΠΌΠ΅ΡΡΠ²ΡΠ΅ ΠΆΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΎΡΠ±ΡΠ°ΡΡΠ²Π°ΡΡΡΡ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ.
Π’Π΅Ρ
Π½ΠΈΠΊΠ° ΡΠΈΠ»ΡΠ½ΠΎ ΡΠΏΡΠΎΡΠ°Π΅Ρ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΡ Scheme Π² C (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΠ΅ΠΊΡΡΡΠΈΠ²Π½ΡΠ΅ Π²ΡΠ·ΠΎΠ²Ρ ΠΈ ΠΈΡ
ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΡ, Π»Π΅Π³ΠΊΠΎ Π²ΡΡΠ°ΠΆΠ°ΡΡΡΡ ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠ΅Π½ΠΈΡ), ΠΈΠ·-Π·Π° ΡΠ΅Π³ΠΎ Π΅Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡ ΠΌΠΈΠ½ΠΈΠΌΡΠΌ Π΄Π²Π° ΠΏΠΎΠΏΡΠ»ΡΡΠ½ΡΡ
ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠ°: Cyclone ΠΈ Chicken.
Π‘ΡΠ°ΡΡΡ Π½Π° Π₯Π°Π±ΡΠ΅: https://habr.com/ru/company/ruvds/blog/540502/
ΠΠΎΠ΄ΡΠΎΠ±Π½ΠΎΡΡΠΈ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΡΠ΅Ρ
Π½ΠΈΠΊΠΈ ΠΎΡ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ° Chicken Scheme:
https://www.more-magic.net/posts/internals-gc.html
Π Π΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ Cyclone: https://justinethier.github.io/cyclone/docs/Garbage-Collector
ΠΡΠΈΠ³ΠΈΠ½Π°Π»ΡΠ½Π°Ρ ΠΏΡΠ±Π»ΠΈΠΊΠ°ΡΠΈΡ ΠΏΠΎ Cheney on the MTA: http://citeseerx.ist.psu.edu/viewdoc/download;jsessionid=3A988CF024FE807165D1CFA957445BC8?doi=10.1.1.54.7143&rep=rep1&type=pdf
ΠΠ»Π³ΠΎΡΠΈΡΠΌ ΡΠ±ΠΎΡΠΊΠΈ ΠΌΡΡΠΎΡΠ° Π§Π΅ΠΉΠ½ΠΈ: https://people.cs.umass.edu/~emery/classes/cmpsci691s-fall2004/papers/p677-cheney.pdf
ΠΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΡ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΠΈΠΉ Π΄ΡΡΠ³ΠΈΠ΅ ΠΏΠΎΠ΄Ρ
ΠΎΠ΄Ρ ΠΊ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ Π² ΡΠ·ΡΠΊ C:
http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.50.8424&rep=rep1&type=pdf - Bigloo - ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ Scheme ΠΈ Standard ML
https://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.48.8788&rep=rep1&type=pdf - Gambit - ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ Scheme
#garbagecollection #scheme
485
Π Π°ΡΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΡΠ΅Π³ΠΈΡΡΡΠΎΠ² - ΠΎΠ΄Π½Π° ΠΈΠ· ΡΡΠ°ΡΠ΅ΠΉΡΠΈΡ
ΠΏΡΠΎΠ±Π»Π΅ΠΌ ΠΏΠΎΡΡΡΠΎΠ΅Π½ΠΈΡ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠΎΠ², ΠΏΠ΅ΡΠ²ΡΠ΅ ΡΠ°Π±ΠΎΡΡ ΠΏΠΎ ΠΊΠΎΡΠΎΡΠΎΠΉ ΠΏΠΎΡΠ²ΠΈΠ»ΠΈΡΡ Π΅ΡΠ΅ Π² 50-ΡΠ΅ Π³ΠΎΠ΄Ρ ΠΏΡΠΎΡΠ»ΠΎΠ³ΠΎ Π²Π΅ΠΊΠ°. ΠΠ°ΠΊ ΠΈ Π² Π΄ΡΡΠ³ΠΈΡ
NP-ΠΏΠΎΠ»Π½ΡΡ
Π·Π°Π΄Π°ΡΠ°Ρ
Π½Π΅Π΄ΠΎΡΡΠ°ΡΠΊΠ° Π² ΡΠ²ΡΠΈΡΡΠΈΡΠ΅ΡΠΊΠΈΡ
ΡΠ΅ΡΠ΅Π½ΠΈΡΡ
Π½Π΅Ρ. Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅, Π² ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠ΅ Π΄Π΅ΡΡΡΠΈΠ»Π΅ΡΠΈΡ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΈ Π²ΡΠ΅ ΡΠ°ΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· Π΄Π²ΡΡ
Π³Π»ΠΎΠ±Π°Π»ΡΠ½ΡΡ
ΠΏΠΎΠ΄Ρ
ΠΎΠ΄ΠΎΠ²: Π»ΠΈΠ½Π΅ΠΉΠ½ΠΎΠ΅ ΡΠΊΠ°Π½ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ Π² Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΈΡ
(JIT) ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠ°Ρ
ΠΈ ΡΠ°ΡΠΊΡΠ°ΡΠΊΡ Π³ΡΠ°ΡΠ° Π² ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΡ
(AOT) ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠ°Ρ
.
Π ΡΠ²ΠΎΠ΅ΠΉ Π΄ΠΈΡΡΠ΅ΡΡΠ°ΡΠΈΠΈ ΠΠΎΠ·Π΅Ρ ΠΠΉΡΠ΅Π»Ρ (Josef Eisl) ΠΏΡΠ΅Π΄Π»Π°Π³Π°Π΅Ρ Π½ΠΎΠ²ΡΠΉ ΡΡΠ±Π³Π»ΠΎΠ±Π°Π»ΡΠ½ΡΠΉ ΠΏΠΎΠ΄Ρ
ΠΎΠ΄ ΠΊ ΡΠ°ΡΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ ΡΠ΅Π³ΠΈΡΡΡΠΎΠ² Π² Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΈΡ
ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠ°Ρ
, ΠΈΠΌΠ΅ΡΡΠΈΠΉ Π² ΠΎΡΠ½ΠΎΠ²Π΅ ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ Π½Π°Π±Π»ΡΠ΄Π΅Π½ΠΈΡ:
1. ΠΠ»ΠΎΠ±Π°Π»ΡΠ½ΡΠ΅ ΠΌΠ΅ΡΠΎΠ΄Ρ ΡΡΠ°ΡΡΡ ΠΌΠ½ΠΎΠ³ΠΎ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ Π½Π° ΡΠ΅Π΄ΠΊΠΎ ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΡΠΉ (Ρ
ΠΎΠ»ΠΎΠ΄Π½ΡΠΉ) ΠΊΠΎΠ΄.
2. Π ΡΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ
Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΡΠ΅ΠΌΡΡ
ΡΠ·ΡΠΊΠ°Ρ
ΠΏΠΎΡΠ»Π΅ Π°Π³ΡΠ΅ΡΡΠΈΠ²Π½ΠΎΠ³ΠΎ Π²ΡΡΡΠ°ΠΈΠ²Π°Π½ΠΈΡ ΡΡΠ½ΠΊΡΠΈΠΉ (inline) ΠΏΠΎΡΠ²Π»ΡΡΡΡΡ Π±ΠΎΠ»ΡΡΠΈΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ, Π³Π΄Π΅ ΠΌΠ½ΠΎΠ³ΠΎ Ρ
ΠΎΠ»ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°.
3. ΠΡΡΠΏΠ½ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΏΡΠΈ Π³Π»ΠΎΠ±Π°Π»ΡΠ½ΠΎΠΌ ΠΎΡ
Π²Π°ΡΠ΅ Π·Π°Π½ΠΈΠΌΠ°ΡΡ ΠΌΠ½ΠΎΠ³ΠΎ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ.
ΠΡΡ
ΠΎΠ΄ΠΈΡ, ΡΡΠΎ Π΅ΡΠ»ΠΈ ΡΠΊΠΎΠ½ΡΠ΅Π½ΡΡΠΈΡΠΎΠ²Π°ΡΡ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π°Π»Π³ΠΎΡΠΈΡΠΌΠ° Π½Π° Π³ΠΎΡΡΡΠΈΡ
ΡΡΠ°ΡΡΠΊΠ°Ρ
Π² ΡΡΠ΅ΡΠ± Ρ
ΠΎΠ»ΠΎΠ΄Π½ΡΠΌ, ΡΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π·Π° ΡΠΎ ΠΆΠ΅ Π²ΡΠ΅ΠΌΡ Π½Π°ΠΉΡΠΈ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΠΎΠ΅ (ΠΈΠ»ΠΈ Π΄Π°ΠΆΠ΅ ΠΎΠΏΡΠΈΠΌΠ°Π»ΡΠ½ΠΎΠ΅!) ΡΠ°ΡΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π½Π° ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΡ
Π²Π°ΠΆΠ½ΡΡ
ΡΡΠ°ΡΡΠΊΠ°Ρ
ΠΊΠΎΠ΄Π°.
Π ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Π²Π°ΠΆΠ½ΡΡ
ΡΡΠ°ΡΡΠΊΠΎΠ² ΠΠΉΡΠ΅Π»Ρ Π²ΡΠ±ΡΠ°Π» Π½Π΅ΠΏΠ΅ΡΠ΅ΡΠ΅ΠΊΠ°ΡΡΠΈΠ΅ΡΡ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ Π±Π°Π·ΠΎΠ²ΡΡ
Π±Π»ΠΎΠΊΠΎΠ² - ΡΡΠ°ΡΡΡ (traces). ΠΠ°ΠΆΠ΄Π°Ρ ΡΡΠ°ΡΡΠ° Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΎΡ ΠΏΠΎΠΏΡΠ»ΡΡΠ½ΠΎΡΡΠΈ ΠΏΠΎΠ»ΡΡΠ°Π΅Ρ ΡΠ²ΠΎΡ ΠΏΠΎΠ»ΠΈΡΠΈΠΊΡ ΡΠ°ΡΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ - Π±ΡΡΡΡΡΡ ΠΈ Π½Π΅ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΡΡ, Π΄ΠΎΠ»Π³ΡΡ ΠΈ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΡΡ, ΠΊΠΎΠΌΠΏΡΠΎΠΌΠΈΡΡΠ½ΡΡ ΠΈΠ»ΠΈ Π΄Π°ΠΆΠ΅ ΡΠΏΠ΅ΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΡΡ.
ΠΠ½ΡΠ΅ΡΠ΅ΡΠ½ΠΎ, ΡΡΠΎ ΡΡ
ΠΎΠΆΠΈΠΉ ΠΏΠΎΠ΄Ρ
ΠΎΠ΄ ΡΠΆΠ΅ ΠΏΡΠΈΠΌΠ΅Π½ΡΠ»ΡΡ Π² ΡΡΠ°ΡΡΠΈΡΡΡΡΠΈΡ
jit-ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠ°Ρ
, Π½ΠΎ ΡΠ°ΠΌ ΡΡΠ°ΡΡΡ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°Π»ΠΈΡΡ ΡΠ΅Π»ΠΈΠΊΠΎΠΌ, ΡΠΎΠ³Π΄Π° ΠΊΠ°ΠΊ Ρ ΠΠΉΡΠ΅Π»Ρ ΡΡΠ°ΡΡΡ Π²ΡΠ΄Π΅Π»ΡΡΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ Π΄Π»Ρ ΡΠ°ΡΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ ΡΠ΅Π³ΠΈΡΡΡΠΎΠ².
ΠΠΉΡΠ΅Π»Ρ Π² ΡΠΎΡΡΡΠ΄Π½ΠΈΡΠ΅ΡΡΠ²Π΅ Ρ Oracle ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π» ΠΏΠΎΠ΄Ρ
ΠΎΠ΄ Π² GraalVM, Π½ΠΎΠ²ΠΎΠ³ΠΎ jit-ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠ° Π΄Π»Ρ JVM, Π³Π΄Π΅ ΡΠΎΡ ΠΏΠΎΠΊΠ°Π·Π°Π» ΡΡΠ°Π²Π½ΠΈΠΌΡΡ Ρ Π°ΠΊΡΡΠ°Π»ΡΠ½ΡΠΌΠΈ Π²Π΅ΡΡΠΈΡΠΌΠΈ Π»ΠΈΠ½Π΅ΠΉΠ½ΠΎΠ³ΠΎ ΡΠΊΠ°Π½ΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡ ΠΏΠΎΡΠΎΠΆΠ΄Π΅Π½Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° ΠΏΡΠΈ ΠΌΠ΅Π½ΡΡΠ΅ΠΌ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ Π Π . ΠΡΠΈ ΡΡΠΎΠΌ ΡΠ°ΡΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π½Π° ΡΡΠ°ΡΡΠ°Ρ
ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΈΡΠΊΠ°ΡΡ Π±Π°Π»Π°Π½Ρ ΠΌΠ΅ΠΆΠ΄Ρ Π²ΡΠ΅ΠΌΠ΅Π½Π΅ΠΌ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ ΠΈ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡΡ ΡΠ°ΡΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ, Π° ΡΠ°ΠΊΠΆΠ΅ ΠΎΡΠΊΡΡΠ²Π°Π΅Ρ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ Π΄Π»Ρ ΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΡΠ½ΠΎΠΉ ΡΠ°Π±ΠΎΡΡ Π½Π°Π΄ ΡΡΠ°ΡΡΠ°ΠΌΠΈ.
Π Π½Π°ΡΡΠΎΡΡΠΈΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ ΠΊΠΎΠ΄ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ Π²ΡΠΊΠ»ΡΡΠ΅Π½, Π½ΠΎ Π΄ΠΎΡΡΡΠΏΠ΅Π½ Π² Java Π²Π΅ΡΡΠΈΠΉ ΠΎΡ 10 ΠΈ Π½ΠΎΠ²Π΅Π΅ ΡΠ΅ΡΠ΅Π· ΠΎΠΏΡΠΈΠΈ
java -XX:+UnlockExperimentalVMOptions -XX:+UseJVMCICompiler -Dgraal.TraceRA=true. https://ssw.jku.at/General/Staff/Eisl/papers/phdthesis.pdf #registerallocation #trace #graalvm #jvm
485
BLISS - ΠΎΠ΄ΠΈΠ½ ΠΈΠ· ΡΠ°ΠΌΡΡ
ΡΠ°Π½Π½ΠΈΡ
ΠΏΠΎΡΡΠ°ΡΠΈΠ²Π½ΡΡ
ΡΠ·ΡΠΊΠΎΠ² Π΄Π»Ρ ΡΠΈΡΡΠ΅ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ, ΠΏΠ΅ΡΠ²Π°Ρ Π²Π΅ΡΡΠΈΡ ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ (BLISS-10) Π±ΡΠ»Π° Π²ΡΠΏΡΡΠ΅Π½Π° Π΄Π»Ρ PDP-10 Π΅ΡΠ΅ Π² 1970-ΠΎΠΌ Π³ΠΎΠ΄Ρ. ΠΠ°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΡΠΈΡΠΎΠΊΠΎΠ΅ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΡΠ·ΡΠΊ Π½Π°ΡΠ΅Π» Π²ΠΎ Π²Π½ΡΡΡΠ΅Π½Π½ΠΈΡ
ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ°Ρ
ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ DEC, Π³Π΄Π΅ Π½Π° BLISS Π²ΠΏΠ»ΠΎΡΡ Π΄ΠΎ 90-Ρ
ΡΠΎΠ·Π΄Π°Π²Π°Π»ΠΈΡΡ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΡ, ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΎΠ½Π½ΡΠ΅ ΡΠΈΡΡΠ΅ΠΌΡ ΠΈ Π½ΠΈΠ·ΠΊΠΎΡΡΠΎΠ²Π½Π΅Π²ΡΠ΅ ΡΡΠΈΠ»ΠΈΡΡ.
ΠΠΎ ΠΏΡΠΎΡΠ»Π°Π²ΠΈΠ»ΡΡ ΡΡΠΎΡ ΡΠ·ΡΠΊ Π±Π»Π°Π³ΠΎΠ΄Π°ΡΡ Π²Π΅ΡΡΠΈΠΈ Π΄Π»Ρ PDP-11, Π²ΡΡΠ΅Π΄ΡΠ΅ΠΉ Π² 1975 Π³ΠΎΠ΄Ρ. ΠΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ BLISS-11 Π±ΡΠ» Π½Π° Π³ΠΎΠ»ΠΎΠ²Ρ Π²ΡΡΠ΅ ΠΊΠΎΠ½ΠΊΡΡΠ΅Π½ΡΠΎΠ² Π²ΡΠΎΠ΄Π΅ ΡΠ°Π½Π½ΠΈΡ
ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠΎΠ² C ΠΈ ΠΏΠΎΡΠ°ΠΆΠ°Π» Π²ΠΎΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΎΠ² ("we'd sit and chuckle at what it had done"). Π Π΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ ΠΎΠΏΠΈΡΡΠ²Π°Π»ΠΈ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ Π΄ΠΈΡΡΠ΅ΡΡΠ°ΡΠΈΠΉ (ΠΎΠ΄Π½Π° ΠΈΠ· Π½ΠΈΡ
- Π·Π° Π°Π²ΡΠΎΡΡΡΠ²ΠΎΠΌ Π±ΡΠ΄ΡΡΠ΅Π³ΠΎ ΠΎΡΠ½ΠΎΠ²Π°ΡΠ΅Π»Ρ Adobe) ΠΈ ΠΊΠ½ΠΈΠ³Π°. ΠΡΠΈΠΌΠ΅Ρ ΠΈΠ½Π½ΠΎΠ²Π°ΡΠΈΠΎΠ½Π½ΠΎΡΡΠΈ BLISS-11 - Π°Π½Π°Π»ΠΈΠ· ΠΆΠΈΠ·Π½ΠΈ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ
Π² ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠΈ ΠΊ Π³Π»ΠΎΠ±Π°Π»ΡΠ½ΠΎΠΌΡ ΡΠ°ΡΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ ΡΠ΅Π³ΠΈΡΡΡΠΎΠ².
ΠΠ½ΠΈΠ³Π° ΠΎΠΏΠΈΡΡΠ²Π°Π΅Ρ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΠΉ ΠΏΠΎΠ΄Ρ
ΠΎΠ΄ ΠΊ Π°Π½Π°Π»ΠΈΠ·Ρ ΠΎΠ±Π»Π°ΡΡΠ΅ΠΉ ΠΆΠΈΠ·Π½ΠΈ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ
(ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ "no truly satisfactory solution exists in the literature"). ΠΠ°ΠΉΠ΄Π΅Π½Π½ΡΠ΅ ΠΎΠ±Π»Π°ΡΡΠΈ ΠΎΠ±ΠΎΠ·Π½Π°ΡΠ°Π»ΠΈΡΡ ΠΊΠ°ΠΆΠ΄Π°Ρ Π΄Π²ΡΠΌΡ ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°ΡΠ°ΠΌΠΈ Π² Π΄Π²ΡΡ
ΠΌΠ΅ΡΠ½ΠΎΠΌ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π΅. ΠΠΎΠΎΡΠ΄ΠΈΠ½Π°ΡΡ Π·Π°Π΄Π°Π²Π°Π»ΠΈ Π²Π΅ΡΡΠΈΠ½Ρ ΠΏΡΡΠΌΠΎΡΠ³ΠΎΠ»ΡΠ½ΠΈΠΊΠΎΠ². ΠΡΠ»ΠΈ ΠΎΠ±Π»Π°ΡΡΠΈ-ΠΏΡΡΠΌΠΎΡΠ³ΠΎΠ»ΡΠ½ΠΈΠΊΠΈ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ ΠΆΠΈΠ·Π½ΠΈ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ
ΠΏΠ΅ΡΠ΅ΡΠ΅ΠΊΠ°Π»ΠΈΡΡ, ΡΠΎ ΡΠ°ΠΊΠΈΠ΅ ΠΎΠ±Π»Π°ΡΡΠΈ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ Π±ΡΠ»ΠΈ ΠΎΠΊΠ°Π·ΡΠ²Π°ΡΡΡΡ Π² ΠΎΠ΄Π½ΠΎΠΌ ΡΠ΅Π³ΠΈΡΡΡΠ΅.
ΠΠ°ΠΆΠ΄Π°Ρ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ ΠΏΠΎΠ»ΡΡΠ°Π»Π° ΡΠ΅ΠΉΡΠΈΠ½Π³ Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ ΡΠ°ΡΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Π² ΠΊΠΎΠ΄Π΅ (Π½Π°ΠΏΡ. Π³Π»ΡΠ±ΠΈΠ½Ρ Π²Π»ΠΎΠΆΠ΅Π½ΠΈΡ ΡΠΈΠΊΠ»ΠΎΠ²) ΠΈ ΡΠ°Π·ΠΌΠ΅ΡΠ° ΠΎΠ±Π»Π°ΡΡΠΈ ΠΆΠΈΠ·Π½ΠΈ (ΠΌΠ΅Π½ΡΡΠ΅ - Π»ΡΡΡΠ΅). ΠΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ ΡΠΎΡΡΠΈΡΠΎΠ²Π°Π»ΠΈΡΡ ΠΏΠΎ ΡΠ΅ΠΉΡΠΈΠ½Π³Ρ, ΠΈ Π·Π° ΠΎΠ΄ΠΈΠ½ ΠΏΡΠΎΡ
ΠΎΠ΄ ΠΎΠ΄Π½Π° Π·Π° Π΄ΡΡΠ³ΠΎΠΉ ΡΠΎΠΏΠΎΡΡΠ°Π²Π»ΡΠ»ΠΈΡΡ Ρ ΡΠ΅Π³ΠΈΡΡΡΠ°ΠΌΠΈ, Π΅ΡΠ»ΠΈ ΡΠΎΠ»ΡΠΊΠΎ ΠΏΡΠΈ ΡΡΠΎΠΌ Π½Π΅ ΡΠ»ΡΡΠ°Π»ΠΎΡΡ ΠΏΠ΅ΡΠ΅ΡΠ΅ΡΠ΅Π½ΠΈΡ Ρ ΡΠΆΠ΅ ΡΠΎΠΏΠΎΡΡΠ°Π²Π»Π΅Π½Π½ΡΠΌΠΈ Ρ ΡΠ΅Π³ΠΈΡΡΡΠΎΠΌ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠΌΠΈ.
ΠΠΎΠ·ΠΆΠ΅ ΡΡΠ° ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° Π±ΡΠ»Π° ΡΠ²Π΅Π΄Π΅Π½Π° ΠΊ NP-ΡΠ»ΠΎΠΆΠ½ΠΎΠΉ Π·Π°Π΄Π°ΡΠ΅ ΠΎΠ± ΡΠΏΠ°ΠΊΠΎΠ²ΠΊΠ΅ Π² ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΡ; ΠΈ Π² ΡΠ»Π΅Π΄ΡΡΡΠΈΡ
Π²Π΅ΡΡΠΈΡΡ
BLISS ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΈ ΡΠ°Π·Π²ΠΈΠ»ΠΈ ΠΏΠΎΠ΄Ρ
ΠΎΠ΄ Π² ΡΠ΅ΠΌΠ΅ΠΉΡΡΠ²ΠΎ Π°Π»Π³ΠΎΡΠΈΡΠΌΠΎΠ² binpacking, ΠΊ ΠΊΠΎΡΠΎΡΡΠΌ ΠΎΡΠ½ΠΎΡΠΈΡΡΡ ΠΈ ΠΏΠΎΠΏΡΠ»ΡΡΠ½ΡΠΉ Π°Π»Π³ΠΎΡΠΈΡΠΌ Π»ΠΈΠ½Π΅ΠΉΠ½ΠΎΠ³ΠΎ ΡΠΊΠ°Π½ΠΈΡΠΎΠ²Π°Π½ΠΈΡ.
Π‘ Π·Π°ΠΊΠ°ΡΠΎΠΌ DEC Π·Π°ΡΠ»Π° ΠΈ Π·Π²Π΅Π·Π΄Π° BLISS. ΠΠΎ Π² ΠΈΡΡΠΎΡΠΈΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠΎΠ² ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ ΡΠ·ΡΠΊΠ° ΠΎΡΡΠ°Π²ΠΈΠ»Π° Π·Π½Π°ΡΠΈΠΌΡΠΉ ΡΠ»Π΅Π΄: ΠΊΠ½ΠΈΠ³Π° The Design of an Optimizing Compiler (1975) ΡΡΠ°Π»Π° ΠΊΠ»Π°ΡΡΠΈΠΊΠΎΠΉ, ΠΈ Π±Π΅Π· BLISS Π»ΡΠ±ΠΎΠ΅ ΠΎΠ±ΡΡΠΆΠ΄Π΅Π½ΠΈΠ΅ ΠΈΡΡΠΎΡΠΈΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠΎΠ² Π±ΡΠ΄Π΅Ρ Π½Π΅ΠΏΠΎΠ»Π½ΡΠΌ.
Wulf, W.A., 1975. The design of an optimizing compiler.
Brender, Ronald F. 2002. The BLISS programming language: a history
#bliss #registerallocation #history
485
ΠΠ΅ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ ΠΏΠΎΠ»ΡΡΠ°ΡΡ ΠΈΠ·Π²Π΅ΡΡΠ½ΠΎΡΡΡ Π½Π΅ Π² ΡΠΈΠ»Ρ Π½ΠΎΠ²Π°ΡΠΎΡΡΠΊΠΈΡ
ΡΠ΅ΡΠ΅Π½ΠΈΠΉ, Π° Π±Π»Π°Π³ΠΎΠ΄Π°ΡΡ ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅Π½Π½ΠΎΠΉ ΠΈΠ½ΠΆΠ΅Π½Π΅ΡΠ½ΠΎΠΉ ΡΠ°Π±ΠΎΡΠ΅ ΠΈ ΡΠ΄ΠΎΠ±Π½ΠΎΠΉ ΡΠΎΠΏΡΠΎΠ²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΠΉ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ. ΠΡΠΈΠΌΠ΅Ρ - ΠΏΠΎΡΡΠ°ΡΠΈΠ²Π½ΡΠΉ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ lcc, ΡΡΠ°Π²ΡΠΈΠΉ ΠΏΡΠΎΠΎΠ±ΡΠ°Π·ΠΎΠΌ 8cc, chibicc, tcc ΠΈ Π΄ΡΡΠ³ΠΈΡ
ΡΠ²ΠΎΠ±ΠΎΠ΄Π½ΠΎ Π΄ΠΎΡΡΡΠΏΠ½ΡΡ
Π½Π΅Π±ΠΎΠ»ΡΡΠΈΡ
ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠΎΠ².
Π Π°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΈ lcc Π·Π°Π΄Π°Π»ΠΈΡΡ ΡΠ΅Π»ΡΡ ΡΠ΄Π΅Π»Π°ΡΡ Π½Π΅ ΠΏΡΠΎΡΡΠΎ ΠΏΠΎΠ»Π½ΠΎΡΠ΅Π½Π½ΡΠΉ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ ΡΠ·ΡΠΊΠ° Π‘ΠΈ, Π½ΠΎ Π΅ΡΠ΅ ΠΈ ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΠΎ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ: ΠΏΡΠΎΠ΅ΠΊΡ Π½Π°ΠΏΠΈΡΠ°Π½ Π² ΡΡΠΈΠ»Π΅ "Π»ΠΈΡΠ΅ΡΠ°ΡΡΡΠ½ΠΎΠ³ΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ" Π.ΠΠ½ΡΡΠ°, ΠΊΠΎΠ³Π΄Π° ΠΊΠΎΠ΄ ΠΈΠ½ΡΠ΅Π³ΡΠΈΡΠΎΠ²Π°Π½ Π² Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡ (Π° Π½Π΅ Π½Π°ΠΎΠ±ΠΎΡΠΎΡ).
ΠΠΎΠ»Π΅Π΅ ΡΠΎΠ³ΠΎ, ΠΈΠ· ΡΠ°ΠΊΠΎΠ³ΠΎ "Ρ
ΡΠ΄ΠΎΠΆΠ΅ΡΡΠ²Π΅Π½Π½ΠΎΠ³ΠΎ" ΠΈΡΡ
ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ±ΡΠ°ΡΡ ΠΏΠΎΠ»Π½ΠΎΡΠ΅Π½Π½ΡΡ ΠΊΠ½ΠΈΠ³Ρ, ΠΈΠ·Π΄Π°Π½Π½ΡΡ ΠΏΠΎΠ΄ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ A Retargetable C Compiler: Design and Implementation. ΠΠΌΠ΅ΡΡΠ΅ Ρ ΠΊΠ½ΠΈΠ³ΠΎΠΉ Π΄Π»Ρ ΡΠ°Π·ΡΡΡΠ½Π΅Π½ΠΈΡ ΠΊΠ»ΡΡΠ΅Π²ΡΡ
ΡΠ΅Ρ
Π½ΠΈΡΠ΅ΡΠΊΠΈΡ
ΡΠ΅ΡΠ΅Π½ΠΈΠΉ Π°Π²ΡΠΎΡΡ ΠΎΠΏΡΠ±Π»ΠΈΠΊΠΎΠ²Π°Π»ΠΈ ΡΡΠ°ΡΡΠΈ, ΠΏΠΎΡΠ²ΡΡΠ΅Π½Π½ΡΠ΅, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΠ°ΡΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ ΡΠ΅Π³ΠΈΡΡΡΠΎΠ² ΠΈ ΠΏΠΎΡΠΎΠΆΠ΄Π΅Π½ΠΈΡ ΠΊΠΎΠ΄Π°.
lcc ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡΠ½Π΅ΡΡΠΈ ΠΊ ΠΏΡΠΎΠΌΠ΅ΠΆΡΡΠΎΡΠ½ΠΎΠΌΡ Π²Π°ΡΠΈΠ°Π½ΡΡ ΠΌΠ΅ΠΆΠ΄Ρ ΠΏΡΠΎΡΡΡΠΌΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠ°ΠΌΠΈ, ΠΎΠΏΠΈΡΡΠ²Π°Π΅ΠΌΡΠΌΠΈ Π² ΠΏΠΎΠΏΡΠ»ΡΡΠ½ΡΡ
ΠΊΠ½ΠΈΠ³Π°Ρ
Π΄Π»Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΡΠΎΠ², ΠΈ ΡΠ΅ΡΡΠ΅Π·Π½ΡΠΌΠΈ ΠΎΠΏΡΠΈΠΌΠΈΠ·ΠΈΡΡΡΡΠΈΠΌΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠ°ΠΌΠΈ. ΠΠ΄Π΅ΡΡ Π΅ΡΡΡ Π²Π½ΡΡΡΠ΅Π½Π½Π΅Π΅ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ (Π»Π΅Ρ Π°ΡΠΈΠΊΠ»ΠΈΡΠ΅ΡΠΊΠΈΡ
Π³ΡΠ°ΡΠΎΠ² Π²Π½ΡΡΡΠΈ Π±Π°Π·ΠΎΠ²ΡΡ
Π±Π»ΠΎΠΊΠΎΠ² Π³ΡΠ°ΡΠ° ΠΏΠΎΡΠΎΠΊΠ° ΠΈΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ), ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΠ΅ ΠΏΠΎΠΏΡΠ»ΡΡΠ½ΡΠ΅ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΠΈ.
Π₯Π°ΡΠ°ΠΊΡΠ΅ΡΠ½ΠΎΠ΅ Π΄Π»Ρ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠ° ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ - ΡΠ°ΡΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΡΠ΅Π³ΠΈΡΡΡΠΎΠ². ΠΠ½ΠΎ Π»ΠΎΠΊΠ°Π»ΡΠ½ΠΎΠ΅ ΠΈ Π²ΠΎΡΡ
ΠΎΠ΄ΡΡΠ΅Π΅, ΡΠΎ Π΅ΡΡΡ ΠΏΡΠΎΠ²ΠΎΠ΄ΠΈΡΡΡ Π²Π½ΡΡΡΠΈ Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ Π±Π»ΠΎΠΊΠ° ΠΏΡΠΎΡ
ΠΎΠ΄ΠΎΠΌ ΠΏΠΎ ΡΠΏΠΈΡΠΊΡ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΉ. Π Π΅Π³ΠΈΡΡΡΡ ΠΎΠ΄ΠΈΠ½ Π·Π° Π΄ΡΡΠ³ΠΈΠΌ Π²ΡΠ΄Π΅Π»ΡΡΡΡΡ ΠΏΠΎΠ΄ Π·Π½Π°ΡΠ΅Π½ΠΈΡ Π΄ΠΎ ΡΠ΅Ρ
ΠΏΠΎΡ, ΠΏΠΎΠΊΠ° Π½Π΅ ΠΏΡΠΈΡ
ΠΎΠ΄ΠΈΡΡΡ ΠΈΡΠΊΠ°ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π΄Π»Ρ Π²ΡΡΠ΅ΡΠ½Π΅Π½ΠΈΡ Π² ΠΏΠ°ΠΌΡΡΡ. ΠΡΡΠ΅ΡΠ½ΡΡΡΡΡ ΡΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ, ΡΠ»Π΅Π΄ΡΡΡΠ΅Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΊΠΎΡΠΎΡΡΡ
Π² ΡΠΏΠΈΡΠΊΠ΅ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΉ Π½Π°Ρ
ΠΎΠ΄ΠΈΡΡΡ Π΄Π°Π»ΡΡΠ΅ Π²ΡΠ΅Π³ΠΎ.
Π ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ΅ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ Π±ΡΠ» ΠΏΠΎΡΡΠΈΡΠΎΠ²Π°Π½ Π½Π° ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ ΠΏΠ»Π°ΡΡΠΎΡΠΌ, ΡΡΠ°Π» ΠΎΡΠ½ΠΎΠ²ΠΎΠΉ Π΄Π»Ρ Π±Π΅ΡΡΠΈΡΠ»Π΅Π½Π½ΡΡ
ΡΠΎΡΠΊΠΎΠ² ΠΈ Π΄Π°ΠΆΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π»ΡΡ Π΄Π»Ρ ΡΠΊΡΠΈΠΏΡΠΎΠ²Π°Π½ΠΈΡ ΠΏΠΎΠΏΡΠ»ΡΡΠ½ΠΎΠ³ΠΎ ΠΈΠ³ΡΠΎΠ²ΠΎΠ³ΠΎ Π΄Π²ΠΈΠΆΠΊΠ° id Tech 3 (ΡΠΌ. Quake 3 Arena) ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ idSoftware.
https://en.wikipedia.org/wiki/LCC_(compiler)
https://github.com/drh/lcc
https://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.57.2519&rep=rep1&type=pdf
https://en.wikipedia.org/wiki/Id_Tech_3
#lcc #history #registerallocation
