Ρ‡Ρ‚ΠΎ это Ρ‚Π°ΠΊΠΎΠ΅ ΠΈ ΠΊΠ°ΠΊ примСняСтся Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ

ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ‚ΠΎΡ€ β€” это ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°, которая ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ΠΈΡ‚ тСкст, написанный Π½Π° языкС программирования, Π² ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹Π΅ ΠΊΠΎΠ΄Ρ‹. Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ компиляторов ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Ρ‹ ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΠΎΠ½ΠΈΠΌΠ°Ρ‚ΡŒ Ρ€Π°Π·Π½Ρ‹Π΅ языки программирования, Π² Ρ‚ΠΎΠΌ числС высокоуровнСвыС, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ Π±Π»ΠΈΠ·ΠΊΠΈΠ΅ ΠΊ Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊΡƒ ΠΈ Π΄Π°Π»Π΅ΠΊΠΈΠ΅ ΠΎΡ‚ Β«ΠΆΠ΅Π»Π΅Π·Π°Β».

ΠŸΡ€ΠΎΡ†Π΅ΡΡ Ρ€Π°Π±ΠΎΡ‚Ρ‹ компилятора с ΠΊΠΎΠ΄ΠΎΠΌ называСтся компиляциСй, ΠΈΠ»ΠΈ сборкой. По сути, компилятор β€” комплСксный Β«ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Ρ‡ΠΈΠΊΒ», ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ собираСт, ΠΈΠ»ΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΡƒΠ΅Ρ‚, ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ Π² исполняСмый Ρ„Π°ΠΉΠ». Π˜ΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΡ‹ΠΉ Ρ„Π°ΠΉΠ» β€” это Π½Π°Π±ΠΎΡ€ инструкций для ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Ρ‚ΠΎΡ‚ ΠΏΠΎΠ½ΠΈΠΌΠ°Π΅Ρ‚ ΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ.

Π―Π·Ρ‹ΠΊΠΈ программирования, для ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ компиляторы, Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΡƒΠ΅ΠΌΡ‹ΠΌΠΈ.

Для Ρ‡Π΅Π³ΠΎ Π½ΡƒΠΆΠ΅Π½ компилятор

Π˜Π·Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€ Π½Π΅ ΠΏΠΎΠ½ΠΈΠΌΠ°Π΅Ρ‚ смысл написанного Π½Π° любом языкС программирования. Π―Π·Ρ‹ΠΊ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π° β€” ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹Π΅ ΠΊΠΎΠ΄Ρ‹, Π½ΡƒΠ»ΠΈ ΠΈ Π΅Π΄ΠΈΠ½ΠΈΡ†Ρ‹, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π·Π°ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½Π° информация ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹. ΠŸΠΈΡΠ°Ρ‚ΡŒ Π½Π° ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹Ρ… ΠΊΠΎΠ΄Π°Ρ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ практичСски Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ: Π΄Π°ΠΆΠ΅ ΠΏΡ€ΠΎΡΡ‚Π΅ΠΉΡˆΠ΅Π΅ дСйствиС Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΡ‚Π½ΠΈΠΌΠ°Ρ‚ΡŒ ΠΌΠ½ΠΎΠ³ΠΎ часов Ρ€Π°Π±ΠΎΡ‚Ρ‹ программиста. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ появились языки программирования, Π±ΠΎΠ»Π΅Π΅ понятныС для людСй, ΠΈ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ пСрСводят эти языки Π² ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹Π΅ ΠΊΠΎΠ΄Ρ‹. Π­Ρ‚ΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΈ Π΅ΡΡ‚ΡŒ компиляторы.

Π‘Π΅Π· компилятора любой ΠΊΠΎΠ΄ Π½Π° ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΡƒΠ΅ΠΌΠΎΠΌ языкС программирования Π±ΡƒΠ΄Π΅Ρ‚ для ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π° просто тСкстом β€” ΠΎΠ½ Π½Π΅ распознаСт ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ ΠΈ Π½Π΅ смоТСт ΠΈΡ… Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ компилятор Π½ΡƒΠΆΠ΅Π½, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΌΠΎΠ³Π»ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ. Π‘Π΅Π· Π½Π΅Π³ΠΎ Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ.

Π•Ρ‰Π΅ ΠΎΠ΄Π½Π° Π·Π°Π΄Π°Ρ‡Π° компилятора β€” ΡΠΎΠ±Ρ€Π°Ρ‚ΡŒ всС ΠΌΠΎΠ΄ΡƒΠ»ΠΈ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½Π½Ρ‹Π΅ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ, Π² Π΅Π΄ΠΈΠ½Ρ‹ΠΉ Ρ„Π°ΠΉΠ». НуТно, Ρ‡Ρ‚ΠΎΠ±Ρ‹ исполняСмый Ρ„Π°ΠΉΠ» содСрТал Π² сСбС всС Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΠ΅ для Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎΠΉ Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΈ ΠΏΠΎΠ»Π½ΠΎΠ³ΠΎ выполнСния инструкций.

ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ‚ΠΎΡ€ ΠΈ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€: Π² Ρ‡Π΅ΠΌ Ρ€Π°Π·Π½ΠΈΡ†Π°

ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ†ΠΈΡ β€” Π½Π΅ СдинствСнный ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ ΠΊ Β«ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ΡƒΒ» чСловСкопонятного языка программирования Π½Π° ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΉ. Π•Ρ‰Π΅ Π΅ΡΡ‚ΡŒ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Ρ‹ ΠΈ Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄, Π½ΠΎ Ρ‚Π°ΠΌ Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ совсСм Π΄Ρ€ΡƒΠ³ΠΈΠ΅.

Π˜Π½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ — это Ρ‚ΠΎΠΆΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°, которая Β«ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ΠΈΡ‚Β» тСкст Π½Π° высокоуровнСвом языкС программирования, Π½ΠΎ Π΄Π΅Π»Π°Π΅Ρ‚ это ΠΈΠ½Π°Ρ‡Π΅. Она Π½Π΅ собираСт вСсь ΠΊΠΎΠ΄ Π² ΠΎΠ΄ΠΈΠ½ исполняСмый Ρ„Π°ΠΉΠ» для ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π³ΠΎ запуска, Π° исполняСт ΠΊΠΎΠ΄ сразу, построчно. Π­Ρ‚ΠΎ Ρ‡ΡƒΡ‚ΡŒ ΠΌΠ΅Π΄Π»Π΅Π½Π½Π΅Π΅, Π½ΠΎ ΠΈΠ½ΠΎΠ³Π΄Π° ΡƒΠ΄ΠΎΠ±Π½Π΅Π΅. Π―Π·Ρ‹ΠΊΠΈ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰ΠΈΠ΅ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Ρ‹, Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚ΠΈΡ€ΡƒΠ΅ΠΌΡ‹ΠΌΠΈ.

Π‘Π°ΠΉΡ‚-ΠΊΠΎΠ΄ β€”Β Β«ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½ΠΎΠ΅ Π·Π²Π΅Π½ΠΎΒ» ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π°ΠΌΠΈ компиляции ΠΈ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ†ΠΈΠΈ. ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° прСобразуСтся Π² особый ΠΊΠΎΠ΄, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ запускаСтся ΠΏΠΎΠ΄ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠΉ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΉ машиной. Π―Π·Ρ‹ΠΊΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ Ρ‚Π°ΠΊ, ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ, самый извСстный ΠΈ яркий ΠΏΡ€ΠΈΠΌΠ΅Ρ€ β€” Java.

Π’ ΠΊΠ°ΠΊΠΈΡ… языках ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ компиляторы

Π‘Ρ€Π΅Π΄ΠΈ популярных сСгодня языков ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΡƒΠ΅ΠΌΡ‹ΠΌΠΈ ΡΠ²Π»ΡΡŽΡ‚ΡΡΒ SwiftΒ ΠΈΒ Go, Π° Ρ‚Π°ΠΊΠΆΠ΅ C / C++ ΠΈ Objective-C. Π”Ρ€ΡƒΠ³ΠΈΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ β€” Visual Basic, Haskell, Pascal / Delphi, Rust, Π° Ρ‚Π°ΠΊΠΆΠ΅ Lisp, Prolog ΠΈ ΠΏΡ€ΠΎΡ‡ΠΈΠ΅ ΠΌΠ΅Π½Π΅Π΅ извСстныС языки. РазумССтся, ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΡƒΠ΅ΠΌΡ‹ΠΌ являСтся ΠΈ язык ассСмблСра β€” ΠΎΡ‡Π΅Π½ΡŒ Π½ΠΈΠ·ΠΊΠΎΡƒΡ€ΠΎΠ²Π½Π΅Π²Ρ‹ΠΉ ΠΈ написанный Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ Π½Π° ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹Ρ… ΠΊΠΎΠ΄Π°Ρ….

ΠžΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ‹Π΄Π΅Π»ΠΈΡ‚ΡŒ языки, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ‚Ρ€Π°Π½ΡΡ„ΠΎΡ€ΠΌΠΈΡ€ΡƒΡŽΡ‚ΡΡ Π² Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄ β€” это Ρ‚ΠΎΠΆΠ΅ своСго Ρ€ΠΎΠ΄Π° компиляция. К Π½ΠΈΠΌ относятся Java, Scala ΠΈΒ Kotlin, Π° Ρ‚Π°ΠΊΠΆΠ΅Β C#Β ΠΈ языки ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹ .NET.

На ΠΊΠ°ΠΊΠΈΡ… языках ΠΏΠΈΡˆΡƒΡ‚ компиляторы

Π”Ρ€ΡƒΠ³ΠΈΠ΅ языки.Β ΠŸΠΈΡΠ°Ρ‚ΡŒ компилятор Π½Π° машинном ΠΊΠΎΠ΄Π΅ тяТСло ΠΈ Π΄ΠΎΠ»Π³ΠΎ, ΠΏΠΎΡ€ΠΎΠΉ практичСски Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ ΠΈΡ… ΠΏΠΈΡˆΡƒΡ‚ Π½Π° ΡƒΠΆΠ΅ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… языках: получаСтся, Ρ‡Ρ‚ΠΎ Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ языков написано Π½Π° Π΄Ρ€ΡƒΠ³ΠΈΡ….

НапримСр, ΠΎΠ΄ΠΈΠ½ ΠΈΠ· компиляторов языка Go частично написан Π½Π° C++, самый ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ компилятор C++ β€” Π½Π° ассСмблСрС, Π° ΡƒΠΆΠ΅ ассСмблСр β€” Π½Π° ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹Ρ… ΠΊΠΎΠ΄Π°Ρ….

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

Выглядит это Ρ‚Π°ΠΊ:

  • ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ, Π±ΠΎΠ»Π΅Π΅ простой компилятор ΠΏΠΈΡˆΠ΅Ρ‚ΡΡ Π½Π° ассСмблСрС;
  • Π²Ρ‚ΠΎΡ€ΠΎΠΉ ΠΏΠΈΡˆΠ΅Ρ‚ΡΡ ΡƒΠΆΠ΅ Π½Π° Π½ΡƒΠΆΠ½ΠΎΠΌ языкС ΠΈ компилируСтся ΠΏΠ΅Ρ€Π²Ρ‹ΠΌ компилятором;
  • ΠΏΠ΅Ρ€Π΅Π²Π΅Π΄Π΅Π½Π½Ρ‹ΠΉ Π² ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹Π΅ ΠΊΠΎΠ΄Ρ‹ Π²Ρ‚ΠΎΡ€ΠΎΠΉ компилятор ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΡƒΠ΅Ρ‚ свои ΠΆΠ΅ исходники β€” получаСтся Π±ΠΎΠ»Π΅Π΅ новая ΠΈ мощная вСрсия Π΅Π³ΠΎ ΠΆΠ΅.

НапримСр, Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ соврСмСнных компиляторов для C / C++ написано Π½Π° C / C++. Π’Π°ΠΊΠΈΠ΅ компиляторы Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ самокомпилируСмыми.

ΠŸΠΎΡ‡Π΅ΠΌΡƒ Ρƒ ΠΎΠ΄Π½ΠΎΠ³ΠΎ языка ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ нСсколько компиляторов

Π£ Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π° языков программирования нСсколько компиляторов. Π˜Ρ… Π΅Ρ‰Π΅ Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ рСализациями. Π˜Π·Π½Π°Ρ‡Π°Π»ΡŒΠ½ΡƒΡŽ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ ΠΏΠΈΡˆΠ΅Ρ‚ ΡΠΎΠ·Π΄Π°Ρ‚Π΅Π»ΡŒ языка, ΠΏΠΎΡ‚ΠΎΠΌ со Π²Ρ€Π΅ΠΌΠ΅Π½Π΅ΠΌ ΠΏΠΎΡΠ²Π»ΡΡŽΡ‚ΡΡ Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹Π΅. Π—Π°Ρ‡Π΅ΠΌ это дСлаСтся? Π¦Π΅Π»ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Ρ€Π°Π·Π½Ρ‹ΠΌΠΈ:

  • Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ Π±ΠΎΠ»Π΅Π΅ соврСмСнный ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹ΠΉ компилятор, ΠΎΠ±Π½ΠΎΠ²ΠΈΡ‚ΡŒ язык;
  • ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ язык ΠΈ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Π΅Π³ΠΎ эффСктивнСС;
  • ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΡΠ²ΠΎΠ±ΠΎΠ΄Π½ΡƒΡŽ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ смоТСт Π΄ΠΎΠΏΠΎΠ»Π½ΡΡ‚ΡŒ сообщСство;
  • ΠΈΡΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ ошибки, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΅ΡΡ‚ΡŒ Π² ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… рСализациях;
  • пСрСнСсти язык Π½Π° Π΄Ρ€ΡƒΠ³ΡƒΡŽ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡƒ, ΠΈ Ρ‚Π°ΠΊ Π΄Π°Π»Π΅Π΅.

ΠŸΠΎΠ΄Ρ…ΠΎΠ΄Ρ‹ ΠΊ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ, ΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡŽ ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΡŽ Π΄Ρ€ΡƒΠ³ΠΈΡ… Ρ†Π΅Π»Π΅ΠΉ Ρƒ всСх Π³Ρ€ΡƒΠΏΠΏ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ² свои. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ Ρ€Π°Π·Π½Ρ‹Π΅ компиляторы ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈ Ρ‚ΠΎΠ³ΠΎ ΠΆΠ΅ языка ΠΌΠΎΠ³ΡƒΡ‚ Ρ€Π°Π·Π»ΠΈΡ‡Π°Ρ‚ΡŒΡΡ ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒΡŽ, особСнностями Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρ‹, Π½Π°Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌΠΈ. Бинтаксис языка ΠΏΡ€ΠΈ этом остаСтся Ρ‚Π°ΠΊΠΈΠΌ ΠΆΠ΅, Π½ΠΎ Π΅ΡΡ‚ΡŒ особыС ситуации, ΠΊΠΎΠ³Π΄Π° ΠΎΠ΄Π½Π° ΠΈ Ρ‚Π° ΠΆΠ΅ строчка ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ ΠΏΠΎ-Ρ€Π°Π·Π½ΠΎΠΌΡƒ Π² зависимости ΠΎΡ‚ компилятора.

Какими Π±Ρ‹Π²Π°ΡŽΡ‚ компиляторы

ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ‚ΠΎΡ€Ρ‹ ΠΎΡ‡Π΅Π½ΡŒ ΠΌΠ½ΠΎΠ³ΠΎΠΎΠ±Ρ€Π°Π·Π½Ρ‹. Π•ΡΡ‚ΡŒ Ρ‚Π°ΠΊΠΈΠ΅, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΠΌΠ΅ΡŽΡ‚ ΡƒΠ·ΠΊΡƒΡŽ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π·Π°ΠΏΡƒΡΠΊΠ°ΡŽΡ‚ΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠΎΠ΄ процСссоры ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ сСмСйства ΠΈ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Ρ‹ ΠΏΠΎΠ΄ Π½ΠΈΡ…. Π•ΡΡ‚ΡŒ ΠΈ Π±ΠΎΠ»Π΅Π΅ ΡˆΠΈΡ€ΠΎΠΊΠΈΠ΅ β€” Ρ‚Π°ΠΊ Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡ‹Π΅ кросс-компиляторы, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒ нСсколько ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹Ρ… систСм.

Один компилятор ΠΌΠΎΠΆΠ΅Ρ‚ Β«Π·Π½Π°Ρ‚ΡŒΒ» нСсколько языков программирования. Π―Ρ€ΠΊΠΈΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Ρ‚Π°ΠΊΠΎΠ³ΠΎ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ β€” GCC, ΠΈΠ»ΠΈ GNU Compiler Collection, кросс-компилятор для Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹Ρ… систСм ΠΈ языков, ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ бСсплатный ΠΈ свободный. На Π½Π΅ΠΌ написано ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ΅ обСспСчСниС GNU.

Π‘ΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ ΠΈ Ρ‚Π°ΠΊ Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡ‹Π΅ компиляторы компиляторов. Они Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΡŽΡ‚ компиляторы для языка Π½Π° основС Π΅Π³ΠΎ Ρ„ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ описания.

Как устроСны ΠΈ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ компиляторы

ΠŸΡ€ΠΎΡΡ‚Ρ‹ΠΌΠΈ словами, ΠΎΠ½ΠΈ Β«Ρ‡ΠΈΡ‚Π°ΡŽΡ‚Β» ΠΏΡ€ΠΈΡˆΠ΅Π΄ΡˆΡƒΡŽ ΠΊ Π½ΠΈΠΌ Π½Π° Π²Ρ…ΠΎΠ΄ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ ΠΈ пСрСводят Π΅Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ Π² ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ ΠΈΠΌ Π½Π°Π±ΠΎΡ€Ρ‹ ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹Ρ… ΠΊΠΎΠ΄ΠΎΠ².

Π”Π΅Ρ‚Π°Π»ΠΈ ΡƒΠΆΠ΅ слоТнСС ΠΈ Ρ€Π°Π·Π»ΠΈΡ‡Π°ΡŽΡ‚ΡΡ Π² зависимости ΠΎΡ‚ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ. НапримСр, Π΅ΡΡ‚ΡŒ ΠΌΠΎΠ΄ΡƒΠ»ΡŒΠ½Ρ‹Π΅ Π³ΠΈΠ±ΠΊΠΈΠ΅ компиляторы, написанныС Π½Π° высокоуровнСвых языках, Π΅ΡΡ‚ΡŒ ΠΎΡ‚Π»Π°Π΄ΠΎΡ‡Π½Ρ‹Π΅ компиляторы, способныС ΡƒΡΡ‚Ρ€Π°Π½ΡΡ‚ΡŒ Ρ‡Π°ΡΡ‚ΡŒ синтаксичСских ошибок, ΠΈ Ρ‚Π°ΠΊ Π΄Π°Π»Π΅Π΅.

Π‘Π°ΠΌΠ° компиляция ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ:

  • построчной β€” Π² ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ ΠΏΠΎ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ пСрСводится каТдая строка, Ρ‡Ρ‚ΠΎ ΠΏΠΎΡ…ΠΎΠΆΠ΅ Π½Π° ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ†ΠΈΡŽ, Π½ΠΎ отличаСтся тСхничСски;
  • ΠΏΠ°ΠΊΠ΅Ρ‚Π½ΠΎΠΉ β€” ΠΊΠΎΠ΄ разбиваСтся Π½Π° Π±Π»ΠΎΠΊΠΈ, ΠΈΠ»ΠΈ ΠΏΠ°ΠΊΠ΅Ρ‚Ρ‹, ΠΈ компилируСтся ΠΏΠΎΠ±Π»ΠΎΡ‡Π½ΠΎ;
  • условной β€” особСнности компиляции зависят ΠΎΡ‚ условий, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ прописаны Π² исходном ΠΊΠΎΠ΄Π΅ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΡƒΠ΅ΠΌΠΎΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹.

Π‘Π½Π°Ρ‡Π°Π»Π° компилятор Ρ€Π°Π·Π±ΠΈΡ€Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ написано, ΠΏΠΎΡ‚ΠΎΠΌ Π°Π½Π°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹, Π° ΠΏΠΎΡ‚ΠΎΠΌ Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹Π΅ ΠΊΠΎΠ΄Ρ‹. Он Π½Π΅ запускаСт ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ, запуск β€” это ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠ΅ дСйствиС.

ΠŸΡ€Π΅ΠΈΠΌΡƒΡ‰Π΅ΡΡ‚Π²Π° ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΡƒΠ΅ΠΌΡ‹Ρ… языков
  • ΠšΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΡƒΠ΅ΠΌΡ‹Π΅ языки ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ быстрСС, Ρ‡Π΅ΠΌ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚ΠΈΡ€ΡƒΠ΅ΠΌΡ‹Π΅, ΠΈ ΠΈΡ… Π»Π΅Π³Ρ‡Π΅ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ.
  • Π˜Ρ‚ΠΎΠ³ΠΎΠ²Ρ‹ΠΉ Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΊΠΎΠ΄Π° Ρƒ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΡƒΠ΅ΠΌΡ‹Ρ… языков, ΠΊΠ°ΠΊ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, мСньшС, Ρ‡Π΅ΠΌ Ρƒ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚ΠΈΡ€ΡƒΠ΅ΠΌΡ‹Ρ….
  • Π’ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΡƒΠ΅ΠΌΡ‹Ρ… языках Π½Π°ΠΌΠ½ΠΎΠ³ΠΎ ΡˆΠΈΡ€Π΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π°ΠΏΠΏΠ°Ρ€Π°Ρ‚Π½Ρ‹Π΅ рСсурсы. Π­Ρ‚ΠΎ Π½Π΅ Π·Π½Π°Ρ‡ΠΈΡ‚, Ρ‡Ρ‚ΠΎ ΠΎΠ½ΠΈ всС Π½ΠΈΠ·ΠΊΠΎΡƒΡ€ΠΎΠ²Π½Π΅Π²Ρ‹Π΅, Π½ΠΎ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠ΅ β€” Π²Π΅Ρ€Π½ΠΎ: практичСски всС Π½ΠΈΠ·ΠΊΠΎΡƒΡ€ΠΎΠ²Π½Π΅Π²Ρ‹Π΅ языки β€” ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΡƒΠ΅ΠΌΡ‹Π΅.
  • Когда процСссоры становятся ΠΌΠΎΡ‰Π½Π΅Π΅, ΠΈΠΌΠ΅Π½Π½ΠΎ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΡƒΠ΅ΠΌΡ‹Π΅ языки ΠΌΠΎΠ³ΡƒΡ‚ Π² Π΄ΠΎΠ»ΠΆΠ½ΠΎΠΉ ΠΌΠ΅Ρ€Π΅ Π·Π°Π΄Π΅ΠΉΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΡ… прСимущСства.
  • Код послС компилятора Π»ΡƒΡ‡ΡˆΠ΅ оптимизируСтся ΠΏΠΎΠ΄ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹Π΅ устройства, Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρƒ Β«ΠΆΠ΅Π»Π΅Π·Π°Β», эффСктивно задСйствуСт ΠΏΠ°ΠΌΡΡ‚ΡŒ ΠΈ Π½Π΅ Ρ‚Ρ€Π°Ρ‚ΠΈΡ‚ Π»ΠΈΡˆΠ½ΠΈΡ… рСсурсов.
  • ΠšΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΡƒΠ΅ΠΌΡ‹Π΅ языки ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΠΌΠΎΡ‰Π½Ρ‹Π΅ ΠΈ Π²Ρ‹ΡΠΎΠΊΠΎΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅, поэтому Π½Π° Π½ΠΈΡ… ΠΏΠΈΡˆΡƒΡ‚ ΠΈΠ³Ρ€Ρ‹ ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΡΠ΅Ρ€ΡŒΠ΅Π·Π½ΠΎ Π½Π°Π³Ρ€ΡƒΠΆΠ΅Π½Π½Ρ‹Π΅ прилоТСния.

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

Как ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ компилятором

ΠΠ°Ρ‡ΠΈΠ½Π°ΡŽΡ‰ΠΈΠΉ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ Ρ€Π΅Π΄ΠΊΠΎ взаимодСйствуСт с компилятором Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ. Он скачиваСт язык программирования, Π² Ρ‚ΠΎΠΌ числС Π΅Π³ΠΎ компилятор, Π° ΠΏΠΎΡ‚ΠΎΠΌ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π² Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€Π΅ ΠΊΠΎΠ΄Π° ΠΈΠ»ΠΈ IDE. Π‘Ρ€Π΅Π΄Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ сама запускаСт компилятор ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π·, ΠΊΠΎΠ³Π΄Π° ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ ΠΊΠ»ΠΈΠΊΠ°Π΅Ρ‚ Π½Π° ΠΊΠ½ΠΎΠΏΠΊΡƒ сборки ΠΈΠ»ΠΈ выполнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. Для этого Π΅Π³ΠΎ Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ. Иногда срСда ΠΌΠΎΠΆΠ΅Ρ‚ сама Π²ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒ Π² сСбя нСсколько компиляторов ΠΈ Π²Ρ‹Π±ΠΈΡ€Π°Ρ‚ΡŒ подходящий Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΌ случаС.

ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ Ρ‚Ρ€ΠΎΠ³Π°Ρ‚ΡŒ компилятор Π½Π° Ρ€Π°Π½Π½ΠΈΡ… этапах Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ смысла β€” просто стоит ΠΏΠΎΠΌΠ½ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ Π΅ΡΡ‚ΡŒ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π»ΡƒΡ‡ΡˆΠ΅ Ρ€Π°Π·Π±ΠΈΡ€Π°Ρ‚ΡŒΡΡ Π² происходящСм. Но ΠΎΠ½ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΈΠ³ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ, Ссли Π²Ρ‹ Π·Π°Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ Π±Π΅Π· срСды Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ прямо Π² ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строкС. Π’ΠΎΠ³Π΄Π° Π΅Π³ΠΎ придСтся Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ β€” ΠΎΠ½Π° своя для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ.

Π£ любого ПО Π΅ΡΡ‚ΡŒ докумСнтация, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ, Ссли Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΡƒΠ·Π½Π°Ρ‚ΡŒ большС ΠΎ компиляторС, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ ΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ΡΡŒ, ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ Π΅Π΅.

Π£Π·Π½Π°ΠΉΡ‚Π΅ большС ΠΎΠ± устройствС ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ языков программирования Π½Π° курсах β€” ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚Π΅ Π½ΠΎΠ²ΡƒΡŽ ΠΏΡ€ΠΎΡ„Π΅ΡΡΠΈΡŽ ΠΈ ΡΡ‚Π°Π½ΡŒΡ‚Π΅ вострСбованным IT-спСциалистом.

ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ†ΠΈΡ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π½Π° python 3 Π² exe с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ cx_Freeze

НавСрняка, Ρƒ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Python-программиста Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π»ΠΎ Π½Π΅ΠΏΡ€Π΅ΠΎΠ΄ΠΎΠ»ΠΈΠΌΠΎΠ΅ ΠΆΠ΅Π»Π°Π½ΠΈΠ΅, Π° ΠΈΠ·Ρ€Π΅Π΄ΠΊΠ° ΠΈ Ρ€Π΅Π°Π»ΡŒΠ½Π°Ρ ΠΏΠΎΡ‚Ρ€Π΅Π±Π½ΠΎΡΡ‚ΡŒ, ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ свою ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ Π½Π° python Π² exe Ρ„Π°ΠΉΠ». БСгодня я расскаТу, ΠΊΠ°ΠΊ это ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ cx_Freeze.

Вопрос 1: Π° ΠΎΠ½ΠΎ Π½Π°Π΄ΠΎ?

ΠŸΡ€Π΅ΠΆΠ΄Π΅, Ρ‡Π΅ΠΌ Π½Π°Ρ‡ΠΈΠ½Π°Ρ‚ΡŒ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ, Π½ΡƒΠΆΠ½ΠΎ ΡƒΠ±Π΅Π΄ΠΈΡ‚ΡŒΡΡ, Ρ‡Ρ‚ΠΎ это Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ.

«ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ†ΠΈΡ» ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π½Π° python — процСсс, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΎΠΏΡ€ΠΎΠ²ΠΎΠΆΠ΄Π°Ρ‚ΡŒΡΡ мноТСством ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ. Π‘ΠΎΠ»Π΅Π΅ Ρ‚ΠΎΠ³ΠΎ, это Π½Π΅ компиляция Π² ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄, ΠΊΠ°ΠΊ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π½Π° C, Π° лишь «ΡΠ±ΠΎΡ€ΠΊΠ°» Π² исполняСмый Ρ„Π°ΠΉΠ» вашСй ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ вмСстС с Ρ‡Π°ΡΡ‚ΡŒΡŽ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Π° python.

ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ, Ссли Π²Ρ‹ Π±ΡƒΠ΄Π΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ сами ΠΈΠ»ΠΈ Π½Π° ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π°Ρ… Ρ‚Π΅Ρ…, ΠΊΡ‚ΠΎ Π΅Ρ‘ Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ, Π±ΡƒΠ΄Π΅Ρ‚ ΡΡ‚ΠΎΡΡ‚ΡŒ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ python, Ρ‚ΠΎ Π²Π°ΠΌ Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ Π΅Ρ‘ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ.

Установка cx_Freeze

Если ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ Π½Π° python всё-Ρ‚Π°ΠΊΠΈ Π½ΡƒΠΆΠ½ΠΎ, Ρ‚ΠΎ скачиваСм cx_Freeze с http://www.lfd.uci.edu/~gohlke/pythonlibs/#cx_freeze (Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Π² Π½Π΅ΠΉ Π½Π΅Ρ‚ ΠΎΠ΄Π½ΠΎΠ³ΠΎ нСприятного Π±Π°Π³Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π΅ΡΡ‚ΡŒ Π² ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠΉ вСрсии).

Π—Π°Ρ‚Π΅ΠΌ устанавливаСм, Π½Π΅ забывая ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΡŽ, Π³Π΄Π΅ располоТСн python.

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

ΠšΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π±ΡƒΠ΄Π΅ΠΌ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ «Π±Π»ΡΠΊΠ΄ΠΆΠ΅ΠΊ» (Ρ„Π°ΠΉΠ» 21.py) (ΠΊΠΎΠΌΡƒ лСнь ΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ, ΠΏΡ€ΠΈΠ²ΠΎΠΆΡƒ ΠΏΠΎΠ»Π½Ρ‹ΠΉ исходный ΠΊΠΎΠ΄).

import random
random.shuffle(koloda)
print('ΠŸΠΎΠΈΠ³Ρ€Π°Π΅ΠΌ Π² ΠΎΡ‡ΠΊΠΎ?')
count = 0
while True:
    choice = input('Π‘ΡƒΠ΄Π΅Ρ‚Π΅ Π±Ρ€Π°Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚Ρƒ? y/n\n')
    if choice == 'y':
        current = koloda. pop()
        print('Π’Π°ΠΌ попалась ΠΊΠ°Ρ€Ρ‚Π° достоинством %d' %current)
        count += current
        if count > 21:
            print('Π˜Π·Π²ΠΈΠ½ΠΈΡ‚Π΅, Π½ΠΎ Π²Ρ‹ ΠΏΡ€ΠΎΠΈΠ³Ρ€Π°Π»ΠΈ')
            break
        elif count == 21:
            print('ΠŸΠΎΠ·Π΄Ρ€Π°Π²Π»ΡΡŽ, Π²Ρ‹ Π½Π°Π±Ρ€Π°Π»ΠΈ 21!')
            break
        else:
            print('Π£ вас %d ΠΎΡ‡ΠΊΠΎΠ².' %count)
    elif choice == 'n':
        print('Π£ вас %d ΠΎΡ‡ΠΊΠΎΠ² ΠΈ Π²Ρ‹ Π·Π°ΠΊΠΎΠ½Ρ‡ΠΈΠ»ΠΈ ΠΈΠ³Ρ€Ρƒ.' %count)
        break
print('Π”ΠΎ Π½ΠΎΠ²Ρ‹Ρ… встрСч!')

Π‘ΠΎΠ·Π΄Π°Ρ‘ΠΌ Π² ΠΏΠ°ΠΏΠΊΠ΅ с ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΎΠΉ Ρ„Π°ΠΉΠ» setup.py с содСрТимым:

from cx_Freeze import setup, Executable
setup(
    name = "21",
    version = "0.1",
    description = "Blackjack",
    executables = [Executable("21.py")]
)

ΠŸΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΈΠΌ Π² ΠΊΠΎΠΌΠ°Π½Π΄Π½ΡƒΡŽ строку (ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΠŸΡƒΡΠΊ β†’ Π‘Ρ‚Π°Π½Π΄Π°Ρ€Ρ‚Π½Ρ‹Π΅ β†’ Командная строка). ΠŸΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΈΠΌ Π² ΠΏΠ°ΠΏΠΊΡƒ с ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΎΠΉ (Π² ΠΌΠΎΡ‘ΠΌ случаС D:\Dima\py). ЗапускаСм ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ C:\Python34\python.exe setup.py build (вмСсто C:\Python34 Π½ΡƒΠΆΠ½ΠΎ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΏΠ°ΠΏΠΊΡƒ, ΠΊΡƒΠ΄Π° установлСн python).

НачнСтся процСсс сборки, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ cx_Freeze ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹Π΄Π°Π²Π°Ρ‚ΡŒ прСдупрСТдСния, Π½ΠΎ, скорСС всСго, ΠΎΠ½ΠΈ Π½Π΅ ΠΏΠΎΠ²Π»ΠΈΡΡŽΡ‚ Π½Π° Ρ€Π°Π±ΠΎΡ‚Ρƒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹.

ΠŸΠΎΠ·Π΄Ρ€Π°Π²Π»ΡΡŽ! Π’ ΠΏΠ°ΠΏΠΊΠ΅ build Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Π΅ΡΡ‚ΡŒ ваша ΠΏΠ°ΠΏΠΊΠ° с исполняСмым Ρ„Π°ΠΉΠ»ΠΎΠΌ!

Π—Π°ΠΌΠ΅Ρ‚ΡŒΡ‚Π΅, Π½Π΅ Ρ„Π°ΠΉΠ», Π° ΠΏΠ°ΠΏΠΊΠ°! ВсС ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹ Ρ‚Π°ΠΊΠΆΠ΅ Π½ΡƒΠΆΠ½Ρ‹ для Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ (Π΄Π°, это нСдостаток cx_Freeze). К Ρ‚ΠΎΠΌΡƒ ΠΆΠ΅, ΠΏΡ€ΠΈ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΎΠΊΠ½ΠΎ сразу закрываСтся (Π° Π½Π΅ ΠΆΠ΄Π΅Ρ‚ наТатия клавиши), поэтому Π² ΠΊΠΎΠ½Π΅Ρ† ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π½ΡƒΠΆΠ½ΠΎ Π΄ΠΎΠΏΠΈΡΠ°Ρ‚ΡŒ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ Π²Ρ€ΠΎΠ΄Π΅:

input("Press Enter")

И ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΅Ρ‰Ρ‘ Ρ€Π°Π·.

Π’Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ msi-Π°Ρ€Ρ…ΠΈΠ² ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ C:\Python34\python.exe setup.py bdist_msi.

РазумССтся, ΠΏΡ€ΠΈ компиляции Π±ΠΎΠ»Π΅Π΅ слоТных ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΡ‚ΠΎΠ»ΠΊΠ½ΡƒΡ‚ΡŒΡΡ с Π±ΠΎΠ»Π΅Π΅ слоТными ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°ΠΌΠΈ.

Для ΠΈΡ… Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ слСдуСт Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠΉ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠ΅ΠΉ.

Для вставки ΠΊΠΎΠ΄Π° Π½Π° Python Π² ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ Π·Π°ΠΊΠ»ΡŽΡ‡Π°ΠΉΡ‚Π΅ Π΅Π³ΠΎ Π² Ρ‚Π΅Π³ΠΈ <pre><code>Π’Π°Ρˆ ΠΊΠΎΠ΄</code></pre>

Π‘Π²Π΅ΠΆΠ΅Π΅

  • ΠœΠΎΠ΄ΡƒΠ»ΡŒ csv — Ρ‡Ρ‚Π΅Π½ΠΈΠ΅ ΠΈ запись CSV Ρ„Π°ΠΉΠ»ΠΎΠ²
  • Π‘ΠΎΠ·Π΄Π°Ρ‘ΠΌ сайт Π½Π° Django, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Ρ…ΠΎΡ€ΠΎΡˆΠΈΠ΅ ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠΈ. Π§Π°ΡΡ‚ΡŒ 1: создаём ΠΏΡ€ΠΎΠ΅ΠΊΡ‚
  • Онлайн-ΠΎΠ±ΡƒΡ‡Π΅Π½ΠΈΠ΅ Python: сравнСниС популярных ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ

ΠšΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΠΈ

  • Книги ΠΎ Python
  • GUI (графичСский интСрфСйс ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ)
  • ΠšΡƒΡ€ΡΡ‹ Python
  • ΠœΠΎΠ΄ΡƒΠ»ΠΈ
  • Новости ΠΌΠΈΡ€Π° Python
  • NumPy
  • ΠžΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π΄Π°Π½Π½Ρ‹Ρ…
  • ΠžΡΠ½ΠΎΠ²Ρ‹ программирования
  • ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ
  • Π’ΠΈΠΏΡ‹ Π΄Π°Π½Π½Ρ‹Ρ… Π² Python
  • Π’ΠΈΠ΄Π΅ΠΎ
  • Python для Web
  • Π Π°Π±ΠΎΡ‚Π° для Python-программистов

ΠŸΠΎΠ»Π΅Π·Π½Ρ‹Π΅ ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»Ρ‹

  • Π‘Π΄Π΅Π»Π°ΠΉ свой Π²ΠΊΠ»Π°Π΄ Π² Ρ€Π°Π·Π²ΠΈΡ‚ΠΈΠ΅ сайта!
  • Π‘Π°ΠΌΠΎΡƒΡ‡ΠΈΡ‚Π΅Π»ΡŒ Python
  • ΠšΠ°Ρ€Ρ‚Π° сайта
  • ΠžΡ‚Π·Ρ‹Π²Ρ‹ Π½Π° ΠΊΠ½ΠΈΠ³ΠΈ ΠΏΠΎ Python
  • Π Π΅ΠΊΠ»Π°ΠΌΠ° Π½Π° сайтС

ΠœΡ‹ Π² соцсСтях

ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ†ΠΈΡ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π½Π° C: Π·Π° кулисами

C β€” это язык срСднСго уровня, ΠΈ Π΅ΠΌΡƒ Π½ΡƒΠΆΠ΅Π½ компилятор для прСобразования Π΅Π³ΠΎ Π² исполняСмый ΠΊΠΎΠ΄, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ Π½Π° нашСй машинС.

Как ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ Π½Π° C?
НиТС ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Ρ‹ шаги, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ Π½Π° машинС Ubuntu с компилятором gcc.

  • Π‘Π½Π°Ρ‡Π°Π»Π° ΠΌΡ‹ создаСм ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ Π½Π° C с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€Π° ΠΈ сохраняСм Ρ„Π°ΠΉΠ» ΠΊΠ°ΠΊ имя_Ρ„Π°ΠΉΠ»Π°.c
  $ vi имя_Ρ„Π°ΠΉΠ»Π°.c  
  • На схСмС справа ΠΏΠΎΠΊΠ°Π·Π°Π½Π° простая ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° для слоТСния Π΄Π²ΡƒΡ… чисСл.

  • Π—Π°Ρ‚Π΅ΠΌ скомпилируйтС Π΅Π³ΠΎ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ Π½ΠΈΠΆΠ΅.
  $ gcc -Wall имя_Ρ„Π°ΠΉΠ»Π°.c –o имя_Ρ„Π°ΠΉΠ»Π°  
  • ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ -Wall Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ всС ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π°ΡŽΡ‰ΠΈΠ΅ сообщСния компилятора. Π­Ρ‚ΠΎΡ‚ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ рСкомСндуСтся для создания Π»ΡƒΡ‡ΡˆΠ΅Π³ΠΎ ΠΊΠΎΠ΄Π°.
    ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ -o ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для указания ΠΈΠΌΠ΅Π½ΠΈ Π²Ρ‹Ρ…ΠΎΠ΄Π½ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π°. Если ΠΌΡ‹ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ эту ΠΎΠΏΡ†ΠΈΡŽ, Ρ‚ΠΎ создаСтся Π²Ρ‹Ρ…ΠΎΠ΄Π½ΠΎΠΉ Ρ„Π°ΠΉΠ» с ΠΈΠΌΠ΅Π½Π΅ΠΌ a.out.

  • ПослС создания исполняСмого Ρ„Π°ΠΉΠ»Π° компиляции ΠΌΡ‹ запускаСм сгСнСрированный исполняСмый Ρ„Π°ΠΉΠ» с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΉ Π½ΠΈΠΆΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹.
  $ ./filename  

Π§Ρ‚ΠΎ происходит Π²Π½ΡƒΡ‚Ρ€ΠΈ процСсса компиляции?
ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ‚ΠΎΡ€ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠ΅Ρ‚ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ C Π² исполняСмый Ρ„Π°ΠΉΠ». БущСствуСт Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅ этапа прСвращСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ C Π² исполняСмый Ρ„Π°ΠΉΠ»:

  1. ΠŸΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½Π°Ρ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ°
  2. ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ†ΠΈΡ
  3. Π‘Π±ΠΎΡ€ΠΊΠ°
  4. БвязываниС

Выполняя ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΡƒΡŽ Π½ΠΈΠΆΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ, ΠΌΡ‹ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ всС ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½Ρ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹ Π² Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΌ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅ вмСстС с исполняСмым Ρ„Π°ΠΉΠ»ΠΎΠΌ. .

  $gcc -Wall -save-temps имя_Ρ„Π°ΠΉΠ»Π°.c –o имя_Ρ„Π°ΠΉΠ»Π°  

На ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ снимкС экрана ΠΏΠΎΠΊΠ°Π·Π°Π½Ρ‹ всС сгСнСрированныС ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½Ρ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹.

Π”Π°Π²Π°ΠΉΡ‚Π΅ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ посмотрим, Ρ‡Ρ‚ΠΎ содСрТат эти ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½Ρ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹.

ΠŸΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½Π°Ρ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ°

Π­Ρ‚ΠΎ пСрвая Ρ„Π°Π·Π°, Ρ‡Π΅Ρ€Π΅Π· ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΠΏΡ€ΠΎΡ…ΠΎΠ΄ΠΈΡ‚ исходный ΠΊΠΎΠ΄. Π­Ρ‚ΠΎΡ‚ этап Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚:Β Β 

  • Π£Π΄Π°Π»Π΅Π½ΠΈΠ΅ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠ΅Π²
  • Π Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ макросов
  • Π Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½Π½Ρ‹Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ².
  • Условная компиляция

ΠŸΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Π½Π½Ρ‹ΠΉ Π²Ρ‹Π²ΠΎΠ΄ сохраняСтся Π² Ρ„Π°ΠΉΠ»Π΅ имя_Ρ„Π°ΠΉΠ»Π°.i . Π”Π°Π²Π°ΠΉΡ‚Π΅ посмотрим, Ρ‡Ρ‚ΠΎ находится Π²Π½ΡƒΡ‚Ρ€ΠΈ filename.i: using $vi filename.i Β Β 
Π’ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΌ Π²Ρ‹ΡˆΠ΅ Π²Ρ‹Π²ΠΎΠ΄Π΅ исходный Ρ„Π°ΠΉΠ» Π·Π°ΠΏΠΎΠ»Π½Π΅Π½ большим количСством ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ, Π½ΠΎ Π² ΠΊΠΎΠ½Ρ†Π΅ наш ΠΊΠΎΠ΄ сохраняСтся.
Анализ:  

  • printf Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ содСрТит a + b, Π° Π½Π΅ add(a, b), ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ макросы Ρ€Π°ΡΡˆΠΈΡ€ΠΈΠ»ΠΈΡΡŒ.
  • ΠšΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ ΡƒΠ΄Π°Π»Π΅Π½Ρ‹.
  • #include отсутствуСт, вмСсто этого ΠΌΡ‹ Π²ΠΈΠ΄ΠΈΠΌ ΠΌΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°. Π˜Ρ‚Π°ΠΊ, Ρ„Π°ΠΉΠ»Ρ‹ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΎΠ² Π±Ρ‹Π»ΠΈ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½Ρ‹ ΠΈ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½Ρ‹ Π² наш исходный Ρ„Π°ΠΉΠ».

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

Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ шагом являСтся компиляция filename.i ΠΈ созданиС Ρ„Π°ΠΉΠ»Π°; ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½Ρ‹ΠΉ скомпилированный Π²Ρ‹Ρ…ΠΎΠ΄Π½ΠΎΠΉ Ρ„Π°ΠΉΠ» filename.s . Π­Ρ‚ΠΎΡ‚ Ρ„Π°ΠΉΠ» находится Π² инструкциях уровня сборки. Π”Π°Π²Π°ΠΉΡ‚Π΅ посмотрим Π½Π° этот Ρ„Π°ΠΉΠ», ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ $vi filename.s Β 

Π‘Π½ΠΈΠΌΠΎΠΊ ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΎΠ½ написан Π½Π° языкС ассСмблСра, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ассСмблСр ΠΏΠΎΠ½ΠΈΠΌΠ°Π΅Ρ‚.

Π‘Π±ΠΎΡ€ΠΊΠ°
На этом этапС имя Ρ„Π°ΠΉΠ»Π°.s бСрСтся Π² качСствС Π²Ρ…ΠΎΠ΄Π½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ прСобразуСтся ассСмблСром Π² имя_Ρ„Π°ΠΉΠ»Π°.o . Π­Ρ‚ΠΎΡ‚ Ρ„Π°ΠΉΠ» содСрТит инструкции машинного уровня. На этом этапС Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ ΠΊΠΎΠ΄ прСобразуСтся Π² ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΉ язык, Π²Ρ‹Π·ΠΎΠ²Ρ‹ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ printf(), Π½Π΅ Ρ€Π°Π·Ρ€Π΅ΡˆΠ°ΡŽΡ‚ΡΡ. Π”Π°Π²Π°ΠΉΡ‚Π΅ просмотрим этот Ρ„Π°ΠΉΠ», ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ $vi filename.o Β 

Β 

БвязываниС

Π­Ρ‚ΠΎ Π·Π°ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ этап, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ всС связывания Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ с ΠΈΡ… опрСдСлСниями. Π›ΠΈΠ½ΠΊΠ΅Ρ€ Π·Π½Π°Π΅Ρ‚, Π³Π΄Π΅ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Ρ‹ всС эти Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. ΠšΠΎΠΌΠΏΠΎΠ½ΠΎΠ²Ρ‰ΠΈΠΊ Ρ‚Π°ΠΊΠΆΠ΅ выполняСт Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΡƒΡŽ Ρ€Π°Π±ΠΎΡ‚Ρƒ, ΠΎΠ½ добавляСт Π² Π½Π°ΡˆΡƒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ ΠΊΠΎΠ΄, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ трСбуСтся ΠΏΡ€ΠΈ запускС ΠΈ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. НапримСр, Π΅ΡΡ‚ΡŒ ΠΊΠΎΠ΄, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹ΠΉ для настройки срСды, Ρ‚Π°ΠΊΠΎΠΉ ΠΊΠ°ΠΊ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Π° Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки. Π­Ρ‚Ρƒ Π·Π°Π΄Π°Ρ‡Ρƒ Π»Π΅Π³ΠΊΠΎ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ $Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΈΠΌΠ΅Π½ΠΈ Ρ„Π°ΠΉΠ»Π°.o ΠΈ $Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΈΠΌΠ΅Π½ΠΈ Ρ„Π°ΠΉΠ»Π° . Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ этих ΠΊΠΎΠΌΠ°Π½Π΄ ΠΌΡ‹ Π·Π½Π°Π΅ΠΌ, ΠΊΠ°ΠΊ Π²Ρ‹Ρ…ΠΎΠ΄Π½ΠΎΠΉ Ρ„Π°ΠΉΠ» увСличиваСтся ΠΎΡ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π° Π΄ΠΎ исполняСмого Ρ„Π°ΠΉΠ»Π°. Π­Ρ‚ΠΎ связано с Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ ΠΊΠΎΠ΄ΠΎΠΌ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²Ρ‰ΠΈΠΊ добавляСт Π² Π½Π°ΡˆΡƒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ.
Β 

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ GCC ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ выполняСт Π΄ΠΈΠ½Π°ΠΌΠΈΡ‡Π΅ΡΠΊΡƒΡŽ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΊΡƒ, поэтому printf() динамичСски компонуСтся Π² ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΉ Π²Ρ‹ΡˆΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅. ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ΡΡŒ ΠΊ этому, этому ΠΈ этому для получСния Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΎ статичСских ΠΈ динамичСских ссылках.
Π­Ρ‚Π° ΡΡ‚Π°Ρ‚ΡŒΡ прСдоставлСна ​​ Π’ΠΈΠΊΠ°ΡˆΠ΅ΠΌ ΠšΡƒΠΌΠ°Ρ€ΠΎΠΌ . ΠŸΠΎΠΆΠ°Π»ΡƒΠΉΡΡ‚Π°, ΠΏΠΈΡˆΠΈΡ‚Π΅ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ, Ссли Π²Ρ‹ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΡ‚Π΅ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠ΅, ΠΈΠ»ΠΈ Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΏΠΎΠ΄Π΅Π»ΠΈΡ‚ΡŒΡΡ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠ΅ΠΉ ΠΏΠΎ Ρ‚Π΅ΠΌΠ΅, обсуТдаСмой Π²Ρ‹ΡˆΠ΅.

ΠŸΡ€ΠΎΡ†Π΅ΡΡ компиляции CICS (COBOL + CICS)

  • Π§Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ прСкомпилятор?
  • Π§Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ транслятор CICS?
  • Π§Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ компилятор?
  • Π§Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€ связСй?

Π’ настоящСС врСмя Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ часто ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹ΠΌΠΈ тСхнологиями Π² ΠΏΡ€ΠΈΠΊΠ»Π°Π΄Π½Ρ‹Ρ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°Ρ… CICS ΡΠ²Π»ΡΡŽΡ‚ΡΡ COBOL, CICS ΠΈ DB2.

Π’Π°ΠΊΠΈΠ΅ Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ, ΠΊΠ°ΠΊ IMS DB/DC, ΠΎΡ‡Π΅Π½ΡŒ Ρ€Π΅Π΄ΠΊΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Π² старых ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°Ρ…, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ пСрСнСсСны Π½Π° DB2.

Π˜Ρ‚Π°ΠΊ, Π² этой Π³Π»Π°Π²Π΅ ΠΌΡ‹ обсудим процСсс компиляции ΠΏΡ€ΠΈΠΊΠ»Π°Π΄Π½ΠΎΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ COBOL CICS DB2.

ΠŸΡ€Π΅ΠΆΠ΄Π΅ Ρ‡Π΅ΠΌ ΠΏΡ€ΠΈΡΡ‚ΡƒΠΏΠΈΡ‚ΡŒ ΠΊ процСссу компиляции CICS COBOL DB2, Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚Π΅ здСсь процСсс ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ компиляции COBOL DB2 , Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΎΠ±Ρ‰Π΅Π΅ прСдставлСниС ΠΎ процСссС компиляции.

Помимо процСсса ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ компиляции, ΠΊ компиляции Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ Π΅Ρ‰Π΅ ΠΎΠ΄ΠΈΠ½ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ шаг, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ называСтся «трансляция CICSΒ» для ΠΏΡ€ΠΈΠΊΠ»Π°Π΄Π½ΠΎΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ CICS с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ COBOL CICS DB2.

На ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΉ Π½ΠΈΠΆΠ΅ Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΠ΅ ΠΏΠΎΠΊΠ°Π·Π°Π½Ρ‹ этапы процСсса компиляции CICS –

Π§Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ прСкомпилятор?

ΠŸΡ€Π΅ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡ‚ΠΎΡ€ отдСляСт ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ DB2 ΠΎΡ‚ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ² Π΄Ρ€ΡƒΠ³ΠΈΡ… языков исходной ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ DB2 Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ Π·Π°ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Π½Ρ‹ со встроСнными ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π°ΠΌΠΈ SQL (EXEC SQL) для распознавания прСкомпилятором, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ компиляторов Π½Π΅ Ρ€Π°ΡΠΏΠΎΠ·Π½Π°ΡŽΡ‚ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ SQL.

ΠŸΡ€Π΅ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡ‚ΠΎΡ€ DB2 Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ Π·Π°ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Π½ Π΄ΠΎ этапа компиляции ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€Π΅Π΄ΠΎΡ‚Π²Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ ошибки компилятора. ΠŸΡ€Π΅ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡ‚ΠΎΡ€ DB2 ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠ΅Ρ‚ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ EXEC SQL Π² ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ ΠΈ Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ CALL.

ΠŸΡ€Π΅ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡ‚ΠΎΡ€ сканируСт ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½Π½Ρ‹ΠΉ исходный ΠΊΠΎΠ΄. ΠŸΡ€Π΅ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡ‚ΠΎΡ€ DB2 отдСляСт ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ SQL ΠΎΡ‚ языков C, COBOL, Fortran, PL/I ΠΈ ассСмблСра ΠΏΠ΅Ρ€Π΅Π΄ компиляциСй.

ΠžΡΠ½ΠΎΠ²Π½Ρ‹ΠΌ Π²Ρ‹Ρ…ΠΎΠ΄ΠΎΠΌ прСкомпилятора являСтся ΠΌΠΎΠ΄ΡƒΠ»ΡŒ запросов ΠΊ Π±Π°Π·Π΅ Π΄Π°Π½Π½Ρ‹Ρ… (DBRM). DBRM β€” это Π½Π°Π±ΠΎΡ€ Π΄Π°Π½Π½Ρ‹Ρ…, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ содСрТит ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ SQL ΠΈ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… хоста, ΠΈΠ·Π²Π»Π΅ΠΊΠ°Π΅ΠΌΡƒΡŽ ΠΈΠ· исходной ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π²ΠΎ врСмя ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ компиляции ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. ЦСлью DBRM являСтся ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Π° запросов SQL Π² DB2 Π²ΠΎ врСмя процСсса связывания.

Π§Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Ρ‡ΠΈΠΊ CICS?

ВстроСнный транслятор CICS ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ исходный ΠΊΠΎΠ΄ CICS Π·Π° ΠΎΠ΄ΠΈΠ½ шаг. ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ‚ΠΎΡ€Ρ‹, ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‰ΠΈΠ΅ встроСнный транслятор, ΡΠΊΠ°Π½ΠΈΡ€ΡƒΡŽΡ‚ исходный ΠΊΠΎΠ΄ прилоТСния ΠΈ Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‚ встроСнный транслятор Π² ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… Ρ‚ΠΎΡ‡ΠΊΠ°Ρ….

ВстроСнный транслятор ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠ΅Ρ‚ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ EXEC CICS Π² ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ ΠΈ Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ CALL, ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ языку. ВСрсии встроСнного транслятора доступны для языков — C, C++, COBOL ΠΈ PL/I.

Благодаря встроСнному транслятору Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ выполняСтся быстрСС, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Π½Π΅ трСбуСтся ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ этапа ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Π°. Π‘Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ листинг содСрТит ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ исходного ΠΊΠΎΠ΄Π° ΠΈ сообщСния ΠΎΠ± ΠΎΡˆΠΈΠ±ΠΊΠ°Ρ… CICS, Π²ΠΊΠ»ΡŽΡ‡Π΅Π½Π½Ρ‹Π΅ Π² листинг компилятора.

ΠŸΠΎΡΡ‚Π°Π²Π»ΡΠ΅ΠΌΡ‹Π΅ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Π΅ трансляторы ΠΈΠ·ΠΌΠ΅Π½ΡΡŽΡ‚ Π½ΠΎΠΌΠ΅Ρ€Π° строк Π² исходных ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°Ρ… Π²Ρ‹Π·ΠΎΠ²Π°ΠΌΠΈ, сгСнСрированными транслятором, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ ΠΏΡ€ΠΈ ΠΎΡ‚Π»Π°Π΄ΠΊΠ΅ ΠΏΡ€ΠΈΠΊΠ»Π°Π΄Π½ΠΎΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹.

Благодаря встроСнному ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Ρ‡ΠΈΠΊΡƒ процСсс ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Π° ΠΈ компиляции ΠΌΠ΅Π½Π΅Π΅ ΠΏΠΎΠ΄Π²Π΅Ρ€ΠΆΠ΅Π½ ошибкам, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π½Π΅Ρ‚ нСобходимости ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ΠΈΡ‚ΡŒ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½Π½Ρ‹Π΅ элСмСнты. ВСрсии языковых компиляторов, ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‰ΠΈΠ΅ встроСнный транслятор, пСрСчислСны Π² Ρ€Π°Π·Π΄Π΅Π»Π΅ ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° языков высокого уровня.

Π§Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ компилятор?

ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ†ΠΈΡ β€” это Π²Π°ΠΆΠ½Ρ‹ΠΉ процСсс прСобразования ΠΊΠΎΠ΄Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ высокого уровня (COBOL) Π² ΠΊΠΎΠ΄ Π½ΠΈΠ·ΠΊΠΎΠ³ΠΎ уровня. Код языка Π½ΠΈΠ·ΠΊΠΎΠ³ΠΎ уровня β€” это язык машинного уровня, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠ½ΡΡ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ машина.

Π­Ρ‚ΠΎ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· Π²Π°ΠΆΠ½Π΅ΠΉΡˆΠΈΡ… этапов ΠΆΠΈΠ·Π½Π΅Π½Π½ΠΎΠ³ΠΎ Ρ†ΠΈΠΊΠ»Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ. ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ‚ΠΎΡ€ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΈΡΡ…ΠΎΠ΄Π½ΡƒΡŽ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ Π² ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹ΠΉ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ.

ΠŸΡ€ΠΈ нСобходимости ΠΎΠ½ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ элСмСнты ΠΊΠΎΠΏΠΈΠΈ, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ для компиляции, ΠΈΠ· ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹Ρ… Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ ΠΊΠΎΠΏΠΈΠΉ. Π’ΠΎ врСмя компиляции компилятор ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚ Π²Ρ‹Ρ…ΠΎΠ΄Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π°ΡΠΏΠ΅Ρ‡Π°Ρ‚Π°Ρ‚ΡŒ ΠΈΠ»ΠΈ ΠΎΡ‚ΠΎΠ±Ρ€Π°Π·ΠΈΡ‚ΡŒ Π½Π° Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π»Π΅ ΠΈΠ»ΠΈ ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€Π΅.

Π§Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€ связСй?

Π Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΊΠΈ связываСт ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΡƒΡŽ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ с Π»ΡŽΠ±Ρ‹ΠΌΠΈ Π²Ρ‹Π·Ρ‹Π²Π°Π΅ΠΌΡ‹ΠΌΠΈ ΠΈΠ· Π½Π΅Π΅ ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°ΠΌΠΈ, Π° Ρ‚Π°ΠΊΠΆΠ΅ создаСт исполняСмый ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ для ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. Π Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΊΠΈ, ΡΠΎΠ·Π΄Π°ΡŽΡ‰ΠΈΠΉ исполняСмый ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡ‹ΠΉ Π·Π°Π³Ρ€ΡƒΠ·ΠΎΡ‡Π½Ρ‹ΠΌ ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΌ.

Π Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€ связСй связываСт ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΡƒΡŽ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ с ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ»ΠΈ нСсколькими систСмными ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°ΠΌΠΈ. Однако ΠΎΠ½ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠ²ΡΠ·Π°Ρ‚ΡŒ Π΅Π³ΠΎ с ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°ΠΌΠΈ COBOL. Π¨Π°Π³ рСдактирования ссылки ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, созданный Π½Π° этапС компиляции, Π² качСствС Π²Ρ…ΠΎΠ΄Π½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ…, ΠΈ ссылка Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΡƒΠ΅Ρ‚ Π΅Π³ΠΎ для создания ΠΎΠΊΠΎΠ½Ρ‡Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π° Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ.