Π§ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΠΊΠ½ΠΈΠ³ΠΈ ΠΎΠ½Π»Π°ΠΉΠ½ Π½Π° Bookidrom.ru! БСсплатныС ΠΊΠ½ΠΈΠ³ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠ»ΠΈΠΊΠ΅

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ «ГСнСрация высококачСствСнного ΠΊΠΎΠ΄Π° для ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ, написанных Π½Π° БИ». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 1

Автор Π€ΠΈΠ»ΠΈΠΏΠΏ Π₯ислСй

ГСнСрация высококачСствСнного ΠΊΠΎΠ΄Π° для ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ, написанных Π½Π° БИ

Π₯отя всС компиляторы с языка Π‘ΠΈ ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Ρ‹ для Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ быстрых ΠΈ ΠΊΠΎΠΌΠΏΠ°ΠΊΡ‚Π½Ρ‹Ρ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ, качСство ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΊΠΎΠ΄Π° Ρƒ Π½ΠΈΡ… ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½Π½ΠΎ Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΎΠ΅.

Π Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ компиляторов с языка Π‘ΠΈ ΠΏΠ΅Ρ€Π²ΠΎΠ½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎ ΡΡ‚Ρ€Π΅ΠΌΠΈΠ»ΠΈΡΡŒ ΠΊ ΠΏΠΎΠ»Π½ΠΎΠΌΡƒ согласию со стандартом ΠšΠ΅Ρ€Π½ΠΈΠ³Π°Π½Π° ΠΈ Π ΠΈΡ‡ΠΈ. Π’ послСдствии - ΠΊ ΡƒΠΌΠ΅Π½ΡŒΡˆΠ΅Π½ΠΈΡŽ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ компиляции. Π—Π°Ρ‚Π΅ΠΌ - ΠΊ ΠΏΠΎΠ»Π½ΠΎΠΉ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ΅ ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ памяти сСмСйства микропроцСссоров 80Ρ…86. Π—Π°Ρ‚Π΅ΠΌ ΠΏΡ‹Ρ‚Π°Π»ΠΈΡΡŒ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅Π½ΠΎΡΠΈΠΌΠΎΡΡ‚ΡŒ исходных тСкстов ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ ΠΏΡƒΡ‚Π΅ΠΌ прСдоставлСния совмСстимых с UNIX Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ. ПослС этого создавали спСциализированныС Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ для обСспСчСния Π½ΠΈΠ·ΠΊΠΎΡƒΡ€ΠΎΠ²Π½Π΅Π²ΠΎΠ³ΠΎ доступа ΠΊ Ρ…Π°Ρ€Π°ΠΊΡ‚Π΅Ρ€Π½Ρ‹ΠΌ для ΠΏΠ΅Ρ€ΡΠΎΠ½Π°Π»ΡŒΠ½Ρ‹Ρ… ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€ΠΎΠ² (PC) возмоТностям. Π—Π° этим слСдовали ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠΈ ΠΏΡ€ΠΈΠ΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒΡΡ Ρ€Π°Π·Π²ΠΈΠ²Π°ΡŽΡ‰Π΅Π³ΠΎΡΡ стандарта ANSI C. ПослС Ρ‡Π΅Π³ΠΎ слСдовал Π²ΠΎΠ·Π²Ρ€Π°Ρ‚ ΠΊ Π½Π°Ρ‡Π°Π»Ρƒ, Π½ΠΎ с Ρ€Π°Π·Π²ΠΈΡ‚Ρ‹ΠΌ ΠΈΠ½Ρ‚Π΅Π³Ρ€ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΌ ΠΎΠΊΡ€ΡƒΠΆΠ΅Π½ΠΈΠ΅ΠΌ. И Ρ‚Π°ΠΊ Π΄Π°Π»Π΅Π΅.

Π‘Π°ΠΌΠΎΠ΅ послСднСС Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Π² Ρ€Π°Π·Π²ΠΈΡ‚ΠΈΠΈ компиляторов Π‘ΠΈ - оптимизация. Π­Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΎΠ΄Π΅ΠΌΠΎΠ½ΡΡ‚Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚Π°ΠΊΠΈΠΌΠΈ сСгодняшними заявлСниями поставщиков компиляторов: "НаиболСС ΠΌΠΎΡ‰Π½Ρ‹ΠΉ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΉ компилятор!" (Turbo C, Borland); "НовыС ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΡŽΡ‚ самый быстрый ΠΊΠΎΠ΄!" (C 5.0, Microsoft); "ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ‚ΠΎΡ€ Π½Π΅ΡƒΡ‚ΠΎΠΌΠΈΠΌΠΎ ΠΈΡ‰Π΅Ρ‚ ΠΏΡƒΡ‚ΠΈ ускорСния выполнСния ΠΈ ΠΌΠΈΠ½ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠΎΠΉ памяти" (Optimum C, Datalight). Учитывая эту ΠΌΠΎΠ΄Ρƒ, PC Tech Journal Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π» тСст для ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ возмоТностСй ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΊΠΎΠ΄Π° Ρƒ Π‘ΠΈ компиляторов, ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΡ…ΡΡ Π½Π° PC. Π­Ρ‚ΠΎΡ‚ тСст Π±Ρ‹Π» Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ Π½Π° дСвяти компиляторах: Borland Turbo C 1.5, Computer Innovations C86Plus 1.10, Datalight Optimum-C 3.14, Lattice MS-DOS C 3.2, Manx Aztec C86 4.0, Metaware High C 1.4, Microsoft C 5.0 ΠΈ QuickC 1.0, Π° Ρ‚Π°ΠΊΠΆΠ΅ WATCOM C 6.0. Π­Ρ‚ΠΈ издСлия ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‚ Π»ΡƒΡ‡ΡˆΠΈΠ΅ компиляторы Π‘ΠΈ, доступныС Π½Π° PC. ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° ΠΏΠΎΠΊΠ°Π·Π°Π»Π°, Ρ‡Ρ‚ΠΎ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ компиляторы ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡŽΡ‚ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ ΠΏΡ€ΠΈΠ΅ΠΌΡ‹ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ с Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹ΠΌ успСхом. Доступны ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ компиляторы, Π½ΠΎ ΠΈΡ… характСристики Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Ρ…ΡƒΠΆΠ΅, Ρ‡Π΅ΠΌ Ρƒ пСрСчислСнных. Π‘ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ этих компиляторов описаны Π² Ρ„Π΅Π²Ρ€Π°Π»ΡŒΡΠΊΠΎΠΌ Π½ΠΎΠΌΠ΅Ρ€Π΅ PC Tech Journal 1988 Π³ΠΎΠ΄Π° Π² ΡΡ‚Π°Ρ‚ΡŒΠ΅ "The State of C" (см. "C Contenders" ΠΈ "Turbo and Quick Weigh In", Marty Franz, стр. 52 ΠΈ 72 соотвСтствСнно).

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

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

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

Π‘Ρ„Π΅Ρ€Π° примСнСния ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ

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

ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ - это пСрвичная синтаксичСская Π΅Π΄ΠΈΠ½ΠΈΡ†Π° Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅. Π‘ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ компиляторов Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡŽ Π½Π° этом ΡƒΡ€ΠΎΠ²Π½Π΅.

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

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

ΠŸΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹ - это ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ содСрТат Ρ†Π΅Π»Ρ‹Π΅ ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΈΠ»ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡ Π½Π° этом ΡƒΡ€ΠΎΠ²Π½Π΅ Π²ΠΎΠΎΠ±Ρ‰Π΅ Π½Π΅ выполняСтся компиляторами для PC.

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

ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠ΅ прСобразования ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ зависящими ΠΈΠ»ΠΈ нСзависящими ΠΎΡ‚ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρ‹ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π°. ΠŸΡ€ΠΎΡ†Π΅ΡΡ компиляции ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π½ΠΎΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Π΄Π²Π° основных дСйствия: синтаксичСский/сСмантичСский Π°Π½Π°Π»ΠΈΠ· ΠΈ Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΡŽ ΠΊΠΎΠ΄Π°. БинтаксичСский/сСмантичСский Π°Π½Π°Π»ΠΈΠ· сущСствСнно зависит ΠΎΡ‚ Π³Ρ€Π°ΠΌΠΌΠ°Ρ‚ΠΈΠΊΠΈ ΠΈ спСцифичСн для языка. ГСнСрация ΠΊΠΎΠ΄Π° являСтся ΠΎΠ±Ρ‰Π΅ΠΉ ΠΈ прСкрасно ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ использована для ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ ΠΏΠ΅Ρ€Π²ΠΎΠΉ стадии для любого количСства языков программирования.

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

ΠœΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ

Π‘ΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ машинно-зависимой ΠΈ машинно-нСзависимой ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΊΠΎΠ΄Π°. Они ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒΡΡ Π½Π° всСх синтаксичСских уровнях. Одним ΠΈΠ· ΠΏΡ€ΠΎΡΡ‚Π΅ΠΉΡˆΠΈΡ… ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² являСтся "Ρ€Π°Π·ΠΌΠ½ΠΎΠΆΠ΅Π½ΠΈΠ΅ констант". ΠŸΡ€ΠΈ Π΅Π³ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠΈ любая ссылка Π½Π° константноС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ замСщаСтся самим Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ. Π’ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΏΠΎΠ²Ρ‹ΡˆΠ°Π΅Ρ‚ΡΡ ΡΡ„Ρ„Π΅ΠΊΡ‚ΠΈΠ²Π½ΠΎΡΡ‚ΡŒ благодаря ΡƒΠ΄Π°Π»Π΅Π½ΠΈΡŽ Ρ‚Ρ€Π΅Ρ… адрСсных ссылок ΠΈ Π·Π°ΠΌΠ΅Π½Π΅ ΠΈΡ… константами:

x = 2;

if( a < x && b < x)

c = x;s

пСрСводится Π²

x = 2;

if(a < 2 && b < 2)

c = 2;

Π¦Π΅Π»ΠΈΠΊΠΎΠΌ связано с Ρ€Π°Π·ΠΌΠ½ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ констант "Ρ€Π°Π·ΠΌΠ½ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΊΠΎΠΏΠΈΠΉ". Π’ этом ΠΌΠ΅Ρ‚ΠΎΠ΄Π΅ ΠΊΠΎΠΏΠΈΡ€ΡƒΡŽΡ‚ΡΡ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ вмСсто константных Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ. НапримСр,

x = y;

if(a < x && b < x)

c = x;

пСрСводится Π²

x = y;

if(a < y && b < y)

c = y;

Π Π°Π·ΠΌΠ½ΠΎΠΆΠ΅Π½ΠΈΠ΅ констант ΠΈ ΠΊΠΎΠΏΠΈΠΉ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ излишниС присваивания (x = 2 ΠΈ x = y Π² ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°Ρ…). Π‘Ρ€Π΅Π΄ΠΈ описываСмых компиляторов Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Microsoft C 5.0 ΠΈ WATCOM C 6.0 ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡŽΡ‚ Ρ€Π°Π·ΠΌΠ½ΠΎΠΆΠ΅Π½ΠΈΠ΅ констант.