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

1.3 ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ‚ΠΎΡ€ ΠΈ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ — ΠžΡΠ½ΠΎΠ²Ρ‹ программирования

Как ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ‚ΠΎΡ€ Ρ‚Π°ΠΊ ΠΈ Π˜Π½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ ΠΈΠΌΠ΅ΡŽΡ‚ ΠΎΠ΄Π½ΠΎ ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ β€” ΠΊΠΎΠ½Π²Π΅Ρ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ инструкции языка высокого уровня (ΠΊΠ°ΠΊ C ΠΈΠ»ΠΈ Java) Π² Π±ΠΈΠ½Π°Ρ€Π½ΡƒΡŽ Ρ„ΠΎΡ€ΠΌΡƒ, ΠΏΠΎΠ½ΡΡ‚Π½ΡƒΡŽ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Ρƒ. Π­Ρ‚ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ΅ обСспСчСниС, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠΎΠ΅ для запуска высокоуровнСвых ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ ΠΈ ΠΊΠΎΠ΄ΠΎΠ² выполняСмых Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ Π·Π°Π΄Π°Ρ‡ΠΈ. Для Ρ€Π°Π·Π½Ρ‹Ρ… высокоуровнСвых языков Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π½Ρ‹ спСцифичныС компиляторы/ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Ρ‹. НС смотря Π½Π° Ρ‚ΠΎ Ρ‡Ρ‚ΠΎ ΠΊΠ°ΠΊ компилятор Ρ‚Π°ΠΊ ΠΈ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ ΠΏΡ€Π΅ΡΠ»Π΅Π΄ΡƒΡŽΡ‚ ΠΎΠ΄Π½Ρƒ ΠΈ Ρ‚Ρƒ ΠΆΠ΅ Ρ†Π΅Π»ΡŒ, ΠΎΠ½ΠΈ ΠΎΡ‚Π»ΠΈΡ‡Π°ΡŽΡ‚ΡΡ способом выполнСния своСй Π·Π°Π΄Π°Ρ‡ΠΈ, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ конвСртирования высокоуровнСвого языка Π² ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹Π΅ инструкции. Π’ этой ΡΡ‚Π°Ρ‚ΡŒΠ΅ ΠΌΡ‹ ΠΏΠΎΠ³ΠΎΠ²ΠΎΡ€ΠΈΠΌ ΠΎ Π±Π°Π·ΠΎΠ²ΠΎΠΉ Ρ€Π°Π±ΠΎΡ‚Π΅ ΠΎΠ±ΠΎΠΈΡ… ΠΈ Π²Ρ‹Π΄Π΅Π»ΠΈΠΌ Π³Π»Π°Π²Π½Ρ‹Π΅ отличия ΠΌΠ΅ΠΆΠ΄Ρƒ компилятором ΠΈ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ΠΎΠΌ.

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

ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ‚ΠΎΡ€ транслируСт высокоуровнСвый язык Π² ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΉ. Когда ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ ΠΏΠΈΡˆΠ΅Ρ‚ ΠΊΠΎΠ΄ Π½Π° языкС высокого уровня, Ρ‚Π°ΠΊΠΎΠΌ ΠΊΠ°ΠΊ Java, ΠΈ Ρ…ΠΎΡ‡Π΅Ρ‚ Π΅Π³ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ, Ρ‚ΠΎ ΠΏΡ€Π΅ΠΆΠ΄Π΅ Ρ‡Π΅ΠΌ это ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ сдСлано, Π±ΡƒΠ΄Π΅Ρ‚ использован ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΉ компилятор Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π½Π½Ρ‹ΠΉ для Java. ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ‚ΠΎΡ€ сначала сканируСт всю ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ, Π° ΠΏΠΎΡ‚ΠΎΠΌ транслируСт Π΅Π΅ Π² ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π½Ρ‹ΠΌ процСссором, послС Ρ‡Π΅Π³ΠΎ Π±ΡƒΠ΄ΡƒΡ‚ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½Ρ‹ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ Π·Π°Π΄Π°Ρ‡ΠΈ.

На ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ΅ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π±Π°Π·ΠΎΠ²ΠΎΠ΅ ΠΎΡ‡Π΅Ρ€Ρ‚Π°Π½ΠΈΠ΅ процСсса компиляции. Π’ΡƒΡ‚ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° написанная Π½Π° языкС высокого уровня ΠΏΠΎΠΊΠ°Π·Π°Π½Π° ΠΊΠ°ΠΊ Β«Π˜ΡΡ…ΠΎΠ΄Π½Ρ‹ΠΉ ΠΊΠΎΠ΄Β», Π° сконвСртированный называСтся Β«Π˜ΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΡ‹ΠΉ ΠΊΠΎΠ΄Β».

Π˜Π½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€

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

ΠžΡ‡Π΅Ρ€Ρ‚Π°Π½ΠΈΠ΅ процСсса ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ†ΠΈΠΈ Π½Π° ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ΅ Π²Ρ‹ΡˆΠ΅ ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ сначала исходный ΠΊΠΎΠ΄ конвСртируСтся Π² ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½ΡƒΡŽ Ρ„ΠΎΡ€ΠΌΡƒ, Π° Π·Π°Ρ‚Π΅ΠΌ выполняСтся ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ΠΎΠΌ.

НиТС пСрСчислСны Π³Π»Π°Π²Π½Ρ‹Π΅ отличия ΠΌΠ΅ΠΆΠ΄Ρƒ компилятором ΠΈ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ΠΎΠΌ:

  • Π˜Π½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ Π±Π΅Ρ€Π΅Ρ‚ ΠΎΠ΄Π½Ρƒ ΠΈΠ½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡŽ, транслируСт ΠΈ выполняСт Π΅Π΅, Π° Π·Π°Ρ‚Π΅ΠΌ Π±Π΅Ρ€Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΡƒΡŽ ΠΈΠ½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡŽ. ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ‚ΠΎΡ€ ΠΆΠ΅ транслируСт всю ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ сразу, Π° ΠΏΠΎΡ‚ΠΎΠΌ выполняСт Π΅Π΅.
  • ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ‚ΠΎΡ€ Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΎΡ‚Ρ‡Π΅Ρ‚ ΠΎΠ± ΠΎΡˆΠΈΠ±ΠΊΠ°Ρ… послС трансляции всСго, Π² Ρ‚ΠΎ врСмя ΠΊΠ°ΠΊ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ ΠΏΡ€Π΅ΠΊΡ€Π°Ρ‚ΠΈΡ‚ Ρ‚Ρ€Π°Π½ΡΠ»ΡΡ†ΠΈΡŽ послС ΠΏΠ΅Ρ€Π²ΠΎΠΉ Π½Π°ΠΉΠ΄Π΅Π½Π½ΠΎΠΉ ошибки.
  • ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ‚ΠΎΡ€ ΠΏΠΎ ΡΡ€Π°Π²Π½Π΅Π½ΠΈΡŽ с ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ΠΎΠΌ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ большС Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ для Π°Π½Π°Π»ΠΈΠ·Π° ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ языка высокого уровня.
  • Помимо Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ Π½Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ ΠΈ Π°Π½Π°Π»ΠΈΠ·, ΠΎΠ±Ρ‰Π΅Π΅ врСмя выполнСния ΠΊΠΎΠ΄Π° компилятора быстрСС Π² сравнСнии с ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ΠΎΠΌ.

Как Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ / компилятор



Как Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ / компилятор? Π’ Ρ‡Π΅ΠΌ Ρ€Π°Π·Π½ΠΈΡ†Π° ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ΠΎΠΌ ΠΈ компилятором?

compiler-construction interpreter
ΠŸΠΎΠ΄Π΅Π»ΠΈΡ‚ΡŒΡΡ Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ developer Β  Β  04 ΠΌΠ°Ρ€Ρ‚Π° 2010 Π² 06:24

8 ΠΎΡ‚Π²Π΅Ρ‚ΠΎΠ²


  • Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Π»ΠΈ CUDA ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ ΠΈΠ»ΠΈ компилятор?

    Π­Ρ‚ΠΎ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ Π³Π»ΡƒΠΏΡ‹ΠΉ вопрос, Π½ΠΎ ΠΌΠ½Π΅ интСрСсно, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Π»ΠΈ CUDA ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ ΠΈΠ»ΠΈ компилятор? МнС интСрСсно, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ я Π½Π΅ совсСм ΡƒΠ²Π΅Ρ€Π΅Π½, ΠΊΠ°ΠΊ CUDA удаСтся Π·Π°ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ исходный ΠΊΠΎΠ΄ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π½Π° Π΄Π²ΡƒΡ… ΠΊΠ°Ρ€Ρ‚Π°Ρ… с Ρ€Π°Π·Π½Ρ‹ΠΌΠΈ Π²Ρ‹Ρ‡ΠΈΡΠ»ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌΠΈ возмоТностями.

  • Как компилятор ΠΈ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Π½Π° ΠΎΠ΄Π½ΠΎΠΌ языкС?

    Π― ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Π» достаточно объяснСний ΠΎΠ± ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠΈ компилятора, ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Π° ΠΈ things, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ ΠΈ Ρ‚ΠΎ, ΠΈ Π΄Ρ€ΡƒΠ³ΠΎΠ΅. Π― Π½Π΅ нашСл, ΠΊΠ°ΠΊ компилятор ΠΈ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Π½Π° ΠΎΠ΄Π½ΠΎΠΌ языкС.



60

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

ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ‚ΠΎΡ€Ρ‹ Π±Ρ‹Π»ΠΈ ΠΏΠ΅Ρ€Π²Ρ‹ΠΌ Π²ΠΈΠ΄ΠΎΠΌ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ-ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Ρ‡ΠΈΠΊΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π±Ρ‹Π»ΠΈ написаны. ИдСя проста: Π²Ρ‹ ΠΏΠΈΡˆΠ΅Ρ‚Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ, Π° Π·Π°Ρ‚Π΅ΠΌ ΠΏΠ΅Ρ€Π΅Π΄Π°Π΅Ρ‚Π΅ Π΅Π΅ компилятору, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π΅Π΅ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ΠΈΡ‚. Π—Π°Ρ‚Π΅ΠΌ Π²Ρ‹ запускаСтС Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚.

ΠŸΠ΅Ρ€Π΅Π²ΠΎΠ΄Ρ‡ΠΈΠΊΠΈ

Π˜Π½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ — это Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°, которая ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ΠΈΡ‚ язык высокого уровня Π½Π° язык Π½ΠΈΠ·ΠΊΠΎΠ³ΠΎ уровня, Π½ΠΎ Π΄Π΅Π»Π°Π΅Ρ‚ это Π² ΠΌΠΎΠΌΠ΅Π½Ρ‚ запуска ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. Π’Ρ‹ ΠΏΠΈΡˆΠ΅Ρ‚Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ тСкстового Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€Π° ΠΈΠ»ΠΈ Ρ‡Π΅Π³ΠΎ-Ρ‚ΠΎ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎΠ³ΠΎ, Π° Π·Π°Ρ‚Π΅ΠΌ ΠΏΠΎΡ€ΡƒΡ‡Π°Π΅Ρ‚Π΅ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Ρƒ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ. Оно Π±Π΅Ρ€Π΅Ρ‚ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ, ΠΏΠΎ ΠΎΠ΄Π½ΠΎΠΉ строкС Π·Π° Ρ€Π°Π·, ΠΈ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ΠΈΡ‚ ΠΊΠ°ΠΆΠ΄ΡƒΡŽ строку ΠΏΠ΅Ρ€Π΅Π΄ запуском: ΠΎΠ½Π° ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ΠΈΡ‚ ΠΏΠ΅Ρ€Π²ΡƒΡŽ строку ΠΈ запускаСт Π΅Π΅, Π·Π°Ρ‚Π΅ΠΌ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ΠΈΡ‚ Π²Ρ‚ΠΎΡ€ΡƒΡŽ строку ΠΈ запускаСт Π΅Π΅ ΠΈ Ρ‚.

Π΄.

Π₯арактСристики компилятора:

  • Ρ‚Ρ€Π°Ρ‚ΠΈΡ‚ ΠΌΠ½ΠΎΠ³ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ Π½Π° Π°Π½Π°Π»ΠΈΠ· ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹
  • Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΉ исполняСмый Ρ„Π°ΠΉΠ» прСдставляСт собой Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ Ρ„ΠΎΡ€ΠΌΡƒ машинного Π΄Π²ΠΎΠΈΡ‡Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°
  • ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π½ΠΎΠ΅ ΠΎΠ±ΠΎΡ€ΡƒΠ΄ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚ (выполняСт) ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄
  • Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ происходит быстро

Π₯арактСристики ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Ρ‡ΠΈΠΊΠ°:

  • Π½Π° это тратится ΡΡ€Π°Π²Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΌΠ°Π»ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ Π°Π½Π°Π»ΠΈΠ· ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹
  • ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ являСтся своСго Ρ€ΠΎΠ΄Π° ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½Ρ‹ΠΌ ΠΊΠΎΠ΄ΠΎΠΌ
  • ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ интСрпрСтируСтся Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΎΠΉ
  • Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ происходит ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎ

ΠŸΠΎΠ΄Π΅Π»ΠΈΡ‚ΡŒΡΡ Adriaan Stander Β  Β  04 ΠΌΠ°Ρ€Ρ‚Π° 2010 Π² 06:29



31

ΠŸΠ΅Ρ€Π΅Π²ΠΎΠ΄Ρ‡ΠΈΠΊ S — > T ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ ΠΊΠΎΠ΄, Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½Π½Ρ‹ΠΉ Π½Π° исходном языкС S, ΠΈ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ΠΈΡ‚ Π΅Π³ΠΎ Π² эквивалСнтный ΠΊΠΎΠ΄, Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½Π½Ρ‹ΠΉ Π½Π° Π΄Ρ€ΡƒΠ³ΠΎΠΌ (Ρ†Π΅Π»Π΅Π²ΠΎΠΌ) языкС T.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Ρ‡ΠΈΠΊΠΎΠ²

:

  • ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ‚ΠΎΡ€Ρ‹-ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ΠΈΡ‚ высокоуровнСвый ΠΊΠΎΠ΄ Π² Π½ΠΈΠ·ΠΊΠΎΡƒΡ€ΠΎΠ²Π½Π΅Π²Ρ‹ΠΉ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Java — > JVM
  • АссСмблСры-ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ΠΈΡ‚ ΠΊΠΎΠ΄ языка assembly Π² ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ x86as — > x86
  • ВысокоуровнСвыС ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Ρ‡ΠΈΠΊΠΈ-пСрСводят ΠΊΠΎΠ΄ с ΠΎΠ΄Π½ΠΎΠ³ΠΎ PL Π½Π° Π΄Ρ€ΡƒΠ³ΠΎΠΉ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Java — > C
  • ДСкомпиляторы-пСрСводят Π½ΠΈΠ·ΠΊΠΎΡƒΡ€ΠΎΠ²Π½Π΅Π²Ρ‹ΠΉ ΠΊΠΎΠ΄ Π² высокоуровнСвый, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Java JVM Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄ -> Java

ΠŸΠ΅Ρ€Π΅Π²ΠΎΠ΄Ρ‡ΠΈΠΊ с ΠΌΠΎΠΆΠ½ΠΎ ΠΊΠΎΠ΄Π°, выраТСнная Π² языкС Π‘, ΠΈ Π½Π΅ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎ выполняСт этот ΠΊΠΎΠ΄. Он Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚, извлСкая, анализируя ΠΈ выполняя ΠΎΠ΄Π½Ρƒ ΠΈΠ½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡŽ Π·Π° Ρ€Π°Π·.

ΠžΡ‚Π»ΠΈΡ‡Π½ΠΎ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚, ΠΊΠΎΠ³Π΄Π° ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ Π²Π²ΠΎΠ΄ΠΈΡ‚ инструкции Π² ΠΈΠ½Ρ‚Π΅Ρ€Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΠΌ Ρ€Π΅ΠΆΠΈΠΌΠ΅ (ΠΏΠΎΠ΄ΡƒΠΌΠ°ΠΉΡ‚Π΅ Python) ΠΈ Ρ…ΠΎΡ‚Π΅Π» Π±Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ ΠΏΠ΅Ρ€Π΅Π΄ Π²Π²ΠΎΠ΄ΠΎΠΌ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ инструкции. Π’Π°ΠΊΠΆΠ΅ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ, ΠΊΠΎΠ³Π΄Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½Π° Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄ΠΈΠ½ Ρ€Π°Π· ΠΈΠ»ΠΈ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ пСрСносимости.

  • Π˜Π½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ†ΠΈΡ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π½Π°ΠΌΠ½ΠΎΠ³ΠΎ ΠΌΠ΅Π΄Π»Π΅Π½Π½Π΅Π΅, Ρ‡Π΅ΠΌ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ собствСнного машинного ΠΊΠΎΠ΄Π°
  • Π˜Π½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ†ΠΈΡ языка высокого уровня происходит Π² ~100 Ρ€Π°Π· ΠΌΠ΅Π΄Π»Π΅Π½Π½Π΅Π΅
  • Π˜Π½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ†ΠΈΡ языка срСднСго уровня (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄Π° JVM) происходит ~10 ΠΌΠ΅Π΄Π»Π΅Π½Π½Π΅Π΅
  • Если инструкция вызываСтся ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎ, ΠΎΠ½Π° Π±ΡƒΠ΄Π΅Ρ‚ ΠΌΠ½ΠΎΠ³ΠΎΠΊΡ€Π°Ρ‚Π½ΠΎ ΠΏΡ€ΠΎΠ°Π½Π°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π° — ΠΎΡ‚Π½ΠΈΠΌΠ°Π΅Ρ‚ ΠΌΠ½ΠΎΠ³ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ!
  • НСт нСобходимости ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠ΄

ПовСдСниС

  • ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ‚ΠΎΡ€ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ΠΈΡ‚ исходный ΠΊΠΎΠ΄ Π² ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΉ, Π½ΠΎ Π½Π΅ выполняСт исходный ΠΈΠ»ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹ΠΉ ΠΊΠΎΠ΄.

  • Π˜Π½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ выполняСт исходный ΠΊΠΎΠ΄ ΠΏΠΎ ΠΎΠ΄Π½ΠΎΠΉ инструкции Π·Π° Ρ€Π°Π·, Π½ΠΎ Π½Π΅ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ΠΈΡ‚ исходный ΠΊΠΎΠ΄.

ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²Π»Π΅Π½ΠΈΠ΅

  • ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ‚ΠΎΡ€Ρƒ трСбуСтся довольно ΠΌΠ½ΠΎΠ³ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ пСрСвСсти ΠΈΡΡ…ΠΎΠ΄Π½ΡƒΡŽ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ Π² собствСнный ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄, Π½ΠΎ ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ происходит быстро
  • Π˜Π½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ Π½Π΅ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎ Π½Π°Ρ‡ΠΈΠ½Π°Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ ΠΈΡΡ…ΠΎΠ΄Π½ΡƒΡŽ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ, Π½ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ происходит ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎ

Π˜Π½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠ΅ компиляторы

Π˜Π½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΉ компилятор-это Ρ…ΠΎΡ€ΠΎΡˆΠΈΠΉ компромисс ΠΌΠ΅ΠΆΠ΄Ρƒ компиляторами ΠΈ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Π°ΠΌΠΈ. Он ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ΠΈΡ‚ ΠΈΡΡ…ΠΎΠ΄Π½ΡƒΡŽ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ Π² ΠΊΠΎΠ΄ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΉ ΠΌΠ°ΡˆΠΈΠ½Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π·Π°Ρ‚Π΅ΠΌ интСрпрСтируСтся.

Π˜Π½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΉ компилятор сочСтаСт быстрый ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ с ΡƒΠΌΠ΅Ρ€Π΅Π½Π½ΠΎ быстрым исполнСниСм ΠΏΡ€ΠΈ условии, Ρ‡Ρ‚ΠΎ:

  • VM ΠΊΠΎΠ΄ Π½ΠΈΠΆΠ΅, Ρ‡Π΅ΠΌ исходный язык, Π½ΠΎ Π²Ρ‹ΡˆΠ΅, Ρ‡Π΅ΠΌ собствСнный ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄
  • VM инструкции ΠΈΠΌΠ΅ΡŽΡ‚ простыС Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Ρ‹ (ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ быстро ΠΏΡ€ΠΎΠ°Π½Π°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Ρ‹ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ΠΎΠΌ)

ΠŸΡ€ΠΈΠΌΠ΅Ρ€: JDK прСдоставляСт ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΉ компилятор для Java.

ΠŸΠΎΠ΄Π΅Π»ΠΈΡ‚ΡŒΡΡ martynas Β  Β  04 мая 2014 Π² 12:48



19

ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ‚ΠΎΡ€, ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΡŽΡ‰ΠΈΠΉ исходный ΠΊΠΎΠ΄ Π½Π° ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π½ΠΎΠΌ языкС Π² Π΄Ρ€ΡƒΠ³ΠΎΠΉ.

Π˜Π½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€, Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‰ΠΈΠΉ исходный ΠΊΠΎΠ΄ нСпосрСдствСнно (ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Π²Π½ΡƒΡ‚Ρ€ΠΈ своСй собствСнной Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΉ ΠΌΠ°ΡˆΠΈΠ½Ρ‹).


(источник: answers.com )

Как ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ стоит Π΄ΠΎΡ€ΠΎΠ³ΠΎ.

ΠŸΠΎΠ΄Π΅Π»ΠΈΡ‚ΡŒΡΡ KMΓ₯n Β  Β  04 ΠΌΠ°Ρ€Ρ‚Π° 2010 Π² 07:31


  • ДинамичСский / статичСский язык ΠΈ компилятор / ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€

    Π£ мСня Π΅ΡΡ‚ΡŒ нСсколько вопросов: ДинамичСский язык программирования всСгда интСрпрСтируСтся? Π”ΡƒΠΌΠ°ΡŽ, Π΄Π°, Π½ΠΎ ΠΏΠΎΡ‡Π΅ΠΌΡƒ? Π‘ΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ Π»ΠΈ ΠΊΠ°ΠΊΠΈΠ΅-Π»ΠΈΠ±ΠΎ динамичСскиС языки со статичСской систСмой Π½Π°Π±ΠΎΡ€Π° тСкста? Π―Π·Ρ‹ΠΊ программирования со статичСской систСмой Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΠΈ всСгда компилируСтся? Π”Ρ€ΡƒΠ³ΠΈΠΌΠΈ словами,…

  • PHP Π˜Π½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ / ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ‚ΠΎΡ€

    Π― ΠΏΡ‹Ρ‚Π°ΡŽΡΡŒ ΠΏΠΎΠ½ΡΡ‚ΡŒ, ΠΊΠ°ΠΊ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ компилятор/ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ php. Π― попытался Π·Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ исходный ΠΊΠΎΠ΄ php ΠΈ попытался ΠΏΠΎΠ½ΡΡ‚ΡŒ, ΠΊΠ°ΠΊ ΠΎΠ½ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚. Π― Π½Π΅ смог Π½Π°ΠΉΡ‚ΠΈ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΡƒΡŽ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡŽ. WOuld Π±Ρ‹Π»ΠΎ Π±Ρ‹ Π·Π΄ΠΎΡ€ΠΎΠ²ΠΎ, Ссли Π±Ρ‹ ΠΊΡ‚ΠΎ-Ρ‚ΠΎ ΠΌΠΎΠ³ ΠΏΡ€ΠΎΠ»ΠΈΡ‚ΡŒ свСт Π½Π° ΠΌΠΎΠ΄ΡƒΠ»ΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΄Π΅Π»Π°ΡŽΡ‚ компилятор php, Π° Ρ‚Π°ΠΊΠΆΠ΅ Π½Π° Ρ‚ΠΎ, ΠΊΠ°ΠΊ…



18

Π’ Ρ‡Π΅ΠΌ Ρ€Π°Π·Π½ΠΈΡ†Π° ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ΠΎΠΌ ΠΈ компилятором?

ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ‚ΠΎΡ€ сначала сканируСт всю ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ Ρ†Π΅Π»ΠΈΠΊΠΎΠΌ, Π° Π·Π°Ρ‚Π΅ΠΌ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ΠΈΡ‚ Π΅Π΅ Π² ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ процСссором ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π°.

Π˜Π½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Ρ‹ пСрСводят ΠΎΠ΄Π½ΠΎ ΡƒΡ‚Π²Π΅Ρ€ΠΆΠ΄Π΅Π½ΠΈΠ΅ Π½Π° ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΉ язык, Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ Π΅Π³ΠΎ ΠΈ пСрСходят ΠΊ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌΡƒ.

НапримСр: компилятор выдаст ΠΏΠΎΡ‡Ρ‚ΠΈ всю ΠΎΡˆΠΈΠ±ΠΊΡƒ сразу, Π½ΠΎ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€, ΠΏΠΎΠΊΠ° инструкция, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ Π²Ρ‹ написали Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ

Как Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ / компилятор?

  • Π’ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΡƒΠ΅ΠΌΡ‹Ρ… языков, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ пСрСводятся Π½Π° ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΉ язык Π·Π°Ρ€Π°Π½Π΅Π΅ (справа).
  • Π˜Π½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚ΠΈΡ€ΡƒΠ΅ΠΌΡ‹Π΅ языки пСрСводятся Π²ΠΎ врСмя выполнСния.
  • ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Ρ‹ dBASE ΠΈ BASIC (срСдниС) пСрСводят исходный исходный ΠΊΠΎΠ΄.
  • Java ΠΈ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Ρ‹ Visual Basic (слСва) пСрСводят Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄ , ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ являСтся ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½Ρ‹ΠΌ языком, скомпилированным ΠΈΠ· исходного исходного ΠΊΠΎΠ΄Π° .

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

ΠŸΠΎΠ΄Π΅Π»ΠΈΡ‚ΡŒΡΡ Premraj Β  Β  21 июля 2015 Π² 23:18



7

Π Π°Π·Π½ΠΈΡ†Π° Π² Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊ ΠΎΠ½ΠΈ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚

Вопрос: для Ρ‡Π΅Π³ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ компиляторы ΠΈ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Ρ‹ ?

ΠžΡ‚Π²Π΅Ρ‚: Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ написаны Π½Π° языках высокого уровня (c#,java…). языки высокого уровня-это Ρ‚Π΅, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ содСрТат понятныС слова ΠΈ Ρ„Ρ€Π°Π·Ρ‹. Π‘ Π΄Ρ€ΡƒΠ³ΠΎΠΉ стороны, ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€ (ΠΊ Ρ‚ΠΎΠΌΡƒ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ, ΠΊΠΎΠ³Π΄Π° я написал эту ΡΡ‚Π°Ρ‚ΡŒΡŽ) ΠΏΠΎΠ½ΠΈΠΌΠ°Π΅Ρ‚ ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ являСтся 0-ΠΌ ΠΈ 1-ΠΌ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π΄Π²ΠΎΠΈΡ‡Π½Ρ‹ΠΌ/ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΌ ΠΊΠΎΠ΄ΠΎΠΌ. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Ρ‚ΡŒ высокоуровнСвый ΠΊΠΎΠ΄ Π² исходный ΠΊΠΎΠ΄, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ являСтся (Machine code/binary)., ΠΎΡ‚ΡΡŽΠ΄Π° ΠΈ слово converting.

Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, ΠΌΡ‹ ΠΏΡ€ΠΈΡ…ΠΎΠ΄ΠΈΠΌ ΠΊ Π²Ρ‹Π²ΠΎΠ΄Ρƒ, Ρ‡Ρ‚ΠΎ Ρ€Π°Π±ΠΎΡ‚Π° компилятора / ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Π° Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Π΅ высокоуровнСвого ΠΊΠΎΠ΄Π° Π² ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΉ.

Но Ρƒ ΠΎΠ±ΠΎΠΈΡ… Π΅ΡΡ‚ΡŒ Π΄Ρ€ΡƒΠ³ΠΎΠΉ способ ‘Translating’ ΠΊΠΎΠ΄

Π Π°Π·Π½ΠΈΡ†Π°:

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

ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠ΅Ρ‚ исходный ΠΊΠΎΠ΄ Π² ΠΊΠ°ΠΊΡƒΡŽ-Ρ‚ΠΎ ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½ΡƒΡŽ Ρ„ΠΎΡ€ΠΌΡƒ. Для статичСского языка компилятор ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠ΅Ρ‚ исходный ΠΊΠΎΠ΄ Π² assembly, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Π½Π΅ хранится Π½Π° дискС, Π·Π°Ρ‚Π΅ΠΌ ассСмблСр вызываСтся для прСобразования assembly Π² Π΄Π²ΠΎΠΈΡ‡Π½Ρ‹ΠΉ ΠΊΠΎΠ΄, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ хранится Π² Π²ΠΈΠ΄Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π° (ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ суффикс.o ΠΈΠ»ΠΈ .obj), Π·Π°Ρ‚Π΅ΠΌ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²Ρ‰ΠΈΠΊ вызываСтся для связывания ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ² с Π΄Π²ΠΎΠΈΡ‡Π½Ρ‹ΠΌ исполняСмым Ρ„Π°ΠΉΠ»ΠΎΠΌ. Π’Π°ΠΊΠΆΠ΅ принято Π½Π°Π·Ρ‹Π²Π°Ρ‚ΡŒ вСсь этот процСсс компиляции, сборки, связывания компиляциСй. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ gcc компилятор, Π½ΠΎ Π½Π° самом Π΄Π΅Π»Π΅ ΠΎΠ½ Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ cc1, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ являСтся компилятором для компиляции, as, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ являСтся ассСмблСром для сборки, ld, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ являСтся ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²Ρ‰ΠΈΠΊΠΎΠΌ для связывания.

ΠŸΠ΅Ρ€Π΅Π²ΠΎΠ΄Ρ‡ΠΈΠΊ:

язык, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΈΠΌΠ΅Π΅Ρ‚ ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½ΡƒΡŽ Ρ‚Π°ΠΊ Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡƒΡŽ Ρ„ΠΎΡ€ΠΌΡƒ Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄Π°, исходный ΠΊΠΎΠ΄ сначала прСобразуСтся Π² Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄, этот процСсс ΠΌΠΎΠΆΠ½ΠΎ Π½Π°Π·Π²Π°Ρ‚ΡŒ компиляциСй, ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠΌ слуТит javac. Π‘Π°ΠΉΡ‚-ΠΊΠΎΠ΄ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π·Π°ΠΏΡƒΡ‰Π΅Π½ Π½Π° хост-ΠΌΠ°ΡˆΠΈΠ½Π°Ρ…, Π΅ΠΌΡƒ Π½ΡƒΠΆΠ½Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°, которая Π½Π° самом Π΄Π΅Π»Π΅ являСтся процСссом с Ρ‚ΠΎΡ‡ΠΊΠΈ зрСния OS, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄ Π½Π° хост-машинС, эта ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° называСтся ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ΠΎΠΌ, ΠΏΠΎΠ΄ΡƒΠΌΠ°ΠΉΡ‚Π΅ ΠΎ java. НСкоторыС языки, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ python, Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡ†ΠΈΡŽ ΠΈ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ†ΠΈΡŽ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΎΠ΄Π½ΠΎΠ³ΠΎ

β€” ΠΎΠ±Π° ΠΈΠ·: https://www.quora.com/What-are-the-differences-between-a-compiler-an-interpreter-and-an-assembler-Provide-examples

Π‘Ρ€Π°Π²Π½Π΅Π½ΠΈΠ΅

ΠŸΠ΅Ρ€Π΅Π²ΠΎΠ΄Ρ‡ΠΈΠΊ

  • Анализ исходного ΠΊΠΎΠ΄Π° Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ‚ мСньшС Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ, Π½ΠΎ ΠΎΠ±Ρ‰Π΅Π΅ врСмя выполнСния ΠΌΠ΅Π΄Π»Π΅Π½Π½Π΅Π΅.
  • ΠŸΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ Π½Π΅ гСнСрируСтся, ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, ΠΏΠ°ΠΌΡΡ‚ΡŒ эффСктивна.
  • ΠŸΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°Π΅Ρ‚ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€, ΠΏΠΎΠΊΠ° Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ встрСчСна пСрвая ошибка, ΠΈ Π² этом случаС ΠΎΠ½Π° останавливаСтся. Π‘Π»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, ΠΎΡ‚Π»Π°Π΄ΠΊΠ° проста.

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

  • Анализ исходного ΠΊΠΎΠ΄Π° Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ‚ ΠΌΠ½ΠΎΠ³ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ, Π½ΠΎ ΠΎΠ±Ρ‰Π΅Π΅ врСмя выполнСния ΡΡ€Π°Π²Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ быстрСС.
  • Π“Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹ΠΉ ΠΊΠΎΠ΄, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π² дальнСйшСм Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ связывания, ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ большС памяти.
  • Он Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ сообщСниС ΠΎΠ± ошибкС Ρ‚ΠΎΠ»ΡŒΠΊΠΎ послС сканирования всСй ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ ΠΎΡ‚Π»Π°Π΄ΠΊΠ° ΡΡ€Π°Π²Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Ρ‚Ρ€ΡƒΠ΄Π½Π°.

— ΠΎΡ‚: https:/ / www.programiz.com / article/difference-compiler-interpreter

ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ с языками

Π˜Π½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ

  • Python
  • Ruby
  • PHP
  • JAVA (ВсСмогущий)
  • Perl
  • R
  • Powershell

составлСнный

  • C
  • C++
  • C#
  • Objective-C
  • SWIFT
  • Fortran

ΠŸΠΎΠ΄Π΅Π»ΠΈΡ‚ΡŒΡΡ user 451 Β  Β  05 июня 2015 Π² 14:31



0

Π’ Ρ‡Π΅ΠΌ Ρ€Π°Π·Π½ΠΈΡ†Π° ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ΠΎΠΌ ΠΈ компилятором?

Π’Ρ‹Ρ€Π°ΠΆΠ°ΡΡΡŒ прямо ΠΈ ΠΈΠ½Ρ‚ΡƒΠΈΡ‚ΠΈΠ²Π½ΠΎ:

  • ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ‚ΠΎΡ€ -это Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ΠΈΡ‚ Ρ‡ΠΈΡ‚Π°Π΅ΠΌΡ‹ΠΉ Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊΠΎΠΌ исходный ΠΊΠΎΠ΄ Π² ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ.

  • Π˜Π½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ -это Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ притворяСтся ΠΈΠ»ΠΈ ΠΈΠΌΠΈΡ‚ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€ для нСпосрСдствСнного чтСния ΠΈ выполнСния исходного ΠΊΠΎΠ΄Π°.

ΠŸΠΎΠ΄Π΅Π»ΠΈΡ‚ΡŒΡΡ Calculus Β  Β  15 июня 2018 Π² 10:16



0

ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ‚ΠΎΡ€Ρ‹-компилятор ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ΠΈΡ‚ исходный язык Π½Π° Ρ†Π΅Π»Π΅Π²ΠΎΠΉ. Π—Π°Ρ‚Π΅ΠΌ Ρ†Π΅Π»Π΅Π²ΠΎΠΉ язык ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ Π²Ρ…ΠΎΠ΄Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ ΠΈ Π²Ρ‹Π΄Π°Π΅Ρ‚ Π²Ρ‹Ρ…ΠΎΠ΄Π½Ρ‹Π΅.

ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ‚ΠΎΡ€ создаСт Ρ†Π΅Π»Π΅Π²ΠΎΠΉ ΠΊΠΎΠ΄ ΠΏΡƒΡ‚Π΅ΠΌ компиляции исходного ΠΊΠΎΠ΄Π°

Π·Π°Ρ‚Π΅ΠΌ Ρ†Π΅Π»Π΅Π²ΠΎΠΉ ΠΊΠΎΠ΄ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ Π²Ρ…ΠΎΠ΄Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ ΠΈ Π²Ρ‹Π΄Π°Π΅Ρ‚ Π²Ρ‹Ρ…ΠΎΠ΄Π½Ρ‹Π΅

Π˜Π½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Ρ‹-вмСсто Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ†Π΅Π»Π΅Π²ΠΎΠΉ ΠΊΠΎΠ΄, ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€, ΠΏΠΎ-Π²ΠΈΠ΄ΠΈΠΌΠΎΠΌΡƒ, ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ Π²Ρ…ΠΎΠ΄Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ нСпосрСдствСнно вмСстС с исходным ΠΊΠΎΠ΄ΠΎΠΌ ΠΈ Π²Ρ‹Π΄Π°Π΅Ρ‚ Π²Ρ‹Ρ…ΠΎΠ΄Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅.

Π˜Π½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ сопоставляСт Π²Π²ΠΎΠ΄ с Π²Ρ‹Π²ΠΎΠ΄ΠΎΠΌ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ исходной ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹

Π’ΠΎΠ³Π΄Π° машинно-языковая цСлСвая ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°, создаваСмая компилятором, Π³ΠΎΡ€Π°Π·Π΄ΠΎ быстрСС ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Π° сопоставляСт Π²Ρ…ΠΎΠ΄Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ с Π²Ρ‹Ρ…ΠΎΠ΄Π½Ρ‹ΠΌΠΈ. Однако, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ выполняСт ΠΈΡΡ…ΠΎΠ΄Π½ΡƒΡŽ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ построчно, ΠΎΠ½ Π΄Π°Π΅Ρ‚ Π»ΡƒΡ‡ΡˆΡƒΡŽ диагностику ошибок, Ρ‡Π΅ΠΌ компилятор.

Π‘ΠΏΡ€Π°Π²ΠΎΡ‡Π½ΠΈΠΊ- компиляторы: ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΡ‹, ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΈ инструмСнты АΠ₯О Π°ΠΊΠ° Π΄Ρ€Π°ΠΊΠΎΠ½ΡŒΡ ΠΊΠ½ΠΈΠ³Π°

ΠŸΠΎΠ΄Π΅Π»ΠΈΡ‚ΡŒΡΡ vaibhaw.vipul Β  Β  25 фСвраля 2018 Π² 09:21



-1

ΠŸΠΎΡΠΌΠΎΡ‚Ρ€ΠΈΡ‚Π΅ Π½Π° ΠΊΠ½ΠΈΠ³Ρƒ PLAI, это Π»ΡƒΡ‡ΡˆΠ΅Π΅ вступлСниС ΠΊ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ дыманичСского языка, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ я ΠΊΠΎΠ³Π΄Π°-Π»ΠΈΠ±ΠΎ Π½Π°Ρ…ΠΎΠ΄ΠΈΠ»:

Π―Π·Ρ‹ΠΊΠΈ программирования: ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΈ интСрпрСтация (c) Π¨Ρ€ΠΈΡ€Π°ΠΌ ΠšΡ€ΠΈΡˆΠ½Π°ΠΌΡƒΡ€Ρ‚ΠΈ

Π­Ρ‚Π° ΠΊΠ½ΠΈΠ³Π° посвящСна написанию ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Π° для динамичСского языка Π² схСмС (dr.Racket), с Π΅Π΅ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ свой собствСнный ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ для любого языка ΠΈ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ нСсколько совСтов ΠΏΠΎ OOP ΠΈΠ·

ΠΈ SmallTalk ΠΈ SOM: простая ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Π°Ρ машина:

ВсС соврСмСнныС ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Ρ‹ Π²ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‚ компилятор Π²Π½ΡƒΡ‚Ρ€ΠΈ: ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΡƒΡŽΡ‚ высокоуровнСвыС элСмСнты Π² Π½ΠΈΠ·ΠΊΠΎΡƒΡ€ΠΎΠ²Π½Π΅Π²Ρ‹ΠΉ, Π½ΠΎ пСрСносимый Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄ ΠΈΠ»ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ JIT для компиляции Π² ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ Π² RAM.

PS: Ссли ΠΊΡ‚ΠΎ-Ρ‚ΠΎ Ρ…ΠΎΡ‡Π΅Ρ‚ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ систСму SmallTalk Π½Π° Python, поТалуйста, ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° мСня.

ΠŸΠΎΠ΄Π΅Π»ΠΈΡ‚ΡŒΡΡ Dmitry Ponyatov Β  Β  28 ΠΌΠ°Ρ€Ρ‚Π° 2017 Π² 07:17


ΠŸΠΎΡ…ΠΎΠΆΠΈΠ΅ вопросы:


ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ‚ΠΎΡ€ ΠΈ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ Π² RUBY

Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Π»ΠΈ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ язык программирования ΠΈΠΌΠ΅Π» ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ ΠΈ компилятор? Ссли Π΄Π°, Ρ‚ΠΎ ΠΊΠ°ΠΊ ? ** я Π΄ΡƒΠΌΠ°ΡŽ, Ρ‡Ρ‚ΠΎ Ρƒ RUBY Π΅ΡΡ‚ΡŒ компилятор ΠΈ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ ** спасибо


Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Π»ΠΈ Python компилятор, ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ ΠΈΠ»ΠΈ ΠΈΡ… ΠΊΠΎΠΌΠ±ΠΈΠ½Π°Ρ†ΠΈΡŽ?

Π’ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹ΠΉ Π”ΡƒΠ±Π»ΠΈΠΊΠ°Ρ‚ : CPython-это ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄Π°? Мой вопрос Ρ‚Π°ΠΊΠΎΠ²: Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Π»ΠΈ Python компилятор, ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ ΠΈΠ»ΠΈ ΠΈΡ… ΠΊΠΎΠΌΠ±ΠΈΠ½Π°Ρ†ΠΈΡŽ?


Π§Ρ‚ΠΎ Titanium ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ ΠΈΠ»ΠΈ компилятор

ΠœΠΎΠΆΠ΅Ρ‚ Π»ΠΈ ΠΊΡ‚ΠΎ-Π½ΠΈΠ±ΡƒΠ΄ΡŒ ΠΎΠ±ΡŠΡΡΠ½ΠΈΡ‚ΡŒ ΠΌΠ½Π΅, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Π»ΠΈ Titanium mobile ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ ΠΈΠ»ΠΈ компилятор для создания ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ для Android ΠΈ iOS.


Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Π»ΠΈ CUDA ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ ΠΈΠ»ΠΈ компилятор?

Π­Ρ‚ΠΎ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ Π³Π»ΡƒΠΏΡ‹ΠΉ вопрос, Π½ΠΎ ΠΌΠ½Π΅ интСрСсно, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Π»ΠΈ CUDA ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ ΠΈΠ»ΠΈ компилятор? МнС интСрСсно, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ я Π½Π΅ совсСм ΡƒΠ²Π΅Ρ€Π΅Π½, ΠΊΠ°ΠΊ CUDA удаСтся Π·Π°ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ исходный ΠΊΠΎΠ΄ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π½Π° Π΄Π²ΡƒΡ…. ..


Как компилятор ΠΈ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Π½Π° ΠΎΠ΄Π½ΠΎΠΌ языкС?

Π― ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Π» достаточно объяснСний ΠΎΠ± ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠΈ компилятора, ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Π° ΠΈ things, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ ΠΈ Ρ‚ΠΎ, ΠΈ Π΄Ρ€ΡƒΠ³ΠΎΠ΅. Π― Π½Π΅ нашСл, ΠΊΠ°ΠΊ компилятор ΠΈ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Π½Π° ΠΎΠ΄Π½ΠΎΠΌ языкС.


ДинамичСский / статичСский язык ΠΈ компилятор / ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€

Π£ мСня Π΅ΡΡ‚ΡŒ нСсколько вопросов: ДинамичСский язык программирования всСгда интСрпрСтируСтся? Π”ΡƒΠΌΠ°ΡŽ, Π΄Π°, Π½ΠΎ ΠΏΠΎΡ‡Π΅ΠΌΡƒ? Π‘ΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ Π»ΠΈ ΠΊΠ°ΠΊΠΈΠ΅-Π»ΠΈΠ±ΠΎ динамичСскиС языки со статичСской систСмой Π½Π°Π±ΠΎΡ€Π° тСкста?…


PHP Π˜Π½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ / ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ‚ΠΎΡ€

Π― ΠΏΡ‹Ρ‚Π°ΡŽΡΡŒ ΠΏΠΎΠ½ΡΡ‚ΡŒ, ΠΊΠ°ΠΊ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ компилятор/ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ php. Π― попытался Π·Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ исходный ΠΊΠΎΠ΄ php ΠΈ попытался ΠΏΠΎΠ½ΡΡ‚ΡŒ, ΠΊΠ°ΠΊ ΠΎΠ½ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚. Π― Π½Π΅ смог Π½Π°ΠΉΡ‚ΠΈ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΡƒΡŽ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡŽ. WOuld Π±Ρ‹Π»ΠΎ Π±Ρ‹…


Π˜Π½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ компилятор ΠΏΡ€ΠΎΡ‚ΠΈΠ²

Как ΠΌΡ‹ Π·Π½Π°Π΅ΠΌ, компилятор ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ символов для хранСния ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΎΠ±ΠΎ всСх Π΄Π°Π½Π½Ρ‹Ρ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. Но ΠΊΠ°ΠΊ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ управляСт Π΄Π°Π½Π½Ρ‹ΠΌΠΈ ΠΈ ΠΊΠ°ΠΊΠΎΠ² фактичСский процСсс, Π·Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ слСдуСт…


ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ‚ΠΎΡ€ ΠΈ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€

Как компилятор ΠΈΠ»ΠΈ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π² PHP. ΠœΠΎΠΆΠ΅Ρ‚ Π»ΠΈ ΠΊΡ‚ΠΎ-Π½ΠΈΠ±ΡƒΠ΄ΡŒ ΠΎΠ±ΡŠΡΡΠ½ΠΈΡ‚ΡŒ.


ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ‚ΠΎΡ€ ΠΈ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡Ρ‚ΠΈΡ‚Π΅Π»ΡŒΠ½Π΅Π΅

Когда ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΡƒΠ΅ΠΌΡ‹ΠΉ язык ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡Ρ‚ΠΈΡ‚Π΅Π»ΡŒΠ½Π΅Π΅ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚ΠΈΡ€ΡƒΠ΅ΠΌΠΎΠ³ΠΎ ΠΈ Π½Π°ΠΎΠ±ΠΎΡ€ΠΎΡ‚ ? Π― знаю, Ρ‡Ρ‚ΠΎ компилятор ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΡƒΠ΅Ρ‚ вСсь ΠΊΠΎΠ΄ сразу ΠΈ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹ΠΉ ΠΊΠΎΠ΄, Π² Ρ‚ΠΎ врСмя ΠΊΠ°ΠΊ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΊΠΎΠ΄…

Π Π°Π·Π½ΠΈΡ†Π° ΠΌΠ΅ΠΆΠ΄Ρƒ компилятором ΠΈ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ΠΎΠΌ

ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ‚ΠΎΡ€ — это ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Ρ‡ΠΈΠΊ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠ΅Ρ‚ исходный язык (язык высокого уровня) Π² ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹ΠΉ язык (ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΉ язык). Π’ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ компилятора, ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ — это ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°, которая ΠΈΠΌΠΈΡ‚ΠΈΡ€ΡƒΠ΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ, написанных Π½Π° языкС ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π»Π°. Π”Ρ€ΡƒΠ³ΠΎΠ΅ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΌΠ΅ΠΆΠ΄Ρƒ компилятором ΠΈ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ΠΎΠΌ Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ компилятор ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠ΅Ρ‚ всю ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ Π·Π° ΠΎΠ΄ΠΈΠ½ Ρ€Π°Π·, с Π΄Ρ€ΡƒΠ³ΠΎΠΉ стороны, ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠ΅Ρ‚ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ, занимая ΠΏΠΎ ΠΎΠ΄Π½ΠΎΠΉ строкС Π·Π° Ρ€Π°Π·.

ΠžΡ‡Π΅Π²ΠΈΠ΄Π½ΠΎ, восприятиС Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊΠ° ΠΈ элСктронного устройства, Ρ‚Π°ΠΊΠΎΠ³ΠΎ ΠΊΠ°ΠΊ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€, отличаСтся. Π›ΡŽΠ΄ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΠΎΠ½ΠΈΠΌΠ°Ρ‚ΡŒ Ρ‡Ρ‚ΠΎ ΡƒΠ³ΠΎΠ΄Π½ΠΎ Ρ‡Π΅Ρ€Π΅Π· СстСствСнныС языки, Π½ΠΎ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€ Π½Π΅ ΠΏΠΎΠ½ΠΈΠΌΠ°Π΅Ρ‚. ΠšΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€ нуТдаСтся Π² ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Ρ‡ΠΈΠΊΠ΅ для прСобразования языков, написанных Π² Ρ‡ΠΈΡ‚Π°Π΅ΠΌΠΎΠΉ Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊΠΎΠΌ Ρ„ΠΎΡ€ΠΌΠ΅, Π² Ρ‡ΠΈΡ‚Π°Π΅ΠΌΡƒΡŽ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€ΠΎΠΌ Ρ„ΠΎΡ€ΠΌΡƒ.

ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ‚ΠΎΡ€ ΠΈ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ ΡΠ²Π»ΡΡŽΡ‚ΡΡ Ρ‚ΠΈΠΏΠ°ΠΌΠΈ языкового ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Ρ‡ΠΈΠΊΠ°. Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ языковой ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Ρ‡ΠΈΠΊ? Π­Ρ‚ΠΎΡ‚ вопрос ΠΌΠΎΠΆΠ΅Ρ‚ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΡƒΡ‚ΡŒ Ρƒ вас Π² Π³ΠΎΠ»ΠΎΠ²Π΅.

Π―Π·Ρ‹ΠΊΠΎΠ²ΠΎΠΉ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Ρ‡ΠΈΠΊ — это ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ΅ обСспСчСниС, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ΠΈΡ‚ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΈΠ· исходного языка Π² ΡƒΠ΄ΠΎΠ±ΠΎΡ‡ΠΈΡ‚Π°Π΅ΠΌΠΎΠΉ для Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊΠ° Ρ„ΠΎΡ€ΠΌΠ΅ Π² ΡΠΊΠ²ΠΈΠ²Π°Π»Π΅Π½Ρ‚Π½ΡƒΡŽ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ Π½Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎΠΌ языкС. Π˜ΡΡ…ΠΎΠ΄Π½Ρ‹ΠΉ язык ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ являСтся языком программирования высокого уровня, Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹ΠΉ язык ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ являСтся ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΌ языком Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π°.

Π‘Ρ€Π°Π²Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Π°Ρ Ρ‚Π°Π±Π»ΠΈΡ†Π°

Основа для ΡΡ€Π°Π²Π½Π΅Π½ΠΈΡΡΠΎΡΡ‚Π°Π²ΠΈΡ‚Π΅Π»ΡŒΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Ρ‡ΠΈΠΊ
Π²Ρ…ΠΎΠ΄Π­Ρ‚ΠΎ Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ‚ всю ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ Π·Π° Ρ€Π°Π·.
Π­Ρ‚ΠΎ Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ‚ ΠΎΠ΄Π½Ρƒ строку ΠΊΠΎΠ΄Π° ΠΈΠ»ΠΈ инструкции Π·Π° ΠΎΠ΄ΠΈΠ½ Ρ€Π°Π·.
Π’Ρ‹Ρ…ΠΎΠ΄ΠžΠ½ Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹ΠΉ ΠΊΠΎΠ΄.Он Π½Π΅ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚ Π½ΠΈΠΊΠ°ΠΊΠΎΠ³ΠΎ ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½ΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°.
Π Π°Π±ΠΎΡ‡ΠΈΠΉ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ
ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ†ΠΈΡ выполняСтся ΠΏΠ΅Ρ€Π΅Π΄ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ΠΌ.ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ†ΠΈΡ ΠΈ исполнСниС происходят ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ.
ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ
Π‘Ρ€Π°Π²Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π±Ρ‹ΡΡ‚Ρ€Π΅Π΅ΠŸΠΎΠΌΠ΅Π΄Π»Π΅Π½Π½Π΅Π΅
объСм памяти
Π’Ρ€Π΅Π±ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΊ памяти большС ΠΈΠ·-Π·Π° создания ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°.Π­Ρ‚ΠΎ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ мСньшС памяти, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π½Π΅ создаСт ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹ΠΉ ΠΊΠΎΠ΄.
ошибки
ΠŸΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ всС ошибки послС компиляции, всС ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ.ΠžΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Π΅Ρ‚ ΠΎΡˆΠΈΠ±ΠΊΡƒ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ строки ΠΎΠ΄Π½Ρƒ Π·Π° Π΄Ρ€ΡƒΠ³ΠΎΠΉ.
ΠžΠ±Π½Π°Ρ€ΡƒΠΆΠ΅Π½ΠΈΠ΅ ΠΎΡˆΠΈΠ±ΠΎΠΊΠ‘Π»ΠΎΠΆΠ½ΠΎΠŸΡ€ΠΎΡ‰Π΅ ΡΡ€Π°Π²Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ
ΠžΡ‚Π½ΠΎΡΡΡ‰ΠΈΠ΅ΡΡ языки программирования
C, C ++, C #, Scala, машинопись ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ компилятор.Java, PHP, Perl, Python, Ruby ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€.

ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ компилятора

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

ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ‚ΠΎΡ€ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΏΠΎ Ρ„Π°Π·Π°ΠΌ; Π Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ этапы ΠΌΠΎΠΆΠ½ΠΎ ΡΠ³Ρ€ΡƒΠΏΠΏΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π² Π΄Π²Π΅ части:

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

Π€Π°Π·Ρ‹ компилятора

Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π΄Π°Π²Π°ΠΉΡ‚Π΅ разбСрСмся с Ρ€Π°Π±ΠΎΡ‚ΠΎΠΉ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ этапа Π² дСталях.

  1. ЛСксичСский Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ : ΠΎΠ½ сканируСт ΠΊΠΎΠ΄ Π² Π²ΠΈΠ΄Π΅ ΠΏΠΎΡ‚ΠΎΠΊΠ° символов, Π³Ρ€ΡƒΠΏΠΏΠΈΡ€ΡƒΠ΅Ρ‚ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ символов Π² лСксСмы ΠΈ Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Ρ‚ΠΎΠΊΠ΅Π½ΠΎΠ² со ссылкой Π½Π° язык программирования.
  2. БинтаксичСский Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ : Π½Π° этом этапС Ρ‚ΠΎΠΊΠ΅Π½Ρ‹, сгСнСрированныС Π½Π° ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΌ этапС, ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡŽΡ‚ΡΡ Π½Π° соотвСтствиС Π³Ρ€Π°ΠΌΠΌΠ°Ρ‚ΠΈΠΊΠ΅ языка программирования, нСзависимо ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, ΡΠ²Π»ΡΡŽΡ‚ΡΡ Π»ΠΈ выраТСния синтаксичСски ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹ΠΌΠΈ ΠΈΠ»ΠΈ Π½Π΅Ρ‚. Π­Ρ‚ΠΎ Π΄Π΅Π»Π°Π΅Ρ‚ Ρ€Π°Π·Π±ΠΎΡ€ Π΄Π΅Ρ€Π΅Π²ΡŒΠ΅Π² для этого.
  3. БСмантичСский Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ : ΠΎΠ½ провСряСт, ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‚ Π»ΠΈ выраТСния ΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹, сгСнСрированныС Π½Π° ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΌ этапС, ΠΏΡ€Π°Π²ΠΈΠ»Ρƒ языка программирования, ΠΈ создаСт Π°Π½Π½ΠΎΡ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ Π΄Π΅Ρ€Π΅Π²ΡŒΡ Ρ€Π°Π·Π±ΠΎΡ€Π°.
  4. Π“Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€ ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° : Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ эквивалСнтный ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ исходного ΠΊΠΎΠ΄Π°. БущСствуСт ΠΌΠ½ΠΎΠ³ΠΎ прСдставлСний ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°, Π½ΠΎ TAC (трСхадрСсный ΠΊΠΎΠ΄) ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΡˆΠΈΡ€ΠΎΠΊΠΎ.
  5. ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ‚ΠΎΡ€ ΠΊΠΎΠ΄Π° : ΡƒΠ»ΡƒΡ‡ΡˆΠ°Π΅Ρ‚ трСбования ΠΊ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ ΠΈ пространству ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. Для этого ΠΎΠ½ устраняСт ΠΈΠ·Π±Ρ‹Ρ‚ΠΎΡ‡Π½Ρ‹ΠΉ ΠΊΠΎΠ΄, ΠΏΡ€ΠΈΡΡƒΡ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅.
  6. Π“Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€ ΠΊΠΎΠ΄Π° : это послСдняя Ρ„Π°Π·Π° компилятора, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ гСнСрируСтся Ρ†Π΅Π»Π΅Π²ΠΎΠΉ ΠΊΠΎΠ΄ для ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΉ ΠΌΠ°ΡˆΠΈΠ½Ρ‹. Он выполняСт Ρ‚Π°ΠΊΠΈΠ΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ, ΠΊΠ°ΠΊ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΠ°ΠΌΡΡ‚ΡŒΡŽ, Π½Π°Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ рСгистров ΠΈ оптимизация ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹Ρ… машин.

Π’Π°Π±Π»ΠΈΡ†Π° символов Π² Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ стСпСни прСдставляСт собой структуру Π΄Π°Π½Π½Ρ‹Ρ…, которая управляСт ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π°ΠΌΠΈ вмСстС с ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΌΠΈ Ρ‚ΠΈΠΏΠ°ΠΌΠΈ Π΄Π°Π½Π½Ρ‹Ρ…, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΠ½Π° Ρ…Ρ€Π°Π½ΠΈΡ‚. ΠžΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ ошибок ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΠ²Π°Π΅Ρ‚, сообщаСт, исправляСт ошибки, Π²ΠΎΠ·Π½ΠΈΠΊΠ°ΡŽΡ‰ΠΈΠ΅ ΠΌΠ΅ΠΆΠ΄Ρƒ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹ΠΌΠΈ Ρ„Π°Π·Π°ΠΌΠΈ компилятора.

ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Ρ‡ΠΈΠΊΠ°

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

Π˜Π½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Ρƒ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈ Ρ‚ΠΎΠ³ΠΎ ΠΆΠ΅ синтаксичСского Π΄Π΅Ρ€Π΅Π²Π° Π±ΠΎΠ»Π΅Π΅ ΠΎΠ΄Π½ΠΎΠ³ΠΎ Ρ€Π°Π·Π°, поэтому интСрпрСтация ΡΡ€Π°Π²Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΌΠ΅Π΄Π»Π΅Π½Π½Π΅Π΅, Ρ‡Π΅ΠΌ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ скомпилированной ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹.

ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ†ΠΈΡ ΠΈ интСрпрСтация, вСроятно, ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½Π΅Π½Ρ‹ для Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ языка программирования. Π’ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ компилятор Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΊΠΎΠ΄ ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½ΠΎΠ³ΠΎ уровня, Ρ‚ΠΎΠ³Π΄Π° ΠΊΠΎΠ΄ интСрпрСтируСтся, Π° Π½Π΅ компилируСтся Π² ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄.

ИспользованиС ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Ρ‡ΠΈΠΊΠ° Π²Ρ‹Π³ΠΎΠ΄Π½ΠΎ ΠΏΡ€ΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, Π³Π΄Π΅ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ Π²Π°ΠΆΠ½ΠΎΠΉ Ρ‡Π°ΡΡ‚ΡŒΡŽ являСтся Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ быстрого тСстирования ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, Π° Π½Π΅ Π΅Π΅ эффСктивного выполнСния.

ΠšΠ»ΡŽΡ‡Π΅Π²Ρ‹Π΅ различия ΠΌΠ΅ΠΆΠ΄Ρƒ компилятором ΠΈ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ΠΎΠΌ

Π”Π°Π²Π°ΠΉΡ‚Π΅ посмотрим Π½Π° основныС различия ΠΌΠ΅ΠΆΠ΄Ρƒ компилятором ΠΈ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ΠΎΠΌ.

  1. ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ‚ΠΎΡ€ Π±Π΅Ρ€Π΅Ρ‚ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ Ρ†Π΅Π»ΠΈΠΊΠΎΠΌ ΠΈ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ΠΈΡ‚ Π΅Π΅, Π° ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ΠΈΡ‚ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π² ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€.
  2. ΠŸΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ ΠΈΠ»ΠΈ Ρ†Π΅Π»Π΅Π²ΠΎΠΉ ΠΊΠΎΠ΄ гСнСрируСтся Π² случаС компилятора. Π’ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Π° Π½Π΅ создаСт ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½Ρ‹ΠΉ ΠΊΠΎΠ΄.
  3. ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ‚ΠΎΡ€ ΡΡ€Π°Π²Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ быстрСС, Ρ‡Π΅ΠΌ Interpreter, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ компилятор Π±Π΅Ρ€Π΅Ρ‚ всю ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ Π·Π° ΠΎΠ΄ΠΈΠ½ Ρ€Π°Π·, Ρ‚ΠΎΠ³Π΄Π° ΠΊΠ°ΠΊ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Ρ‹ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΡƒΡŽΡ‚ ΠΊΠ°ΠΆΠ΄ΡƒΡŽ строку ΠΊΠΎΠ΄Π° Π·Π° Π΄Ρ€ΡƒΠ³ΠΎΠΉ.
  4. ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ‚ΠΎΡ€Ρƒ трСбуСтся большС памяти, Ρ‡Π΅ΠΌ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Ρƒ ΠΈΠ·-Π·Π° Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°.
  5. ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ‚ΠΎΡ€ прСдставляСт всС ошибки ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ, ΠΈ Ρ‚Ρ€ΡƒΠ΄Π½ΠΎ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΡ‚ΡŒ ошибки Π² контрастном ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Π΅, отобраТая ошибки ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° ΠΎΠ΄Π½Ρƒ Π·Π° Π΄Ρ€ΡƒΠ³ΠΎΠΉ, ΠΈ Π»Π΅Π³Ρ‡Π΅ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΡ‚ΡŒ ошибки.
  6. Π’ компиляторС, ΠΊΠΎΠ³Π΄Π° Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ ошибка, ΠΎΠ½ останавливаСт Π΅Π΅ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄, ΠΈ послС устранСния ошибки вся ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° пСрСводится снова. Напротив, ΠΊΠΎΠ³Π΄Π° Π² ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Π΅ Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ ошибка, ΠΎΠ½Π° прСпятствуСт Π΅Π΅ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Ρƒ, Π° послС устранСния ошибки ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ возобновляСтся.
  7. Π’ компиляторС процСсс Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ Π΄Π²ΡƒΡ… шагов, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… сначала выполняСтся ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ исходного ΠΊΠΎΠ΄Π° Π² Ρ†Π΅Π»Π΅Π²ΡƒΡŽ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ, Π° Π·Π°Ρ‚Π΅ΠΌ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅. ΠΠ°Ρ…ΠΎΠ΄ΡΡΡŒ Π² ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Π΅ Π­Ρ‚ΠΎ ΠΎΠ΄ΠΈΠ½ шаг процСсса, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ исходный ΠΊΠΎΠ΄ компилируСтся ΠΈ выполняСтся ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ.
  8. ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ‚ΠΎΡ€ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π² Ρ‚Π°ΠΊΠΈΡ… языках программирования, ΠΊΠ°ΠΊ C, C ++, C #, Scala ΠΈ Ρ‚. Π”. Π‘ Π΄Ρ€ΡƒΠ³ΠΎΠΉ стороны, Π˜Π½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π² Ρ‚Π°ΠΊΠΈΡ… языках, ΠΊΠ°ΠΊ Java, PHP, Ruby, Python ΠΈ Ρ‚. Π”.

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

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

Π₯отя ΠΈ компилятор, ΠΈ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ ΠΈΠΌΠ΅ΡŽΡ‚ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ прСимущСства ΠΈ нСдостатки, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚ΠΈΡ€ΡƒΠ΅ΠΌΡ‹Π΅ языки Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°ΡŽΡ‚ΡΡ ΠΊΠ°ΠΊ кроссплатформСнныС, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ ΠΊΠΎΠ΄ пСрСносимый. Он Ρ‚Π°ΠΊΠΆΠ΅ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ инструкции Ρ€Π°Π½Π΅Π΅, Π² ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ компилятора, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ экономит врСмя. Π‘ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ языки быстрСС Π² ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠΈ процСсса компиляции.

ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ‚ΠΎΡ€Ρ‹ ΠΈ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Ρ‹. β€” Π˜Π½Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΠΊΠ°, ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΎΠ½Π½Ρ‹Π΅ Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ

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

Π˜Π½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½ΠΈΡ€ΡƒΠ΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ: Π±Π΅Ρ€Π΅Ρ‚ ΠΎΡ‡Π΅Ρ€Π΅Π΄Π½ΠΎΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ языка ΠΈΠ· тСкста ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, Π°Π½Π°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅Ρ‚ Π΅Π³ΠΎ структуру ΠΈ Π·Π°Ρ‚Π΅ΠΌ сразу исполняСт. ПослС ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎΠ³ΠΎ выполнСния Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΈΡ‚ ΠΊ Π°Π½Π°Π»ΠΈΠ·Ρƒ ΠΈ исполнСнию ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ. Если ΠΎΠ΄ΠΈΠ½ ΠΈ Ρ‚ΠΎΡ‚ ΠΆΠ΅ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ выполняСтся нСсколько Ρ€Π°Π·, ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ всякий Ρ€Π°Π· воспринимаСт Π΅Π³ΠΎ Ρ‚Π°ΠΊ, Π±ΡƒΠ΄Ρ‚ΠΎ встрСтил Π²ΠΏΠ΅Ρ€Π²Ρ‹Π΅. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… трСбуСтся произвСсти большой объСм ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΡΡŽΡ‰ΠΈΡ…ΡΡ вычислСний, Π±ΡƒΠ΄ΡƒΡ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎ. Для выполнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π½Π° Π΄Ρ€ΡƒΠ³ΠΎΠΌ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π΅ Ρ‚Π°ΠΊΠΆΠ΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Π±Π΅Π· Π½Π΅Π³ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° прСдставляСт собой Π½Π°Π±ΠΎΡ€ слов ΠΈ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚.

ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ‚ΠΎΡ€Ρ‹ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°ΡŽΡ‚ вСсь тСкст ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ (Π΅Π³ΠΎ Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ исходным ΠΊΠΎΠ΄ΠΎΠΌ ΠΈΠ»ΠΈ source code). Они ΠΎΡΡƒΡ‰Π΅ΡΡ‚Π²Π»ΡΡŽΡ‚ поиск синтаксичСских ошибок, Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ сСмантичСский Π°Π½Π°Π»ΠΈΠ· ΠΈ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π·Π°Ρ‚Π΅ΠΌ, Ссли тСкст ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π² точности соотвСтствуСт ΠΏΡ€Π°Π²ΠΈΠ»Π°ΠΌ языка, Π΅Π³ΠΎ автоматичСски пСрСводят (Ρ‚Ρ€Π°Π½ΡΠ»ΠΈΡ€ΡƒΡŽΡ‚) Π½Π° ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΉ язык (говорят: Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΡŽΡ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ ΠΈΠ»ΠΈ object code). НСрСдко ΠΏΡ€ΠΈ этом выполняСтся оптимизация с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π½Π°Π±ΠΎΡ€Π° ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ², ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰ΠΈΡ… ΠΏΠΎΠ²Ρ‹ΡΠΈΡ‚ΡŒ быстродСйствиС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. Π‘Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ обрабатываСтся ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΎΠΉ β€” сборщиком ΠΈΠ»ΠΈ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€ΠΎΠΌ связСй, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚ связываниС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎΠ³ΠΎ ΠΈ машинного ΠΊΠΎΠ΄ΠΎΠ². ВСкст ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ прСобразуСтся Π² Π³ΠΎΡ‚ΠΎΠ²Ρ‹ΠΉ ΠΊ исполнСнию Π•Π₯Π•-Ρ„Π°ΠΉΠ» {исполнимый ΠΊΠΎΠ΄), Π΅Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ Π² памяти ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π° ΠΈΠ»ΠΈ Π½Π° дискС. Π­Ρ‚ΠΎΡ‚ Ρ„Π°ΠΉΠ» ΠΈΠΌΠ΅Π΅Ρ‚ ΡΠ°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ ΠΏΠΎΠ΄ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ΠΌ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмы. Π•Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ пСрСнСсти Π½Π° Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Ρ‹ с процСссором, ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‰ΠΈΠΌ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄.

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

Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Π°, Π½Π°ΠΎΠ±ΠΎΡ€ΠΎΡ‚, для исслСдования содСрТимого памяти допустимо Π² любой ΠΌΠΎΠΌΠ΅Π½Ρ‚ ΠΏΡ€Π΅Ρ€Π²Π°Ρ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Ρƒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, ΠΎΡ€Π³Π°Π½ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΄ΠΈΠ°Π»ΠΎΠ³ с ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ, Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Π»ΡŽΠ±Ρ‹Π΅ слоТныС прСобразования Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ ΠΏΡ€ΠΈ этом постоянно ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎ-Π°ΠΏΠΏΠ°Ρ€Π°Ρ‚Π½ΡƒΡŽ срСду, Ρ‡Ρ‚ΠΎ ΠΈ обСспСчиваСт Π²Ρ‹ΡΠΎΠΊΡƒΡŽ Π½Π°Π΄Π΅ΠΆΠ½ΠΎΡΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. Π˜Π½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ ΠΏΡ€ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ ΠΏΠΎΠ΄Π²Π΅Ρ€Π³Π°Π΅Ρ‚ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ΅ ΠΈ Π°Π½Π°Π»ΠΈΠ·Ρƒ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ рСсурсы ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмы, ΠΏΡ€ΠΈ Π²ΠΎΠ·Π½ΠΈΠΊΠ°ΡŽΡ‰ΠΈΡ… ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°Ρ… Π²Ρ‹Π΄Π°Π΅Ρ‚ сообщСния ΠΎΠ± ΠΎΡˆΠΈΠ±ΠΊΠ°Ρ….

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

БистСмы программирования.

ΠŸΡ€ΠΎΡ†Π΅ΡΡ создания ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚:

БоставлСниС исходного ΠΊΠΎΠ΄Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ (рисунок 1) Π½Π° языкС программирования.

Π­Ρ‚Π°ΠΏ трансляции, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹ΠΉ для создания ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹.

ΠŸΠΎΡΡ‚Ρ€ΠΎΠ΅Π½ΠΈΠ΅ Π·Π°Π³Ρ€ΡƒΠ·ΠΎΡ‡Π½ΠΎΠ³ΠΎ модуля, Π³ΠΎΡ‚ΠΎΠ²ΠΎΠ³ΠΎ ΠΊ исполнСнию.

ВсС пСрСчислСнныС Π²Ρ‹ΡˆΠ΅ дСйствия Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‚ наличия ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹Ρ… срСдств.

Рисунок 1. ΠŸΡ€ΠΎΡ†Π΅ΡΡ создания ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, Π³ΠΎΡ‚ΠΎΠ²ΠΎΠΉ ΠΊ исполнСнию

Π‘ΠΎΠ²ΠΎΠΊΡƒΠΏΠ½ΠΎΡΡ‚ΡŒ этих ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹Ρ… срСдств Π²Ρ…ΠΎΠ΄ΠΈΡ‚ Π² состав систСмы программирования:

ВСкстовый Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€ (Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹ΠΉ для создания ΠΈ рСдактирования исходного ΠΊΠΎΠ΄Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π½Π° языкС программирования).

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

Π Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€ связСй.

ΠžΡ‚Π»Π°Π΄Ρ‡ΠΈΠΊ.

Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ.

Бправочная систСма.

Π‘Ρ‚Π°Ρ‚ΡŒΠΈ ΠΊ ΠΏΡ€ΠΎΡ‡Ρ‚Π΅Π½ΠΈΡŽ:

ΠžΡΠ½ΠΎΠ²Ρ‹ программирования: ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ‚ΠΎΡ€ ΠΈ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€


ΠŸΠΎΡ…ΠΎΠΆΠΈΠ΅ ΡΡ‚Π°Ρ‚ΡŒΠΈ:

ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ‚ΠΎΡ€Ρ‹, ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Ρ‹ ΠΈ Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄ | Computerworld Россия

ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅

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

ΠŸΡ€ΠΈΡ‡ΠΈΠ½ΠΎΠΉ вновь Π²ΡΠΏΡ‹Ρ…Π½ΡƒΠ²ΡˆΠ΅Π³ΠΎ интСрСса ΠΊ компиляторам стало появлСниС быстрых ΠΈ слоТных 64-разрядных микропроцСссоров, Ρ‚ΠΈΠΏΠΈΡ‡Π½Ρ‹ΠΌ прСдставитСлСм ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΌΠΎΠΆΠ½ΠΎ ΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ Intel Itanium. ВсС ΡƒΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½ΡΡ‚Π²ΠΎΠ²Π°Π½ΠΈΡ Π² Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π΅ процСссоров, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ распараллСливаниС ΠΈ прСдсказаниС вСтвлСния, Π° Ρ‚Π°ΠΊΠΆΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Ρ€Π΅Π·ΠΊΠΎΠ³ΠΎ увСличСния ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ, окаТутся бСсполСзны Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€, ΠΏΠΎΠΊΠ° программисты Π½Π΅ Π½Π°Ρ‡Π½ΡƒΡ‚ ΠΈΡ… Ρ€Π΅Π°Π»ΡŒΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ.

Π—Π°Π±ΠΎΡ‚Π° ΠΎ создании ΠΊΠΎΠ΄Π°, ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ Π½Π° ΡΡ„Ρ„Π΅ΠΊΡ‚ΠΈΠ²Π½ΡƒΡŽ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΡƒΡŽ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ, ΡΠ΅Ρ€ΡŒΠ΅Π·Π½ΠΎ услоТняСт ΠΈ Π±Π΅Π· Ρ‚ΠΎΠ³ΠΎ Π½Π΅ΠΏΡ€ΠΎΡΡ‚ΡƒΡŽ Π·Π°Π΄Π°Ρ‡Ρƒ соврСмСнного программирования. Π’ ΠΈΡ‚ΠΎΠ³Π΅ ΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²Π΅Π½Π½ΠΎΡΡ‚ΡŒ Π·Π° ΡƒΠ²Π΅Π»ΠΈΡ‡Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΏΠΎΡ‚Π΅Π½Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎ способны Π±ΡƒΠ΄ΡƒΡ‰ΠΈΠ΅ 64-разрядныС процСссоры, лоТится Π½Π° компиляторы Π½ΠΎΠ²ΠΎΠ³ΠΎ поколСния.

ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ‚ΠΎΡ€Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ прСдстоит ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΡ‚ΡŒ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ ΡƒΠ²Π΅Π»ΠΈΡ‡Π΅Π½ΠΈΠ΅ скорости вычислСний, ΡƒΠΆΠ΅ ΡΠΎΠ·Π΄Π°ΡŽΡ‚ΡΡ Π² ΠΈΡΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΡ… лабораториях ряда ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΉ β€” Hewlett-Packard, Intel, MetaWare, Microsoft ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΡ…. Π’ Ρ„Π΅Π²Ρ€Π°Π»Π΅ ΠΏΡ€ΠΎΡˆΠ»ΠΎΠ³ΠΎ Π³ΠΎΠ΄Π° компания Silicon Graphics объявила ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Π΅Π΅ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ компиляторы ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΡ‚ΡŒ Π½Π° 30-100% ΠΏΠΎ ΡΡ€Π°Π²Π½Π΅Π½ΠΈΡŽ с ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΌΠΈ ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚Π°ΠΌΠΈ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ, Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰ΠΈΡ… Π½Π° ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π°Ρ… с процСссорами Itanium ΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмой Linux.

Как ΠΈ ΠΈΡ… ΠΏΡ€Π΅Π΄ΡˆΠ΅ΡΡ‚Π²Π΅Π½Π½ΠΈΠΊΠΈ, ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ компиляторы ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΡŽΡ‚ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π½Π° высокоуровнСвом языкС Π² ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄. Однако ΠΏΠΎΠΌΠΈΠΌΠΎ этого ΠΎΠ½ΠΈ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΡƒΡŽΡ‚ максимально эффСктивноС использованиС памяти (ΠΈ Π² ΠΏΠ΅Ρ€Π²ΡƒΡŽ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ процСссорного кэша ΠΈ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠ° распараллСливания).

НапримСр, процСссоры Itanium ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Ρ‹ для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ Π΄ΠΎ ΡˆΠ΅ΡΡ‚ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄ Π½Π° ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ‚Π°ΠΊΡ‚ процСссора. Но для этого компилятор Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒ ΡΡ‚Π°Π±ΠΈΠ»ΡŒΠ½ΡƒΡŽ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Ρƒ Π΄Π°Π½Π½Ρ‹Ρ… Ρ‡Π΅Ρ€Π΅Π· ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ€ ΠΊΠΎΠΌΠ°Π½Π΄.

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

Π”Ρ€ΡƒΠ³ΠΈΠ΅ ΠΏΡƒΡ‚ΠΈ

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

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

ИдСология Java опираСтся Π½Π° Ρ‚Ρ€Π΅Ρ‚ΠΈΠΉ, своСго Ρ€ΠΎΠ΄Π° компромиссный ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ β€” Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄. ΠŸΡ€ΠΈ использовании Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄Π° высокоуровнСвыС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΡŽΡ‚ΡΡ Π² ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½Ρ‹ΠΉ Π²ΠΈΠ΄, способный ΠΈΡΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ Π½Π° Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… Π°ΠΏΠΏΠ°Ρ€Π°Ρ‚Π½Ρ‹Ρ… ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ°Ρ…. Π‘Π°ΠΉΡ‚-ΠΊΠΎΠ΄ Java прСобразуСтся Π² ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Π°, Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΠΎΠ³ΠΎ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΉ машиной Java (Java Virtual Machine β€” JVM). JVM Ρ„ΠΎΡ€ΠΌΠΈΡ€ΡƒΠ΅Ρ‚ Π²Ρ‹Π΄Π΅Π»Π΅Π½Π½ΠΎΠ΅ пространство Π² памяти, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΎΡ‚Π΄Π΅Π»Π΅Π½ΠΎ ΠΎΡ‚ памяти основной систСмы, для хранСния Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄Π° ΠΈ ΠΏΠΎΡ€ΠΎΠΆΠ΄Π°Π΅ΠΌΡ‹Ρ… структур.

ИспользованиС динамичСских (just-in-time, JIT β€” Β«Ρ‚ΠΎΡ‡Π½ΠΎ Π² срок») компиляторов ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°Π΅Ρ‚ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Java-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ. Π’ этом случаС Π½Π΅ JVM исполняСт Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄, Π° JIT-компилятор ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠ΅Ρ‚ Π΅Π³ΠΎ Π² Β«Ρ€ΠΎΠ΄Π½ΠΎΠΉΒ» для Π΄Π°Π½Π½ΠΎΠΉ ΠΌΠ°ΡˆΠΈΠ½Ρ‹ ΠΊΠΎΠ΄. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, с ΠΎΠ΄Π½ΠΎΠΉ стороны, ΠΏΠΎΠ²Ρ‹ΡˆΠ°Π΅Ρ‚ΡΡ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ скомпилированного ΠΊΠΎΠ΄Π°, Π° с Π΄Ρ€ΡƒΠ³ΠΎΠΉ β€” сохраняСтся ΠΏΠ΅Ρ€Π΅Π½ΠΎΡΠΈΠΌΠΎΡΡ‚ΡŒ, свойствСнная Java.

Hewlett-Packard придСрТиваСтся Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½ΠΎΠΉ Ρ‚Π°ΠΊΡ‚ΠΈΠΊΠΈ со своим TurboChai β€” срСдой Java для встроСнных ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ. Π’ TurboChai ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ увСличиваСтся Π·Π° счСт прСобразования Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ часто ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° Π² Π΄Π°Π½Π½ΠΎΠΌ встроСнном ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ. Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π²Ρ‹Π±ΠΎΡ€ΠΎΡ‡Π½ΠΎΠΉ компиляции Π² HP ΡΡ‚Π°Ρ€Π°ΡŽΡ‚ΡΡ ΠΎΠΏΡ‚ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ ΡƒΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ использованиСм памяти, Π² Ρ‚ΠΎ ΠΆΠ΅ врСмя достигая скоростСй, сравнимых с Ρ‚Π΅ΠΌΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ Π΄ΠΎΠ±ΠΈΡ‚ΡŒΡΡ JIT-компиляторы. TurboChai ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄ Java Π² качСствС Π²Ρ…ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΈ Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ исходныС тСксты ANSI C, Π° Π·Π°Ρ‚Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ любой компилятор для языка Π‘ΠΈ для получСния ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ Β«Ρ€ΠΎΠ΄Π½ΠΎΠ³ΠΎΒ» машинного ΠΊΠΎΠ΄Π°.

Π’ ΠΏΡ€ΠΎΡˆΠ»ΠΎΠΌ Π³ΠΎΠ΄Ρƒ Microsoft анонсировала C#, ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ язык программирования, согласованный с XML. ΠšΠΎΡ€ΠΏΠΎΡ€Π°Ρ†ΠΈΡ ΠΏΠΎΠ΄Π°Π΅Ρ‚ Π½ΠΎΠ²Ρ‹ΠΉ язык ΠΊΠ°ΠΊ логичСскоС ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ΅Π½ΠΈΠ΅ Π‘ΠΈ ΠΈ C++ для Web-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ. ΠšΠ»ΡŽΡ‡Π΅Π²Ρ‹ΠΌΠΈ модулями станут Common Language Runtime для C# ΠΈ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΉ компилятор, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠ΅Ρ‚ тСкст, написанный Π½Π° Ρ‚Ρ€Π°Π΄ΠΈΡ†ΠΈΠΎΠ½Π½Ρ‹Ρ… языках Кобол, Perl, Π€ΠΎΡ€Ρ‚Ρ€Π°Π½ ΠΈΠ»ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΡ…, Π² ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½Ρ‹ΠΉ язык, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π½Π° Π½ΠΎΠ²ΠΎΠΉ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ΅ Microsoft .Net.

ΠšΠΎΠ½Π΅Ρ‡Π½Ρ‹Π΅ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΠΈ вряд Π»ΠΈ Π±ΡƒΠ΄ΡƒΡ‚ ΡƒΠ΄Π΅Π»ΡΡ‚ΡŒ ΠΌΠ½ΠΎΠ³ΠΎ внимания компиляторам. Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΡΠ²ΠΈΡ‚ΡŒΡΡ Π½ΠΎΠ²ΠΎΠ΅ ΠΏΠΎΠΊΠΎΠ»Π΅Π½ΠΈΠ΅ компиляторов, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰ΠΈΡ… ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Π΄ΠΎ уровня, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰Π΅Π³ΠΎ ΡƒΠ±Π΅Π΄ΠΈΡ‚ΡŒ профСссионалов Π² нСобходимости ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ 64-разрядныС Π°ΠΏΠΏΠ°Ρ€Π°Ρ‚Π½Ρ‹Π΅ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρ‹.


Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΈΠ½ΡΡ‚Ρ€ΡƒΠΌΠ΅Π½Ρ‚Π°Π»ΡŒΠ½Ρ‹Ρ… срСдств Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ
Π˜Π½ΡΡ‚Ρ€ΡƒΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉΠ§Ρ‚ΠΎ Π½ΠΎΠ²ΠΎΠ³ΠΎΠ¦Π΅Π»ΠΈ
ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡ‚ΠΎΡ€Ρ‹ΠžΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°ΡŽΡ‚ Π²Ρ‹ΡΠΎΠΊΡƒΡŽ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ процСссорной ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π·Π° счСт распараллСливания, прСдсказания Π²Π΅Ρ‚Π²Π»Π΅Π½ΠΈΠΉ ΠΈ спСкулятивных Π²Ρ‹Ρ‡ΠΈΡΠ»Π΅Π½ΠΈΠΉΠŸΠΎΠΌΠΎΠ³Π°ΡŽΡ‚ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠΎΡ‚Π΅Π½Ρ†ΠΈΠ°Π» 64-разрядных процСссоров
JIT-компиляторыВ Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠΌ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΡƒΡŽΡ‚ ΠΊΠΎΠ΄Π£Π²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°ΡŽΡ‚ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚ΠΈΡ€ΡƒΠ΅ΠΌΡ‹Ρ… языков, Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ Java
«Π’Ρ‹Π±ΠΎΡ€ΠΎΡ‡Π½Ρ‹Π΅» ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡ‚ΠΎΡ€Ρ‹ΠšΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΡƒΡŽΡ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ часто ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹ΠΉ ΠΊΠΎΠ΄Π£Π²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°ΡŽΡ‚ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ, Π½Π΅ тратя понапрасну дорогостоящиС рСсурсы памяти

ΠŸΠΎΠ΄Π΅Π»ΠΈΡ‚Π΅ΡΡŒ ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»ΠΎΠΌ с ΠΊΠΎΠ»Π»Π΅Π³Π°ΠΌΠΈ ΠΈ Π΄Ρ€ΡƒΠ·ΡŒΡΠΌΠΈ

Как Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ JavaScript. Π Π°Π½Π΅Π΅ JavaScript прСдназначался для… | by Артур Π₯Π°ΠΉΠ±ΡƒΠ»Π»ΠΈΠ½ | NOP::Nuances of Programming

Π Π°Π½Π΅Π΅ JavaScript прСдназначался для использования Π² Π²Π΅Π±-Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π°Ρ…, ΠΎΠ΄Π½Π°ΠΊΠΎ ситуация измСнилась с Ρ€Π°Π·Π²ΠΈΡ‚ΠΈΠ΅ΠΌ Node. ΠœΡ‹ Π·Π½Π°Π΅ΠΌ, ΠΊΠ°ΠΊ, Π³Π΄Π΅ ΠΈ ΠΊΠΎΠ³Π΄Π° Π΅Π³ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ. Но извСстно Π»ΠΈ, Ρ‡Ρ‚ΠΎ происходит Π·Π° этими сцСнариями?

Π”Π°ΠΆΠ΅ Ссли Π²Ρ‹ Π·Π½Π°Π΅Ρ‚Π΅ это, Ρ‚ΠΎ всС Ρ€Π°Π²Π½ΠΎ смоТСтС ΠΈΠ·Π²Π»Π΅Ρ‡ΡŒ ΠΏΠΎΠ»Π΅Π·Π½ΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΈΠ· Π΄Π°Π½Π½ΠΎΠΉ ΡΡ‚Π°Ρ‚ΡŒΠΈ.

JavaScript β€” это высокоуровнСвый ЯП, Π° ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€ ΠΏΠΎΠ½ΠΈΠΌΠ°Π΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π΅Π΄ΠΈΠ½ΠΈΡ†Ρ‹ ΠΈ Π½ΡƒΠ»ΠΈ. Каким ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€ ΠΏΠΎΠ½ΠΈΠΌΠ°Π΅Ρ‚ написанный ΠΊΠΎΠ΄? Π’ этой ΡΡ‚Π°Ρ‚ΡŒΠ΅ ΠΌΡ‹ рассмотрим ΠΎΡ‚Π²Π΅Ρ‚ Π½Π° ΠΎΠ΄ΠΈΠ½ СдинствСнный вопрос: ΠΊΠ°ΠΊ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ JavaScript?

ΠŸΡ€ΠΈΡΡ‚ΡƒΠΏΠΈΠΌ.

Π­Ρ‚ΠΎ Π³Π»Π°Π²Π½Ρ‹ΠΉ Π³Π΅Ρ€ΠΎΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΎΡ‚Π²Π΅Ρ‡Π°Π΅Ρ‚ Π·Π° ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€ΠΎΠΌ JS-ΠΊΠΎΠ΄Π°. Π”Π²ΠΈΠΆΠΎΠΊ JavaScript ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ ΠΊΠΎΠ΄ ΠΈ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠ΅Ρ‚ Π΅Π³ΠΎ Π² ΠΌΠ°ΡˆΠΈΠ½ΠΎΡ‡ΠΈΡ‚Π°Π΅ΠΌΡ‹ΠΉ язык. Он выполняСт Ρ€Π°Π±ΠΎΡ‚Ρƒ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Ρ‡ΠΈΠΊΠ°, ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΡŽΡ‰Π΅Π³ΠΎ JS-ΠΊΠΎΠ΄ Π½Π° понятный ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Ρƒ язык. Как ΠΈ JS, ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ЯП Ρ‚Π°ΠΊΠΆΠ΅ ΠΎΠ±Π»Π°Π΄Π°Π΅Ρ‚ Π΄Π²ΠΈΠΆΠΊΠΎΠΌ, Π΄Π΅Π»Π°ΡŽΡ‰ΠΈΠΉ написанный ΠΊΠΎΠ΄ понятным для ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π°.

Π£ JavaScript Π΅ΡΡ‚ΡŒ мноТСство Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… Π΄Π²ΠΈΠΆΠΊΠΎΠ², доступных для использования. На этой страницС Π’ΠΈΠΊΠΈΠΏΠ΅Π΄ΠΈΠΈ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡ‚ΠΈ ΠΈΡ… список. Они Ρ‚Π°ΠΊΠΆΠ΅ Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ Π΄Π²ΠΈΠΆΠΊΠ°ΠΌΠΈ ECMAScript (ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅ ΠΎΠ± этом Π½ΠΈΠΆΠ΅).

ΠŸΠΎΠΏΡ€ΠΎΠ±ΡƒΠ΅ΠΌ Π·Π°Π³Π»ΡΠ½ΡƒΡ‚ΡŒ Π²Π½ΡƒΡ‚Ρ€ΡŒ Π΄Π²ΠΈΠΆΠΊΠ°, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ·Π½Π°Ρ‚ΡŒ, ΠΊΠ°ΠΊ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΡŽΡ‚ΡΡ Ρ„Π°ΠΉΠ»Ρ‹ JavaScript.

Π”Π²ΠΈΠΆΠΎΠΊ β€” это язык, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Ρ€Π°Π·Π±ΠΈΠ²Π°Π΅Ρ‚ ΠΊΠΎΠ΄ ΠΈ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ΠΈΡ‚ Π΅Π³ΠΎ. А V8 β€” это ΠΎΠ΄ΠΈΠ½ ΠΈΠ· самых популярных Π΄Π²ΠΈΠΆΠΊΠΎΠ² JavaScript, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π² Chrome ΠΈ NodeJS ΠΈ написан Π½Π° Π½ΠΈΠ·ΠΊΠΎΡƒΡ€ΠΎΠ²Π½Π΅Π²ΠΎΠΌ языкС C++. ΠΠ°ΠΏΠΈΡΠ°Ρ‚ΡŒ Π΄Π²ΠΈΠΆΠΎΠΊ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΊΡ‚ΠΎ ΡƒΠ³ΠΎΠ΄Π½ΠΎ, Ρ‡Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ привСсти ΠΊ ΠΏΡƒΡ‚Π°Π½ΠΈΡ†Π΅.

Для поддСрТания контроля Π·Π° этими ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠ°ΠΌΠΈ Π±Ρ‹Π» создан стандарт ECMA, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ прСдоставляСт характСристики написания Π΄Π²ΠΈΠΆΠΊΠ° ΠΈ всСх Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ JavaScript. По этой ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π΅ Π² ECMAScript 6, 7, 8 ΠΈ Ρ‚. Π΄. Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Ρ‹ Π½ΠΎΠ²Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ JavaScript, Π° Π΄Π²ΠΈΠΆΠΊΠΈ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½Ρ‹ для ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ этих Π½ΠΎΠ²Ρ‹Ρ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ. Π‘Π»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡ‚ΡŒ Π΄ΠΎΡΡ‚ΡƒΠΏΠ½ΠΎΡΡ‚ΡŒ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½Π½ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ JS Π² Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π°Ρ… Π²ΠΎ врСмя Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ.

Для ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° возьмСм Π΄Π²ΠΈΠΆΠΎΠΊ V8, ΠΎΠ΄Π½Π°ΠΊΠΎ основныС ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΠΈ ΠΎΡΡ‚Π°ΡŽΡ‚ΡΡ Π½Π΅ΠΈΠ·ΠΌΠ΅Π½Π½Ρ‹ΠΌΠΈ Π²ΠΎ всСх Π΄Π²ΠΈΠΆΠΊΠ°Ρ….

Π’Π΅ΠΏΠ΅Ρ€ΡŒ рассмотрим с Π±ΠΎΠ»Π΅Π΅ тСхничСской Ρ‚ΠΎΡ‡ΠΊΠΈ зрСния.

Π’Π°ΠΊ выглядит Π΄Π²ΠΈΠΆΠΎΠΊ JS ΠΈΠ·Π½ΡƒΡ‚Ρ€ΠΈ. Π’Π²ΠΎΠ΄ΠΈΠΌΡ‹ΠΉ ΠΊΠΎΠ΄ ΠΏΡ€ΠΎΡ…ΠΎΠ΄ΠΈΡ‚ Ρ‡Π΅Ρ€Π΅Π· ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ стадии:

  1. ΠŸΠ°Ρ€ΡΠ΅Ρ€
  2. AST
  3. Π˜Π½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ Π²Ρ‹Π΄Π°Π΅Ρ‚ Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄
  4. ΠŸΡ€ΠΎΡ„Π°ΠΉΠ»Π΅Ρ€
  5. ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ‚ΠΎΡ€ Π²Ρ‹Π΄Π°Π΅Ρ‚ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄

НС Π²ΠΎΠ»Π½ΡƒΠΉΡ‚Π΅ΡΡŒ, подробности рассмотрим Π² Ρ‚Π΅Ρ‡Π΅Π½ΠΈΠ΅ Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… ΠΌΠΈΠ½ΡƒΡ‚.

Однако для Π½Π°Ρ‡Π°Π»Π° Ρ€Π°Π·Π±Π΅Ρ€Π΅ΠΌ Π²Π°ΠΆΠ½ΠΎΠ΅ Ρ€Π°Π·Π»ΠΈΡ‡ΠΈΠ΅.

Π•ΡΡ‚ΡŒ Π΄Π²Π° способа прСобразования ΠΊΠΎΠ΄Π° Π² ΠΌΠ°ΡˆΠΈΠ½ΠΎΡ‡ΠΈΡ‚Π°Π΅ΠΌΡ‹ΠΉ язык. ΠšΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΡ, ΠΎ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΌΡ‹ ΠΏΠΎΠ³ΠΎΠ²ΠΎΡ€ΠΈΠΌ, ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΠΌΠ° Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΊ JavaScript, Π½ΠΎ ΠΈ ΠΊ Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Ρƒ ЯП, Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ Python, Java ΠΈ Ρ‚. Π΄.

  • Π˜Π½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ Ρ‡ΠΈΡ‚Π°Π΅Ρ‚ ΠΊΠΎΠ΄ построчно ΠΈ сразу выполняСт Π΅Π³ΠΎ.
  • ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ‚ΠΎΡ€ Ρ‡ΠΈΡ‚Π°Π΅Ρ‚ вСсь ΠΊΠΎΠ΄, выполняСт ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ, Π° Π·Π°Ρ‚Π΅ΠΌ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄.

Рассмотрим Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅.

function add(a, b) {
return a+b
}for(let i = 0; i < 1000; i++) {
add(1 + 1)
}

Π’ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΌ Π²Ρ‹ΡˆΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ функция add, которая добавляСт Π΄Π²Π° числа ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ сумму, вызываСтся 1000 Ρ€Π°Π·.

  1. ΠŸΡ€ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Π΅ этого Ρ„Π°ΠΉΠ»Π° ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Ρƒ, ΠΎΠ½ Ρ‡ΠΈΡ‚Π°Π΅Ρ‚ Π΅Π³ΠΎ построчно ΠΈ сразу выполняСт Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ, ΠΏΠΎΠΊΠ° Ρ†ΠΈΠΊΠ» Π½Π΅ закончится. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, ΠΎΠ½ просто ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ΠΈΡ‚ ΠΊΠΎΠ΄ Π² Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€ ΠΏΠΎΠ½ΠΈΠΌΠ°Π΅Ρ‚ Π½Π° Ρ…ΠΎΠ΄Ρƒ.
  2. ΠŸΡ€ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Π΅ этого Ρ„Π°ΠΉΠ»Π° компилятору, ΠΎΠ½ Ρ‡ΠΈΡ‚Π°Π΅Ρ‚ всю ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ, выполняСт Π°Π½Π°Π»ΠΈΠ· дСйствий ΠΈ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ Π½Π° языкС, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΠΎΠ½ΠΈΠΌΠ°Π΅Ρ‚ машина. Π­Ρ‚ΠΎ ΠΊΠ°ΠΊ Π²Π·ΡΡ‚ΡŒ X (JS-Ρ„Π°ΠΉΠ») ΠΈ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Y (ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄, понятный машинС). Если ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ для Y (ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄), Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Π±ΡƒΠ΄Π΅Ρ‚ Ρ‚Π°ΠΊΠΈΠΌ ΠΆΠ΅, ΠΊΠ°ΠΊ ΠΏΡ€ΠΈ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ†ΠΈΠΈ X (JS-ΠΊΠΎΠ΄).

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

  • Π˜Π½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ построчно ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠ΅Ρ‚ исходный ΠΊΠΎΠ΄ Π² эквивалСнтный ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄.
  • ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ‚ΠΎΡ€ сразу ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠ΅Ρ‚ вСсь исходный ΠΊΠΎΠ΄ Π² ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄.
  • ΠŸΡ€Π΅ΠΈΠΌΡƒΡ‰Π΅ΡΡ‚Π²ΠΎ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Π° Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Π½Π΅ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎΠΌ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ ΠΊΠΎΠ΄Π° Π±Π΅Π· нСобходимости компиляции, Ρ‡Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ для запуска JS-Ρ„Π°ΠΉΠ»ΠΎΠ² Π² Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π΅. Однако процСсс замСдляСтся ΠΏΡ€ΠΈ нСобходимости прСобразования большСго количСства JS-ΠΊΠΎΠ΄Π°. ВспомнитС малСнький Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚ ΠΊΠΎΠ΄Π°, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ функция Π²Ρ‹Π·Ρ‹Π²Π°Π»Π°ΡΡŒ 1000 Ρ€Π°Π·. Π’ этом случаС Π²Ρ‹Π²ΠΎΠ΄ остаСтся ΠΏΡ€Π΅ΠΆΠ½ΠΈΠΌ, Π΄Π°ΠΆΠ΅ Ссли функция add Π±Ρ‹Π»Π° Π²Ρ‹Π·Π²Π°Π½Π° 1000 Ρ€Π°Π·. Π’Π°ΠΊΠΈΠ΅ ситуации Π·Π°ΠΌΠ΅Π΄Π»ΡΡŽΡ‚ Ρ€Π°Π±ΠΎΡ‚Ρƒ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Π°.
  • Π’ Ρ‚Π°ΠΊΠΈΡ… случаях компилятор ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ, Π·Π°ΠΌΠ΅Π½ΠΈΠ² Ρ†ΠΈΠΊΠ» ΠΎΠ΄Π½ΠΈΠΌ числом 2 (1 + 1 добавлялось ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π·), ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΎΠ½ остаСтся Π½Π΅ΠΈΠ·ΠΌΠ΅Π½Π½Ρ‹ΠΌ для всСх 1000 ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΉ. ΠžΠΊΠΎΠ½Ρ‡Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ ΠΊΠΎΠ΄, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π²Ρ‹Π΄Π°Π΅Ρ‚ компилятор, ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½ ΠΈ выполняСтся Π½Π°ΠΌΠ½ΠΎΠ³ΠΎ быстрСС.

Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ сразу Π½Π°Ρ‡ΠΈΠ½Π°Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π°, Π½ΠΎ Π½Π΅ выполняСт ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡŽ. ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ‚ΠΎΡ€Ρƒ трСбуСтся врСмя для компиляции ΠΊΠΎΠ΄Π°, ΠΎΠ΄Π½Π°ΠΊΠΎ ΠΎΠ½ Π²Ρ‹Π΄Π°Π΅Ρ‚ Π±ΠΎΠ»Π΅Π΅ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄.

Π’Π΅ΠΏΠ΅Ρ€ΡŒ вСрнСмся ΠΊ основной схСмС Π΄Π²ΠΈΠΆΠΊΠ° JS.

Π˜Ρ‚Π°ΠΊ, зная ΠΏΠ»ΡŽΡΡ‹ ΠΈ минусы компилятора ΠΈ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Π°, ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ прСимущСства ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ. Π—Π΄Π΅ΡΡŒ ΠΈ появляСтся компилятор JIT (Just In Time). Он прСдставляСт собой ΠΊΠΎΠΌΠ±ΠΈΠ½Π°Ρ†ΠΈΡŽ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Π° ΠΈ компилятора, ΠΈ Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ Π±Ρ€Π°ΡƒΠ·Π΅Ρ€ΠΎΠ² Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‚ эту Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ для ΠΏΠΎΠ²Ρ‹ΡˆΠ΅Π½ΠΈΡ эффСктивности. Π”Π²ΠΈΠΆΠΎΠΊ V8 Ρ‚Π°ΠΊΠΆΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ эту Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ.

Π’ этом процСссС:

  1. ΠŸΠ°Ρ€ΡΠ΅Ρ€ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΡ†ΠΈΡ€ΡƒΠ΅Ρ‚, Π°Π½Π°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΈ классифицируСт Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ части ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. НапримСр, устанавливаСт, являСтся Π»ΠΈ элСмСнт Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ, ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΈ Ρ‚.Π΄. с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹Ρ… слов JavaScript.
  2. Π—Π°Ρ‚Π΅ΠΌ AST (абстрактныС синтаксичСскиС Π΄Π΅Ρ€Π΅Π²ΡŒΡ) ΡΠΎΠ·Π΄Π°ΡŽΡ‚ Π΄Ρ€Π΅Π²ΠΎΠ²ΠΈΠ΄Π½ΡƒΡŽ структуру Π½Π° основС классификации парсСра. Π’ AST Explorer ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠ·Π½Π°Ρ‚ΡŒ ΠΎ Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊ строится Π΄Π΅Ρ€Π΅Π²ΠΎ.
  3. Π—Π°Ρ‚Π΅ΠΌ Π΄Π΅Ρ€Π΅Π²ΠΎ пСрСдаСтся ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Ρƒ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ создаСт Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄. Как ΠΌΡ‹ ΡƒΠ·Π½Π°Π»ΠΈ Ρ€Π°Π½Π΅Π΅, Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄ Π½Π΅ являСтся ΠΊΠΎΠ΄ΠΎΠΌ самого Π½ΠΈΠ·ΠΊΠΎΠ³ΠΎ уровня, ΠΎΠ΄Π½Π°ΠΊΠΎ Π΅Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ. На этой стадии Π±Ρ€Π°ΡƒΠ·Π΅Ρ€ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ с доступным Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄ΠΎΠΌ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π΄Π²ΠΈΠΆΠΊΠ° V8, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŽ Π½Π΅ ΠΏΡ€ΠΈΡ…ΠΎΠ΄ΠΈΠ»ΠΎΡΡŒ ΠΆΠ΄Π°Ρ‚ΡŒ.
  4. Π’ Ρ‚ΠΎ ΠΆΠ΅ врСмя ΠΏΡ€ΠΎΡ„Π°ΠΉΠ»Π΅Ρ€ ΠΈΡ‰Π΅Ρ‚ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΊΠΎΠ΄Π°, Π° Π·Π°Ρ‚Π΅ΠΌ ΠΏΠ΅Ρ€Π΅Π΄Π°Π΅Ρ‚ Π²Ρ…ΠΎΠ΄Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ компилятору. ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ‚ΠΎΡ€ Π²Ρ‹Π΄Π°Π΅Ρ‚ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄, Π² Ρ‚ΠΎ врСмя ΠΊΠ°ΠΊ Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄ Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для Ρ€Π΅Π½Π΄Π΅Ρ€ΠΈΠ½Π³Π° Π² Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π΅. Как Ρ‚ΠΎΠ»ΡŒΠΊΠΎ компилятор создаСт ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄, Π²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΉ Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ замСняСтся Π½ΠΎΠ²Ρ‹ΠΌ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΌ ΠΊΠΎΠ΄ΠΎΠΌ.
  5. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Π»ΡƒΡ‡ΡˆΠΈΠ΅ качСства ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Π° ΠΈ компилятора. Π˜Π½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ выполняСт ΠΊΠΎΠ΄, Π² Ρ‚ΠΎ врСмя ΠΊΠ°ΠΊ ΠΏΡ€ΠΎΡ„Π°ΠΉΠ»Π΅Ρ€ ΠΈΡ‰Π΅Ρ‚ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡŽ, Π° компилятор создаСт ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄. Π—Π°Ρ‚Π΅ΠΌ Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄ замСняСтся ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΌ ΠΊΠΎΠ΄ΠΎΠΌ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ являСтся ΠΊΠΎΠ΄ΠΎΠΌ Π±ΠΎΠ»Π΅Π΅ Π½ΠΈΠ·ΠΊΠΎΠ³ΠΎ уровня, Ρ‚Π°ΠΊΠΈΠΌ ΠΊΠ°ΠΊ ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄.

Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Π±ΡƒΠ΄Π΅Ρ‚ постСпСнно ΡƒΠ»ΡƒΡ‡ΡˆΠ°Ρ‚ΡŒΡΡ, Π½Π΅ блокируя врСмя выполнСния.

Как ΠΈ Π² случаС с ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΌ ΠΊΠΎΠ΄ΠΎΠΌ, Π½Π΅ всС ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Ρ‹ ΠΏΠΎΠ½ΠΈΠΌΠ°ΡŽΡ‚ Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄. Π§Ρ‚ΠΎΠ±Ρ‹ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π³ΠΎ Π½Π° ΠΌΠ°ΡˆΠΈΠ½ΠΎΡ‡ΠΈΡ‚Π°Π΅ΠΌΡ‹ΠΉ язык, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½ΠΎΠ΅ ПО, Ρ‚Π°ΠΊΠΎΠ΅ ΠΊΠ°ΠΊ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Π°Ρ машина, ΠΈΠ»ΠΈ Π΄Π²ΠΈΠΆΠΎΠΊ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Javascript V8). По этой ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π΅ Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Ρ‹ ΠΌΠΎΠ³ΡƒΡ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ этот Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄ ΠΈΠ· ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Π° Π²ΠΎ врСмя Π²Ρ‹ΡˆΠ΅ΡƒΠΏΠΎΠΌΡΠ½ΡƒΡ‚Ρ‹Ρ… 5-Ρ‚ΠΈ стадий с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π΄Π²ΠΈΠΆΠΊΠΎΠ² JavaScript.

Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ вопрос:

Π”Π°, Π½ΠΎ Π½Π΅ совсСм. На Ρ€Π°Π½Π½ΠΈΡ… этапах JavaScript Π‘Ρ€Π΅Π½Π΄Π°Π½ Айк создал Π΄Π²ΠΈΠΆΠΎΠΊ JavaScript β€˜SpiderMonkey’. Π£ Π΄Π²ΠΈΠΆΠΊΠ° Π±Ρ‹Π» ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π³ΠΎΠ²ΠΎΡ€ΠΈΠ» Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Ρƒ, Ρ‡Ρ‚ΠΎ Π½ΡƒΠΆΠ½ΠΎ Π΄Π΅Π»Π°Ρ‚ΡŒ. БСйчас Π΅ΡΡ‚ΡŒ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Ρ‹, Π½ΠΎ ΠΈ компиляторы, Π° ΠΊΠΎΠ΄ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ интСрпрСтируСтся, Π½ΠΎ ΠΈ компилируСтся для ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ. ВСхничСски всС зависит ΠΎΡ‚ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ.

Π§ΠΈΡ‚Π°ΠΉΡ‚Π΅ Ρ‚Π°ΠΊΠΆΠ΅:

ΠŸΠΎΡ‡Π΅ΠΌΡƒ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ компилятор Π±Ρ‹Π» написан Π΄ΠΎ ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Π°?

ΠŸΠ΅Ρ€Π²Ρ‹Π΅ языки программирования Π±Ρ‹Π»ΠΈ довольно простыми (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π±Π΅Π· рСкурсии) ΠΈ Π±Ρ‹Π»ΠΈ Π±Π»ΠΈΠ·ΠΊΠΈ ΠΊ машинной Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π΅, которая сама ΠΏΠΎ сСбС Π±Ρ‹Π»Π° простой. ΠŸΠ΅Ρ€Π΅Π²ΠΎΠ΄ Π±Ρ‹Π» Ρ‚ΠΎΠ³Π΄Π° простым процСссом .

ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ‚ΠΎΡ€ Π±Ρ‹Π» ΠΏΡ€ΠΎΡ‰Π΅ ΠΊΠ°ΠΊ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°, Ρ‡Π΅ΠΌ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Π» Π±Ρ‹ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ вмСстС Π΄Π°Π½Π½Ρ‹Π΅ для выполнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΈ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ для ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ†ΠΈΠΈ исходного ΠΊΠΎΠ΄Π°. И ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Ρƒ ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΎΠ²Π°Π»ΠΎΡΡŒ Π±Ρ‹ большС мСста для сСбя, для исходного ΠΊΠΎΠ΄Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΈ для ΡΠΈΠΌΠ²ΠΎΠ»ΡŒΠ½Ρ‹Ρ… Ρ‚Π°Π±Π»ΠΈΡ†.

ΠŸΠ°ΠΌΡΡ‚ΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Ρ‚Π°ΠΊ ΠΌΠ°Π»ΠΎ (ΠΊΠ°ΠΊ ΠΏΠΎ стоимости, Ρ‚Π°ΠΊ ΠΈ ΠΏΠΎ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π½Ρ‹ΠΌ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π°ΠΌ), Ρ‡Ρ‚ΠΎ компиляторы ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Π°Π²Ρ‚ΠΎΠ½ΠΎΠΌΠ½Ρ‹ΠΌΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°ΠΌΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠ΅Ρ€Π΅Π·Π°ΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‚ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΡƒΡŽ систСму (я использовал ΠΎΠ΄Π½Ρƒ ΠΈΠ· Π½ΠΈΡ…). ПослС компиляции ОБ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π±Ρ‹Π»ΠΎ ΠΏΠ΅Ρ€Π΅Π·Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Π½Π½ΡƒΡŽ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ. … Ρ‡Ρ‚ΠΎ Π΄Π°Π΅Ρ‚ ΠΏΠΎΠ½ΡΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Ρ‡ΠΈΠΊΠΎΠΌ для Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠΉ Ρ€Π°Π±ΠΎΡ‚Ρ‹ просто Π½Π΅ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ .

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

Π˜Π½Ρ‚Π΅Ρ€Π΅Ρ компилятора Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π»ΡΡ Π² простотС программирования, особСнно для ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ Π±Ρ‹Π»ΠΈ спСциалистами ΠΏΠΎ Π²Ρ‹Ρ‡ΠΈΡΠ»ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ Ρ‚Π΅Ρ…Π½ΠΈΠΊΠ΅, Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ ΡƒΡ‡Π΅Π½Ρ‹Π΅ Π² Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… областях. Π­Ρ‚ΠΎΡ‚ интСрСс Π±Ρ‹Π» Π½Π΅ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΊΠΎΠ΄Π°. Но всС ΠΆΠ΅ врСмя программиста ΡΡ‡ΠΈΡ‚Π°Π»ΠΎΡΡŒ Π΄Π΅ΡˆΠ΅Π²Ρ‹ΠΌ рСсурсом. Π‘Ρ‚ΠΎΠΈΠΌΠΎΡΡ‚ΡŒ Π±Ρ‹Π»Π° Π² ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π½ΠΎΠ΅ врСмя, Π΄ΠΎ 1975-1980, ΠΊΠΎΠ³Π΄Π° ΡΡ‚ΠΎΠΈΠΌΠΎΡΡ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΡˆΠ»Π° ΠΎΡ‚ Π°ΠΏΠΏΠ°Ρ€Π°Ρ‚Π½ΠΎΠ³ΠΎ обСспСчСния ΠΊ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠΌΡƒ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡Π΅Π½ΠΈΡŽ. Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ профСссионалы Π½Π΅ воспринимали Π²ΡΠ΅Ρ€ΡŒΠ΅Π· Π΄Π°ΠΆΠ΅ компилятор .

ΠžΡ‡Π΅Π½ΡŒ высокая ΡΡ‚ΠΎΠΈΠΌΠΎΡΡ‚ΡŒ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π½ΠΎΠ³ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ Π±Ρ‹Π»Π° Π΅Ρ‰Π΅ ΠΎΠ΄Π½ΠΎΠΉ ΠΏΡ€ΠΈΡ‡ΠΈΠ½ΠΎΠΉ дисквалификации ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Ρ‡ΠΈΠΊΠΎΠ² , Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ сама идСя Π±Ρ‹Π»Π° Π±Ρ‹ смСшной для Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π° людСй.

Π‘Π»ΡƒΡ‡Π°ΠΉ с Лиспом ΠΎΡ‡Π΅Π½ΡŒ особСнный, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ это Π±Ρ‹Π» Ρ‡Ρ€Π΅Π·Π²Ρ‹Ρ‡Π°ΠΉΠ½ΠΎ простой язык, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ сдСлал Π΅Π³ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΠΌΡ‹ΠΌ (Π° ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€ стал Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ большС Π² 58). Π§Ρ‚ΠΎ Π΅Ρ‰Π΅ Π±ΠΎΠ»Π΅Π΅ Π²Π°ΠΆΠ½ΠΎ, ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ Lisp Π±Ρ‹Π» Π΄ΠΎΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒΡΡ‚Π²ΠΎΠΌ ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΠΈ самоопрСдСлимости Lisp ( ΠΌΠ΅Ρ‚Π°-цикличности ), нСзависимо ΠΎΡ‚ ΠΊΠ°ΠΊΠΎΠΉ-Π»ΠΈΠ±ΠΎ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ ΡŽΠ·Π°Π±ΠΈΠ»ΠΈΡ‚ΠΈ.

УспСх Lisp Π²ΠΎ ΠΌΠ½ΠΎΠ³ΠΎΠΌ связан с Ρ‚Π΅ΠΌ Ρ„Π°ΠΊΡ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ эта ΡΠ°ΠΌΠΎΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠΌΠΎΡΡ‚ΡŒ сдСлала Π΅Π³ΠΎ ΠΎΡ‚Π»ΠΈΡ‡Π½Ρ‹ΠΌ ΠΈΡΠΏΡ‹Ρ‚Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ стСндом для изучСния структур программирования ΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π½ΠΎΠ²Ρ‹Ρ… языков (Π° Ρ‚Π°ΠΊΠΆΠ΅ для Π΅Π³ΠΎ удобства для ΡΠΈΠΌΠ²ΠΎΠ»ΡŒΠ½Ρ‹Ρ… вычислСний).

Π Π°Π·Π½ΠΈΡ†Π° ΠΌΠ΅ΠΆΠ΄Ρƒ компилятором ΠΈ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ΠΎΠΌ

ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ‚ΠΎΡ€Ρ‹ ΠΈ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Ρ‹ — это ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎΠΌΠΎΠ³Π°ΡŽΡ‚ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Ρ‹Π²Π°Ρ‚ΡŒ язык высокого уровня (исходный ΠΊΠΎΠ΄) Π² ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹Π΅ ΠΊΠΎΠ΄Ρ‹ для понимания ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π°ΠΌΠΈ. ΠšΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π½Ρ‹Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΠΏΠΈΡˆΡƒΡ‚ΡΡ Π½Π° языках высокого уровня. Π―Π·Ρ‹ΠΊ высокого уровня — это язык, понятный людям. Π§Ρ‚ΠΎΠ±Ρ‹ Π±Ρ‹Π»ΠΎ понятно, ΠΎΠ½ΠΈ содСрТат слова ΠΈ Ρ„Ρ€Π°Π·Ρ‹ ΠΈΠ· ΡˆΠΈΡ€ΠΎΠΊΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Ρ… языков, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ английского ΠΈΠ»ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΡ… языков. Однако ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Ρ‹ Π½Π΅ ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΠΎΠ½ΠΈΠΌΠ°Ρ‚ΡŒ языки высокого уровня, ΠΊΠ°ΠΊ ΠΌΡ‹, люди.Они ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΠΎΠ½ΠΈΠΌΠ°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π½Π½Ρ‹Π΅ Π² Π΄Π²ΠΎΠΈΡ‡Π½Ρ‹Ρ… систСмах, извСстных ΠΊΠ°ΠΊ ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄. НачнСм с Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π½Π°Ρ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΠΏΠΈΡˆΠ΅Ρ‚ΡΡ Π½Π° языкС высокого уровня, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ описываСтся ΠΊΠ°ΠΊ исходный ΠΊΠΎΠ΄. Π­Ρ‚ΠΈ исходныС ΠΊΠΎΠ΄Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½Ρ‹ Π² ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΉ язык, ΠΈ здСсь появляСтся Ρ€ΠΎΠ»ΡŒ компиляторов ΠΈ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ΠΎΠ².
Различия ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ΠΎΠΌ ΠΈ компилятором
Π˜Π½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ΠΈΡ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄ΠΈΠ½ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π·Π° Ρ€Π°Π· Π² ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄. ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ‚ΠΎΡ€ сканируСт всю ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ ΠΈ сразу ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ΠΈΡ‚ Π΅Π΅ Π² ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄.
Π˜Π½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Ρƒ трСбуСтся Π³ΠΎΡ€Π°Π·Π΄ΠΎ мСньшС Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ для Π°Π½Π°Π»ΠΈΠ·Π° исходного ΠΊΠΎΠ΄Π°. Однако ΠΎΠ±Ρ‰Π΅Π΅ врСмя выполнСния процСсса Π½Π°ΠΌΠ½ΠΎΠ³ΠΎ мСньшС. ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ‚ΠΎΡ€Ρƒ трСбуСтся ΠΌΠ½ΠΎΠ³ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ для Π°Π½Π°Π»ΠΈΠ·Π° исходного ΠΊΠΎΠ΄Π°. Однако ΠΎΠ±Ρ‰Π΅Π΅ врСмя, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΠ΅ для выполнСния процСсса, Π½Π°ΠΌΠ½ΠΎΠ³ΠΎ мСньшС.
Π˜Π½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ Π½Π΅ Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½Ρ‹ΠΉ ΠΊΠΎΠ΄. Π‘Π»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ ΠΎΡ‡Π΅Π½ΡŒ эффСктивСн с Ρ‚ΠΎΡ‡ΠΊΠΈ зрСния своСй памяти. ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ‚ΠΎΡ€ всСгда Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹ΠΉ ΠΊΠΎΠ΄. ΠŸΠΎΡ‚Ρ€Π΅Π±ΡƒΡŽΡ‚ΡΡ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ ссылки. Π‘Π»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, трСбуСтся большС памяти.
ΠŸΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°Π΅Ρ‚ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π½Π΅ΠΏΡ€Π΅Ρ€Ρ‹Π²Π½ΠΎ, ΠΏΠΎΠΊΠ° Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠ΅Π½Π° пСрвая ошибка. Если ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠ΅Π½Π° какая-Π»ΠΈΠ±ΠΎ ошибка, ΠΎΠ½Π° пСрСстаСт Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ, ΠΈ, ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, ΠΎΡ‚Π»Π°Π΄ΠΊΠ° становится Π»Π΅Π³ΠΊΠΎΠΉ. ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ‚ΠΎΡ€ Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ сообщСниС ΠΎΠ± ошибкС Ρ‚ΠΎΠ»ΡŒΠΊΠΎ послС сканирования всСй ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, ΠΈ, ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, ΠΎΡ‚Π»Π°Π΄ΠΊΠ° ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с компилятором ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ слоТнСС.
Π˜Π½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π² Ρ‚Π°ΠΊΠΈΡ… языках программирования, ΠΊΠ°ΠΊ Ruby ΠΈ Python. Compliers ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π² языках программирования, Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ C ΠΈ C ++.

Как Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ ΠΈ компилятор?

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

Π˜Π½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ создаСт ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ. Он Π½Π΅ связываСт Ρ„Π°ΠΉΠ»Ρ‹ ΠΈ Π½Π΅ Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄. Π˜ΡΡ…ΠΎΠ΄Π½Ρ‹Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ построчно Π²ΠΎ врСмя выполнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹.

ΠŸΡ€Π΅ΠΈΠΌΡƒΡ‰Π΅ΡΡ‚Π²Π° ΠΈ нСдостатки ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Π° ΠΈ компилятора

Π Π΅ΠΊΠ»Π°ΠΌΠ°


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

Π˜Π½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Ρ‹ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΡƒΠΏΡ€ΠΎΡ‰Π°ΡŽΡ‚ Ρ€Π°Π±ΠΎΡ‚Ρƒ с исходным ΠΊΠΎΠ΄ΠΎΠΌ. Π‘Π»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, ΠΎΠ½ΠΈ особСнно подходят для Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‰ΠΈΡ…. Π‘ Π΄Ρ€ΡƒΠ³ΠΎΠΉ стороны, ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚ΠΈΡ€ΡƒΠ΅ΠΌΡ‹Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΌΠΎΠ³ΡƒΡ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π° ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π°Ρ… с ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΌΠΈ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Π°ΠΌΠΈ.

БоставитСли ΠΈ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Ρ‹. Π”ΠΎΠ±Ρ€ΠΎ ΠΏΠΎΠΆΠ°Π»ΠΎΠ²Π°Ρ‚ΡŒ Π²ΠΎ Π²Ρ‚ΠΎΡ€ΡƒΡŽ ΡΡ‚Π°Ρ‚ΡŒΡŽ в… | Ѐаисал Π§ΠΈΡ€ΠΎΡƒ | HackerNoon.com

Π”ΠΎΠ±Ρ€ΠΎ ΠΏΠΎΠΆΠ°Π»ΠΎΠ²Π°Ρ‚ΡŒ Π²ΠΎ Π²Ρ‚ΠΎΡ€ΡƒΡŽ ΡΡ‚Π°Ρ‚ΡŒΡŽ ΠΈΠ· сСрии Π”Π°Π²Π°ΠΉΡ‚Π΅ построим язык программирования (LBPL) . Если Π²Ρ‹ Π½Π΅ Π·Π½Π°ΠΊΠΎΠΌΡ‹ с сСриСй, Ρ†Π΅Π»ΡŒ LBPL — ΠΏΠΎΠΌΠΎΡ‡ΡŒ Π²Π°ΠΌ ΠΏΠ΅Ρ€Π΅ΠΉΡ‚ΠΈ ΠΎΡ‚ 0 ΠΊ 1 Π² Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ языка программирования.

Π­Ρ‚Π° ΡΡ‚Π°Ρ‚ΡŒΡ Π΄Π°Π΅Ρ‚ ΠΎΡ‡Π΅Π½ΡŒ ΠΎΠ±Ρ‰ΠΈΠΉ ΠΎΠ±Π·ΠΎΡ€ структуры компиляторов ΠΈ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ΠΎΠ².

ΠŸΡ€ΠΎΡΡ‚Π΅ΠΉΡˆΠ΅Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ компилятора — это ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°, которая ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ΠΈΡ‚ ΠΊΠΎΠ΄, написанный Π½Π° языкС программирования высокого уровня (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, JavaScript ΠΈΠ»ΠΈ Java), Π² ΠΊΠΎΠ΄ Π½ΠΈΠ·ΠΊΠΎΠ³ΠΎ уровня (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Assembly), нСпосрСдствСнно исполняСмый ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€ΠΎΠΌ ΠΈΠ»ΠΈ Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΎΠΉ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΉ машиной. .

НапримСр, компилятор Java ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠ΅Ρ‚ ΠΊΠΎΠ΄ Java Π² Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄ Java, выполняСмый JVM (Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΉ машиной Java).Π”Ρ€ΡƒΠ³ΠΈΠΌΠΈ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°ΠΌΠΈ ΡΠ²Π»ΡΡŽΡ‚ΡΡ V8, Π΄Π²ΠΈΠΆΠΎΠΊ JavaScript ΠΎΡ‚ Google, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠ΅Ρ‚ ΠΊΠΎΠ΄ JavaScript Π² ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄, ΠΈΠ»ΠΈ GCC, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Ρ‹Π²Π°Ρ‚ΡŒ ΠΊΠΎΠ΄, написанный Π½Π° языках программирования, Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ C, C ++, Objective-C, Go срСди Π΄Ρ€ΡƒΠ³ΠΈΡ…, Π² собствСнный ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄.

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

ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ‚ΠΎΡ€ ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π°Π·Π΄Π΅Π»ΠΈΡ‚ΡŒ Π½Π° 2 части.

  • ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ, ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡ‹ΠΉ , внСшний интСрфСйс сканируСт прСдставлСнный исходный ΠΊΠΎΠ΄ Π½Π° ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚ синтаксичСских ошибок, провСряСт (ΠΈ ΠΏΡ€ΠΈ нСобходимости опрСдСляСт) Ρ‚ΠΈΠΏ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ объявлСнной ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΈ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚, Ρ‡Ρ‚ΠΎ каТдая пСрСмСнная объявлСна ​​пСрСд использованиСм.Если Π΅ΡΡ‚ΡŒ какая-Π»ΠΈΠ±ΠΎ ошибка, ΠΎΠ½ прСдоставляСт ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΠ²Π½Ρ‹Π΅ сообщСния ΠΎΠ± ошибкС. Он Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ структуру Π΄Π°Π½Π½Ρ‹Ρ…, Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡƒΡŽ Ρ‚Π°Π±Π»ΠΈΡ†Π΅ΠΉ символов , которая содСрТит ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎΠ±ΠΎ всСх символах , Π½Π°ΠΉΠ΄Π΅Π½Π½Ρ‹Ρ… Π² исходном ΠΊΠΎΠ΄Π΅. НаконСц, Ссли ошибка Π½Π΅ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠ΅Π½Π°, другая структура Π΄Π°Π½Π½Ρ‹Ρ…, ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½ΠΎΠ΅ прСдставлСниС ΠΊΠΎΠ΄Π° , строится ΠΈΠ· исходного ΠΊΠΎΠ΄Π° ΠΈ пСрСдаСтся Π² качСствС Π²Ρ…ΠΎΠ΄Π½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ… Π²ΠΎ Π²Ρ‚ΠΎΡ€ΡƒΡŽ Ρ‡Π°ΡΡ‚ΡŒ.
  • Вторая Ρ‡Π°ΡΡ‚ΡŒ, сСрвСрная Ρ‡Π°ΡΡ‚ΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½ΠΎΠ΅ прСдставлСниС ΠΈ Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ символов , ΡΠΎΠ·Π΄Π°Π½Π½ΡƒΡŽ внСшнСй Ρ‡Π°ΡΡ‚ΡŒΡŽ для Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ ΠΊΠΎΠ΄Π° Π½ΠΈΠ·ΠΊΠΎΠ³ΠΎ уровня.

И ΠΏΠ΅Ρ€Π΅Π΄Π½ΠΈΠΉ, ΠΈ Π·Π°Π΄Π½ΠΈΠΉ ΠΊΠΎΠ½Π΅Ρ† Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ свои ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Π² ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Ρ„Π°Π·. КаТдая Ρ„Π°Π·Π° Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΡƒΡŽ структуру Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΠ· Π΄Ρ€ΡƒΠ³ΠΎΠΉ структуры Π΄Π°Π½Π½Ρ‹Ρ…, созданной ΠΏΡ€Π΅Π΄ΡˆΠ΅ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΉ Ρ„Π°Π·ΠΎΠΉ.

Π€Π°Π·Ρ‹ внСшнСго интСрфСйса ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Π²ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‚ Π² сСбя лСксичСский Π°Π½Π°Π»ΠΈΠ· , синтаксичСский Π°Π½Π°Π»ΠΈΠ· , сСмантичСский Π°Π½Π°Π»ΠΈΠ· ΠΈ Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΡŽ ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° , Π² Ρ‚ΠΎ врСмя ΠΊΠ°ΠΊ бэкэнд Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡŽ ΠΈ Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΡŽ ΠΊΠΎΠ΄Π° .

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

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

ΠŸΠ΅Ρ€Π²Π°Ρ Ρ„Π°Π·Π° компилятора — это лСксичСский Π°Π½Π°Π»ΠΈΠ· . На этом этапС компилятор Ρ€Π°Π·Π±ΠΈΠ²Π°Π΅Ρ‚ прСдставлСнный исходный ΠΊΠΎΠ΄ Π½Π° Π·Π½Π°Ρ‡ΠΈΠΌΡ‹Π΅ элСмСнты, Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡ‹Π΅ лСксСмами , ΠΈ Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΈΠ· Ρ‚ΠΎΠΊΠ΅Π½ΠΎΠ² ΠΈΠ· этих лСксСм.

ЛСксСму ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Ρ‚ΡŒ ΠΊΠ°ΠΊ ΠΎΠ΄Π½ΠΎΠ·Π½Π°Ρ‡Π½ΠΎ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΡ†ΠΈΡ€ΡƒΠ΅ΠΌΡƒΡŽ строку символов Π½Π° исходном языкС программирования, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹Π΅ слова , Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ , Ссли , , Π² Ρ‚ΠΎ врСмя ΠΊΠ°ΠΊ ΠΈΠ»ΠΈ func , ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρ‹ , строки , Π½ΠΎΠΌΠ΅Ρ€Π° , ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ ΠΈΠ»ΠΈ ΠΎΠ΄ΠΈΠ½ΠΎΡ‡Π½Ρ‹Π΅ символы Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ (, ) , . ΠΈΠ»ΠΈ : .

Π’ΠΎΠΊΠ΅Π½ — это ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, ΠΎΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‰ΠΈΠΉ лСксСму . Наряду со Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ лСксСмы (фактичСская строка символов лСксСмы) ΠΎΠ½ содСрТит Ρ‚Π°ΠΊΡƒΡŽ β€‹β€‹ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ, ΠΊΠ°ΠΊ Π΅Π΅ Ρ‚ΠΈΠΏ ( это ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово? ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€? ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€? …) ΠΈ ΠΏΠΎΠ·ΠΈΡ†ΠΈΡŽ (Π½ΠΎΠΌΠ΅Ρ€ строки ΠΈ / ΠΈΠ»ΠΈ столбца) Π² исходном ΠΊΠΎΠ΄Π΅, Π³Π΄Π΅ ΠΎΠ½ встрСчаСтся.

ΠŸΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ лСксСм, сгСнСрированная Π²ΠΎ врСмя лСксичСского Π°Π½Π°Π»ΠΈΠ·Π°

Если компилятор встрСчаСт строку символов, для ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΎΠ½ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Ρ‚ΠΎΠΊΠ΅Π½ , ΠΎΠ½ остановит своС Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅, Π²Ρ‹Π΄Π°Π² ΠΎΡˆΠΈΠ±ΠΊΡƒ; Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ссли ΠΎΠ½ встрСчаСт Π½Π΅Π²Π΅Ρ€Π½ΠΎ ΡΡ„ΠΎΡ€ΠΌΠΈΡ€ΠΎΠ²Π°Π½Π½ΡƒΡŽ строку ΠΈΠ»ΠΈ число ΠΈΠ»ΠΈ нСдопустимый символ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π½Π΅-ASCII-символ Π² Java).

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

Π’ΠΎ врСмя синтаксичСского Π°Π½Π°Π»ΠΈΠ·Π° компилятор ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΈΠ· Ρ‚ΠΎΠΊΠ΅Π½ΠΎΠ² , сгСнСрированных Π²ΠΎ врСмя лСксичСского Π°Π½Π°Π»ΠΈΠ·Π°, для создания Π΄Ρ€Π΅Π²ΠΎΠ²ΠΈΠ΄Π½ΠΎΠΉ структуры Π΄Π°Π½Π½Ρ‹Ρ…, Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΠΎΠΉ АбстрактноС синтаксичСскоС Π΄Π΅Ρ€Π΅Π²ΠΎ , для краткости AST . AST ΠΎΡ‚Ρ€Π°ΠΆΠ°Π΅Ρ‚ ΡΠΈΠ½Ρ‚Π°ΠΊΡΠΈΡ‡Π΅ΡΠΊΡƒΡŽ ΠΈ Π»ΠΎΠ³ΠΈΡ‡Π΅ΡΠΊΡƒΡŽ структуру ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹.

АбстрактноС синтаксичСскоС Π΄Π΅Ρ€Π΅Π²ΠΎ, созданноС послС синтаксичСского Π°Π½Π°Π»ΠΈΠ·Π°.

БинтаксичСский Π°Π½Π°Π»ΠΈΠ· — это Ρ‚Π°ΠΊΠΆΠ΅ этап, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Π΅ синтаксичСскиС ошибки ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΠ²Π°ΡŽΡ‚ΡΡ ΠΈ ΡΠΎΠΎΠ±Ρ‰Π°ΡŽΡ‚ΡΡ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŽ Π² Ρ„ΠΎΡ€ΠΌΠ΅ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΎΠ½Π½Ρ‹Ρ… сообщСний.НапримСр, Π² ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΌ Π²Ρ‹ΡˆΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅, Ссли ΠΌΡ‹ Π·Π°Π±ΡƒΠ΄Π΅ΠΌ Π·Π°ΠΊΡ€Ρ‹Π²Π°ΡŽΡ‰ΡƒΡŽ скобку } послС опрСдСлСния Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ sum , компилятор Π΄ΠΎΠ»ΠΆΠ΅Π½ Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ ΠΎΡˆΠΈΠ±ΠΊΡƒ, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ говорится, Ρ‡Ρ‚ΠΎ отсутствуСт } , ΠΈ ошибка Π΄ΠΎΠ»ΠΆΠ½Π° ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ Π½Π° строку ΠΈ столбСц, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ отсутствуСт } .

Если Π½Π° этом этапС ошибок Π½Π΅ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠ΅Π½ΠΎ, компилятор ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΈΡ‚ ΠΊ этапу сСмантичСского Π°Π½Π°Π»ΠΈΠ·Π° .

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

Π’ΠΎ врСмя сСмантичСского Π°Π½Π°Π»ΠΈΠ·Π° компилятор ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ AST , сгСнСрированный Π²ΠΎ врСмя синтаксичСского Π°Π½Π°Π»ΠΈΠ·Π°, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ, соотвСтствуСт Π»ΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° всСм ΠΏΡ€Π°Π²ΠΈΠ»Π°ΠΌ исходного языка программирования.БСмантичСский Π°Π½Π°Π»ΠΈΠ· Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚

  • Π’Ρ‹Π²ΠΎΠ΄ Ρ‚ΠΈΠΏΠ° . Если язык программирования ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ Π²Ρ‹Π²ΠΎΠ΄ Ρ‚ΠΈΠΏΠ°, компилятор попытаСтся ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ Ρ‚ΠΈΠΏ всСх Π½Π΅Ρ‚ΠΈΠΏΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅. Если Ρ‚ΠΈΠΏ ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ Π²Ρ‹Π²Π΅Π΄Π΅Π½, компилятор Π°Π½Π½ΠΎΡ‚ΠΈΡ€ΡƒΠ΅Ρ‚ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ ΡƒΠ·Π΅Π» Π² AST с ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠ΅ΠΉ ΠΎ Π²Ρ‹Π²Π΅Π΄Π΅Π½Π½ΠΎΠΌ Ρ‚ΠΈΠΏΠ΅.
  • Π’ΠΈΠΏΠΎΠ²ΠΎΠΉ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒ . Π—Π΄Π΅ΡΡŒ компилятор провСряСт, Ρ‡Ρ‚ΠΎ всС значСния, присваиваСмыС ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌ, ΠΈ всС Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹, ΡƒΡ‡Π°ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ Π² ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ, ΠΈΠΌΠ΅ΡŽΡ‚ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹ΠΉ Ρ‚ΠΈΠΏ.НапримСр, компилятор слСдит Π·Π° Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½ΠΈ ΠΎΠ΄Π½ΠΎΠΉ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Ρ‚ΠΈΠΏΠ° String Π½Π΅ Π±Ρ‹Π»ΠΎ присвоСно Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Double ΠΈΠ»ΠΈ Ρ‡Ρ‚ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Ρ‚ΠΈΠΏΠ° Bool Π½Π΅ пСрСдаСтся Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°ΡŽΡ‰Π΅ΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ Ρ‚ΠΈΠΏΠ° Double , ΠΈΠ»ΠΈ Ρ‡Ρ‚ΠΎ ΠΌΡ‹ Π½Π΅ пытаСмся Ρ€Π°Π·Π΄Π΅Π»ΠΈΡ‚ΡŒ строку String Π½Π° Int , Β«HelloΒ» / 2 (Ссли это Π½Π΅ Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ΠΌ языка).
  • Π£ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ символами . Наряду с Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ΠΌ Π²Ρ‹Π²ΠΎΠ΄Π° ΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ Ρ‚ΠΈΠΏΠΎΠ² компилятор ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ структуру Π΄Π°Π½Π½Ρ‹Ρ…, Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡƒΡŽ Ρ‚Π°Π±Π»ΠΈΡ†Π΅ΠΉ символов , которая содСрТит ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎΠ±ΠΎ всСх символах (ΠΈΠ»ΠΈ ΠΈΠΌΠ΅Π½Π°Ρ…), Π²ΡΡ‚Ρ€Π΅Ρ‡Π°ΡŽΡ‰ΠΈΡ…ΡΡ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅.ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ‚ΠΎΡ€ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ символов , Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΡ‚Π²Π΅Ρ‚ΠΈΡ‚ΡŒ Π½Π° Ρ‚Π°ΠΊΠΈΠ΅ вопросы, ΠΊΠ°ΠΊ ОбъявлСна ​​ли эта пСрСмСнная ΠΏΠ΅Ρ€Π΅Π΄ использованиСм? , Π•ΡΡ‚ΡŒ Π»ΠΈ Π΄Π²Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ с ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹ΠΌΠΈ ΠΈΠΌΠ΅Π½Π°ΠΌΠΈ Π² ΠΎΠ΄Π½ΠΎΠΉ области? Каков Ρ‚ΠΈΠΏ этой ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ? Доступна Π»ΠΈ эта пСрСмСнная Π² Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ области? ΠΈ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ Π΄Ρ€ΡƒΠ³ΠΈΠ΅.

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠΌ этапа сСмантичСского Π°Π½Π°Π»ΠΈΠ·Π° являСтся AST с аннотациями ΠΈ Ρ‚Π°Π±Π»ΠΈΡ†Π° символов .

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

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

ВрСхадрСсный ΠΊΠΎΠ΄ ( 3AC ) Π² ΠΏΡ€ΠΎΡΡ‚Π΅ΠΉΡˆΠ΅ΠΉ Ρ„ΠΎΡ€ΠΌΠ΅ — это язык, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ инструкция являСтся присваиваниСм ΠΈ ΠΈΠΌΠ΅Π΅Ρ‚ Π½Π΅ Π±ΠΎΠ»Π΅Π΅ 3 ΠΎΠΏΠ΅Ρ€Π°Π½Π΄ΠΎΠ².

Π‘ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ инструкций Π² 3AC ΠΈΠΌΠ΅ΡŽΡ‚ Π²ΠΈΠ΄ a : = b <ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€> c ΠΈΠ»ΠΈ a : = b .

На ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΌ Π²Ρ‹ΡˆΠ΅ рисункС ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ ΠΊΠΎΠ΄ 3AC , сгСнСрированный ΠΈΠ· Π°Π½Π½ΠΎΡ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ AST , созданного Π²ΠΎ врСмя компиляции Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ

  func  sum (n:  Int ):  Int  = {
n * (n + 1) / 2
}

ГСнСрация ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° Π·Π°Π²Π΅Ρ€ΡˆΠ°Π΅Ρ‚ Ρ„Π°Π·Ρƒ внСшнСго интСрфСйса компилятора.

ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡ

На этапС ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ, ΠΏΠ΅Ρ€Π²ΠΎΠΉ Ρ„Π°Π·Π΅ сСрвСрной части , компилятор ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ для ΡƒΠ»ΡƒΡ‡ΡˆΠ΅Π½ΠΈΡ ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°, сгСнСрированного, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΏΡƒΡ‚Π΅ΠΌ ускорСния ΠΈΠ»ΠΈ сокращСния ΠΊΠΎΠ΄Π°.

НапримСр, ΠΎΡ‡Π΅Π½ΡŒ простой ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ ΠΊΠΎΠ΄Π° 3AC Π² ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Π±Ρ‹Π»ΠΎ Π±Ρ‹ ΠΈΡΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠ΅ присвоСниС t3: = t2 / 2 ΠΈ Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ ΠΏΡ€ΠΈΡΠ²ΠΎΠΈΡ‚ΡŒ id1 Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ t2 / 2 .

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

На этом послСднСм этапС компилятор ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ΠΈΡ‚ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ Π² машинно-зависимый ΠΊΠΎΠ΄, Assembly ΠΈΠ»ΠΈ любой Π΄Ρ€ΡƒΠ³ΠΎΠΉ Ρ†Π΅Π»Π΅Π²ΠΎΠΉ Π½ΠΈΠ·ΠΊΠΎΡƒΡ€ΠΎΠ²Π½Π΅Π²Ρ‹ΠΉ язык.

Π—Π°Π²Π΅Ρ€ΡˆΠΈΠΌ эту ΡΡ‚Π°Ρ‚ΡŒΡŽ Π·Π°ΠΌΠ΅Ρ‚ΠΊΠΎΠΉ ΠΎ Ρ€Π°Π·Π½ΠΈΡ†Π΅ ΠΌΠ΅ΠΆΠ΄Ρƒ компиляторами ΠΈ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Π°ΠΌΠΈ.

Π˜Π½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Ρ‹ ΠΈ компиляторы ΠΎΡ‡Π΅Π½ΡŒ ΠΏΠΎΡ…ΠΎΠΆΠΈ ΠΏΠΎ структурС. ОсновноС ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ состоит Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ выполняСт инструкции Π½Π° исходном языкС программирования, Π² Ρ‚ΠΎ врСмя ΠΊΠ°ΠΊ компилятор ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ΠΈΡ‚ эти инструкции Π² эффСктивный ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄.

Π˜Π½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ эффСктивноС ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½ΠΎΠ΅ прСдставлСниС ΠΈ Π½Π΅ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎ Π΅Π³ΠΎ ΠΎΡ†Π΅Π½ΠΈΠ²Π°Π΅Ρ‚. Π’ зависимости ΠΎΡ‚ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Π° ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½Ρ‹ΠΌ прСдставлСниСм ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ AST , Π°Π½Π½ΠΎΡ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ AST ΠΈΠ»ΠΈ машинно-нСзависимоС Π½ΠΈΠ·ΠΊΠΎΡƒΡ€ΠΎΠ²Π½Π΅Π²ΠΎΠ΅ прСдставлСниС, Ρ‚Π°ΠΊΠΎΠ΅ ΠΊΠ°ΠΊ трСхадрСсный ΠΊΠΎΠ΄ .

ΠŸΠ΅Ρ€Π΅ΠΉΠ΄ΠΈΡ‚Π΅ ΠΊ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ ΡΡ‚Π°Ρ‚ΡŒΠ΅, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΌΡ‹ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ рассмотрим лСксичСский Π°Π½Π°Π»ΠΈΠ· ΠΈ рассмотрим всС ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΠΈ, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ для создания лСксичСского Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€Π° для Blink.Π’Ρ‹ Ρ‚Π°ΠΊΠΆΠ΅ испачкаСтС Ρ€ΡƒΠΊΠΈ, Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΠ² своС ΠΏΠ΅Ρ€Π²ΠΎΠ΅ Π·Π°Π΄Π°Π½ΠΈΠ΅.

Π’Ρ‹ дошли Π΄ΠΎ ΠΊΠΎΠ½Ρ†Π°. πŸŽ‰

Π₯акСрский полдСнь — это Ρ‚ΠΎ, с Ρ‡Π΅Π³ΠΎ Ρ…Π°ΠΊΠ΅Ρ€Ρ‹ Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‚ свои Π΄Π½ΠΈ. ΠœΡ‹ — Ρ‡Π°ΡΡ‚ΡŒ сСмьи @AMI. БСйчас ΠΌΡ‹ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅ΠΌ заявки ΠΈ Ρ€Π°Π΄Ρ‹ ΠΎΠ±ΡΡƒΠ΄ΠΈΡ‚ΡŒ Ρ€Π΅ΠΊΠ»Π°ΠΌΠ½Ρ‹Π΅ ΠΈ спонсорскиС возмоТности.

Если Π²Π°ΠΌ ΠΏΠΎΠ½Ρ€Π°Π²ΠΈΠ»Π°ΡΡŒ эта история, ΠΌΡ‹ Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΠ΅ΠΌ ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ наши послСдниС новости ΠΈ истории ΠΎ тСндСнциях Π² области Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΉ. Π”ΠΎ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π³ΠΎ Ρ€Π°Π·Π° Π½Π΅ воспринимайтС Ρ€Π΅Π°Π»ΠΈΠΈ ΠΌΠΈΡ€Π° ΠΊΠ°ΠΊ Π΄ΠΎΠ»ΠΆΠ½ΠΎΠ΅!

ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ‚ΠΎΡ€ vs.Π˜Π½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ

1. ΠšΡ€ΠΎΡΡ-компилятор

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

2. БобствСнный компилятор

ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ‚ΠΎΡ€, производящий Π²Ρ‹Ρ…ΠΎΠ΄Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π±ΡƒΠ΄ΡƒΡ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π½Π° Ρ‚ΠΎΠΌ ΠΆΠ΅ Ρ‚ΠΈΠΏΠ΅ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π° ΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмы, Ρ‡Ρ‚ΠΎ ΠΈ сам компилятор.

3. ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ‚ΠΎΡ€ Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠΉ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ

ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ‚ΠΎΡ€, написанный Π½Π° языкС, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΎΠ½ собираСтся ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ.

4. ДСкомпилятор

ДСкомпилятор ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ΠΈΡ‚ ΠΊΠΎΠ΄ с языка Π½ΠΈΠ·ΠΊΠΎΠ³ΠΎ уровня Π½Π° язык Π±ΠΎΠ»Π΅Π΅ высокого уровня.

5. ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ‚ΠΎΡ€ исходного ΠΊΠΎΠ΄Π° (Transpiler)

Π­Ρ‚ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°, которая выполняСт ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ ΠΌΠ΅ΠΆΠ΄Ρƒ языками высокого уровня. Π­Ρ‚ΠΎΡ‚ Ρ‚ΠΈΠΏ компиляторов Ρ‚Π°ΠΊΠΆΠ΅ извСстСн ΠΊΠ°ΠΊ транскомпилятор ΠΈΠ»ΠΈ транспилятор.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹:

  • Emscripten: ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ΠΈΡ‚ C / C ++ Π² JavaScript.
  • Babel: пСрСносит ΠΊΠΎΠ΄ JavaScript с ES6 + Π½Π° ES5.
  • Cfront: исходный компилятор для C ++ (ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ с 1983 Π³.).Он использовал C Π² качСствС Ρ†Π΅Π»Π΅Π²ΠΎΠ³ΠΎ языка ΠΈ создал ΠΊΠΎΠ΄ C Π±Π΅Π· стиля отступа ΠΈ Π±Π΅Π· красивого ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° C, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ сгСнСрированный ΠΊΠΎΠ΄ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Π½Π΅ прСдназначался для чтСния людьми.

6. ΠŸΠ΅Ρ€Π΅ΠΏΠΈΡΡ‡ΠΈΠΊ языка

ΠžΠ±Ρ‹Ρ‡Π½ΠΎ это ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°, пСрСводящая Ρ„ΠΎΡ€ΠΌΡƒ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ Π±Π΅Π· измСнСния языка.

7. ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ‚ΠΎΡ€ Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄Π°

ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ‚ΠΎΡ€, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ΠΈΡ‚ язык высокого уровня Π² ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½Ρ‹ΠΉ простой язык, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ΠΎΠΌ Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄Π° ΠΈΠ»ΠΈ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΉ машиной.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹: компиляторы Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄Π° для Java ΠΈ Python.

8. ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ компилятор (JIT-компилятор)

JIT-компилятор ΠΎΡ‚ΠΊΠ»Π°Π΄Ρ‹Π²Π°Π΅Ρ‚ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡ†ΠΈΡŽ Π΄ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ выполнСния. ΠžΠ±Ρ‹Ρ‡Π½ΠΎ ΠΎΠ½ выполняСтся Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Π°.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹:

  • Π‘Π°ΠΌΡ‹ΠΉ Ρ€Π°Π½Π½ΠΈΠΉ ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½Π½Ρ‹ΠΉ JIT-компилятор относится ΠΊ LISP Π² 1960 Π³ΠΎΠ΄Ρƒ.
  • ПослСдний ΠΌΠ΅Ρ‚ΠΎΠ΄ появился Π² Ρ‚Π°ΠΊΠΈΡ… языках, ΠΊΠ°ΠΊ Smalltalk, Π² 1980-Ρ….
  • Π—Π°Ρ‚Π΅ΠΌ JIT-компиляция ΠΏΡ€ΠΈΠ²Π»Π΅ΠΊΠ»Π° всСобщСС Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ срСди соврСмСнных языков, Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ Java, . NET Framework, Python ΠΈ самыС соврСмСнныС Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ JavaScript.
JRE (Java Runtime Environment) Π€ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ

Π’ Java исходныС Ρ„Π°ΠΉΠ»Ρ‹ сначала ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΡƒΡŽΡ‚ΡΡ ΠΈ ΠΊΠΎΠ½Π²Π΅Ρ€Ρ‚ΠΈΡ€ΡƒΡŽΡ‚ΡΡ Π² Ρ„Π°ΠΉΠ»Ρ‹ .class , ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ содСрТат Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄ Java (высоко ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ Π½Π°Π±ΠΎΡ€ инструкций), Π·Π°Ρ‚Π΅ΠΌ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄Π° выполняСт Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄, Π° Π·Π°Ρ‚Π΅ΠΌ JIT компилятор ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ΠΈΡ‚ Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄ Π² ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄.

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

9. ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ†ΠΈΡ AOT

ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ†ΠΈΡ с ΠΎΠΏΠ΅Ρ€Π΅ΠΆΠ΅Π½ΠΈΠ΅ΠΌ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ (AOT) — это ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ ΠΊ компиляции языка программирования Π±ΠΎΠ»Π΅Π΅ высокого уровня ΠΈΠ»ΠΈ ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½ΠΎΠ³ΠΎ прСдставлСния, Ρ‚Π°ΠΊΠΎΠ³ΠΎ ΠΊΠ°ΠΊ Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄ Java, Π΄ΠΎ выполнСния.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€:

Π˜Π½Ρ„Ρ€Π°ΡΡ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π° Angular ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ ΠΎΠΏΠ΅Ρ€Π΅ΠΆΠ°ΡŽΡ‰ΠΈΠΉ компилятор (AOT) для прСобразования ΠΊΠΎΠ΄Π° HTML ΠΈ TypeScript Π² ΠΊΠΎΠ΄ JavaScript Π²ΠΎ врСмя сборки, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΡ‚ΡŒ Π±ΠΎΠ»Π΅Π΅ Π±Ρ‹ΡΡ‚Ρ€ΡƒΡŽ Π²ΠΈΠ·ΡƒΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ ΠΏΠΎΠ·ΠΆΠ΅ Π² Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π΅, ΠΊΠΎΠ³Π΄Π° ΠΊΠΎΠ΄ выполняСтся.

10. АссСмблСр

АссСмблСр ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ΠΈΡ‚ понятный Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊΡƒ язык ассСмблСра Π² ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄. Π­Ρ‚ΠΎΡ‚ процСсс компиляции называСтся сборкой. ΠžΠ±Ρ€Π°Ρ‚Π½Π°Ρ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°, ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΡŽΡ‰Π°Ρ ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ Π² язык ассСмблСра, называСтся дизассСмблСром.

АссСмблСр

Π―Π·Ρ‹ΠΊ ассСмблСра (сокращСнно ASM) — это язык программирования Π½ΠΈΠ·ΠΊΠΎΠ³ΠΎ уровня, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ сущСствуСт Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΡŒ ΠΎΡ‚ инструкций машинного ΠΊΠΎΠ΄Π°. Π’ΠΎΡ‚ ΠΏΠΎΡ‡Π΅ΠΌΡƒ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ язык ассСмблСра ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для ΠΎΠ΄Π½ΠΎΠΉ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΉ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π½ΠΎΠΉ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρ‹.

ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ‚ΠΎΡ€ ΠΈ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ Π½Π° Python | Π Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Python

ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ‚ΠΎΡ€ ΠΈ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ Π² Python

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

ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ‚ΠΎΡ€ — это ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°, которая ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ΠΈΡ‚ исходный язык ΠΈΠ»ΠΈ язык программирования высокого уровня (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Java, C ++) Π² Ρ†Π΅Π»Π΅Π²ΠΎΠΉ ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ (Π΄Π²ΠΎΠΈΡ‡Π½Ρ‹Π΅ Π±ΠΈΡ‚Ρ‹ — 1 ΠΈ 0), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ЦП ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ ΠΈ ΠΏΠΎΠ½ΠΈΠΌΠ°Ρ‚ΡŒ. ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° для ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Π° написана Π² Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€Π΅ ΠΈ извСстна ΠΊΠ°ΠΊ исходныС тСксты.Акт ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Π° исходного ΠΊΠΎΠ΄Π° Π² ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΉ ΠΈΠ»ΠΈ Π΄Π²ΠΎΠΈΡ‡Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ извСстСн ΠΊΠ°ΠΊ компиляция.
Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ компилятор, подходящий для языка программирования, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΡƒΠΊΠ°Π·Π°Π½ΠΎ имя ΠΈΠΌΠ΅Π½ΠΈ Ρ„Π°ΠΉΠ»Π°, содСрТащСго исходныС ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹. Π’ΠΎ врСмя компиляции всС ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ языка Π±ΡƒΠ΄ΡƒΡ‚ ΠΏΡ€ΠΎΠ°Π½Π°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Ρ‹ ΠΈΠ»ΠΈ ΠΏΡ€ΠΎΠ°Π½Π°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Ρ‹, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ±Π΅Π΄ΠΈΡ‚ΡŒΡΡ Π² ΠΈΡ… ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΡΡ‚ΠΈ. Если ошибки Π½Π΅Ρ‚, компилятор Π·Π°Ρ‚Π΅ΠΌ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠ΅Ρ‚ исходный ΠΊΠΎΠ΄ Π² ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π·Π°Ρ‚Π΅ΠΌ Π³ΠΎΡ‚ΠΎΠ² ΠΊ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΡŽ.
Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ компиляции Ρ‚Π°ΠΊΠΆΠ΅ извСстСн ΠΊΠ°ΠΊ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ ΠΈΠ»ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹ΠΉ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ.Однако Π² ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΌ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ Π΅Π³ΠΎ Π½Π΅ слСдуСт ΠΏΡƒΡ‚Π°Ρ‚ΡŒ с ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ это Π½Π΅ ΠΎΠ΄Π½ΠΎ ΠΈ Ρ‚ΠΎ ΠΆΠ΅.
Π—Π°Π΄Π°Ρ‡Π° компилятора ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ дСлится Π½Π° нСсколько этапов. Π­Ρ‚ΠΈ этапы Π²ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‚ лСксичСский Π°Π½Π°Π»ΠΈΠ·, синтаксичСский Π°Π½Π°Π»ΠΈΠ·, сСматичСский Π°Π½Π°Π»ΠΈΠ·, Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€ ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°, ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ‚ΠΎΡ€ ΠΊΠΎΠ΄Π° ΠΈ Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€ ΠΊΠΎΠ΄Π°. ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΈΠ· этих этапов ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ‚ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Ρ‚ΡŒ исходный ΠΊΠΎΠ΄, разбивая Π΅Π³ΠΎ Π½Π° Ρ‚ΠΎΠΊΠ΅Π½Ρ‹, гСнСрируя Π΄Π΅Ρ€Π΅Π²ΡŒΡ синтаксичСского Π°Π½Π°Π»ΠΈΠ·Π° ΠΈ оптимизируя исходный ΠΊΠΎΠ΄.

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Ρ‡ΠΈΠΊ?

Π˜Π½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ — это ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°, которая Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠ΅Ρ‚ язык программирования высокого уровня (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Python, PHP, Perl) Π² ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄.НСсмотря Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ ΠΏΠΎΡ…ΠΎΠΆ Π½Π° компилятор, способ выполнСния ΠΊΠΎΠ΄Π° отличаСтся для ΠΎΠ±ΠΎΠΈΡ…. Π’ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ компилятора, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ просто ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠ΅Ρ‚ исходный ΠΊΠΎΠ΄ Π² ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄, ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ ΠΌΠΎΠΆΠ΅Ρ‚ Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒΡΡ нСпосрСдствСнно ΠΊΠ°ΠΊ исполняСмая ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°. Π’ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ компилятора, ΠΎΠ½ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠ΅Ρ‚ исходный ΠΊΠΎΠ΄ Π² ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ Π²ΠΎ врСмя выполнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, Π° Π½Π΅ Π΄ΠΎ Π΅Π΅ запуска.
Π˜Π½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Ρ‹ Π½Π΅ производят Π½ΠΈΠΊΠ°ΠΊΠΎΠ³ΠΎ ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½ΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°, ΠΊΠ°ΠΊ компиляторы. Π’ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Π°Ρ… исходный ΠΊΠΎΠ΄ компилируСтся ΠΈ выполняСтся ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ. Он ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°Π΅Ρ‚ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€, ΠΏΠΎΠΊΠ° Π½Π΅ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΡ‚ ΠΏΠ΅Ρ€Π²ΡƒΡŽ ΠΎΡˆΠΈΠ±ΠΊΡƒ, послС Ρ‡Π΅Π³ΠΎ останавливаСтся.Π‘Π»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, Π»Π΅Π³ΠΊΠΎ ΠΎΡ‚Π»Π°ΠΆΠΈΠ²Π°Ρ‚ΡŒ. Π’ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Π°Ρ… исходныС ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ построчно, Π² ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ компилятора, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΊΠΎΠ½Π²Π΅Ρ€Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚ всю ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ сразу.
Π˜Π½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ Ρ‚Π°ΠΊΠΆΠ΅ выполняСт лСксированиС, синтаксичСский Π°Π½Π°Π»ΠΈΠ· ΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΡƒ Ρ‚ΠΈΠΏΠΎΠ², Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½ΠΎ компилятору. Однако ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Ρ‹ Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°ΡŽΡ‚ синтаксичСскоС Π΄Π΅Ρ€Π΅Π²ΠΎ, Π° Π½Π΅ Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΡŽΡ‚ ΠΈΠ· Π½Π΅Π³ΠΎ ΠΊΠΎΠ΄.

Π˜Π½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ Python

Python ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚ΠΈΡ€ΡƒΠ΅ΠΌΡ‹ΠΌ языком. Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ каТдая строка ΠΊΠΎΠ΄Π° выполняСтся ΠΎΠ΄Π½Π° Π·Π° Π΄Ρ€ΡƒΠ³ΠΎΠΉ.Однако это Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ связано с процСссом компиляции. ΠŸΡ€ΠΈΡ‡ΠΈΠ½Π°, ΠΏΠΎ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Python называСтся ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚ΠΈΡ€ΡƒΠ΅ΠΌΡ‹ΠΌ языком, Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ компилятор Π² Python выполняСт ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ мСньшС Ρ€Π°Π±ΠΎΡ‚Ρ‹, Ρ‡Π΅ΠΌ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ ΠΈΠ»ΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΡƒΠ΅ΠΌΡ‹ΠΉ язык, Ρ‚Π°ΠΊΠΎΠΉ ΠΊΠ°ΠΊ C ΠΈΠ»ΠΈ Rust.
Однако сам ΠΏΠΎ сСбС язык программирования Π½Π΅ Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ ΠΎ Ρ‚ΠΎΠΌ, Π³Π΄Π΅ ΠΎΠ½ компилируСтся ΠΈΠ»ΠΈ интСрпрСтируСтся. Π‘ΠΊΠΎΡ€Π΅Π΅, это Ρ€Π΅ΡˆΠ°Π΅Ρ‚ свойство Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ. Π˜Π½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ Python ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ устанавливаСтся ΠΊΠ°ΠΊ / usr / local / bin / python, Ссли ΠΎΠ½ доступСн Π² систСмС.
Π’ Python компиляция происходит, ΠΊΠΎΠ³Π΄Π° ΠΊΠΎΠ΄ компилируСтся Π² Π±ΠΎΠ»Π΅Π΅ ΠΏΡ€ΠΎΡΡ‚ΡƒΡŽ Ρ„ΠΎΡ€ΠΌΡƒ, Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡƒΡŽ Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄ΠΎΠΌ. Π‘Π°ΠΉΡ‚-ΠΊΠΎΠ΄ Π½Π° самом Π΄Π΅Π»Π΅ Π½Π΅ интСрпрСтируСтся Π² ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄, Ссли Π½Π΅Ρ‚ ΠΊΠ°ΠΊΠΎΠΉ-Π»ΠΈΠ±ΠΎ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ, Ρ‚Π°ΠΊΠΎΠΉ ΠΊΠ°ΠΊ PyPy. Π‘Π°ΠΉΡ‚-ΠΊΠΎΠ΄Ρ‹ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΉ машиной Python (PVM), которая ΠΈΠΌΠΈΡ‚ΠΈΡ€ΡƒΠ΅Ρ‚ ΡƒΠΏΡ€ΠΎΡ‰Π΅Π½Π½ΡƒΡŽ срСду выполнСния.
ΠŸΡ€ΠΎΡ†Π΅ΡΡ компиляции Π² Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ нСявный. Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Π²Ρ‹ Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚Π΅ компилятор. ВмСсто этого Π²Ρ‹ просто запускаСтС Ρ„Π°ΠΉΠ» .py. ΠžΡ‚ΡΡƒΡ‚ΡΡ‚Π²ΠΈΠ΅ явного шага компиляции являСтся ΠΏΡ€ΠΈΡ‡ΠΈΠ½ΠΎΠΉ Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ исполняСмый Ρ„Π°ΠΉΠ» Python извСстСн ΠΊΠ°ΠΊ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ Python.
ΠŸΠ΅Ρ€Π²Ρ‹ΠΌ шагом ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Π° являСтся Ρ‡Ρ‚Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° ΠΈΠ»ΠΈ инструкции Python. Π—Π°Ρ‚Π΅ΠΌ ΠΎΠ½ провСряСт синтаксис ΠΊΠ°ΠΆΠ΄ΠΎΠΉ строки ΠΈ провСряСт, ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ Π»ΠΈ ΠΎΡ‚Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π° инструкция. Π˜Π½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Ρ‚ΡŒ ошибки ΠΊΠ°ΠΆΠ΄ΠΎΠΉ строки ΠΎΠ΄Π½Ρƒ Π·Π° Π΄Ρ€ΡƒΠ³ΠΎΠΉ.
Π’Π°ΠΆΠ½ΠΎΠΉ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡ‚ΡŒΡŽ Python являСтся интСрактивная подсказка. ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ Python ΠΌΠΎΠΆΠ½ΠΎ Π½Π°Π±Ρ€Π°Ρ‚ΡŒ ΠΈ Π½Π΅ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ. Π‘ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ скомпилированных языков ΠΌΠΎΠ³ΡƒΡ‚ Π½Π΅ ΠΈΠΌΠ΅Ρ‚ΡŒ Ρ‚Π°ΠΊΠΎΠΉ интСрактивности. Python компилируСтся Π² Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄, ΠΈ этот Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄ Π½Π΅ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎ выполняСтся Π±Π΅Π· явного шага компиляции.

Π Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Python

PyPy

PyPy — это ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ Python, Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π½Π½Ρ‹ΠΉ Π½Π° основС RPython — подмноТСства языка программирования Python. МногиС программисты ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡ΠΈΡ‚Π°ΡŽΡ‚ PyPy Π΄Ρ€ΡƒΠ³ΠΈΠΌ рСализациям, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΎΠ½ ΠΏΡ€Π΅Π΄Π»Π°Π³Π°Π΅Ρ‚ ΠΎΠΏΡ‚ΠΈΠΌΠ°Π»ΡŒΠ½ΡƒΡŽ ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ ΠΈ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ. Π˜Π½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΡ‡Π΅Π½ΡŒ быстро ΠΈ эффСктивно ΠΏΠΎΠ½ΠΈΠΌΠ°Ρ‚ΡŒ ΠΈ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ исходный ΠΊΠΎΠ΄ Python. Он поставляСтся со встроСнным компилятором Just-in-Time ΠΈΠ»ΠΈ JIT. ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ‚ΠΎΡ€ JIT ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для ускорСния ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ†ΠΈΠΈ исходных ΠΊΠΎΠ΄ΠΎΠ² PyPy ΠΏΠΎ ΡΡ€Π°Π²Π½Π΅Π½ΠΈΡŽ с Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Π°ΠΌΠΈ.
PyPy Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°ΠΌΠΈ для эффСктивного выполнСния Π΄ΠΎΠ»Π³ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… ΠΊΠΎΠ΄ΠΎΠ². Π Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ исслСдования ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚, Ρ‡Ρ‚ΠΎ Python Π±ΠΎΠ»Π΅Π΅ Ρ‚Ρ€Π΅Π±ΠΎΠ²Π°Ρ‚Π΅Π»Π΅Π½ ΠΊ памяти ΠΏΠΎ ΡΡ€Π°Π²Π½Π΅Π½ΠΈΡŽ с Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ языками программирования. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ ΠΏΡ‹Ρ‚Π°ΡŽΡ‚ΡΡ Π½Π°ΠΉΡ‚ΠΈ способы ΡƒΠΌΠ΅Π½ΡŒΡˆΠΈΡ‚ΡŒ ΠΏΠΎΡ‚Ρ€Π΅Π±Π»Π΅Π½ΠΈΠ΅ памяти, Π½Π΅ влияя Π½Π° ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ прилоТСния Python. ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ PyPy Π½Π°ΠΌΠ½ΠΎΠ³ΠΎ Π»Π΅Π³Ρ‡Π΅ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ΠΎΠ², написанных Π½Π° языкС программирования C, Ρ‚Π°ΠΊΠΎΠΌ ΠΊΠ°ΠΊ CPython, ΠΎΠ½ сниТаСт ΠΏΠΎΡ‚Ρ€Π΅Π±Π»Π΅Π½ΠΈΠ΅ памяти.

CPython

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

Π”ΠΆΠ°ΠΉΡ‚ΠΎΠ½

Jython — это Π΅Ρ‰Π΅ ΠΎΠ΄Π½Π° рСализация Python, которая ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΊΠΎΠ΄ Python Π² Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄ Java. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Jython, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ Python Π² любой срСдС, которая ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ ΠΈ запускаСт Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΡƒΡŽ ΠΌΠ°ΡˆΠΈΠ½Ρƒ Java ΠΈΠ»ΠΈ JVM. Π‘ΠΎΠ»Π΅Π΅ Ρ‚ΠΎΠ³ΠΎ, ΠΎΠ½ ΠΈΠΌΠ΅Π΅Ρ‚ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ любой класс Java, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ Python. Jython ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ ΠΊΠ°ΠΊ ΡΡ‚Π°Ρ‚ΠΈΡ‡Π΅ΡΠΊΡƒΡŽ, Ρ‚Π°ΠΊ ΠΈ Π΄ΠΈΠ½Π°ΠΌΠΈΡ‡Π΅ΡΠΊΡƒΡŽ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡ†ΠΈΡŽ.

IronPython

IronPython — это рСализация Python с ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΌ исходным ΠΊΠΎΠ΄ΠΎΠΌ, ΠΏΡ€ΠΎΡ‡Π½ΠΎ интСгрированная с ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠΎΠΉ .NET.IronPython ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠ°ΠΊ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹ .NET, Ρ‚Π°ΠΊ ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Python. Он ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ Π΄ΠΈΠ½Π°ΠΌΠΈΡ‡Π΅ΡΠΊΡƒΡŽ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡ†ΠΈΡŽ, поставляСтся с ΠΈΠ½Ρ‚Π΅Ρ€Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΠΉ консолью.

Π‘ΠΈΡ‚Π΅Ρ€ΡƒΠ½

Byterun — ΠΊΠΎΠΌΠΏΠ°ΠΊΡ‚Π½Ρ‹ΠΉ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ Python, написанный Π½Π° Python. Π˜Π·Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎ ΠΎΠ½ создавался ΠΊΠ°ΠΊ ΡƒΡ‡Π΅Π±Π½ΠΎΠ΅ ΡƒΠΏΡ€Π°ΠΆΠ½Π΅Π½ΠΈΠ΅, ΠΈ Π΅Π³ΠΎ Π»Π΅Π³ΠΊΠΎ ΠΏΠΎΠ½ΡΡ‚ΡŒ отчасти ΠΏΠΎΡ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ написан Π½Π° языкС высокого уровня, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ люди ΠΌΠΎΠ³ΡƒΡ‚ Π»Π΅Π³ΠΊΠΎ ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ ΠΈ ΠΏΠΎΠ½ΡΡ‚ΡŒ. Одним ΠΈΠ· нСдостатков Byterun являСтся Π΅Π³ΠΎ ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ.

Π Π°Π·Π½ΠΈΡ†Π° ΠΌΠ΅ΠΆΠ΄Ρƒ компилятором ΠΈ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ΠΎΠΌ

Π’ основном ΠΌΡ‹ пишСм ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π½Ρ‹Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π½Π° языках высокого уровня , понятных людям.Π―Π·Ρ‹ΠΊΠΈ высокого уровня — это языки, содСрТащиС слова ΠΈ Ρ„Ρ€Π°Π·Ρ‹ ΠΈΠ· чСловСчСских языков, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ английского. Π―Π·Ρ‹ΠΊ программирования высокого уровня Ρ‚Π°ΠΊΠΆΠ΅ извСстСн ΠΊΠ°ΠΊ исходный ΠΊΠΎΠ΄ Π² ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π½ΠΎΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅. Однако ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π½Π°Ρ машина Π½Π΅ ΠΏΠΎΠ½ΠΈΠΌΠ°Π΅Ρ‚ эти языки программирования высокого уровня. Он ΠΏΠΎΠ½ΠΈΠΌΠ°Π» Ρ‚ΠΎΠ»ΡŒΠΊΠΎ свой ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ , Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ Π² 0, ΠΈ 1, Π² Π΄Π²ΠΎΠΈΡ‡Π½ΠΎΠΉ Ρ„ΠΎΡ€ΠΌΠ΅, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Π·Π°Π΄Π°Ρ‡Ρƒ соотвСтствСнно.

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

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

ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ‚ΠΎΡ€ — это ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°, которая слСдуСт синтаксичСскому ΠΏΡ€Π°Π²ΠΈΠ»Ρƒ языка программирования для прСобразования исходного ΠΊΠΎΠ΄Π° Π² ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄. Он Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ ошибки, Ссли ΠΎΠ½ΠΈ ΠΏΡ€ΠΈΡΡƒΡ‚ΡΡ‚Π²ΡƒΡŽΡ‚ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅; ΠΎΠ½ Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ сообщСниС ΠΎΠ± ошибкС, ΠΈ Π²Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΈΡΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ это ΡΠ°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎ Π² синтаксисС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. Если ваша написанная ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π²Π΅Ρ€Π½Π° (Π½Π΅ содСрТит ошибок), Ρ‚ΠΎ компилятор ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠ΅Ρ‚ вСсь ваш исходный ΠΊΠΎΠ΄ Π² ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄. ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ‚ΠΎΡ€ сразу ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠ΅Ρ‚ ΠΏΠΎΠ»Π½Ρ‹ΠΉ исходный ΠΊΠΎΠ΄ Π² ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄.И, Π½Π°ΠΊΠΎΠ½Π΅Ρ†, ваша ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½Π°.

ВсС этапы компиляции исходного ΠΊΠΎΠ΄Π° дСлятся Π½Π° Π΄Π²Π΅ Ρ„Π°Π·Ρ‹: , Π°Π½Π°Π»ΠΈΠ·, , ΠΈ , синтСз, .

  • Π­Ρ‚Π°ΠΏ Π°Π½Π°Π»ΠΈΠ·Π°: Π­Ρ‚Π° Ρ„Π°Π·Π° компиляции Ρ‚Π°ΠΊΠΆΠ΅ извСстна ΠΊΠ°ΠΊ Ρ„Π°Π·Π° внСшнСго интСрфСйса, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ исходный ΠΊΠΎΠ΄ дСлится Π½Π° основныС части для ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ Π³Ρ€Π°ΠΌΠΌΠ°Ρ‚ΠΈΠΊΠΈ, синтаксиса ΠΈ сСмантики ΠΊΠΎΠ΄Π°; послС этого гСнСрируСтся ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ . Π€Π°Π·Π° Π°Π½Π°Π»ΠΈΠ·Π° процСсса компиляции Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ лСксичСский Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€, сСмантичСский Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ ΠΈ синтаксичСский Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€.
  • Π€Π°Π·Π° синтСза: Π€Π°Π·Π° синтСза Ρ‚Π°ΠΊΠΆΠ΅ извСстна ΠΊΠ°ΠΊ внутрСнняя Ρ„Π°Π·Π°, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ (ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±Ρ‹Π» сгСнСрирован Π½Π° этапС Π°Π½Π°Π»ΠΈΠ·Π°) оптимизируСтся ΠΈ гСнСрируСтся Π² Ρ†Π΅Π»Π΅Π²ΠΎΠΉ ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ . Π€Π°Π·Π° синтСза процСсса компиляции Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Π·Π°Π΄Π°Ρ‡ΠΈ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ‚ΠΎΡ€Π° ΠΊΠΎΠ΄Π° ΠΈ Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Π° ΠΊΠΎΠ΄Π°.

ΠŸΠ΅Ρ€Π΅Π²ΠΎΠ΄Ρ‡ΠΈΠΊ

Π˜Π½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ — это Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°, которая ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ΠΈΡ‚ исходный ΠΊΠΎΠ΄ Π½Π° ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΉ язык.Однако ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠ΅Ρ‚ язык программирования высокого уровня Π² ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΉ язык построчно Π²ΠΎ врСмя ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ†ΠΈΠΈ ΠΈ выполнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹.

Π Π°Π·Π½ΠΈΡ†Π° ΠΌΠ΅ΠΆΠ΄Ρƒ компилятором ΠΈ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ΠΎΠΌ

Π’ΠΈΠΏΡ‹ Ρ€Π°Π·Π»ΠΈΡ‡ΠΈΠΉ ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ‚ΠΎΡ€ ΠŸΠ΅Ρ€Π΅Π²ΠΎΠ΄Ρ‡ΠΈΠΊ
Π¨Π°Π³ΠΈ программирования
  • ΠΠ°ΠΏΠΈΡˆΠΈΡ‚Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ Π² исходном ΠΊΠΎΠ΄Π΅.
  • Compile ΠΏΡ€ΠΎΠ°Π½Π°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ вашСй ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ ΠΈΡ… ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΡΡ‚ΡŒ.Если Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠ΅Π½Π° ошибка, выдаСтся сообщСниС ΠΎΠ± ошибкС.
  • Если ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π½Π΅ содСрТит ошибок, компилятор ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠ΅Ρ‚ исходный ΠΊΠΎΠ΄ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π² ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄.
  • ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ‚ΠΎΡ€ связываСт всС Ρ„Π°ΠΉΠ»Ρ‹ ΠΊΠΎΠ΄Π° Π² Π΅Π΄ΠΈΠ½ΡƒΡŽ ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΡƒΡŽ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ, ΠΈΠ·Π²Π΅ΡΡ‚Π½ΡƒΡŽ ΠΊΠ°ΠΊ exe-Ρ„Π°ΠΉΠ».
  • НаконСц, ΠΎΠ½ запускаСт ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ ΠΈ Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ Π²Ρ‹Ρ…ΠΎΠ΄Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅.
  • ΠΠ°ΠΏΠΈΡˆΠΈΡ‚Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ Π² исходном ΠΊΠΎΠ΄Π΅.
  • НС происходит связывания Ρ„Π°ΠΉΠ»ΠΎΠ² ΠΈΠ»ΠΈ ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ Π½Π΅ гСнСрируСтся ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎ.
  • ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ исходного ΠΊΠΎΠ΄Π° Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ построчно Π²ΠΎ врСмя ΠΈΡ… выполнСния. Если ошибка обнаруТиваСтся Π² ΠΊΠ°ΠΊΠΎΠΌ-Π»ΠΈΠ±ΠΎ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΌ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ², ΠΎΠ½ останавливаСт дальнСйшСС Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅, ΠΏΠΎΠΊΠ° ошибка Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΡƒΠ΄Π°Π»Π΅Π½Π°.
Π’ΠΈΠΏ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Π° ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ‚ΠΎΡ€ сразу ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ΠΈΡ‚ ΠΏΠΎΠ»Π½Ρ‹ΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹ΠΉ ΠΊΠΎΠ΄ высокого уровня Π² ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄. Π˜Π½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ΠΈΡ‚ ΠΏΠΎ ΠΎΠ΄Π½ΠΎΠΌΡƒ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρƒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° Π·Π° Ρ€Π°Π· Π² ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄.
ΠŸΡ€Π΅ΠΈΠΌΡƒΡ‰Π΅ΡΡ‚Π²ΠΎ ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ исходный ΠΊΠΎΠ΄ ΡƒΠΆΠ΅ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ Π² ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄, врСмя выполнСния ΠΊΠΎΠ΄Π° сокращаСтся. ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ исходный ΠΊΠΎΠ΄ интСрпрСтируСтся построчно, ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠ΅Π½ΠΈΠ΅ ΠΈ исправлСниС ошибок становится ΠΏΡ€ΠΎΡ‰Π΅.
НСдостаток Если Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ свою ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ ΠΏΠΎ ΠΊΠ°ΠΊΠΎΠΉ-Π»ΠΈΠ±ΠΎ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π΅, Π±ΡƒΠ΄ΡŒ Ρ‚ΠΎ ошибка ΠΈΠ»ΠΈ логичСскиС измСнСния, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ это, Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π²Π΅Ρ€Π½ΡƒΠ²ΡˆΠΈΡΡŒ ΠΊ исходному ΠΊΠΎΠ΄Ρƒ. Π˜Π½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚ΠΈΡ€ΡƒΠ΅ΠΌΡ‹Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΌΠΎΠ³ΡƒΡ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π° Ρ‚Π΅Ρ… ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π°Ρ…, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… установлСн ΠΎΠ΄ΠΈΠ½ ΠΈ Ρ‚ΠΎΡ‚ ΠΆΠ΅ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€.
ΠœΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ Он Ρ…Ρ€Π°Π½ΠΈΡ‚ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ ΠΈΠ· вашСй исходной ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π½Π° дискС. Он Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ сохраняСт ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ Π½Π° дискС.
ΠŸΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ‚ΠΎΡ€Ρƒ трСбуСтся ΠΎΠ³Ρ€ΠΎΠΌΠ½ΠΎΠ΅ количСство Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ для Π°Π½Π°Π»ΠΈΠ·Π° исходного ΠΊΠΎΠ΄Π°. Однако Π² Ρ†Π΅Π»ΠΎΠΌ скомпилированный ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹ΠΉ ΠΊΠΎΠ΄ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ быстрСС ΠΏΡ€ΠΈ сТатии ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ΠΎΠΌ. Π˜Π½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Ρƒ трСбуСтся мСньшС Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ для Π°Π½Π°Π»ΠΈΠ·Π° исходного ΠΊΠΎΠ΄Π° ΠΏΠΎ ΡΡ€Π°Π²Π½Π΅Π½ΠΈΡŽ с компилятором. Однако Π² Ρ†Π΅Π»ΠΎΠΌ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚ΠΈΡ€ΡƒΠ΅ΠΌΡ‹ΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹ΠΉ ΠΊΠΎΠ΄ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΌΠ΅Π΄Π»Π΅Π½Π½Π΅Π΅ ΠΏΠΎ ΠΌΠ΅Ρ€Π΅ сТатия компилятора.
Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ‚ΠΎΡ€ Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ Π²Ρ‹Π²ΠΎΠ΄ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ (Π² Π²ΠΈΠ΄Π΅ Ρ„Π°ΠΉΠ»Π° exe), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎ ΠΎΡ‚ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ с исходным ΠΊΠΎΠ΄ΠΎΠΌ. Π˜Π½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ Π½Π΅ Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΉ ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ Π² качСствС Π²Ρ‹Ρ…ΠΎΠ΄Π½ΠΎΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹.Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, ΠΎΠ½ провСряСт исходный ΠΊΠΎΠ΄ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π· Π²ΠΎ врСмя выполнСния.
ИсполнСниС ΠŸΡ€ΠΎΡ†Π΅ΡΡ выполнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ происходит ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎ ΠΎΡ‚ процСсса Π΅Π΅ компиляции. Π’Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ происходит Ρ‚ΠΎΠ»ΡŒΠΊΠΎ послС компиляции всСй ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. ΠŸΡ€ΠΎΡ†Π΅ΡΡ выполнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ являСтся Ρ‡Π°ΡΡ‚ΡŒΡŽ шагов ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ†ΠΈΠΈ, поэтому ΠΎΠ½ выполняСтся построчно ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ.
ВрСбования ΠΊ памяти Бкомпилированная ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° прСобразуСтся Π² ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹ΠΉ ΠΊΠΎΠ΄, ΠΈ Π² дальнСйшСм трСбуСтся ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΊΠ°.Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, трСбуСтся большС памяти. Π˜Π½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚ΠΈΡ€ΡƒΠ΅ΠΌΠ°Ρ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π½Π΅ Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½Ρ‹ΠΉ ΠΊΠΎΠ΄. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Π½Π΅Ρ‚ нСобходимости Π² Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ памяти.
Π›ΡƒΡ‡ΡˆΠ΅ всСго ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚ для Бкомпилированная ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° привязана ΠΊ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΉ Ρ†Π΅Π»Π΅Π²ΠΎΠΉ машинС. Для выполнСния Π½Π° машинС трСбуСтся Ρ‚ΠΎΡ‚ ΠΆΠ΅ компилятор; C ΠΈ C ++ — самыС популярныС языки программирования, основанныС Π½Π° ΠΌΠΎΠ΄Π΅Π»ΠΈ компиляции. Π’ Π²Π΅Π±-срСдах компиляция Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ‚ ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ большС Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ для выполнСния Π΄Π°ΠΆΠ΅ нСбольшого ΠΊΠΎΠ΄Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ нСсколько Ρ€Π°Π·.ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ врСмя Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ ΠΈΠΌΠ΅Π΅Ρ‚ Π²Π°ΠΆΠ½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π² Π²Π΅Π±-срСдС, ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Ρ‹ Π»ΡƒΡ‡ΡˆΠ΅. JavaScript, Python, Ruby основаны Π½Π° ΠΌΠΎΠ΄Π΅Π»ΠΈ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Π°.
Ошибка выполнСния ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ‚ΠΎΡ€ ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ ΠΏΠΎΠ»Π½Ρ‹Π΅ сообщСния ΠΎΠ± ΠΎΡˆΠΈΠ±ΠΊΠ°Ρ… ΠΈ прСдупрСТдСния Π²ΠΎ врСмя компиляции ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ Π±Π΅Π· исправлСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹Ρ… ошибок. ΠžΡ‚Π»Π°Π΄ΠΊΠ° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с компилятором ΡΡ€Π°Π²Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ слоТна. Π˜Π½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ Ρ‡ΠΈΡ‚Π°Π΅Ρ‚ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ построчно; ΠΎΠ½ ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ ΠΎΡˆΠΈΠ±ΠΊΡƒ, Ссли присутствуСт Π² этой ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΉ строкС.Π’Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ сначала ΠΈΡΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ ΠΎΡˆΠΈΠ±ΠΊΡƒ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΡƒΡŽ строку ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. ΠžΡ‚Π»Π°Π΄ΠΊΠ° ΡΡ€Π°Π²Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ проста ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ΠΎΠΌ.

Достоинства ΠΈ нСдостатки компилятора

ΠŸΡ€ΠΈ использовании компилятора для ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Π° исходного ΠΊΠΎΠ΄Π° Π² ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹Π΅ ΠΊΠΎΠ΄Ρ‹ пСрСводятся Π² Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹Π΅ ΠΊΠΎΠ΄Ρ‹. Π‘Π»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, врСмя выполнСния ΠΊΠΎΠ΄Π° Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ мСньшС. НСдостатком использования компилятора являСтся Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π²Π½ΠΎΡΠΈΡ‚ΡŒ измСнСния Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ, Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π²Π΅Ρ€Π½ΡƒΠ²ΡˆΠΈΡΡŒ ΠΊ исходному ΠΊΠΎΠ΄Ρƒ.

Достоинства ΠΈ нСдостатки ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Ρ‡ΠΈΠΊΠ°

Π˜Π½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ ΡƒΠΏΡ€ΠΎΡ‰Π°Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Ρƒ с исходным ΠΊΠΎΠ΄ΠΎΠΌ. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ ΠΎΠ½ ΠΎΡ‡Π΅Π½ΡŒ ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡Ρ‚ΠΈΡ‚Π΅Π»Π΅Π½, особСнно для Π½ΠΎΠ²ΠΈΡ‡ΠΊΠΎΠ². Π˜Π½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚ΠΈΡ€ΡƒΠ΅ΠΌΡ‹Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΌΠΎΠ³ΡƒΡ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π° Ρ‚Π΅Ρ… ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π°Ρ…, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… установлСн ΠΎΠ΄ΠΈΠ½ ΠΈ Ρ‚ΠΎΡ‚ ΠΆΠ΅ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€.


Π Π°Π·Π½ΠΈΡ†Π° ΠΌΠ΅ΠΆΠ΄Ρƒ компилятором ΠΈ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ΠΎΠΌ (со ΡΡ€Π°Π²Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ Ρ‚Π°Π±Π»ΠΈΡ†Π΅ΠΉ)

ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ‚ΠΎΡ€ — это ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Ρ‡ΠΈΠΊ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠ΅Ρ‚ исходный язык (язык высокого уровня) Π² ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹ΠΉ язык (ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΉ язык).Π’ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ компилятора, ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ — это ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°, ΠΈΠΌΠΈΡ‚ΠΈΡ€ΡƒΡŽΡ‰Π°Ρ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ, написанных Π½Π° исходном языкС. Π•Ρ‰Π΅ ΠΎΠ΄Π½ΠΎ Ρ€Π°Π·Π»ΠΈΡ‡ΠΈΠ΅ ΠΌΠ΅ΠΆΠ΄Ρƒ компилятором ΠΈ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ΠΎΠΌ Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ компилятор ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠ΅Ρ‚ всю ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ Π·Π° ΠΎΠ΄ΠΈΠ½ Ρ€Π°Π·, с Π΄Ρ€ΡƒΠ³ΠΎΠΉ стороны, ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠ΅Ρ‚ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ, бСря ΠΏΠΎ ΠΎΠ΄Π½ΠΎΠΉ строкС Π·Π° Ρ€Π°Π·.

ΠžΡ‡Π΅Π²ΠΈΠ΄Π½ΠΎ, восприятиС Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊΠ° ΠΈ элСктронного устройства, Ρ‚Π°ΠΊΠΎΠ³ΠΎ ΠΊΠ°ΠΊ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€, различаСтся. Π›ΡŽΠ΄ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΠΎΠ½ΠΈΠΌΠ°Ρ‚ΡŒ всС Π½Π° СстСствСнных языках, Π½ΠΎ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€ — Π½Π΅Ρ‚.ΠšΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Ρƒ Π½ΡƒΠΆΠ΅Π½ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Ρ‡ΠΈΠΊ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Ρ‚ΡŒ языки, написанныС Π² ΡƒΠ΄ΠΎΠ±ΠΎΡ‡ΠΈΡ‚Π°Π΅ΠΌΠΎΠΉ Ρ„ΠΎΡ€ΠΌΠ΅, Π² ΠΌΠ°ΡˆΠΈΠ½ΠΎΡ‡ΠΈΡ‚Π°Π΅ΠΌΡƒΡŽ Ρ„ΠΎΡ€ΠΌΡƒ.

ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ‚ΠΎΡ€ ΠΈ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ — это Ρ‚ΠΈΠΏΡ‹ языкового ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Ρ‡ΠΈΠΊΠ°. Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ языковой ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Ρ‡ΠΈΠΊ? Π­Ρ‚ΠΎΡ‚ вопрос ΠΌΠΎΠΆΠ΅Ρ‚ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΡƒΡ‚ΡŒ Ρƒ вас Π² Π³ΠΎΠ»ΠΎΠ²Π΅.

Π―Π·Ρ‹ΠΊΠΎΠ²ΠΎΠΉ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Ρ‡ΠΈΠΊ — это ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ΅ обСспСчСниС, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ΠΈΡ‚ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ с исходного языка Π² ΡƒΠ΄ΠΎΠ±ΠΎΡ‡ΠΈΡ‚Π°Π΅ΠΌΠΎΠΉ Ρ„ΠΎΡ€ΠΌΠ΅ Π² ΡΠΊΠ²ΠΈΠ²Π°Π»Π΅Π½Ρ‚Π½ΡƒΡŽ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ Π½Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎΠΌ языкС. Π˜ΡΡ…ΠΎΠ΄Π½Ρ‹ΠΉ язык ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ являСтся языком программирования высокого уровня, Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹ΠΉ язык ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ являСтся ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΌ языком Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π°.

Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠΈΠΌΠΎΠ΅: компилятор ΠΏΡ€ΠΎΡ‚ΠΈΠ² ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Π°

  1. Π‘Ρ€Π°Π²Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Π°Ρ Ρ‚Π°Π±Π»ΠΈΡ†Π°
  2. ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅
  3. ΠšΠ»ΡŽΡ‡Π΅Π²Ρ‹Π΅ отличия
  4. Π—Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅

Π‘Ρ€Π°Π²Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Π°Ρ Ρ‚Π°Π±Π»ΠΈΡ†Π°

Основа для сравнСния ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ‚ΠΎΡ€ Π˜Π½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€
Π’Π²ΠΎΠ΄ ΠžΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ трСбуСтся вся ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°.
ВрСбуСтся ΠΏΠΎ ΠΎΠ΄Π½ΠΎΠΉ строкС ΠΊΠΎΠ΄Π° ΠΈΠ»ΠΈ инструкции Π·Π° Ρ€Π°Π·.
Π’Ρ‹Ρ…ΠΎΠ΄ Π“Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹ΠΉ ΠΊΠΎΠ΄. НС создаСт ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½ΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°.
Π Π°Π±ΠΎΡ‡ΠΈΠΉ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ
ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ†ΠΈΡ выполняСтся ΠΏΠ΅Ρ€Π΅Π΄ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ΠΌ. ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ†ΠΈΡ ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ происходят ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ.
Π‘ΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ Π‘Ρ€Π°Π²Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ быстрСС МСдлСннСС
ΠŸΠ°ΠΌΡΡ‚ΡŒ Π’Ρ€Π΅Π±ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΊ памяти большС ΠΈΠ·-Π·Π° создания ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°. ВрСбуСтся мСньшС памяти, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Π½Π΅ создаСтся ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹ΠΉ ΠΊΠΎΠ΄.
Ошибки
ΠŸΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ всС ошибки послС компиляции ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ. ΠžΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Π΅Ρ‚ ΠΎΡˆΠΈΠ±ΠΊΡƒ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ строки ΠΏΠΎ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ.
ΠžΠ±Π½Π°Ρ€ΡƒΠΆΠ΅Π½ΠΈΠ΅ ошибок Π‘Π»ΠΎΠΆΠ½ΠΎ Π‘Ρ€Π°Π²Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΏΡ€ΠΎΡ‰Π΅
Π‘ΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ языки программирования
C, C ++, C #, Scala, ΠΌΠ°ΡˆΠΈΠ½ΠΎΠΏΠΈΡΠ½Ρ‹ΠΉ тСкст ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ компилятор. PHP, Perl, Python, Ruby ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€.

ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ компилятора

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

ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ‚ΠΎΡ€ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΏΠΎ Ρ„Π°Π·Π°ΠΌ; Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ этапы ΠΌΠΎΠΆΠ½ΠΎ ΡΠ³Ρ€ΡƒΠΏΠΏΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π² Π΄Π²Π΅ части:

  • Анализ. Π€Π°Π·Π° компилятора Ρ‚Π°ΠΊΠΆΠ΅ упоминаСтся ΠΊΠ°ΠΊ внСшний интСрфСйс, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° дСлится Π½Π° основныС составныС части ΠΈ провСряСт Π³Ρ€Π°ΠΌΠΌΠ°Ρ‚ΠΈΠΊΡƒ, сСмантику ΠΈ синтаксис ΠΊΠΎΠ΄Π°, послС Ρ‡Π΅Π³ΠΎ гСнСрируСтся ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½Ρ‹ΠΉ ΠΊΠΎΠ΄.Π€Π°Π·Π° Π°Π½Π°Π»ΠΈΠ·Π° Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Π² сСбя лСксичСский Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€, сСмантичСский Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ ΠΈ синтаксичСский Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€.
  • Π€Π°Π·Π° синтСза компилятора Ρ‚Π°ΠΊΠΆΠ΅ извСстна ΠΊΠ°ΠΊ сСрвСрная Ρ‡Π°ΡΡ‚ΡŒ, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ оптимизируСтся ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ ΠΈ гСнСрируСтся Ρ†Π΅Π»Π΅Π²ΠΎΠΉ ΠΊΠΎΠ΄. Π€Π°Π·Π° синтСза Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ‚ΠΎΡ€ ΠΊΠΎΠ΄Π° ΠΈ Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€ ΠΊΠΎΠ΄Π°.
Π€Π°Π·Ρ‹ компилятора

Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π΄Π°Π²Π°ΠΉΡ‚Π΅ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ разбСрСмся Π² Ρ€Π°Π±ΠΎΡ‚Π΅ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ этапа.

  1. ЛСксичСский Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ : ΠΎΠ½ сканируСт ΠΊΠΎΠ΄ ΠΊΠ°ΠΊ ΠΏΠΎΡ‚ΠΎΠΊ символов, Π³Ρ€ΡƒΠΏΠΏΠΈΡ€ΡƒΠ΅Ρ‚ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ символов Π² лСксСмы ΠΈ Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Ρ‚ΠΎΠΊΠ΅Π½ΠΎΠ² со ссылкой Π½Π° язык программирования.
  2. Анализатор синтаксиса : На этом этапС Ρ‚ΠΎΠΊΠ΅Π½Ρ‹, сгСнСрированныС Π½Π° ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΌ этапС, ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡŽΡ‚ΡΡ Π½Π° соотвСтствиС Π³Ρ€Π°ΠΌΠΌΠ°Ρ‚ΠΈΠΊΠ΅ языка программирования, нСзависимо ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, ΡΠ²Π»ΡΡŽΡ‚ΡΡ Π»ΠΈ выраТСния синтаксичСски ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹ΠΌΠΈ ΠΈΠ»ΠΈ Π½Π΅Ρ‚. Для этого ΠΎΠ½ создаСт Π΄Π΅Ρ€Π΅Π²ΡŒΡ синтаксичСского Π°Π½Π°Π»ΠΈΠ·Π°.
  3. БСмантичСский Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ : Он провСряСт, ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‚ Π»ΠΈ выраТСния ΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹, сгСнСрированныС Π½Π° ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΌ этапС, ΠΏΡ€Π°Π²ΠΈΠ»Ρƒ языка программирования, ΠΈ создаСт Π°Π½Π½ΠΎΡ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ Π΄Π΅Ρ€Π΅Π²ΡŒΡ синтаксичСского Π°Π½Π°Π»ΠΈΠ·Π°.
  4. Π“Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€ ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° : Он Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ эквивалСнтный ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ исходного ΠΊΠΎΠ΄Π°.БущСствуСт мноТСство прСдставлСний ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°, Π½ΠΎ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΡˆΠΈΡ€ΠΎΠΊΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ TAC (трСхадрСсный ΠΊΠΎΠ΄).
  5. ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ‚ΠΎΡ€ ΠΊΠΎΠ΄Π° : Π£ΠΌΠ΅Π½ΡŒΡˆΠ°Π΅Ρ‚ ΠΏΠΎΡ‚Ρ€Π΅Π±Π½ΠΎΡΡ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π²ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ ΠΈ пространствС. Для этого ΠΎΠ½ устраняСт ΠΈΠ·Π±Ρ‹Ρ‚ΠΎΡ‡Π½Ρ‹ΠΉ ΠΊΠΎΠ΄, ΠΏΡ€ΠΈΡΡƒΡ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅.
  6. Π“Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€ ΠΊΠΎΠ΄Π° : это Π·Π°ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ этап компилятора, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ создаСтся Ρ†Π΅Π»Π΅Π²ΠΎΠΉ ΠΊΠΎΠ΄ для ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΉ ΠΌΠ°ΡˆΠΈΠ½Ρ‹. Он выполняСт Ρ‚Π°ΠΊΠΈΠ΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ, ΠΊΠ°ΠΊ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΠ°ΠΌΡΡ‚ΡŒΡŽ, Π½Π°Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ рСгистров ΠΈ машинно-зависимая оптимизация.

Π’Π°Π±Π»ΠΈΡ†Π° символов — это своСго Ρ€ΠΎΠ΄Π° структура Π΄Π°Π½Π½Ρ‹Ρ…, которая управляСт ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π°ΠΌΠΈ вмСстС с ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΌ Ρ‚ΠΈΠΏΠΎΠΌ Π΄Π°Π½Π½Ρ‹Ρ…, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΠ½Π° Ρ…Ρ€Π°Π½ΠΈΡ‚. ΠžΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ ошибок ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΠ²Π°Π΅Ρ‚, сообщаСт, исправляСт ошибки, Π²ΠΎΠ·Π½ΠΈΠΊΠ°ΡŽΡ‰ΠΈΠ΅ ΠΌΠ΅ΠΆΠ΄Ρƒ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹ΠΌΠΈ Ρ„Π°Π·Π°ΠΌΠΈ компилятора.

ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Ρ‡ΠΈΠΊΠ°

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

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

ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ†ΠΈΡ ΠΈ интСрпрСтация, вСроятно, ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½Π΅Π½Ρ‹ для Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ языка программирования. Когда компилятор Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΊΠΎΠ΄ ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½ΠΎΠ³ΠΎ уровня, ΠΊΠΎΠ΄ интСрпрСтируСтся, Π° Π½Π΅ компилируСтся Π² ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄.

ИспользованиС ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Π° Π²Ρ‹Π³ΠΎΠ΄Π½ΠΎ Π²ΠΎ врСмя Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, Π³Π΄Π΅ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ Π²Π°ΠΆΠ½ΠΎΠΉ Ρ‡Π°ΡΡ‚ΡŒΡŽ являСтся Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ быстро ΠΏΡ€ΠΎΡ‚Π΅ΡΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΡŽ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, Π° Π½Π΅ эффСктивно Π΅Π΅ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ.

ΠšΠ»ΡŽΡ‡Π΅Π²Ρ‹Π΅ различия ΠΌΠ΅ΠΆΠ΄Ρƒ компилятором ΠΈ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ΠΎΠΌ

Π”Π°Π²Π°ΠΉΡ‚Π΅ посмотрим Π½Π° основныС различия ΠΌΠ΅ΠΆΠ΄Ρƒ компилятором ΠΈ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ΠΎΠΌ.

  1. ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ‚ΠΎΡ€ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ΠΈΡ‚ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ Π² Ρ†Π΅Π»ΠΎΠΌ, Π° ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ΠΈΡ‚ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π·Π° ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠΌ.
  2. ΠŸΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ ΠΈΠ»ΠΈ Ρ†Π΅Π»Π΅Π²ΠΎΠΉ ΠΊΠΎΠ΄ гСнСрируСтся Π² случаС компилятора.Π’ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Π°, Π½Π΅ создаСт ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½Ρ‹ΠΉ ΠΊΠΎΠ΄.
  3. ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ‚ΠΎΡ€ ΡΡ€Π°Π²Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ быстрСС, Ρ‡Π΅ΠΌ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ компилятор Π±Π΅Ρ€Π΅Ρ‚ всю ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ Π·Π° ΠΎΠ΄ΠΈΠ½ Ρ€Π°Π·, Ρ‚ΠΎΠ³Π΄Π° ΠΊΠ°ΠΊ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Ρ‹ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΡƒΡŽΡ‚ ΠΊΠ°ΠΆΠ΄ΡƒΡŽ строку ΠΊΠΎΠ΄Π° Π·Π° Π΄Ρ€ΡƒΠ³ΠΎΠΉ.
  4. ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ‚ΠΎΡ€Ρƒ трСбуСтся большС памяти, Ρ‡Π΅ΠΌ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Ρƒ, ΠΈΠ·-Π·Π° Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°.
  5. ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ‚ΠΎΡ€
  6. прСдставляСт всС ошибки ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ, ΠΈ Ρ‚Ρ€ΡƒΠ΄Π½ΠΎ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΡ‚ΡŒ ошибки Π² ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΈ ошибок ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Π° контраста для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° ΠΏΠΎ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ, ΠΈ Π»Π΅Π³Ρ‡Π΅ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΡ‚ΡŒ ошибки.
  7. Π’ компиляторС, ΠΊΠΎΠ³Π΄Π° Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ ошибка, ΠΎΠ½ останавливаСт Π΅Π΅ Ρ‚Ρ€Π°Π½ΡΠ»ΡΡ†ΠΈΡŽ, ΠΈ послС устранСния ошибки вся ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° транслируСтся Π·Π°Π½ΠΎΠ²ΠΎ. Напротив, ΠΊΠΎΠ³Π΄Π° Π² ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Π΅ Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ ошибка, ΠΎΠ½ ΠΏΡ€Π΅Π΄ΠΎΡ‚Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π΅Π΅ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄, ΠΈ послС устранСния ошибки ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ возобновляСтся.
  8. Π’ компиляторС процСсс Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ Π΄Π²ΡƒΡ… шагов, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… сначала исходный ΠΊΠΎΠ΄ транслируСтся Π² Ρ†Π΅Π»Π΅Π²ΡƒΡŽ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ, Π° Π·Π°Ρ‚Π΅ΠΌ выполняСтся. Π’ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Π΅ Π­Ρ‚ΠΎ одноэтапный процСсс, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ исходный ΠΊΠΎΠ΄ компилируСтся ΠΈ выполняСтся ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ.
  9. ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ‚ΠΎΡ€ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π² Ρ‚Π°ΠΊΠΈΡ… языках программирования, ΠΊΠ°ΠΊ C, C ++, C #, Scala ΠΈ Ρ‚. Π”. Π‘ Π΄Ρ€ΡƒΠ³ΠΎΠΉ стороны, ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π² Ρ‚Π°ΠΊΠΈΡ… языках, ΠΊΠ°ΠΊ PHP, Ruby, Python ΠΈ Ρ‚. Π”.

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

ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ‚ΠΎΡ€ ΠΈ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Ρ‹ для выполнСния ΠΎΠ΄Π½ΠΎΠΉ ΠΈ Ρ‚ΠΎΠΉ ΠΆΠ΅ Ρ€Π°Π±ΠΎΡ‚Ρ‹, Π½ΠΎ ΠΎΡ‚Π»ΠΈΡ‡Π°ΡŽΡ‚ΡΡ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€ΠΎΠΉ Ρ€Π°Π±ΠΎΡ‚Ρ‹. ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ‚ΠΎΡ€ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ исходный ΠΊΠΎΠ΄ Π² Π°Π³Ρ€Π΅Π³ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΌ Π²ΠΈΠ΄Π΅, Ρ‚ΠΎΠ³Π΄Π° ΠΊΠ°ΠΊ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ составныС части исходного ΠΊΠΎΠ΄Π°, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ Π·Π° ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠΌ.

Π₯отя ΠΈ компилятор, ΠΈ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ ΠΈΠΌΠ΅ΡŽΡ‚ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ прСимущСства ΠΈ нСдостатки, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚ΠΈΡ€ΡƒΠ΅ΠΌΡ‹Π΅ языки ΡΡ‡ΠΈΡ‚Π°ΡŽΡ‚ΡΡ кроссплатформСнными, Ρ‚.Π΅.Π΅., ΠΊΠΎΠ΄ пСрСносимый. Π’ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ компилятора, Π΅ΠΌΡƒ Ρ‚Π°ΠΊΠΆΠ΅ Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ инструкции, Ρ‡Ρ‚ΠΎ позволяСт ΡΡΠΊΠΎΠ½ΠΎΠΌΠΈΡ‚ΡŒ врСмя. Π‘ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ языки быстрСС Π² процСссС компиляции.

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Ρ‡ΠΈΠΊ? | Π˜Π½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ ΠΏΡ€ΠΎΡ‚ΠΈΠ² компилятора

Π˜Π½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ — это ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°, которая выполняСт инструкции, написанныС Π½Π° языкС высокого уровня. Π˜Π½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Ρ‹ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ Π΄Ρ€ΡƒΠ³ΠΈΠΌ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°ΠΌ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π½Π° ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π΅ ΠΈΠ»ΠΈ сСрвСрС. Они ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°ΡŽΡ‚ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹ΠΉ ΠΊΠΎΠ΄ Π²ΠΎ врСмя выполнСния, построчно провСряя ΠΊΠΎΠ΄ Π½Π° Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ ошибок.

Π•ΡΡ‚ΡŒ Π΄Π²Π° способа Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, написанныС Π½Π° языкС высокого уровня. Π‘Π°ΠΌΡ‹ΠΉ распространСнный — это компиляция ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹; Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ — ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ Ρ‡Π΅Ρ€Π΅Π· ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€.

ΠŸΠ•Π Π•Π’ΠžΠ”Π§Π˜Πš ΠŸΠ ΠžΠ’Π˜Π’ ΠšΠžΠœΠŸΠ˜Π›Π―Π’ΠžΠ Π

Π˜Π½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ΠΈΡ‚ высокоуровнСвыС инструкции Π² ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½ΡƒΡŽ Ρ„ΠΎΡ€ΠΌΡƒ, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ Π·Π°Ρ‚Π΅ΠΌ выполняСт. Напротив, компилятор ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ΠΈΡ‚ высокоуровнСвыС инструкции нСпосрСдствСнно Π½Π° ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΉ язык. Π‘ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ быстрСС, Ρ‡Π΅ΠΌ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚ΠΈΡ€ΡƒΠ΅ΠΌΡ‹Π΅.ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ‚ΠΎΡ€Ρ‹ видят всС ошибки ΠΏΡ€ΠΈ компиляции, ΠΈ всС ΠΎΠ½ΠΈ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ устранСны ΠΏΠ΅Ρ€Π΅Π΄ запуском ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ всС ошибки Π±Ρ‹Π»ΠΈ исправлСны Π²ΠΎ врСмя выполнСния, ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ быстрСС.

Π˜Π½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚ΠΈΡ€ΡƒΠ΅ΠΌΡ‹Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ ΠΌΠ΅Π΄Π»Π΅Π½Π½Π΅Π΅, Ρ‡Π΅ΠΌ скомпилированныС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Ρ‹ пСрСводят ΠΊΠΎΠ΄ ΠΏΠΎ ΠΎΠ΄Π½ΠΎΠΌΡƒ Ρ€Π°Π·Π΄Π΅Π»Ρƒ Π·Π° Ρ€Π°Π·. Π˜Π½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚, Ρ‡Ρ‚ΠΎΠ±Ρ‹ обнаруТСнная ошибка Π±Ρ‹Π»Π° исправлСна, ΠΏΡ€Π΅ΠΆΠ΄Π΅ Ρ‡Π΅ΠΌ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° смоТСт ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠΈΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Ρƒ.

Однако прСимущСство ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Π° состоит Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Π΅ΠΌΡƒ Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ ΠΏΡ€ΠΎΡ…ΠΎΠ΄ΠΈΡ‚ΡŒ ΡΡ‚Π°Π΄ΠΈΡŽ компиляции, Π²ΠΎ врСмя ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΡŽΡ‚ΡΡ ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹Π΅ инструкции.Если ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° длинная, процСсс компиляции ΠΌΠΎΠΆΠ΅Ρ‚ Π·Π°Π½ΡΡ‚ΡŒ ΠΌΠ½ΠΎΠ³ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ. Π‘ Π΄Ρ€ΡƒΠ³ΠΎΠΉ стороны, ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π΅ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ высокоуровнСвыС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹.

Π˜Π½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Ρ‹

ΠΈΠ½ΠΎΠ³Π΄Π° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Π²ΠΎ врСмя Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, ΠΊΠΎΠ³Π΄Π° программист Ρ…ΠΎΡ‡Π΅Ρ‚ Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ нСбольшиС Ρ€Π°Π·Π΄Π΅Π»Ρ‹ Π·Π° Ρ€Π°Π· ΠΈ быстро ΠΈΡ… Ρ‚Π΅ΡΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ. ΠŸΠ΅Ρ€Π΅Π²ΠΎΠ΄Ρ‡ΠΈΠΊΠΈ Ρ‚Π°ΠΊΠΆΠ΅ часто ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Π² ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠΈ, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ΠΎΠ½ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ студСнтам ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π² ΠΈΠ½Ρ‚Π΅Ρ€Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΠΌ Ρ€Π΅ΠΆΠΈΠΌΠ΅.

И ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Ρ‹, ΠΈ компиляторы доступны для Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π° языков высокого уровня.Однако BASIC ΠΈ LISP ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π½Ρ‹ для выполнСния ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ΠΎΠΌ. ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, языки описания страниц, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ PostScript, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€. НапримСр, ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΏΡ€ΠΈΠ½Ρ‚Π΅Ρ€ PostScript ΠΈΠΌΠ΅Π΅Ρ‚ встроСнный ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€, Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‰ΠΈΠΉ инструкции PostScript.

ДинамичСский ΠΈ статичСский Π½Π°Π±ΠΎΡ€ тСкста

ДинамичСская ΠΈ статичСская типизация связаны с Ρ‚Π΅ΠΌ, ΠΊΠ°ΠΊ Ρ‚ΠΈΠΏΡ‹ Π΄Π°Π½Π½Ρ‹Ρ… Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°ΡŽΡ‚ΡΡ Π²ΠΎ врСмя компиляции. ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ с динамичСской Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ Π½Π΅ Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‚ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ Ρ‚ΠΈΠΏΠΎΠ² Π΄Π°Π½Π½Ρ‹Ρ… Π½Π° Ρ‚ΠΎΡ‡Π½ΠΎΡΡ‚ΡŒ Π΄ΠΎ запуска ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹; статичСски Ρ‚ΠΈΠΏΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‚ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ Ρ‚ΠΈΠΏΠΎΠ² ΠΏΡ€ΠΈ компиляции.НСт ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ прямой связи ΠΌΠ΅ΠΆΠ΄Ρƒ Π½Π°Π±ΠΎΡ€ΠΎΠΌ тСкста ΠΈ использованиСм ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Π° ΠΈΠ»ΠΈ компилятора. Π˜Π½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Ρ‹ ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΊΠ°ΠΊ динамичСски, Ρ‚Π°ΠΊ ΠΈ статичСски Ρ‚ΠΈΠΏΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄, Π° компиляторы Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠ³ΡƒΡ‚ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠ°ΠΊ статичСскиС, Ρ‚Π°ΠΊ ΠΈ динамичСскиС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹.

.