en
Feedback
PLComp

PLComp

Open in Telegram

Π―Π·Ρ‹ΠΊΠΈ ΠΈ компиляторы: вопросы Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΎΡ‚ Π²Ρ…ΠΎΠ΄Π½ΠΎΠ³ΠΎ синтаксиса Π΄ΠΎ пороТдСния машинного ΠΊΠΎΠ΄Π°. Авторы: @vekazanov @igorjirkov @true_grue @clayrat @eupp7 @alexanius @AntonTrunov @GabrielFallen @graetestofnoldor

Show more
The country is not specifiedThe category is not specified
485
Subscribers
No data24 hours
-17 days
+530 days

Data loading in progress...

Tags Cloud
No data
Any problems? Please refresh the page or contact our support manager.
Incoming and Outgoing Mentions
---
---
---
---
---
---
Attracting Subscribers
September '24
September '24
+10
in 1 channels
August '24
+181
in 0 channels
Get PRO
July '240
in 0 channels
Get PRO
June '240
in 0 channels
Get PRO
May '240
in 2 channels
Get PRO
April '240
in 4 channels
Get PRO
March '240
in 1 channels
Get PRO
February '24
+1
in 0 channels
Get PRO
January '24
+3
in 0 channels
Get PRO
December '23
+115
in 0 channels
Get PRO
November '230
in 0 channels
Get PRO
October '230
in 0 channels
Get PRO
September '230
in 0 channels
Get PRO
August '230
in 0 channels
Get PRO
July '230
in 0 channels
Get PRO
June '230
in 0 channels
Get PRO
May '230
in 0 channels
Get PRO
April '230
in 0 channels
Get PRO
March '230
in 0 channels
Get PRO
February '230
in 0 channels
Get PRO
January '230
in 0 channels
Get PRO
December '22
+1
in 0 channels
Get PRO
November '220
in 0 channels
Get PRO
October '22
+6
in 0 channels
Get PRO
September '22
+6
in 0 channels
Get PRO
August '22
+31
in 0 channels
Get PRO
July '220
in 0 channels
Get PRO
June '220
in 0 channels
Get PRO
May '22
+20
in 0 channels
Get PRO
April '22
+99
in 0 channels
Get PRO
March '220
in 0 channels
Get PRO
February '220
in 0 channels
Get PRO
January '220
in 0 channels
Get PRO
December '210
in 0 channels
Get PRO
November '210
in 0 channels
Get PRO
October '210
in 0 channels
Get PRO
September '210
in 0 channels
Get PRO
August '21
+7
in 0 channels
Get PRO
July '21
+16
in 0 channels
Get PRO
June '21
+11
in 0 channels
Get PRO
May '21
+7
in 0 channels
Get PRO
April '21
+304
in 0 channels
Date
Subscriber Growth
Mentions
Channels
25 September0
24 September+1
23 September0
22 September0
21 September0
20 September0
19 September0
18 September+1
17 September+1
16 September+1
15 September+1
14 September+1
13 September0
12 September+2
11 September+1
10 September0
09 September0
08 September0
07 September0
06 September0
05 September+1
04 September0
03 September0
02 September0
01 September0
Channel Posts
Π­Ρ‚Π° нСбольшая Π·Π°ΠΌΠ΅Ρ‚ΠΊΠ° посвящСна нСскольким новостям ΠΏΠΎ нашСй Ρ‚Π΅ΠΌΠ°Ρ‚ΠΈΠΊΠ΅. Π’ΠΎ-ΠΏΠ΅Ρ€Π²Ρ‹Ρ…, Ρ…ΠΎΡ‡Ρƒ Π½Π°ΠΏΠΎΠΌΠ½ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π² июнС ΠΏΡ€ΠΎΡˆΠ»Π° конфСрСнция 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

2
ΠŸΠ΅Ρ€Π²Π°Ρ Ρ‡Π°ΡΡ‚ΡŒ Ρ†ΠΈΠΊΠ»Π° Π΄ΠΎΠΊΠ»Π°Π΄ΠΎΠ² ΠΎΠ± Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·Π°Ρ†ΠΈΠΈ программирования Π² Π‘Π‘Π‘Π  доступна Π½Π° 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/
1 623
3
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, ΠΈ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ. И ΠΏΠΎΡ‚ΠΎΠΌΡƒ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‚ собой ΠΈΠ½Ρ‚Π΅Ρ€Π΅ΡΠ½Π΅ΠΉΡˆΠ΅Π΅ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ "поля Π΄Π΅ΡΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ компиляторщиков" Π² ΡΡ€Π°Π²Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π½ΠΎΠ²ΡƒΡŽ, Π½ΠΎ ΡΡ‚Ρ€Π΅ΠΌΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π½Π°Π±ΠΈΡ€Π°ΡŽΡ‰ΡƒΡŽ ΠΏΠΎΠΏΡƒΠ»ΡΡ€Π½ΠΎΡΡ‚ΡŒ, ΠΎΠ±Π»Π°ΡΡ‚ΡŒ.
2 616
4
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
1 092
5
На днях, ΠΈ Π΄Π°ΠΆΠ΅ Π² ΠΎΠ΄Π½ΠΎ ΠΈ Ρ‚ΠΎ ΠΆΠ΅ врСмя, ΠΏΡ€ΠΎΡˆΠ»ΠΈ Π΄Π²Π° Π΅ΠΆΠ΅Π³ΠΎΠ΄Π½Ρ‹Ρ… российских мСроприятия, Π² Ρ‚ΠΎΠΌ числС ΠΈ Π½Π° Ρ‚Π΅ΠΌΡ‹ языков ΠΈ компиляторов. Π­Ρ‚ΠΎ -- ΠΠ°Ρ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹ΠΉ Π‘ΡƒΠΏΠ΅Ρ€ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π½Ρ‹ΠΉ Π€ΠΎΡ€ΡƒΠΌ (НБКЀ) ΠΈ ΠžΡ‚ΠΊΡ€Ρ‹Ρ‚Π°Ρ конфСрСнция ИБП РАН. По НБКЀ доступны тСзисы Π΄ΠΎΠΊΠ»Π°Π΄ΠΎΠ²: 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
1 129
6
Вводная трСхчасовая лСкция ΠΎ пСрспСктивных направлСниях Π² области компиляции для спСцпроцСссоров ΠΈ Π°ΠΏΠΏΠ°Ρ€Π°Ρ‚Π½Ρ‹Ρ… ускоритСлСй https://www.youtube.com/watch?v=1m8oAQCTSeY #dsl #smt #autotuning #superoptimization #egraph
1 316
7
Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅ нСсколько ΠΌΠΎΠΌΠ΅Π½Ρ‚ΠΎΠ² Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‚ вопросы, Ссли Π½Π΅ ΠΊ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Ρƒ Π² Ρ†Π΅Π»ΠΎΠΌ, Ρ‚ΠΎ ΠΊ Π΅Π³ΠΎ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π² JastAdd. Π’ΠΎ-ΠΏΠ΅Ρ€Π²Ρ‹Ρ…, ΠΊΠ°ΠΊ ΡƒΠΏΠΎΠΌΠΈΠ½Π°Π»ΠΎΡΡŒ Ρ€Π°Π½Π΅Π΅, ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΡ (Relations) Π·Π°Π΄Π°ΡŽΡ‚ΡΡ "внСшним" ΠΏΠΎ ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΡŽ ΠΊ Π΄Π΅Ρ€Π΅Π²Ρƒ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, ΠΈ Π°Π²Ρ‚ΠΎΡ€Ρ‹ для этого ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΉ ΠΈΠΌΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ Π½Π° Java, Π΄Π° Π΅Ρ‰Ρ‘ ΠΈ ΠΎΠΏΠΈΡ€Π°ΡŽΡ‰ΠΈΠΉΡΡ Π½Π° нСявныС, Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅ΠΌΡ‹Π΅ Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊΠΎΠΌ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹. МнС Ρ‚Π°ΠΊΠΎΠΉ способ Π½Π΅ каТСтся Π΄Π΅ΠΊΠ»Π°Ρ€Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΌ ΠΈ особо высокоуровнСвым. Π’ΠΎ-Π²Ρ‚ΠΎΡ€Ρ‹Ρ…, нСсмотря Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Π΄Π΅Ρ€Π΅Π²ΠΎ Ρ€Π°Π·Π±ΠΎΡ€Π° прСвращаСтся Π² Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½Π½Ρ‹ΠΉ Π³Ρ€Π°Ρ„ ΠΎΠ±Ρ‰Π΅Π³ΠΎ Π²ΠΈΠ΄Π°, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Control Flow Analysis ΠΈ Data Flow Analysis остаётся ΠΏΠΎΠ΄ вопросом. Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, этому ΠΌΠ΅ΡˆΠ°ΡŽΡ‚ ограничСния Π½Π° Π½Π΅ΠΈΠ·ΠΌΠ΅Π½ΡΠ΅ΠΌΠΎΡΡ‚ΡŒ Π³Ρ€Π°Ρ„Π°, связанныС с ΠΌΠ΅ΠΌΠΎΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ (Π² свою ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΠΉ для эффСктивной Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠ²). Π’ частности, это Π½Π°ΠΊΠ»Π°Π΄Ρ‹Π²Π°Π΅Ρ‚ ограничСния Π½Π° построСниС ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠΉ ΠΌΠ΅ΠΆΠ΄Ρƒ "ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΌΠΈ" ΠΈ ΡƒΠ·Π»Π°ΠΌΠΈ Π² NTA. Π’ любом случаС, для прояснСния Π΄Π΅Ρ‚Π°Π»Π΅ΠΉ ΠΏΡ€Π΅Π΄Π»Π°Π³Π°Π΅ΠΌΠΎΠ³ΠΎ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π° Ρ‡ΠΈΡ‚Π°Ρ‚Π΅Π»ΡŽ прСдлагаСтся ΠΎΠ·Π½Π°ΠΊΠΎΠΌΠΈΡ‚ΡŒΡΡ со ΡΡ‚Π°Ρ‚ΡŒΡ‘ΠΉ, Π±Π»Π°Π³ΠΎ, ΠΎΠ½Π° достаточно проста для понимания. ΠœΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ Relational RAGs вСсьма ΠΌΠΎΡ‰Π½Ρ‹ΠΉ ΠΈ ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½Ρ‹ΠΉ – Π΅Π³ΠΎ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ ΠΈΠΌΠ΅Ρ‚ΡŒ Π² Π²ΠΈΠ΄Ρƒ ΠΏΡ€ΠΈ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ самых Ρ€Π°Π·Π½Ρ‹Ρ… аспСктов Ρ€Π°Π±ΠΎΡ‚Ρ‹ с языками программирования, Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ статичСского Π°Π½Π°Π»ΠΈΠ·Π°. 😊 #dsl #rag #static #analysis
687
8
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), ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Π½Π΅ уступаСт, Π° Π² Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… случаях ΠΈ прСвосходит Ρ‚Ρ€Π°Π΄ΠΈΡ†ΠΈΠΎΠ½Π½ΡƒΡŽ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ.
399
9
НСкоторыС ΠΈΠ΄Π΅ΠΈ ΠΎΠΏΠ΅Ρ€Π΅ΠΆΠ°ΡŽΡ‚ свою эпоху Π½Π° дСсятилСтия. Автор Π΄Π°Π½Π½ΠΎΠΉ Π·Π°ΠΌΠ΅Ρ‚ΠΊΠΈ ΠΊ ΠΎΠ½Ρ‹ΠΌ бСзусловно относит систСму 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
669
10
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 #dsl
724
11
ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²Π»Π΅Π½Π½Ρ‹ΠΉ Π² 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
694
12
Уильям Π’ΡƒΠ»ΡŒΡ„ (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
766
13
Π’ Ρ‚Ρ€Π°Π΄ΠΈΡ†ΠΈΠΎΠ½Π½Ρ‹Ρ… Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ°Ρ… распрСдСлСния рСгистров Π½Π° основС Π·Π°Π΄Π°Ρ‡ ΡƒΠΏΠ°ΠΊΠΎΠ²ΠΊΠΈ Π² ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρ‹ ΠΈΠ»ΠΈ раскраски Π³Ρ€Π°Ρ„ΠΎΠ² Ρ‚Ρ€ΡƒΠ΄Π½ΠΎ ΡƒΡ‡Π΅ΡΡ‚ΡŒ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ ограничСния Π½Π° доступ ΠΊ рСгистрам. Π Π΅Ρ‡ΡŒ ΠΈΠ΄Π΅Ρ‚ ΠΎΠ± Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π°Ρ… с нСрСгулярным доступом ΠΊ рСгистрам (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
634
14
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
681
15
РаспрСдСлСниС рСгистров ΠΈ ΠΏΠ»Π°Π½ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ инструкций - Π²Π°ΠΆΠ½Ρ‹Π΅ аспСкты Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ бэкСнда компилятора. ОбС Π·Π°Π΄Π°Ρ‡ΠΈ 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
806
16
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
674
17
На Π₯Π°Π±Ρ€Π΅ нСсколько Π΄Π½Π΅ΠΉ Π½Π°Π·Π°Π΄ появилась ΡΡ‚Π°Ρ‚ΡŒΡ, популярно ΠΏΠΎΡΡΠ½ΡΡŽΡ‰Π°Ρ Π·Π½Π°ΠΌΠ΅Π½ΠΈΡ‚ΡƒΡŽ Ρ‚Π΅Ρ…Π½ΠΈΠΊΡƒ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ языка 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
790
18
РаспрСдСлСниС рСгистров - ΠΎΠ΄Π½Π° ΠΈΠ· ΡΡ‚Π°Ρ€Π΅ΠΉΡˆΠΈΡ… ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ построСния компиляторов, ΠΏΠ΅Ρ€Π²Ρ‹Π΅ Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΏΠΎ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ появились Π΅Ρ‰Π΅ Π² 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
727
19
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
765
20
НСкоторыС Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΏΠΎΠ»ΡƒΡ‡Π°ΡŽΡ‚ ΠΈΠ·Π²Π΅ΡΡ‚Π½ΠΎΡΡ‚ΡŒ Π½Π΅ Π² силу новаторских Ρ€Π΅ΡˆΠ΅Π½ΠΈΠΉ, Π° благодаря качСствСнной ΠΈΠ½ΠΆΠ΅Π½Π΅Ρ€Π½ΠΎΠΉ Ρ€Π°Π±ΠΎΡ‚Π΅ ΠΈ ΡƒΠ΄ΠΎΠ±Π½ΠΎΠΉ ΡΠΎΠΏΡ€ΠΎΠ²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ. ΠŸΡ€ΠΈΠΌΠ΅Ρ€ - ΠΏΠΎΡ€Ρ‚Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ компилятор 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
652