Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠ΄

ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ†ΠΈΡ (ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅)

ΠšΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ β€” ΠΏΡ€ΠΎΠ²ΠΎΠ΄ΠΈΡ‚ΡŒ Ρ‚Ρ€Π°Π½ΡΠ»ΡΡ†ΠΈΡŽ машинной ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ с ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ языка Π½Π° машинно-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ язык. [3]

Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠ°Π½ΠΈΠ΅

Π’ΠΈΠ΄Ρ‹ компиляторов [2]

Π’ΠΈΠ΄Ρ‹ компиляции [2]

ΠžΡΠ½ΠΎΠ²Ρ‹

Π‘ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ компиляторов ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ΠΈΡ‚ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ с Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ высокоуровнСвого языка программирования Π² ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ нСпосрСдствСнно Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ Ρ†Π΅Π½Ρ‚Ρ€Π°Π»ΡŒΠ½Ρ‹ΠΌ процСссором. Как ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, этот ΠΊΠΎΠ΄ Ρ‚Π°ΠΊΠΆΠ΅ ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½ Π½Π° исполнСниС Π² срСдС ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмы, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ прСдоставляСмыС Сю возмоТности (систСмныС Π²Ρ‹Π·ΠΎΠ²Ρ‹, Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ). АрхитСктура (Π½Π°Π±ΠΎΡ€ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎ-Π°ΠΏΠΏΠ°Ρ€Π°Ρ‚Π½Ρ‹Ρ… срСдств), для ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ производится компиляция, называСтся Ρ†Π΅Π»Π΅Π²ΠΎΠΉ машиной.

Для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Ρ†Π΅Π»Π΅Π²ΠΎΠΉ ΠΌΠ°ΡˆΠΈΠ½Ρ‹ (Apple ΠΈ Ρ‚. Π΄.) ΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмы ΠΈΠ»ΠΈ сСмСйства ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹Ρ… систСм, Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰ΠΈΡ… Π½Π° Ρ†Π΅Π»Π΅Π²ΠΎΠΉ машинС, трСбуСтся написаниС своСго компилятора. Π‘ΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ Ρ‚Π°ΠΊΠΆΠ΅ Ρ‚Π°ΠΊ Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡ‹Π΅ кросс-компиляторы, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰ΠΈΠ΅ Π½Π° ΠΎΠ΄Π½ΠΎΠΉ машинС ΠΈ Π² срСдС ΠΎΠ΄Π½ΠΎΠΉ ОБ ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚ΡŒ ΠΊΠΎΠ΄, ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Π½Ρ‹ΠΉ для выполнСния Π½Π° Π΄Ρ€ΡƒΠ³ΠΎΠΉ Ρ†Π΅Π»Π΅Π²ΠΎΠΉ машинС ΠΈ/ΠΈΠ»ΠΈ Π² срСдС Π΄Ρ€ΡƒΠ³ΠΎΠΉ ОБ. ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, компиляторы ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Ρ‹ ΠΏΠΎΠ΄ Ρ€Π°Π·Π½Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹ процСссоров ΠΈΠ· ΠΎΠ΄Π½ΠΎΠ³ΠΎ сСмСйства (ΠΏΡƒΡ‚Ρ‘ΠΌ использования спСцифичных для этих процСссоров инструкций). НапримСр, ΠΊΠΎΠ΄, скомпилированный ΠΏΠΎΠ΄ процСссоры сСмСйства MMX, SSE2.

Π’Π°ΠΊΠΆΠ΅ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ компиляторы, пСрСводящиС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ с языка высокого уровня Π½Π° язык ассСмблСра.

Π‘ΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ€Π΅ΡˆΠ°ΡŽΡ‚ ΠΎΠ±Ρ€Π°Ρ‚Π½ΡƒΡŽ Π·Π°Π΄Π°Ρ‡Ρƒ β€” ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ с Π½ΠΈΠ·ΠΊΠΎΡƒΡ€ΠΎΠ²Π½Π΅Π²ΠΎΠ³ΠΎ языка Π½Π° высокоуровнСвый. Π­Ρ‚ΠΎΡ‚ процСсс Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ дСкомпиляциСй, Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ β€” дСкомпиляторами. Но ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ компиляция β€” это процСсс с потСрями, Ρ‚ΠΎΡ‡Π½ΠΎ Π²ΠΎΡΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ исходный ΠΊΠΎΠ΄, скаТСм, Π½Π° C++, Π² ΠΎΠ±Ρ‰Π΅ΠΌ случаС Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ. Π‘ΠΎΠ»Π΅Π΅ эффСктивно Π΄Π΅ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΡƒΡŽΡ‚ΡΡ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π² Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄Π°Ρ… β€” Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, сущСствуСт довольно Π½Π°Π΄Ρ‘ΠΆΠ½Ρ‹ΠΉ дСкомпилятор для Flash. Π‘Ρ…ΠΎΠ΄Π½Ρ‹ΠΌ процСссом являСтся дизассСмблированиС машинного ΠΊΠΎΠ΄Π° Π² ΠΊΠΎΠ΄ Π½Π° языкС ассСмблСра, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ всСгда выполняСтся ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ. Бвязано это с Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΊΠΎΠ΄Π°ΠΌΠΈ ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹Ρ… ΠΊΠΎΠΌΠ°Π½Π΄ ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Π°ΠΌΠΈ ассСмблСра имССтся практичСски ΠΎΠ΄Π½ΠΎΠ·Π½Π°Ρ‡Π½ΠΎΠ΅ соотвСтствиС.

Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π° компилятора

ΠŸΡ€ΠΎΡ†Π΅ΡΡ компиляции состоит ΠΈΠ· ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… этапов:

Π’ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹Ρ… рСализациях компиляторов эти этапы ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Ρ€Π°Π·Π΄Π΅Π»ΡŒΠ½Ρ‹ ΠΈΠ»ΠΈ совмСщСны Π² Ρ‚ΠΎΠΌ ΠΈΠ»ΠΈ ΠΈΠ½ΠΎΠΌ Π²ΠΈΠ΄Π΅.

Врансляция ΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΊΠ°

Π’Π°ΠΆΠ½ΠΎΠΉ историчСской ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡ‚ΡŒΡŽ компилятора, ΠΎΡ‚Ρ€Π°ΠΆΡ‘Π½Π½ΠΎΠΉ Π² Π΅Π³ΠΎ Π½Π°Π·Π²Π°Π½ΠΈΠΈ (Π°Π½Π³Π». compile β€” ΡΠΎΠ±ΠΈΡ€Π°Ρ‚ΡŒ вмСстС, ΡΠΎΡΡ‚Π°Π²Π»ΡΡ‚ΡŒ), являлось Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ ΠΌΠΎΠ³ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΊΡƒ (Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ содСрТал Π΄Π²Π΅ части β€” транслятор ΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²Ρ‰ΠΈΠΊ). Π­Ρ‚ΠΎ связано с Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ Ρ€Π°Π·Π΄Π΅Π»ΡŒΠ½Π°Ρ компиляция ΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΊΠ° ΠΊΠ°ΠΊ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Π°Ρ стадия сборки Π²Ρ‹Π΄Π΅Π»ΠΈΠ»ΠΈΡΡŒ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΏΠΎΠ·ΠΆΠ΅ появлСния компиляторов, ΠΈ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ популярныС компиляторы (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, GCC) Π΄ΠΎ сих ΠΏΠΎΡ€ физичСски ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½Π΅Π½Ρ‹ со своими ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²Ρ‰ΠΈΠΊΠ°ΠΌΠΈ. Π’ связи с этим, вмСсто Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π° «компилятор» ΠΈΠ½ΠΎΠ³Π΄Π° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ Ρ‚Π΅Ρ€ΠΌΠΈΠ½ «транслятор» ΠΊΠ°ΠΊ Π΅Π³ΠΎ синоним: Π»ΠΈΠ±ΠΎ Π² старой Π»ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΡƒΡ€Π΅, Π»ΠΈΠ±ΠΎ ΠΊΠΎΠ³Π΄Π° хотят ΠΏΠΎΠ΄Ρ‡Π΅Ρ€ΠΊΠ½ΡƒΡ‚ΡŒ Π΅Π³ΠΎ ΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡ‚ΡŒ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ Π² ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ (ΠΈ Π½Π°ΠΎΠ±ΠΎΡ€ΠΎΡ‚, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ Ρ‚Π΅Ρ€ΠΌΠΈΠ½ «компилятор» для подчёркивания способности ΡΠΎΠ±ΠΈΡ€Π°Ρ‚ΡŒ ΠΈΠ· ΠΌΠ½ΠΎΠ³ΠΈΡ… Ρ„Π°ΠΉΠ»ΠΎΠ² ΠΎΠ΄ΠΈΠ½).

Π˜Π½Ρ‚Π΅Ρ€Π΅ΡΠ½Ρ‹Π΅ Ρ„Π°ΠΊΡ‚Ρ‹

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΡ

Π‘ΠΌ. Ρ‚Π°ΠΊΠΆΠ΅

Π›ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΡƒΡ€Π°

ПолСзноС

Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ «ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ†ΠΈΡ (ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅)» Π² Π΄Ρ€ΡƒΠ³ΠΈΡ… словарях:

ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ†ΠΈΡ β€” ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ†ΠΈΡ: Π’ ВикисловарС Π΅ΡΡ‚ΡŒ ΡΡ‚Π°Ρ‚ΡŒΡ «компиляция» ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ†ΠΈΡ (Π»ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΡƒΡ€Π°) (Π»Π°Ρ‚. … ВикипСдия

Условная компиляция β€” Π’ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΠΊΠ΅, прСпроцСссор это ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π½Π°Ρ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°, ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°ΡŽΡ‰Π°Ρ Π΄Π°Π½Π½Ρ‹Π΅ Π½Π° Π²Ρ…ΠΎΠ΄Π΅, ΠΈ Π²Ρ‹Π΄Π°ΡŽΡ‰Π°Ρ Π΄Π°Π½Π½Ρ‹Π΅, ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Π½Ρ‹Π΅ для Π²Ρ…ΠΎΠ΄Π° Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ρ‚Π°ΠΊΠΎΠΉ ΠΊΠ°ΠΊ компилятор. О Π΄Π°Π½Π½Ρ‹Ρ… Π½Π° Π²Ρ‹Ρ…ΠΎΠ΄Π΅ прСпроцСссора говорят, Ρ‡Ρ‚ΠΎ ΠΎΠ½ΠΈ находятся в… … ВикипСдия

ΠžΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ β€” Π­Ρ‚Π° ΡΡ‚Π°Ρ‚ΡŒΡ Π²ΠΎ ΠΌΠ½ΠΎΠ³ΠΎΠΌ ΠΈΠ»ΠΈ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ опираСтся Π½Π° Π½Π΅Π°Π²Ρ‚ΠΎΡ€ΠΈΡ‚Π΅Ρ‚Π½Ρ‹Π΅ источники. Π˜Π½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡ ΠΈΠ· Ρ‚Π°ΠΊΠΈΡ… источников Π½Π΅ соотвСтствуСт Ρ‚Ρ€Π΅Π±ΠΎΠ²Π°Π½ΠΈΡŽ провСряСмости прСдставлСнной ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ, ΠΈ Ρ‚Π°ΠΊΠΈΠ΅ ссылки Π½Π΅ ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚ Π·Π½Π°Ρ‡ΠΈΠΌΠΎΡΡ‚ΡŒ Ρ‚Π΅ΠΌΡ‹ ΡΡ‚Π°Ρ‚ΡŒΠΈ. Π‘Ρ‚Π°Ρ‚ΡŒΡŽ моТно… … ВикипСдия

JIT-компиляция β€” Just in time compilation (JIT, компиляция Β«Π½Π° Π»Π΅Ρ‚ΡƒΒ»), dynamic translation (динамичСская компиляция) тСхнология увСличСния ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹Ρ… систСм, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰ΠΈΡ… Π±Π°ΠΉΡ‚ ΠΊΠΎΠ΄, ΠΏΡƒΡ‚Ρ‘ΠΌ компиляции Π±Π°ΠΉΡ‚ ΠΊΠΎΠ΄Π° Π² ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΉ код… … ВикипСдия

Π‘Ρ€Π°Π²Π½Π΅Π½ΠΈΠ΅ языков программирования β€” Π­Ρ‚Ρƒ ΡΡ‚Π°Ρ‚ΡŒΡŽ слСдуСт Π²ΠΈΠΊΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ. ΠŸΠΎΠΆΠ°Π»ΡƒΠΉΡΡ‚Π°, ΠΎΡ„ΠΎΡ€ΠΌΠΈΡ‚Π΅ Π΅Ρ‘ согласно ΠΏΡ€Π°Π²ΠΈΠ»Π°ΠΌ оформлСния статСй. УсловныС обозначСния … ВикипСдия

ΠŸΠ°ΠΉΡ‚ΠΎΠ½ β€” Python Класс языка: Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹ΠΉ, ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ, ΠΈΠΌΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ, аспСктно ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ Π’ΠΈΠΏ исполнСния: интСрпрСтация Π±Π°ΠΉΡ‚ ΠΊΠΎΠ΄Π°, компиляция Π² MSIL, компиляция Π² Π±Π°ΠΉΡ‚ ΠΊΠΎΠ΄ Java Появился Π²: 1990 Π³ … ВикипСдия

Π“ΠžΠ‘Π’ 19781-90: ΠžΠ±Π΅ΡΠΏΠ΅Ρ‡Π΅Π½ΠΈΠ΅ систСм ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ΅. Π’Π΅Ρ€ΠΌΠΈΠ½Ρ‹ ΠΈ опрСдСлСния β€” ВСрминология Π“ΠžΠ‘Π’ 19781 90: ΠžΠ±Π΅ΡΠΏΠ΅Ρ‡Π΅Π½ΠΈΠ΅ систСм ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ΅. Π’Π΅Ρ€ΠΌΠΈΠ½Ρ‹ ΠΈ опрСдСлСния ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π» Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°: 9. ΠΠ±ΡΠΎΠ»ΡŽΡ‚Π½Π°Ρ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Non relocatable program ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π½Π° машинном языкС, Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ зависит ΠΎΡ‚ СС… … Π‘Π»ΠΎΠ²Π°Ρ€ΡŒ-справочник Ρ‚Π΅Ρ€ΠΌΠΈΠ½ΠΎΠ² Π½ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΠ²Π½ΠΎ-тСхничСской Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ

Паскаль (язык) β€” Pascal Π‘Π΅ΠΌΠ°Π½Ρ‚ΠΈΠΊΠ°: ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π½Ρ‹ΠΉ Π’ΠΈΠΏ исполнСния: компилятор Появился Π²: 1970 Π³. Автор(Ρ‹): Никлаус Π’ΠΈΡ€Ρ‚ Паскаль (Π°Π½Π³Π». Pascal) высокоуровнСвый язык программирования ΠΎΠ±Ρ‰Π΅Π³ΠΎ назначСния. Один ΠΈΠ· Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ извСстных языков программирования, ΡˆΠΈΡ€ΠΎΠΊΠΎβ€¦ … ВикипСдия

Паскаль (язык программирования) β€” Π­Ρ‚Π° ΡΡ‚Π°Ρ‚ΡŒΡ ΠΈΠ»ΠΈ Ρ€Π°Π·Π΄Π΅Π» нуТдаСтся Π² ΠΏΠ΅Ρ€Π΅Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅. Π’ ПаскалС Π½Π΅Ρ‚ ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ, ООП ΠΈ ΠΏΡ€ΠΎΡ‡ΠΈΡ… Π½ΠΎΠ²ΠΎΠΌΠΎΠ΄Π½Ρ‹Ρ… вСяний. ОписаниС Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠΉ Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΠΏΡ€ΠΈΡΡƒΡ‚ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² ΡΡ‚Π°Ρ‚ΡŒΡΡ… ΠΎ соотвСт … ВикипСдия

D (язык программирования) β€” Π£ этого Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π° ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ значСния, см. D. D Π‘Π΅ΠΌΠ°Π½Ρ‚ΠΈΠΊΠ°: ΠΌΡƒΠ»ΡŒΡ‚ΠΈΠΏΠ°Ρ€Π°Π΄ΠΈΠ³ΠΌΠ΅Π½Π½Ρ‹ΠΉ: ΠΈΠΌΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½ΠΎΠ΅, ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ΅, ΠΎΠ±ΠΎΠ±Ρ‰Ρ‘Π½Π½ΠΎΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π’ΠΈΠΏ исполнСния: компилятор Появился Π²: 1999 Автор(Ρ‹) … ВикипСдия

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ‚ΠΎΡ€

ΠšΠΎΠΌΠΏΠΈΠ»ΡΜΡ‚ΠΎΡ€ β€” ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° ΠΈΠ»ΠΈ тСхничСскоС срСдство, Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‰Π΅Π΅ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡ†ΠΈΡŽ. [1] [2] [3]

ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ†ΠΈΡ β€” трансляция ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, составлСнной Π½Π° исходном языкС высокого уровня, Π² ΡΠΊΠ²ΠΈΠ²Π°Π»Π΅Π½Ρ‚Π½ΡƒΡŽ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ Π½Π° Π½ΠΈΠ·ΠΊΠΎΡƒΡ€ΠΎΠ²Π½Π΅Π²ΠΎΠΌ языкС, Π±Π»ΠΈΠ·ΠΊΠΎΠΌ ΠΌΠ°ΡˆΠΈΠ½Π½ΠΎΠΌΡƒ ΠΊΠΎΠ΄Ρƒ (Π°Π±ΡΠΎΠ»ΡŽΡ‚Π½Ρ‹ΠΉ ΠΊΠΎΠ΄, ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹ΠΉ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ, ΠΈΠ½ΠΎΠ³Π΄Π° Π½Π° язык ассСмблСра). [2] [3] [4] Π’Ρ…ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠ΅ΠΉ для компилятора (исходный ΠΊΠΎΠ΄) являСтся описаниС Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° ΠΈΠ»ΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π½Π° ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΌ языкС, Π° Π½Π° Π²Ρ‹Ρ…ΠΎΠ΄Π΅ компилятора β€” эквивалСнтноС описаниС Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° Π½Π° машинно-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΌ языкС (ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹ΠΉ ΠΊΠΎΠ΄). [5]

ΠšΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ β€” ΠΏΡ€ΠΎΠ²ΠΎΠ΄ΠΈΡ‚ΡŒ Ρ‚Ρ€Π°Π½ΡΠ»ΡΡ†ΠΈΡŽ машинной ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ с ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ языка Π½Π° машинно-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ язык. [3]

Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠ°Π½ΠΈΠ΅

Π’ΠΈΠ΄Ρ‹ компиляторов [2]

Π’ΠΈΠ΄Ρ‹ компиляции [2]

Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π° компилятора

ΠŸΡ€ΠΎΡ†Π΅ΡΡ компиляции состоит ΠΈΠ· ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… этапов:

Π’ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹Ρ… рСализациях компиляторов эти этапы ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Ρ€Π°Π·Π΄Π΅Π»Π΅Π½Ρ‹ ΠΈΠ»ΠΈ, Π½Π°ΠΎΠ±ΠΎΡ€ΠΎΡ‚, совмСщСны Π² Ρ‚ΠΎΠΌ ΠΈΠ»ΠΈ ΠΈΠ½ΠΎΠΌ Π²ΠΈΠ΄Π΅.

ГСнСрация ΠΊΠΎΠ΄Π°

ГСнСрация машинного ΠΊΠΎΠ΄Π°

Π‘ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ компиляторов ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ΠΈΡ‚ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ с Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ высокоуровнСвого языка программирования Π² ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ нСпосрСдствСнно Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ процСссором. Как ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, этот ΠΊΠΎΠ΄ Ρ‚Π°ΠΊΠΆΠ΅ ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½ Π½Π° исполнСниС Π² срСдС ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмы, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ прСдоставляСмыС Сю возмоТности (систСмныС Π²Ρ‹Π·ΠΎΠ²Ρ‹, Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ). АрхитСктура (Π½Π°Π±ΠΎΡ€ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎ-Π°ΠΏΠΏΠ°Ρ€Π°Ρ‚Π½Ρ‹Ρ… срСдств), для ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ производится компиляция, называСтся Ρ†Π΅Π»Π΅Π²ΠΎΠΉ машиной.

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ компиляции β€” исполнимый ΠΌΠΎΠ΄ΡƒΠ»ΡŒ β€” ΠΎΠ±Π»Π°Π΄Π°Π΅Ρ‚ максимальной Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΠΉ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒΡŽ, ΠΎΠ΄Π½Π°ΠΊΠΎ привязан ΠΊ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½ΠΎΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмС ΠΈ процСссору (ΠΈ Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π½Π° Π΄Ρ€ΡƒΠ³ΠΈΡ…).

Для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Ρ†Π΅Π»Π΅Π²ΠΎΠΉ ΠΌΠ°ΡˆΠΈΠ½Ρ‹ (IBM, Apple, Sun ΠΈ Ρ‚. Π΄.) ΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмы ΠΈΠ»ΠΈ сСмСйства ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹Ρ… систСм, Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰ΠΈΡ… Π½Π° Ρ†Π΅Π»Π΅Π²ΠΎΠΉ машинС, трСбуСтся написаниС своСго компилятора. Π‘ΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ Ρ‚Π°ΠΊΠΆΠ΅ Ρ‚Π°ΠΊ Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡ‹Π΅ кросс-компиляторы, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰ΠΈΠ΅ Π½Π° ΠΎΠ΄Π½ΠΎΠΉ машинС ΠΈ Π² срСдС ΠΎΠ΄Π½ΠΎΠΉ ОБ Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠ΄, ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Π½Ρ‹ΠΉ для выполнСния Π½Π° Π΄Ρ€ΡƒΠ³ΠΎΠΉ Ρ†Π΅Π»Π΅Π²ΠΎΠΉ машинС ΠΈ/ΠΈΠ»ΠΈ Π² срСдС Π΄Ρ€ΡƒΠ³ΠΎΠΉ ОБ. ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, компиляторы ΠΌΠΎΠ³ΡƒΡ‚ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠ΄ ΠΏΠΎΠ΄ Ρ€Π°Π·Π½Ρ‹Π΅ ΠΌΠΎΠ΄Π΅Π»ΠΈ ΠΈΠ· ΠΎΠ΄Π½ΠΎΠ³ΠΎ сСмСйства процСссоров (ΠΏΡƒΡ‚Ρ‘ΠΌ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ спСцифичных для этих ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ особСнностСй ΠΈΠ»ΠΈ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠΉ Π½Π°Π±ΠΎΡ€ΠΎΠ² инструкций). НапримСр, ΠΊΠΎΠ΄, скомпилированный ΠΏΠΎΠ΄ процСссоры сСмСйства Pentium, ΠΌΠΎΠΆΠ΅Ρ‚ ΡƒΡ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒ особСнности распараллСливания инструкций ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΡ… спСцифичныС Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ β€” MMX, SSE ΠΈ Ρ‚. ΠΏ.

НСкоторыС компиляторы пСрСводят ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ с языка высокого уровня Π½Π΅ прямо Π² ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄, Π° Π½Π° язык ассСмблСра. Π­Ρ‚ΠΎ дСлаСтся для упрощСния части компилятора, ΠΎΡ‚Π²Π΅Ρ‡Π°ΡŽΡ‰Π΅ΠΉ Π·Π° ΠΊΠΎΠ΄ΠΎΠ³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΡŽ, ΠΈ ΠΏΠΎΠ²Ρ‹ΡˆΠ΅Π½ΠΈΡ Π΅Π³ΠΎ пСрСносимости (Π·Π°Π΄Π°Ρ‡Π° ΠΎΠΊΠΎΠ½Ρ‡Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠΉ Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ ΠΊΠΎΠ΄Π° ΠΈ привязки Π΅Π³ΠΎ ΠΊ Ρ‚Ρ€Π΅Π±ΡƒΠ΅ΠΌΠΎΠΉ Ρ†Π΅Π»Π΅Π²ΠΎΠΉ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ΅ пСрСкладываСтся Π½Π° ассСмблСр), Π»ΠΈΠ±ΠΎ для возмоТности контроля ΠΈ исправлСния Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π° компиляции программистом.

ГСнСрация Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄Π°

НСкоторыС Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚ΠΈΡ€ΡƒΠ΅ΠΌΡ‹Ρ… языков высокого уровня (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Perl) ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄ для ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ исполнСния: Π·Π°Ρ‚Ρ€Π°Ρ‚Π½Ρ‹Π΅ этапы синтаксичСского Π°Π½Π°Π»ΠΈΠ·Π° ΠΈ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ тСкста ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π² Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ ΠΎΠ΄ΠΈΠ½ Ρ€Π°Π· ΠΏΡ€ΠΈ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ΅, Π·Π°Ρ‚Π΅ΠΌ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ ΠΊΠΎΠ΄ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΌΠ½ΠΎΠ³ΠΎΠΊΡ€Π°Ρ‚Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π±Π΅Π· ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½Ρ‹Ρ… этапов.

ДинамичСская компиляция

Из-Π·Π° нСобходимости ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ†ΠΈΠΈ Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄ выполняСтся Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΌΠ΅Π΄Π»Π΅Π½Π½Π΅Π΅ машинного ΠΊΠΎΠ΄Π° сравнимой Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ, ΠΎΠ΄Π½Π°ΠΊΠΎ ΠΎΠ½ Π±ΠΎΠ»Π΅Π΅ пСрСносим (Π½Π΅ зависит ΠΎΡ‚ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмы ΠΈ ΠΌΠΎΠ΄Π΅Π»ΠΈ процСссора). Π§Ρ‚ΠΎΠ±Ρ‹ ΡƒΡΠΊΠΎΡ€ΠΈΡ‚ΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄Π°, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ динамичСская компиляция, ΠΊΠΎΠ³Π΄Π° Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Π°Ρ машина транслируСт псСвдокод Π² ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ нСпосрСдствСнно ΠΏΠ΅Ρ€Π΅Π΄ Π΅Π³ΠΎ ΠΏΠ΅Ρ€Π²Ρ‹ΠΌ исполнСниСм (ΠΈ Π² ΠΏΡ€ΠΈ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½Ρ‹Ρ… обращСниях ΠΊ ΠΊΠΎΠ΄Ρƒ исполняСтся ΡƒΠΆΠ΅ скомпилированный Π²Π°Ρ€ΠΈΠ°Π½Ρ‚).

ДСкомпиляция

Π‘ΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ€Π΅ΡˆΠ°ΡŽΡ‚ ΠΎΠ±Ρ€Π°Ρ‚Π½ΡƒΡŽ Π·Π°Π΄Π°Ρ‡Ρƒ β€” ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ с Π½ΠΈΠ·ΠΊΠΎΡƒΡ€ΠΎΠ²Π½Π΅Π²ΠΎΠ³ΠΎ языка Π½Π° высокоуровнСвый. Π­Ρ‚ΠΎΡ‚ процСсс Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ дСкомпиляциСй, Π° Ρ‚Π°ΠΊΠΈΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ β€” дСкомпиляторами. Но ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ компиляция β€” это процСсс с потСрями, Ρ‚ΠΎΡ‡Π½ΠΎ Π²ΠΎΡΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ исходный ΠΊΠΎΠ΄, скаТСм, Π½Π° C++, Π² ΠΎΠ±Ρ‰Π΅ΠΌ случаС Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ. Π‘ΠΎΠ»Π΅Π΅ эффСктивно Π΄Π΅ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΡƒΡŽΡ‚ΡΡ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π² Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄Π°Ρ… β€” Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, сущСствуСт довольно Π½Π°Π΄Ρ‘ΠΆΠ½Ρ‹ΠΉ дСкомпилятор для Flash. Π Π°Π·Π½ΠΎΠ²ΠΈΠ΄Π½ΠΎΡΡ‚ΡŒΡŽ дСкомпилирования являСтся дизассСмблированиС машинного ΠΊΠΎΠ΄Π° Π² ΠΊΠΎΠ΄ Π½Π° языкС ассСмблСра, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΠΎΡ‡Ρ‚ΠΈ всСгда выполняСтся ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ (ΠΏΡ€ΠΈ этом ΡΠ»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡ‚ΡŒ ΡΠ°ΠΌΠΎΠΌΠΎΠ΄ΠΈΡ„ΠΈΡ†ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΉΡΡ ΠΊΠΎΠ΄ ΠΈΠ»ΠΈ ΠΊΠΎΠ΄, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ собствСнно ΠΊΠΎΠ΄ ΠΈ Π΄Π°Π½Π½Ρ‹Π΅ Π½Π΅ Ρ€Π°Π·Π΄Π΅Π»Π΅Π½Ρ‹). Бвязано это с Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΊΠΎΠ΄Π°ΠΌΠΈ ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹Ρ… ΠΊΠΎΠΌΠ°Π½Π΄ ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Π°ΠΌΠΈ ассСмблСра имССтся практичСски Π²Π·Π°ΠΈΠΌΠ½ΠΎ-ΠΎΠ΄Π½ΠΎΠ·Π½Π°Ρ‡Π½ΠΎΠ΅ соотвСтствиС.

РаздСльная компиляция

РаздСльная компиляция (Π°Π½Π³Π». separate compilation ) β€” трансляция частСй ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΏΠΎ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ с ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ объСдинСниСм ΠΈΡ… ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²Ρ‰ΠΈΠΊΠΎΠΌ Π² Π΅Π΄ΠΈΠ½Ρ‹ΠΉ Π·Π°Π³Ρ€ΡƒΠ·ΠΎΡ‡Π½Ρ‹ΠΉ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ. [2]

Π˜ΡΡ‚ΠΎΡ€ΠΈΡ‡Π΅ΡΠΊΠΈ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡ‚ΡŒΡŽ компилятора, ΠΎΡ‚Ρ€Π°ΠΆΡ‘Π½Π½ΠΎΠΉ Π² Π΅Π³ΠΎ Π½Π°Π·Π²Π°Π½ΠΈΠΈ (Π°Π½Π³Π». compile β€” ΡΠΎΠ±ΠΈΡ€Π°Ρ‚ΡŒ вмСстС, ΡΠΎΡΡ‚Π°Π²Π»ΡΡ‚ΡŒ), являлось Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΠ» ΠΊΠ°ΠΊ Ρ‚Ρ€Π°Π½ΡΠ»ΡΡ†ΠΈΡŽ, Ρ‚Π°ΠΊ ΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΊΡƒ, ΠΏΡ€ΠΈ этом компилятор ΠΌΠΎΠ³ ΠΏΠΎΡ€ΠΎΠΆΠ΄Π°Ρ‚ΡŒ сразу Π°Π±ΡΠΎΠ»ΡŽΡ‚Π½Ρ‹ΠΉ ΠΊΠΎΠ΄. Однако ΠΏΠΎΠ·ΠΆΠ΅, с ростом слоТности ΠΈ Ρ€Π°Π·ΠΌΠ΅Ρ€Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ (ΠΈ ΡƒΠ²Π΅Π»ΠΈΡ‡Π΅Π½ΠΈΠ΅ΠΌ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ, Π·Π°Ρ‚Ρ€Π°Ρ‡ΠΈΠ²Π°Π΅ΠΌΠΎΠ³ΠΎ Π½Π° ΠΏΠ΅Ρ€Π΅ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡ†ΠΈΡŽ), Π²ΠΎΠ·Π½ΠΈΠΊΠ»Π° Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ Ρ€Π°Π·Π΄Π΅Π»ΡΡ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π½Π° части ΠΈ Π²Ρ‹Π΄Π΅Π»ΡΡ‚ΡŒ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ нСзависимо Π΄Ρ€ΡƒΠ³ ΠΎΡ‚ Π΄Ρ€ΡƒΠ³Π°. ΠŸΡ€ΠΈ трансляции ΠΊΠ°ΠΆΠ΄ΠΎΠΉ части ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ компилятор ΠΏΠΎΡ€ΠΎΠΆΠ΄Π°Π΅Ρ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹ΠΉ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ, содСрТащий Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ, которая ΠΏΠΎΡ‚ΠΎΠΌ, ΠΏΡ€ΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΊΠ΅ частСй Π² исполнимый ΠΌΠΎΠ΄ΡƒΠ»ΡŒ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для связывания ΠΈ Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ ссылок ΠΌΠ΅ΠΆΠ΄Ρƒ частями.

ПоявлСниС Ρ€Π°Π·Π΄Π΅Π»ΡŒΠ½ΠΎΠΉ компиляции ΠΈ Π²Ρ‹Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΊΠΈ ΠΊΠ°ΠΊ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠΉ стадии ΠΏΡ€ΠΎΠΈΠ·ΠΎΡˆΠ»ΠΎ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΏΠΎΠ·ΠΆΠ΅ создания компиляторов. Π’ связи с этим вмСсто Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π° «компилятор» ΠΈΠ½ΠΎΠ³Π΄Π° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ Ρ‚Π΅Ρ€ΠΌΠΈΠ½ «транслятор» ΠΊΠ°ΠΊ Π΅Π³ΠΎ синоним: Π»ΠΈΠ±ΠΎ Π² старой Π»ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΡƒΡ€Π΅, Π»ΠΈΠ±ΠΎ ΠΊΠΎΠ³Π΄Π° хотят ΠΏΠΎΠ΄Ρ‡Π΅Ρ€ΠΊΠ½ΡƒΡ‚ΡŒ Π΅Π³ΠΎ ΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡ‚ΡŒ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ Π² ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ (ΠΈ Π½Π°ΠΎΠ±ΠΎΡ€ΠΎΡ‚, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ Ρ‚Π΅Ρ€ΠΌΠΈΠ½ «компилятор» для подчёркивания способности ΡΠΎΠ±ΠΈΡ€Π°Ρ‚ΡŒ ΠΈΠ· ΠΌΠ½ΠΎΠ³ΠΈΡ… Ρ„Π°ΠΉΠ»ΠΎΠ² ΠΎΠ΄ΠΈΠ½).

Π˜Π½Ρ‚Π΅Ρ€Π΅ΡΠ½Ρ‹Π΅ Ρ„Π°ΠΊΡ‚Ρ‹

На Π·Π°Ρ€Π΅ развития ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€ΠΎΠ² ΠΏΠ΅Ρ€Π²Ρ‹Π΅ компиляторы (трансляторы) Π½Π°Π·Ρ‹Π²Π°Π»ΠΈ Β«ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΌΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°ΠΌΠΈΒ» [6] (Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Π² Ρ‚ΠΎΡ‚ ΠΌΠΎΠΌΠ΅Π½Ρ‚ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΎΠΉ считался Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄, Π° Β«ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΡƒΡŽΡ‰Π°Ρ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°Β» Π±Ρ‹Π»Π° способна ΠΈΠ· чСловСчСского тСкста ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ Π·Π°ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π­Π’Πœ).

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ компилятор

Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠ΄. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠ΄. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠ΄. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠ΄. Π€ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠ΄

Если Π²Ρ‹ программист, Ρ‚ΠΎ навСрняка ΡΠ»Ρ‹ΡˆΠ°Π»ΠΈ слово β€œΠΊΠΎΠΌΠΏΠΈΠ»ΡΡ‚ΠΎΡ€β€. Но Π·Π½Π°Π΅Ρ‚Π΅ Π»ΠΈ Π²Ρ‹, Ρ‡Ρ‚ΠΎ это Ρ‚Π°ΠΊΠΎΠ΅ Π½Π° самом Π΄Π΅Π»Π΅? Π’Ρ‹ ΠΊΠΎΠ³Π΄Π°-Π½ΠΈΠ±ΡƒΠ΄ΡŒ Π·Π°Π΄ΡƒΠΌΡ‹Π²Π°Π»ΠΈΡΡŒ, Ρ‡Ρ‚ΠΎ происходит ΠΏΠΎΠ΄ ΠΊΠ°ΠΏΠΎΡ‚ΠΎΠΌ, ΠΊΠΎΠ³Π΄Π° Π²Ρ‹ запускаСтС ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ javac (Ссли Ρƒ вас ΠΊΠΎΠ΄ Π½Π° Java)? Π’Ρ‹ ΠΊΠΎΠ³Π΄Π°-Π½ΠΈΠ±ΡƒΠ΄ΡŒ Ρ…ΠΎΡ‚Π΅Π»ΠΈ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ свой собствСнный язык программирования? β€” ΠΈ просто Π·Π°Π²ΠΎΠ΄ΠΈΠ»ΠΈ бСсполСзный Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ GitHub, Π³Π΄Π΅ всС Ρ€Π°Π²Π½ΠΎ Π΅ΡΡ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄ΠΈΠ½ readme.md, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ Π²Ρ‹ Π΄Π°ΠΆΠ΅ Π½Π΅ Π·Π½Π°Π΅Ρ‚Π΅, с Ρ‡Π΅Π³ΠΎ Π½Π°Ρ‡Π°Ρ‚ΡŒ. Π― Π΄ΡƒΠΌΠ°ΡŽ, Ρ‡Ρ‚ΠΎ Π½Π°Ρ‡ΠΈΠ½Π°Ρ‚ΡŒ стоит с этого: ΡƒΠ·Π½Π°Ρ‚ΡŒ большС ΠΎ компиляторС.

Π˜Ρ‚Π°ΠΊ, Π² этой ΡΡ‚Π°Ρ‚ΡŒΠ΅ ΠΌΡ‹ разбСрёмся, Ρ‡Ρ‚ΠΎ прСдставляСт собой компилятор. Если Π²Ρ‹ ΠΎΠΏΡ‹Ρ‚Π½Ρ‹ΠΉ программист, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π·Π½Π°Π΅Ρ‚ ΠΏΡ€ΠΎ компилятор ΠΊΠ°ΠΆΠ΄ΡƒΡŽ ΠΌΠ΅Π»ΠΎΡ‡ΡŒ, Ρ‚ΠΎ ΠΈΠ·Π²ΠΈΠ½ΠΈΡ‚Π΅, эта ΡΡ‚Π°Ρ‚ΡŒΡ Π½Π΅ для вас. Но Ссли Π²Ρ‹ β€” Ρ‚ΠΎΡ‚ самый ΠΏΠ°Ρ€Π΅Π½ΡŒ ΠΈΠ· Π°Π±Π·Π°Ρ†Π° Π²Ρ‹ΡˆΠ΅, Ρ‚ΠΎ Π²ΠΏΠ΅Ρ€Ρ‘Π΄ Π·Π° ΠΌΠ½ΠΎΠΉ, Π² ΠΊΡ€ΠΎΠ»ΠΈΡ‡ΡŒΡŽ Π½ΠΎΡ€Ρƒ. На протяТСнии ΡΡ‚Π°Ρ‚ΡŒΠΈ я Π±ΡƒΠ΄Ρƒ ΠΎΠ±ΡΡƒΠΆΠ΄Π°Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ ΠΏΠΎΠ΄Ρ‚Π΅ΠΌΡ‹:

ВступлСниС

ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ‚ΠΎΡ€ β€” это Π½Π΅ Ρ‡Ρ‚ΠΎ ΠΈΠ½ΠΎΠ΅, ΠΊΠ°ΠΊ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Ρ‡ΠΈΠΊ исходного ΠΊΠΎΠ΄Π°.

Π—Π°Π΄Π°Ρ‡Π° компилятора β€” пСрСвСсти исходный ΠΊΠΎΠ΄ с ΠΎΠ΄Π½ΠΎΠ³ΠΎ языка Π½Π° Π΄Ρ€ΡƒΠ³ΠΎΠΉ. Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Ссли Π²Ρ‹ скормитС компилятору исходный ΠΊΠΎΠ΄ Java, Ρ‚ΠΎ смоТСтС ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ исходный ΠΊΠΎΠ΄ Python (Π½Π΅ самый Π»ΡƒΡ‡ΡˆΠΈΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€, просто для понимания сути. На самом Π΄Π΅Π»Π΅ Π²Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚Π΅ Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄ Java, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ Π½Π° JVM). Для выполнСния этого процСсса Ρƒ компилятора Π΅ΡΡ‚ΡŒ нСсколько взаимосвязанных ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ².

Π’ΠΈΠΏΡ‹ компиляторов

ΠœΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΊΠ»Π°ΡΡΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ компиляторы ΠΏΠΎ-Ρ€Π°Π·Π½ΠΎΠΌΡƒ. Π’ этой ΡΡ‚Π°Ρ‚ΡŒΠ΅ я расскаТу ΠΎ Π΄Π²ΡƒΡ… способах классификации компиляторов, ΠΎΠ΄Π½Π°ΠΊΠΎ особСнно ΡƒΠ³Π»ΡƒΠ±Π»ΡΡ‚ΡŒΡΡ Π² это Π½Π΅ Π±ΡƒΠ΄Ρƒ.

ΠšΠ»Π°ΡΡΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΡ компиляторов Π² соотвСтствии с этапами компиляции

Π—Π΄Π΅ΡΡŒ ΠΌΡ‹ рассмотрим количСство этапов, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΡ€ΠΎΡ…ΠΎΠ΄ΠΈΡ‚ компилятор. НСкоторыС компиляторы нСпосрСдствСнно ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΡŽΡ‚ высокоуровнСвый исходный ΠΊΠΎΠ΄ Π² ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄, Π° Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ β€” сначала ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΡŽΡ‚ высокоуровнСвый исходный ΠΊΠΎΠ΄ Π² ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½ΠΎΠ΅ прСдставлСниС ΠΏΠ΅Ρ€Π΅Π΄ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ Π² ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄.

Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Π² соотвСтствии с этой классификациСй ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ‹Π΄Π΅Π»ΠΈΡ‚ΡŒ Ρ‚Ρ€ΠΈ Ρ‚ΠΈΠΏΠ° компиляторов:

Если Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΡƒΠ·Π½Π°Ρ‚ΡŒ большС ΠΎΠ± этой классификации компиляторов, посмотритС сюда.

ΠšΠ»Π°ΡΡΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΡ компиляторов Π² соотвСтствии с исходным ΠΊΠΎΠ΄ΠΎΠΌ ΠΈ Ρ†Π΅Π»Π΅Π²Ρ‹ΠΌ ΠΊΠΎΠ΄ΠΎΠΌ

Для прСобразования исходного ΠΊΠΎΠ΄Π° Π² Ρ†Π΅Π»Π΅Π²ΠΎΠΉ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ Ρ€Π°Π·Π½Ρ‹Π΅ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Ρ‹. НСкоторыС компиляторы ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΡŽΡ‚ ΠΊΠΎΠ΄ Π½Π° высокоуровнСвом языкС Π² ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΉ. НСкоторыС компиляторы ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΡŽΡ‚ с ΠΎΠ΄Π½ΠΎΠ³ΠΎ языка высокого уровня Π½Π° Π΄Ρ€ΡƒΠ³ΠΎΠΉ язык высокого уровня. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, здСсь Π²Ρ‹Π΄Π΅Π»ΡΡŽΡ‚ΡΡ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ Ρ‚ΠΈΠΏΡ‹:

АрхитСктура компилятора

Когда компилятор ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΡƒΠ΅Ρ‚ (ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ΠΈΡ‚) исходный ΠΊΠΎΠ΄, ΠΎΠ½ ΠΏΡ€ΠΎΡ…ΠΎΠ΄ΠΈΡ‚ нСсколько этапов:

ΠœΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Ρ€Π°Π·Π΄Π΅Π»ΠΈΡ‚ΡŒ всС эти этапы Π½Π° Π΄Π²Π΅ Ρ„Π°Π·Ρ‹, ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ ΠΊΠ°ΠΊ Ρ„Ρ€ΠΎΠ½Ρ‚Π΅Π½Π΄ ΠΈ бэкСнд. Π­Ρ‚ΠΈ Ρ„Π°Π·Ρ‹ Π²ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‚ Π² сСбя ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ этапы:

Π€Ρ€ΠΎΠ½Ρ‚Π΅Π½Π΄

БэкСнд

Π’ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ Ρ€Π°Π·Π΄Π΅Π»Π΅ я ΠΊΡ€Π°Ρ‚ΠΊΠΎ ΠΎΠΏΠΈΡˆΡƒ, Ρ‡Ρ‚ΠΎ происходит Π½Π° ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Ρ„Π°Π·Π΅. Если Π²Ρ‹ Π½Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΡƒΠ΅Ρ‚Π΅ компиляторы, Ρ‚ΠΎ Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎ ΠΈΠΌΠ΅Ρ‚ΡŒ ΠΎ Π½ΠΈΡ… лишь повСрхностноС прСдставлСниС, Π½ΠΎ Ссли Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ компилятор сами, Ρ‚ΠΎ Π²Π°ΠΌ стоит ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ ΠΈΠ·ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΈΡ… Ρ€Π°Π±ΠΎΡ‚Ρƒ.

ЛСксичСский Π°Π½Π°Π»ΠΈΠ·

Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π²Ρ‹ Π·Π½Π°Π΅Ρ‚Π΅, Ρ‡Ρ‚ΠΎ компилятор β€” это ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°, которая ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠ΅Ρ‚ исходный ΠΊΠΎΠ΄ Π² Π΄Ρ€ΡƒΠ³ΠΎΠΉ исходный ΠΊΠΎΠ΄. ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ‚ΠΎΡ€ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ исходный ΠΊΠΎΠ΄ Π² Π²ΠΈΠ΄Π΅ Ρ„Π°ΠΉΠ»Π°. Π­Ρ‚ΠΎΡ‚ Ρ„Π°ΠΉΠ» содСрТит ΠΊΠΎΠ΄ Π² тСкстовом Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅, Π½ΠΎ компилятор Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с этим тСкстом. НСобходимо ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Ρ‚ΡŒ этот тСкст Π² Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π΄Ρ€ΡƒΠ³ΠΎΠΉ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚, понятный компилятору. Для этого компилятор Ρ€Π°Π·Π±ΠΈΠ²Π°Π΅Ρ‚ тСкст ΠΏΠΎ ΠΌΠ°Ρ€ΠΊΠ΅Ρ€Π°ΠΌ. ΠŸΠΎΠΌΠ½ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎ эти ΠΌΠ°Ρ€ΠΊΠ΅Ρ€Ρ‹ Π·Π°Ρ€Π°Π½Π΅Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Ρ‹ Π² Π³Ρ€Π°ΠΌΠΌΠ°Ρ‚ΠΈΠΊΠ΅ языка. ΠœΠ°Ρ€ΠΊΠ΅Ρ€Ρ‹ пригодятся Π½Π° ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… этапах процСсса компиляции:

Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠ΄. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠ΄. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠ΄. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠ΄. Π€ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠ΄

KEYWORD, BRACKET, IDENTIFIER, OPERATOR, NUMBER Π½Π° ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΉ Π²Ρ‹ΡˆΠ΅ Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΠ΅ β€” это ΠΈ Π΅ΡΡ‚ΡŒ ΠΌΠ°Ρ€ΠΊΠ΅Ρ€Ρ‹. ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ‚ΠΎΡ€ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ лСксичСский Π°Π½Π°Π»ΠΈΠ· для ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ ΠΌΠ°Ρ€ΠΊΠ΅Ρ€ΠΎΠ², ΠΈ Ссли ΠΎΠ½ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ ΠΌΠ°Ρ€ΠΊΠ΅Ρ€, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π½Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ Π·Π°Ρ€Π°Π½Π΅Π΅ Π² Π³Ρ€Π°ΠΌΠΌΠ°Ρ‚ΠΈΠΊΠ΅ языка, Ρ‚ΠΎ это Π±ΡƒΠ΄Π΅Ρ‚ ΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒΡΡ ошибкой.

БинтаксичСский Π°Π½Π°Π»ΠΈΠ· (парсинг)

На этом этапС компилятор провСряСт, располоТСны Π»ΠΈ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ Ρ€Π°Π½Π΅Π΅ ΠΌΠ°Ρ€ΠΊΠ΅Ρ€Ρ‹ Π² ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠΌ порядкС. Для этого Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΌ языкС Π΅ΡΡ‚ΡŒ Π½Π°Π±ΠΎΡ€ ΠΏΡ€Π°Π²ΠΈΠ», Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡ‹ΠΉ Π³Ρ€Π°ΠΌΠΌΠ°Ρ‚ΠΈΠΊΠΎΠΉ. Π’ΠΎ-ΠΏΠ΅Ρ€Π²Ρ‹Ρ…, компилятор пытаСтся ΠΏΠΎΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ структуру Π΄Π°Π½Π½Ρ‹Ρ… β€” Π΄Π΅Ρ€Π΅Π²ΠΎ синтаксичСского Π°Π½Π°Π»ΠΈΠ·Π°. Если компилятор смог ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ ΠΏΠΎΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ Π΄Π΅Ρ€Π΅Π²ΠΎ синтаксичСского Π°Π½Π°Π»ΠΈΠ·Π° Π² соотвСтствии с Π·Π°Ρ€Π°Π½Π΅Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΌΠΈ ΠΏΡ€Π°Π²ΠΈΠ»Π°ΠΌΠΈ Π³Ρ€Π°ΠΌΠΌΠ°Ρ‚ΠΈΠΊΠΈ, Ρ‚ΠΎ Π² исходном ΠΊΠΎΠ΄Π΅ Π½Π΅Ρ‚ синтаксичСских ошибок. Π’ ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΎΠΌ случаС Π²ΠΎΠ·Π½ΠΈΠΊΠ°ΡŽΡ‚ ошибки ΠΈ компилятор ΠΈΡ… ΠΏΠΎΠΊΠ°ΠΆΠ΅Ρ‚.

Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠ΄. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠ΄. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠ΄. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠ΄. Π€ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠ΄

Π—Π΄Π΅ΡΡŒ ΠΌΡ‹ сначала ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠ»ΠΈ Π³Ρ€Π°ΠΌΠΌΠ°Ρ‚ΠΈΠΊΡƒ. Π—Π°Ρ‚Π΅ΠΌ компилятор пытаСтся ΠΏΠΎΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ Π΄Π΅Ρ€Π΅Π²ΠΎ синтаксичСского Π°Π½Π°Π»ΠΈΠ·Π° для исходного ΠΊΠΎΠ΄Π° 2 + 3 * 3. Π’ этом случаС компилятору удаСтся ΠΏΠΎΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ Π΄Π΅Ρ€Π΅Π²ΠΎ синтаксичСского Π°Π½Π°Π»ΠΈΠ·Π° (с ΠΏΡ€Π°Π²ΠΎΠΉ стороны) Π² соотвСтствии с Π³Ρ€Π°ΠΌΠΌΠ°Ρ‚ΠΈΠΊΠΎΠΉ, ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ Π² этой ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ Π½Π΅Ρ‚ синтаксичСских ошибок.

БСмантичСский Π°Π½Π°Π»ΠΈΠ·

ΠŸΡ€ΠΎΡΡ‚ΠΎ ΠΏΠΎΡ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π½Π΅ содСрТит синтаксичСских ошибок, ΠΊΠΎΠ΄ Π΅Ρ‰Π΅ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒΡΡ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹ΠΌ. Рассмотрим ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π½ΠΈΠΆΠ΅.

I love compilers

Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠ΄. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠ΄. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠ΄. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠ΄. Π€ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠ΄

ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ‚ΠΎΡ€ ΠΏΡ€ΠΈ Π°Π½Π°Π»ΠΈΠ·Π΅ синтаксиса ΠΌΠΎΠΆΠ΅Ρ‚ Ρ€Π΅ΡˆΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π² этом ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠΈ Π½Π΅Ρ‚ синтаксичСских ошибок, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ΠΌΠ°Ρ€ΠΊΠ΅Ρ€Ρ‹ (слова) располоТСны Π² ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠΌ порядкС.

Π’Π΅ΠΏΠ΅Ρ€ΡŒ рассмотрим ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π½ΠΈΠΆΠ΅.

I eat compilers

Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠ΄. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠ΄. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠ΄. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠ΄. Π€ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠ΄

ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Ρ‡Ρ‚ΠΎ eat β€” ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹ΠΉ ΠΌΠ°Ρ€ΠΊΠ΅Ρ€ Π² соотвСтствии с Π³Ρ€Π°ΠΌΠΌΠ°Ρ‚ΠΈΠΊΠΎΠΉ. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ признаСтся ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹ΠΌ Π½Π° этапС лСксичСского ΠΈ синтаксичСского Π°Π½Π°Π»ΠΈΠ·Π°, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ слова располоТСны Π² ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠΌ порядкС. Но Π² этом ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠΈ Π½Π΅Ρ‚ Π½ΠΈΠΊΠ°ΠΊΠΎΠ³ΠΎ смысла β€” Π½ΠΈΠΊΡ‚ΠΎ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π΅ΡΡ‚ΡŒ компиляторы.

Π˜Ρ‚Π°ΠΊ, согласно этапу сСмантичСского Π°Π½Π°Π»ΠΈΠ·Π°, эта ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° содСрТит ΠΎΡˆΠΈΠ±ΠΊΡƒ. ΠœΡ‹ Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌ эту Ρ€Π°Π·Π½ΠΎΠ²ΠΈΠ΄Π½ΠΎΡΡ‚ΡŒ ошибок сСмантичСскими ошибками. ВзглянитС Π½Π° этот простой Java-ΠΊΠΎΠ΄:

Π—Π΄Π΅ΡΡŒ Π½Π΅Ρ‚ синтаксичСских ошибок. ВсС ΠΌΠ°Ρ€ΠΊΠ΅Ρ€Ρ‹ упорядочСны ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ. Но Π½Π° пятой строкС int total = c + d β€” Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ Π½ΠΈΠΊΠ°ΠΊΠΎΠ³ΠΎ значСния, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρ‹ c ΠΈ d Π½Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Ρ‹. Π­Ρ‚ΠΎ ΠΈ Π΅ΡΡ‚ΡŒ сСмантичСская ошибка.

ГСнСрация ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°

Π›ΡŽΠ±ΠΎΠΉ компилятор ΠΌΠΎΠΆΠ΅Ρ‚ нСпосрСдствСнно Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ ΠΈΠ· исходного. Π’Π°ΠΊ Π·Π°Ρ‡Π΅ΠΌ ΠΆΠ΅ Ρ‚ΠΎΠ³Π΄Π° Π½ΡƒΠΆΠ½Π° Ρ„Π°Π·Π° Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°?

Π‘ΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹ машин. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ зависит ΠΎΡ‚ систСмы, Π° высокоуровнСвый исходный ΠΊΠΎΠ΄ β€” Π½Π΅Ρ‚. Если компилятор нСпосрСдствСнно Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ ΠΈΠ· исходного ΠΊΠΎΠ΄Π°, Ρ‚ΠΎ каТдая машина нуТдаСтся Π² ΠΏΠΎΠ»Π½ΠΎΠΉ компиляции ΠΎΡ‚ Ρ„Ρ€ΠΎΠ½Ρ‚Π° ΠΊ бэку. Но ΠΊΠΎΠ³Π΄Π° компилятор Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ (ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½ΠΎΠ΅ прСдставлСниС), ΠΎΠ½ ΡƒΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΌΠ°ΡˆΠΈΠ½Ρ‹ с Π΅Π³ΠΎ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ, Π±Π΅Π· повторСния лСксичСского Π°Π½Π°Π»ΠΈΠ·Π° ΠΈ парсинга для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΌΠ°ΡˆΠΈΠ½Ρ‹.

Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠ΄. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠ΄. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠ΄. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠ΄. Π€ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠ΄

БущСствуСт Π΄Π²Π° основных Ρ‚ΠΈΠΏΠ° ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½Ρ‹Ρ… прСдставлСний:

БущСствуСт Ρ‚Π°ΠΊΠΆΠ΅ нСсколько способов прСдставлСния ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½ΠΎΠ³ΠΎ прСдставлСния.

ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡ ΠΊΠΎΠ΄Π°

Π­Ρ‚Π°ΠΏ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΊΠΎΠ΄Π° выполняСт Π΄Π²Π΅ основныС Π·Π°Π΄Π°Ρ‡ΠΈ: минимизация Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ ΠΈΠ»ΠΈ минимизация рСсурсов. Π§Ρ‚ΠΎ всС это Π·Π½Π°Ρ‡ΠΈΡ‚? Когда ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ ΠΏΠΈΡˆΠ΅Ρ‚ ΠΊΠΎΠ΄, Π½Π΅Ρ‚ Π½ΠΈΡ‡Π΅Π³ΠΎ, ΠΊΡ€ΠΎΠΌΠ΅ инструкций. Когда процСссор выполняСт эти инструкции, Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‚ врСмя ΠΈ рСсурсы памяти. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Ρ†Π΅Π»ΡŒΡŽ этапа ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΊΠΎΠ΄Π° становится сокращСниС Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ выполнСния ΠΈ рСсурсов, потрСбляСмых ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΎΠΉ. ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ‚ΠΎΡ€ ΠΊΠΎΠ΄Π° всСгда слСдуСт Ρ‚Ρ€Π΅ΠΌ ΠΏΡ€Π°Π²ΠΈΠ»Π°ΠΌ:

БущСствуСт Π΄Π²Π° способа ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΊΠΎΠ΄Π°:

Машинно-нСзависимая оптимизация ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½ΠΎΠ΅ прСдставлСниС ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π²Ρ…ΠΎΠ΄Π½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ Π½Π΅ заботится Π½ΠΈ ΠΎ ΠΊΠ°ΠΊΠΈΡ… рСгистрах процСссора ΠΈ ячСйках памяти. Она происходит послС Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°.

ΠŸΡ€ΠΈ машинно-зависимой ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΊΠΎΠ΄Π° компилятор заботится ΠΎ рСгистрах процСссора, располоТСниях памяти ΠΈ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π΅ ΠΌΠ°ΡˆΠΈΠ½Ρ‹. Она происходит послС Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ машинного ΠΊΠΎΠ΄Π°.

ГСнСрация ΠΊΠΎΠ΄Π°

ГСнСрация ΠΊΠΎΠ΄Π° β€” это послСдний этап процСсса компиляции. Π”Π°, послС ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚ΡŒ машинно-зависимая оптимизация ΠΊΠΎΠ΄Π°. Но ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Ρ‚ΡŒ ΠΈ Ρ‚ΠΎ, ΠΈ Π΄Ρ€ΡƒΠ³ΠΎΠ΅ вмСстС ΠΊΠ°ΠΊ Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΡŽ ΠΊΠΎΠ΄Π°. На этом этапС компилятор Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ машинно-зависимый ΠΊΠΎΠ΄. Π“Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€ ΠΊΠΎΠ΄Π° Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΈΠΌΠ΅Ρ‚ΡŒ прСдставлСниС ΠΎ срСдС выполнСния Ρ†Π΅Π»Π΅Π²ΠΎΠΉ ΠΌΠ°ΡˆΠΈΠ½Ρ‹ ΠΈ Π΅Π΅ Π½Π°Π±ΠΎΡ€Π΅ ΠΊΠΎΠΌΠ°Π½Π΄.

На этом этапС компилятор выполняСт нСсколько основных Π·Π°Π΄Π°Ρ‡:

Π˜Ρ‚ΠΎΠ³ΠΎΠ²Ρ‹ΠΉ ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄, сгСнСрированный Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠΌ ΠΊΠΎΠ΄Π°, ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ Π½Π° Ρ†Π΅Π»Π΅Π²ΠΎΠΉ машинС. ИмСнно Ρ‚Π°ΠΊ высокоуровнСвый исходный ΠΊΠΎΠ΄, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΡ‹ пишСм Π² нашСм любимом Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€Π΅ ΠΊΠΎΠ΄Π°, прСобразуСтся Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ Π½Π° любой Ρ†Π΅Π»Π΅Π²ΠΎΠΉ машинС.

Π’ этой ΡΡ‚Π°Ρ‚ΡŒΠ΅ я ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡŽ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΊΡ€Π°Ρ‚ΠΊΠΎΠ΅ описаниС. Если Π²Π°ΠΌ хочСтся ΡƒΠ³Π»ΡƒΠ±ΠΈΡ‚ΡŒΡΡ Π² эти ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΠΈ, ΠΊ вашим услугам ΠΌΠΈΠ»Π»ΠΈΠΎΠ½Ρ‹ рСсурсов Π² ΠΈΠ½Ρ‚Π΅Ρ€Π½Π΅Ρ‚Π΅.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

Π£Ρ€ΠΎΠΊ β„–5. ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ†ΠΈΡ вашСй ΠΏΠ΅Ρ€Π²ΠΎΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹

ΠŸΠ΅Ρ€Π΅Π΄ написаниСм нашСй ΠΏΠ΅Ρ€Π²ΠΎΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΌΡ‹ Π΅Ρ‰Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΊΠΎΠ΅-Ρ‡Ρ‚ΠΎ ΡƒΠ·Π½Π°Ρ‚ΡŒ.

ВСория

Π’ΠΎ-Π²Ρ‚ΠΎΡ€Ρ‹Ρ…, Π΅ΡΡ‚ΡŒ Ρ€Π°Π·Π½Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ². ΠŸΡ€ΠΈ создании Π½ΠΎΠ²ΠΎΠ³ΠΎ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°, Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ Π΅Π³ΠΎ Ρ‚ΠΈΠΏ. ВсС ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ Π½Π° Π΄Π°Π½Π½Ρ‹Ρ… ΡƒΡ€ΠΎΠΊΠ°Ρ…, Π±ΡƒΠ΄ΡƒΡ‚ консольного Ρ‚ΠΈΠΏΠ°. Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΎΠ½ΠΈ Π·Π°ΠΏΡƒΡΠΊΠ°ΡŽΡ‚ΡΡ Π² консоли (Π°Π½Π°Π»ΠΎΠ³ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки). По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ, ΠΊΠΎΠ½ΡΠΎΠ»ΡŒΠ½Ρ‹Π΅ прилоТСния Π½Π΅ ΠΈΠΌΠ΅ΡŽΡ‚ графичСского интСрфСйса ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ β€” GUI (сокр. ΠΎΡ‚ Β«Graphical User InterfaceΒ») ΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΡƒΡŽΡ‚ΡΡ Π² Π°Π²Ρ‚ΠΎΠ½ΠΎΠΌΠ½Ρ‹Π΅ исполняСмыС Ρ„Π°ΠΉΠ»Ρ‹. Π­Ρ‚ΠΎ ΠΈΠ΄Π΅Π°Π»ΡŒΠ½Ρ‹ΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ для изучСния языка C++, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΎΠ½ сводит всю ΡΠ»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΊ ΠΌΠΈΠ½ΠΈΠΌΡƒΠΌΡƒ.

Π’-Ρ‚Ρ€Π΅Ρ‚ΡŒΠΈΡ…, ΠΏΡ€ΠΈ создании Π½ΠΎΠ²ΠΎΠ³ΠΎ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ IDE автоматичСски добавят ваш ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ Π² Ρ€Π°Π±ΠΎΡ‡Π΅Π΅ пространство. Π Π°Π±ΠΎΡ‡Π΅Π΅ пространство β€” это своСобразный ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ ΠΎΠ΄ΠΈΠ½ ΠΈΠ»ΠΈ нСсколько связанных ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ². НСсмотря Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ нСсколько ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ² Π² ΠΎΠ΄Π½ΠΎ Ρ€Π°Π±ΠΎΡ‡Π΅Π΅ пространство, всС ΠΆΠ΅ рСкомСндуСтся ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠ΅ Ρ€Π°Π±ΠΎΡ‡Π΅Π΅ пространство для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. Π­Ρ‚ΠΎ Π½Π°ΠΌΠ½ΠΎΠ³ΠΎ ΡƒΠΏΡ€ΠΎΡ‰Π°Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Ρƒ для Π½ΠΎΠ²ΠΈΡ‡ΠΊΠΎΠ².

Π’Ρ€Π°Π΄ΠΈΡ†ΠΈΠΎΠ½Π½ΠΎ, ΠΏΠ΅Ρ€Π²ΠΎΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΎΠΉ Π½Π° Π½ΠΎΠ²ΠΎΠΌ языкС программирования являСтся всСми извСстная ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Β«Hello, world!Β». ΠœΡ‹ Π½Π΅ Π±ΡƒΠ΄Π΅ΠΌ Π½Π°Ρ€ΡƒΡˆΠ°Ρ‚ΡŒ Ρ‚Ρ€Π°Π΄ΠΈΡ†ΠΈΠΈ 🙂

ΠŸΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡΠΌ Visual Studio

Для создания Π½ΠΎΠ²ΠΎΠ³ΠΎ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° Π² Visual Studio 2019, Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ сначала Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ эту IDE, Π·Π°Ρ‚Π΅ΠΌ Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ «Π€Π°ΠΉΠ»» > «Π‘ΠΎΠ·Π΄Π°Ρ‚ΡŒ» > «ΠŸΡ€ΠΎΠ΅ΠΊΡ‚» :

Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠ΄. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠ΄. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠ΄. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠ΄. Π€ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠ΄

Π”Π°Π»ΡŒΡˆΠ΅ появится Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²ΠΎΠ΅ ΠΎΠΊΠ½ΠΎ, Π³Π΄Π΅ Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ «ΠšΠΎΠ½ΡΠΎΠ»ΡŒΠ½ΠΎΠ΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Windows» ΠΈΠ· Π²ΠΊΠ»Π°Π΄ΠΊΠΈ «Visual C++» ΠΈ Π½Π°ΠΆΠ°Ρ‚ΡŒ «ΠžΠš» :

Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠ΄. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠ΄. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠ΄. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠ΄. Π€ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠ΄

Π’Π°ΠΊΠΆΠ΅ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ имя ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° (любоС) ΠΈ Π΅Π³ΠΎ располоТСниС (Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΡŽ Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ ΠΌΠ΅Π½ΡΡ‚ΡŒ) Π² ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… полях.

Π’ тСкстовом Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€Π΅ Π²Ρ‹ ΡƒΠ²ΠΈΠ΄ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎ ΡƒΠΆΠ΅ Π΅ΡΡ‚ΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ тСкст ΠΈ ΠΊΠΎΠ΄ β€” ΡƒΠ΄Π°Π»ΠΈΡ‚Π΅ Π΅Π³ΠΎ, Π° Π·Π°Ρ‚Π΅ΠΌ Π½Π°ΠΏΠ΅Ρ‡Π°Ρ‚Π°ΠΉΡ‚Π΅ ΠΈΠ»ΠΈ скопируйтС ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΊΠΎΠ΄:

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ†ΠΈΡ Python

Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠ΄. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠ΄. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠ΄. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠ΄. Π€ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠ΄

ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Π²Ρ‹ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π»ΠΈ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΈΠ»ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ Π½Π° Python ΠΈ ΡƒΠΆΠ΅ Π³ΠΎΡ‚ΠΎΠ²ΠΈΡ‚Π΅ΡΡŒ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ Π΅Π³ΠΎ / Π΅Ρ‘ Π·Π°ΠΊΠ°Π·Ρ‡ΠΈΠΊΡƒ. И Π² этот ΠΌΠΎΠΌΠ΅Π½Ρ‚ Π²ΠΎΠ·Π½ΠΈΠΊΠ°ΡŽΡ‚ вопросы, ΠΎ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΌΠ½ΠΎΠ³ΠΈΠ΅ Π΄Π°ΠΆΠ΅ Π½Π΅ Π·Π°Π΄ΡƒΠΌΡ‹Π²Π°ΡŽΡ‚ΡΡ.

Π’ΠΎ-ΠΏΠ΅Ρ€Π²Ρ‹Ρ…, Ρ‚Π°ΠΊ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ, Ρ‡Ρ‚ΠΎ Π²Ρ‹ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π»ΠΈ супСр ΠΊΡ€ΡƒΡ‚ΠΎΠΉ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Π½ΠΈ Ρƒ ΠΊΠΎΠ³ΠΎ Π½Π΅Ρ‚, ΠΈ ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ Π΅Π³ΠΎ хочСтся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΈΠ·Π±Ρ€Π°Π½Π½Ρ‹ΠΌ.

И, Π½Π°ΠΊΠΎΠ½Π΅Ρ†, хочСтся, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΠ΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Ρ€Π°Π±ΠΎΡ‚Π°Π»ΠΎ быстрСС, Ρ‡Π΅ΠΌ Π² срСдС Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ.

И Π²ΠΎΡ‚ Ρ‚ΡƒΡ‚ настало врСмя ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Python-ΠΊΠΎΠ΄. МСня Π·ΠΎΠ²ΡƒΡ‚ Руслан, я ΡΡ‚Π°Ρ€ΡˆΠΈΠΉ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ Β«Π¦ΠΈΡ„Ρ€ΠΎΠ²ΠΎΠ΅ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅Β». БСгодня я расскаТу, ΠΊΠ°ΠΊ Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ Ρ‚ΠΎΡ‚ самый компилятор ΠΈΠ· мноТСства доступных.

AOT/JIT

ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ†ΠΈΡ – это сборка ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, Π²ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‰Π°Ρ: Ρ‚Ρ€Π°Π½ΡΠ»ΡΡ†ΠΈΡŽ всСх ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, написанных Π½Π° языкС программирования высокого уровня, Π² эквивалСнтныС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹Π΅ ΠΌΠΎΠ΄ΡƒΠ»ΠΈ Π½Π° Π½ΠΈΠ·ΠΊΠΎΡƒΡ€ΠΎΠ²Π½Π΅Π²ΠΎΠΌ языкС, Π±Π»ΠΈΠ·ΠΊΠΎΠΌ ΠΊ ΠΌΠ°ΡˆΠΈΠ½Π½ΠΎΠΌΡƒ ΠΊΠΎΠ΄Ρƒ, ΠΈΠ»ΠΈ Π½Π° машинном языкС ΠΈ сборку исполняСмой ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. БущСствуСт Π΄Π²Π° Π²ΠΈΠ΄Π° компиляции:

AOT-компиляция (ahead-of-time) – компиляция ΠΏΠ΅Ρ€Π΅Π΄ исполнСниСм ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. Π’.Π΅. ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° компилируСтся ΠΎΠ΄ΠΈΠ½ Ρ€Π°Π·, Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ компиляции получаСтся исполняСмый Ρ„Π°ΠΉΠ».

Π‘Π΅Π½Ρ‡ΠΌΠ°Ρ€ΠΊ

Π’Π°ΠΊ ΠΊΠ°ΠΊ ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ· Ρ†Π΅Π»Π΅ΠΉ являСтся ускорСниС, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΎΡ†Π΅Π½ΠΈΡ‚ΡŒ, насколько быстро Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ скомпилированный ΠΊΠΎΠ΄. Π’ качСствС Π±Π΅Π½Ρ‡ΠΌΠ°Ρ€ΠΊΠ° Π±ΡƒΠ΄Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ pyperfomance. К соТалСнию, pyperfomance Π½Π΅ подошСл для Cython ΠΈ Pythran, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ Π½Π΅ позволяСт Π²ΠΈΠ·ΡƒΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ всС возмоТности языка. УскорСния для Cython Π±Π΅Π· ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ ΠΊΠΎΠ΄Π° ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Π½Π΅ ΡƒΠ΄Π°Π»ΠΎΡΡŒ, Π° Pythran Π½Π΅ ΡƒΠΌΠ΅Π΅Ρ‚ Π² ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠ΅ классы. Для Π½ΠΈΡ… Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡΡ вычислСниСм числа ΠΏΠΈ:

ЭкспСримСнты Π±ΡƒΠ΄Π΅ΠΌ ΠΏΡ€ΠΎΠ²ΠΎΠ΄ΠΈΡ‚ΡŒ Π½Π° процСссорС Intel Core i7 10510U. На CPython 3.9.7 врСмя вычислСния числа ΠΏΠΈ Π΄ΠΎ 100.000.000 Π·Π½Π°ΠΊΠ° заняло 5.82 сСкунды.

AOT-компиляция Python

PyInstaller

PyInstaller ΡƒΠΏΠ°ΠΊΠΎΠ²Ρ‹Π²Π°Π΅Ρ‚ прилоТСния Python Π² Π°Π²Ρ‚ΠΎΠ½ΠΎΠΌΠ½Ρ‹Π΅ исполняСмыС Ρ„Π°ΠΉΠ»Ρ‹ Π² Windows, GNU / Linux, Mac OS X, FreeBSD, Solaris ΠΈ AIX.

УстанавливаСтся Ρ‡Π΅Ρ€Π΅Π· pip:

pip install pyinstaller

ПослС установки для создания исполняСмого Ρ„Π°ΠΉΠ»Π° достаточно Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ:

Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ Π±ΡƒΠ΄Π΅Ρ‚ создано:

build/ – дирСктория с ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½Ρ‹ΠΌΠΈ для сборки исполняСмого Ρ„Π°ΠΉΠ»Π°;

dist/ – дирСктория, содСрТащая всС зависимости ΠΈ исполняСмый Ρ„Π°ΠΉΠ».

Π‘Π±ΠΎΡ€ΠΊΡƒ прилоТСния ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки:

—name – ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΈΠΌΠ΅Π½ΠΈ исполняСмого Ρ„Π°ΠΉΠ»Π° (ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ, Ρ‚Π°ΠΊΠΎΠ΅ ΠΆΠ΅, ΠΊΠ°ΠΊ Ρƒ сцСнария);

—onefile – созданиС Ρ‚ΠΎΠ»ΡŒΠΊΠΎ исполняСмого Ρ„Π°ΠΉΠ»Π° (ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ, ΠΏΠ°ΠΏΠΊΠ° с зависимостями ΠΈ исполняСмый Ρ„Π°ΠΉΠ»);

—hidden-import – пСрСчислСниС ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ PyInstaller Π½Π΅ смог ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΡ‚ΡŒ автоматичСски;

—add-data – Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ Π² сборку Ρ„Π°ΠΉΠ»ΠΎΠ² Π΄Π°Π½Π½Ρ‹Ρ…;

—add-binary – Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ Π² сборку Π±ΠΈΠ½Π°Ρ€Π½Ρ‹Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ²;

—exclude-module – ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ ΠΈΠ· исполняСмого Ρ„Π°ΠΉΠ»Π°;

Π£ PyInstaller Π΅ΡΡ‚ΡŒ ограничСния. Он Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ с Python 3.5–3.9. ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ созданиС исполняСмых Ρ„Π°ΠΉΠ»ΠΎΠ² для Ρ€Π°Π·Π½Ρ‹Ρ… ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹Ρ… систСм, Π½ΠΎ Π½Π΅ ΡƒΠΌΠ΅Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ ΠΊΡ€ΠΎΡΡΠΊΠΎΠΌΠΏΠΈΠ»ΡΡ†ΠΈΡŽ, Ρ‚. Π΅. Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ исполняСмый Ρ„Π°ΠΉΠ» для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ОБ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎ. Π‘ΠΎΠ»Π΅Π΅ Ρ‚ΠΎΠ³ΠΎ, исполняСмый Ρ„Π°ΠΉΠ» зависит ΠΎΡ‚ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ glibc, Ρ‚. Π΅. Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ исполняСмый Ρ„Π°ΠΉΠ» для самой старой вСрсии ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ОБ.

PyInstaller Π·Π½Π°Π΅Ρ‚ ΠΎ ΠΌΠ½ΠΎΠ³ΠΈΡ… Python-ΠΏΠ°ΠΊΠ΅Ρ‚Π°Ρ… ΠΈ ΡƒΠΌΠ΅Π΅Ρ‚ ΠΈΡ… ΡƒΡ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒ ΠΏΡ€ΠΈ сборкС исполняСмого Ρ„Π°ΠΉΠ»Π°. Но Π½Π΅ ΠΎ всСх. НапримСр, Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊ uvicorn практичСски вСсь Π½ΡƒΠΆΠ½ΠΎ явно ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π² Ρ„Π°ΠΉΠ», ΠΊ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½Π° ΠΊΠΎΠΌΠ°Π½Π΄Π° pyinstaller. ΠŸΠΎΠ»Π½Ρ‹ΠΉ список ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅ΠΌΡ‹Ρ… ΠΈΠ· ΠΊΠΎΡ€ΠΎΠ±ΠΊΠΈ ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ² ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ здСсь.

Cython

Бтавится Cython Ρ‡Π΅Ρ€Π΅Π· pip:

pip install Cython

Рассмотрим Π΅Π³ΠΎ Ρ€Π°Π±ΠΎΡ‚Ρƒ Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ с вычислСниСм числа ΠΏΠΈ:

НСмного ΠΌΠΎΠ΄ΠΈΡ„ΠΈΡ†ΠΈΡ€ΡƒΠ΅ΠΌ Π½Π°ΡˆΡƒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ:

Cython β†’ C:

ΠšΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΡƒΠ΅ΠΌ Π‘-ΡˆΠ½Ρ‹ΠΉ ΠΊΠΎΠ΄:

И замСряСм врСмя Π½Π° Π±Π΅Π½Ρ‡ΠΌΠ°Ρ€ΠΊΠ΅: 3,66 сСкунды.

А Ρ‡Ρ‚ΠΎ Π΄Π΅Π»Π°Ρ‚ΡŒ, Ссли Π² нашСм ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅ нСсколько Ρ„Π°ΠΉΠ»ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½ΡƒΠΆΠ½ΠΎ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ? Π’ΠΎΠ³Π΄Π° Π½ΡƒΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚Π°ΠΊ Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡ‹ΠΉ сцСнарий сборки. Π‘ Π΅Π³ΠΎ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΌΠΎΠΆΠ½ΠΎ ΠΌΠΎΠ΄Π΅Ρ€Π½ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ сборку Π² зависимости ΠΎΡ‚ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмы, ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ нСсколько Ρ„Π°ΠΉΠ»ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ, ΠΈ ΠΌΠ½ΠΎΠ³ΠΎΠ΅ Π΄Ρ€ΡƒΠ³ΠΎΠ΅.

Π‘ΠΎΠ·Π΄Π°Π΄ΠΈΠΌ Ρ„Π°ΠΉΠ» build.py:

Запустим: python build.py build_ext –-inplace

Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ Π±ΡƒΠ΄Π΅Ρ‚ сгСнСрирован .so/.dll Ρ„Π°ΠΉΠ».

Nuitka

Бтавится Ρ‡Π΅Ρ€Π΅Π· pip:

pip install nuitka

Для Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ исполняСмого Ρ„Π°ΠΉΠ»Π° достаточно Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ:

Для компиляции модуля:

Для компиляции ΠΏΠ°ΠΊΠ΅Ρ‚Π°:

Pythran

Pythran – статичСский компилятор Python, ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΎΠ½ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΉ сСбя ΠΊΠ°ΠΊ ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ Π½Π° Π½Π°ΡƒΡ‡Π½Ρ‹Π΅ вычислСния ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰ΠΈΠΉ прСимущСства многоядСрных процСссоров ΠΈ Π±Π»ΠΎΠΊΠΎΠ² инструкций SIMD. Он транслируСт Python-ΠΊΠΎΠ΄, Π°Π½Π½ΠΎΡ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ описаниями интСрфСйса, Π² C++. Π”ΠΎ вСрсии 0.9.5 (Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ) Pythran ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π» Python 3 ΠΈ Python 2.7. ПослСдниС вСрсии ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Python 3.

pip install pythran

Π“Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅ΠΌ Π±ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ» .so:

Pythran ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Π½Π΅ ΡƒΠΌΠ΅Π΅Ρ‚ Π² ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠ΅ классы, поэтому ΠΏΡ€ΠΈ ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠ΅ ΠΈΡ… компиляции Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π±Ρ€ΠΎΡˆΠ΅Π½Π° ошибка:

Top level statements can only be assignments, strings,functions, comments, or imports

Π”ΠΎΠ±Π°Π²ΠΈΠΌ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ:

Π‘ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΡƒΠ΅ΠΌ ΠΈ Π±Π΅Π½Ρ‡ΠΌΠ°Ρ€ΠΊ Π²Ρ‹Π΄Π°Π΅Ρ‚ 0,00007 сСкунды.

cx-Freeze

Бтавится с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ pip:

pip install cx_Freeze

Для Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ исполняСмого Ρ„Π°ΠΉΠ»Π° достаточно Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ:

Π‘Π±ΠΎΡ€ΠΊΡƒ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки:

Π’Π°ΠΊΠΆΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ использованиС сцСнария сборки, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ρ‚Π°ΠΊ:

Π‘Π±ΠΎΡ€ΠΊΠ° исполняСмого Ρ„Π°ΠΉΠ»Π°:

python setup.py build

JIT-компиляция Python

JIT-компиляция Π½Π΅ позволяСт ΡΠΊΡ€Ρ‹Π²Π°Ρ‚ΡŒ исходники ΠΈΠ»ΠΈ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ Π°Π²Ρ‚ΠΎΠ½ΠΎΠΌΠ½Ρ‹ΠΉ исполняСмый Ρ„Π°ΠΉΠ», Π½ΠΎ Π΄Π°Π΅Ρ‚ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΡƒΡΠΊΠΎΡ€ΠΈΡ‚ΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹.

PyPy

компилятор Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄Π°, ΠΎΡ‚Π²Π΅Ρ‡Π°ΡŽΡ‰ΠΈΠΉ Π·Π° созданиС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ΠΊΠΎΠ΄Π° Python ΠΈΠ· исходного ΠΊΠΎΠ΄Π° ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ прилоТСния;

ΠΎΡ†Π΅Π½Ρ‰ΠΈΠΊ Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄Π°, отвСтствСнный Π·Π° ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ†ΠΈΡŽ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ΠΊΠΎΠ΄Π° Python;

стандартноС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎΠ΅ пространство, ΠΎΡ‚Π²Π΅Ρ‡Π°ΡŽΡ‰Π΅Π΅ Π·Π° созданиС ΠΈ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ Python, Π²ΠΈΠ΄ΠΈΠΌΡ‹ΠΌΠΈ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ.

PyPy ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ сотни Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ Python, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ NumPy.

ΠžΡΠ½ΠΎΠ²Π½Ρ‹Π΅ особСнности (сравнСниС с CPython):

Π‘ΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ. ΠŸΡ€ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ Π΄Π»ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‰ΠΈΡ…ΡΡ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ, ΠΊΠΎΠ³Π΄Π° Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½Π°Ρ Ρ‡Π°ΡΡ‚ΡŒ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ тратится Π½Π° Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° Python, PyPy ΠΌΠΎΠΆΠ΅Ρ‚ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΡƒΡΠΊΠΎΡ€ΠΈΡ‚ΡŒ ваш ΠΊΠΎΠ΄.

ИспользованиС памяти. ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Python, Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‰ΠΈΠ΅ ΠΌΠ½ΠΎΠ³ΠΎ памяти (нСсколько сотСн Мб ΠΈΠ»ΠΈ Π±ΠΎΠ»Π΅Π΅), ΠΌΠΎΠ³ΡƒΡ‚ Π·Π°Π½ΠΈΠΌΠ°Ρ‚ΡŒ мСньшС мСста, Ρ‡Π΅ΠΌ Π² CPython. Однако это Π½Π΅ всСгда Ρ‚Π°ΠΊ, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ зависит ΠΎΡ‚ мноТСства Π΄Π΅Ρ‚Π°Π»Π΅ΠΉ. Π’Π°ΠΊΠΆΠ΅ Π±Π°Π·ΠΎΠ²Ρ‹ΠΉ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ потрСблСния ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½ΠΎΠΉ памяти Π²Ρ‹ΡˆΠ΅, Ρ‡Π΅ΠΌ Ρƒ CPython.

Π‘ΠΊΠ°Ρ‡Π°Ρ‚ΡŒ PyPy ΠΌΠΎΠΆΠ½ΠΎ с здСсь. ПослС скачивания PyPy Π³ΠΎΡ‚ΠΎΠ² ΠΊ запуску послС распаковки Π°Ρ€Ρ…ΠΈΠ²Π°. Если Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ PyPy доступным для всСй систСмы, достаточно ΠΏΠΎΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ ΡΠΈΠΌΠ²ΠΎΠ»ΠΈΡ‡Π΅ΡΠΊΡƒΡŽ ссылку Π½Π° исполняСмый Ρ„Π°ΠΉΠ» pypy Π² /usr/local/bin. Π’Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ pyenv.

PyPy Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π½Π° Mac, Linux (Π½Π΅ всС дистрибутивы) ΠΈΠ»ΠΈ Windows.

Для запуска ΠΊΠΎΠ΄Π° с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ PyPy вмСсто ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ python3 (ΠΊΠ°ΠΊ c ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ CPython) достаточно Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ pypy3:

Pyston

Π’ Pyston ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ΡΡ всС возмоТности CPython, Π² Ρ‚ΠΎΠΌ числС C API для Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠΉ Π½Π° языкС Π‘ΠΈ. Π‘Ρ€Π΅Π΄ΠΈ основных ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠΉ Pyston ΠΎΡ‚ CPython ΠΏΠΎΠΌΠΈΠΌΠΎ ΠΎΠ±Ρ‰ΠΈΡ… ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΉ выдСляСтся использованиС DynASM JIT ΠΈ inline-ΠΊΡΡˆΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡ.

Π—Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅

Π˜Ρ‚Π°ΠΊ, ΠΌΡ‹ рассмотрСли 5 Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊΠΎΠ² AOT-компиляции Python. Для Π»ΡŽΠ±ΠΈΡ‚Π΅Π»Π΅ΠΉ Π°Π½Π°Π»ΠΈΡ‚ΠΈΠΊΠΈ, Π½ΠΈΠΆΠ΅ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π° Ρ‚Π°Π±Π»ΠΈΡ†Π° со ΡΡ€Π°Π²Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ Π°Π½Π°Π»ΠΈΠ·ΠΎΠΌ.

PyInstaller

Cython

Nuitka

Pythran

cx-Freeze

ГСнСрация Π°Π²Ρ‚ΠΎΠ½ΠΎΠΌΠ½Ρ‹Ρ… исполняСмых Ρ„Π°ΠΉΠ»ΠΎΠ²

ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ†ΠΈΡ python-модуля Π² исполняСмый Ρ„Π°ΠΉΠ», совмСстимый с CPython

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ

Π’Π°Ρˆ адрСс email Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½. ΠžΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ поля ΠΏΠΎΠΌΠ΅Ρ‡Π΅Π½Ρ‹ *