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

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«Π˜ΡΠΊΡƒΡΡΡ‚Π²ΠΎ программирования для UnixΒ». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 119

Автор Π­Ρ€ΠΈΠΊ Π Π΅ΠΉΠΌΠΎΠ½Π΄

15.6. ΠžΡ‚Π»Π°Π΄ΠΊΠ° Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ выполнСния

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

Π’Ρ€Π°Π΄ΠΈΡ†ΠΈΠΈ Unix ΠΏΠΎΠ±ΡƒΠΆΠ΄Π°ΡŽΡ‚ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ² ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π°Ρ‚ΡŒ эту ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ ΠΏΡƒΡ‚Π΅ΠΌ проСктирования ΠΏΡ€ΠΎΠ·Ρ€Π°Ρ‡Π½Ρ‹Ρ… конструкций β€” Π² частности, ΠΏΡƒΡ‚Π΅ΠΌ проСктирования ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ Π±Π΅Π· Ρ‚Ρ€ΡƒΠ΄Π° Π½Π΅Π²ΠΎΠΎΡ€ΡƒΠΆΠ΅Π½Π½Ρ‹ΠΌ Π³Π»Π°Π·ΠΎΠΌ ΠΈ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ простых инструмСнтов ΠΎΡΡƒΡ‰Π΅ΡΡ‚Π²Π»ΡΡ‚ΡŒ ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΡ… ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² Π΄Π°Π½Π½Ρ‹Ρ… Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°Ρ…, Π° Ρ‚Π°ΠΊΠΆΠ΅ просто ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ ΠΈΡ… ΠΌΠ΅Π½Ρ‚Π°Π»ΡŒΠ½Ρ‹Π΅ ΠΌΠΎΠ΄Π΅Π»ΠΈ. Данная Ρ‚Π΅ΠΌΠ° ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Π»Π°ΡΡŒ Π² Π³Π»Π°Π²Π΅ 6. Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠ·Ρ€Π°Ρ‡Π½Ρ‹Ρ… конструкций Π²Π°ΠΆΠ½ΠΎ ΠΊΠ°ΠΊ для прСдотвращСния ошибок, Ρ‚Π°ΠΊ ΠΈ для упрощСния Π·Π°Π΄Π°Ρ‡ ΠΎΡ‚Π»Π°Π΄ΠΊΠΈ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ выполнСния.

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

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

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

15.7. ΠŸΡ€ΠΎΡ„ΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅

ΠžΠ±Ρ‰Π΅Π΅ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ: 90% Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ выполнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ тратится Π½Π° 10% Π΅Π΅ ΠΊΠΎΠ΄Π°. ΠŸΡ€ΠΎΡ„Π°ΠΉΠ»Π΅Ρ€Ρ‹ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‚ собой инструмСнты, ΡΠΏΠΎΡΠΎΠ±ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ этих 10% "горячих Ρ‚ΠΎΡ‡Π΅ΠΊ", ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΠ²Π°ΡŽΡ‚ ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, Π° Π·Π½Π°Ρ‡ΠΈΡ‚, ΠΏΡ€ΠΎΡ„Π°ΠΉΠ»Π΅Ρ€Ρ‹ β€” это Ρ…ΠΎΡ€ΠΎΡˆΠΈΠΉ способ ΠΏΠΎΠ²Ρ‹ΡˆΠ΅Π½ΠΈΡ скорости.

Однако Π² Ρ‚Ρ€Π°Π΄ΠΈΡ†ΠΈΠΈ Unix ΠΏΡ€ΠΎΡ„Π°ΠΉΠ»Π΅Ρ€Π°ΠΌ отводится Π³ΠΎΡ€Π°Π·Π΄ΠΎ Π±ΠΎΠ»Π΅Π΅ ваТная функция. Они ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΡƒ Π½Π΅ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΡΡ‚Π°Π²ΡˆΠΈΠ΅ΡΡ 90%. И это Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ сокращаСт объСм Ρ€Π°Π±ΠΎΡ‚. Π”Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Ρ†Π΅Π½Π½Ρ‹ΠΉ эффСкт Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ программист, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π½Π΅ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΡƒΠ΅Ρ‚ 90% ΠΊΠΎΠ΄Π°, сдСрТиваСт Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½ΡƒΡŽ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΈ сокращаСт количСство ошибок.

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

Π’ этом Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΡƒ ΠΏΠΎΠΌΠΎΠ³Π°ΡŽΡ‚ ΠΏΡ€ΠΎΡ„Π°ΠΉΠ»Π΅Ρ€Ρ‹. Если Π²Ρ‹Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ ΠΏΠΎΠ»Π΅Π·Π½ΡƒΡŽ ΠΏΡ€ΠΈΠ²Ρ‹Ρ‡ΠΊΡƒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΡ…, Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠ·Π±Π°Π²ΠΈΡ‚ΡŒΡΡ ΠΎΡ‚ Π²Ρ€Π΅Π΄Π½ΠΎΠΉ ΠΏΡ€ΠΈΠ²Ρ‹Ρ‡ΠΊΠΈ ΠΏΡ€Π΅ΠΆΠ΄Π΅Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ. ΠŸΡ€ΠΎΡ„Π°ΠΉΠ»Π΅Ρ€Ρ‹ ΠΈΠ·ΠΌΠ΅Π½ΡΡŽΡ‚ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ способ Ρ€Π°Π±ΠΎΡ‚Ρ‹ программиста, Π½ΠΎ ΠΈ ΠΎΠ±Ρ€Π°Π· Π΅Π³ΠΎ ΠΌΡ‹ΡˆΠ»Π΅Π½ΠΈΡ.

ΠŸΡ€ΠΎΡ„Π°ΠΉΠ»Π΅Ρ€Ρ‹ для ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΡƒΠ΅ΠΌΡ‹Ρ… языков зависят ΠΎΡ‚ измСрСния ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°, поэтому ΠΎΠ½ΠΈ Π΅Ρ‰Π΅ большС зависят ΠΎΡ‚ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹, Ρ‡Π΅ΠΌ компиляторы. Π‘ Π΄Ρ€ΡƒΠ³ΠΎΠΉ стороны, ΠΏΡ€ΠΎΡ„Π°ΠΉΠ»Π΅Ρ€ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΡƒΠ΅ΠΌΠΎΠ³ΠΎ языка Π½Π΅ заботится ΠΎΠ± исходном языкС измСряСмой ΠΈΠΌ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. Π’ Unix ΠΎΠ΄ΠΈΠ½ ΠΏΡ€ΠΎΡ„Π°ΠΉΠ»Π΅Ρ€ gprof(1) ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚ Π‘, Π‘++ ΠΈ всС ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Π΅ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΡƒΠ΅ΠΌΡ‹Π΅ языки.

Π―Π·Ρ‹ΠΊΠΈ Perl, Python ΠΈ Emacs Lisp ΠΈΠΌΠ΅ΡŽΡ‚ собствСнныС ΠΏΡ€ΠΎΡ„Π°ΠΉΠ»Π΅Ρ€Ρ‹, Π²ΠΊΠ»ΡŽΡ‡Π΅Π½Π½Ρ‹Π΅ Π² ΠΈΡ… Π±Π°Π·ΠΎΠ²Ρ‹Π΅ дистрибутивы. Π’Π°ΠΊΠΈΠ΅ ΠΏΡ€ΠΎΡ„Π°ΠΉΠ»Π΅Ρ€Ρ‹ пСрСносятся Π½Π° всС ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹, Π³Π΄Π΅ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ Π΄Π°Π½Π½Ρ‹Π΅ языки. Π’ языкС Java имССтся встроСнноС ΠΏΡ€ΠΎΡ„ΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅. Tcl всС Π΅Ρ‰Π΅ Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ профилирования.

15.8. ΠšΠΎΠΌΠ±ΠΈΠ½ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ инструмСнтов с Emacs

Одной ΠΈΠ· областСй, Π³Π΄Π΅ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€ Emacs вСсьма Ρ…ΠΎΡ€ΠΎΡˆΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΠΌ, являСтся Π΅Π³ΠΎ использованиС Π² качСствС интСрфСйсной части для Π΄Ρ€ΡƒΠ³ΠΈΡ… инструмСнтов Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ (эта Ρ‚Π΅ΠΌΠ° Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Π»Π°ΡΡŒ с философской Ρ‚ΠΎΡ‡ΠΊΠΈ зрСния Π² Π³Π»Π°Π²Π΅ 13). Π”Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ, ΠΏΠΎΡ‡Ρ‚ΠΈ всСми инструмСнтами, рассмотрСнными Π² Π΄Π°Π½Π½ΠΎΠΉ Π³Π»Π°Π²Π΅, ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ ΠΈΠ· сСанса Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€Π° Emacs посрСдством интСрфСйсных частСй, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°ΡŽΡ‚ ΡΡ„Ρ„Π΅ΠΊΡ‚ΠΈΠ²Π½ΠΎΡΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Ρ… инструмСнтов ΠΏΠΎ ΡΡ€Π°Π²Π½Π΅Π½ΠΈΡŽ с ΠΈΡ… Π°Π²Ρ‚ΠΎΠ½ΠΎΠΌΠ½Ρ‹ΠΌ использованиСм.

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

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

15.8.1. Emacs ΠΈ make

НапримСр, ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Ρƒ make ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ ΠΈΠ· Emacs с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ ESC-x compile [Enter]. Данная ΠΊΠΎΠΌΠ°Π½Π΄Π° запускаСт make(1) Π² Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΌ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅, собирая Π²Ρ‹Π²ΠΎΠ΄ Π² Π±ΡƒΡ„Π΅Ρ€ Emacs.

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

Если какая-Π»ΠΈΠ±ΠΎ выполняСмая make инструкция Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ сообщСния ΠΎΠ± ΠΎΡˆΠΈΠ±ΠΊΠ°Ρ…, Ρ‚ΠΎ ΠΊΠΎΠΌΠ°Π½Π΄Π° Ctl-X ` (Ctrl-X-обратная ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΠ°) пытаСтся Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΠΈΡ… синтаксичСский Π°Π½Π°Π»ΠΈΠ· ΠΈ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΈΡ‚ ΠΊ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ошибкС, открывая ΠΎΠΊΠ½ΠΎ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π³ΠΎ Ρ„Π°ΠΉΠ»Π° ΠΈ пСрСмСщая курсор ΠΊ строкС с ошибкой[133].

Данная Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Ρ‡Ρ€Π΅Π·Π²Ρ‹Ρ‡Π°ΠΉΠ½ΠΎ ΡƒΠΏΡ€ΠΎΡ‰Π°Π΅Ρ‚ просмотр всСй сборки с исправлСниСм синтаксиса, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±Ρ‹Π» Π½Π°Ρ€ΡƒΡˆΠ΅Π½ с ΠΌΠΎΠΌΠ΅Π½Ρ‚Π° послСднСй компиляции.

15.8.2. Emacs ΠΈ ΠΎΡ‚Π»Π°Π΄ΠΊΠ° Π²ΠΎ врСмя выполнСния

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

Emacs-Ρ€Π΅ΠΆΠΈΠΌ Grand Unified Debugger (большой ΡƒΠ½ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ ΠΎΡ‚Π»Π°Π΄Ρ‡ΠΈΠΊ) ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ всС основныС ΠΎΡ‚Π»Π°Π΄Ρ‡ΠΈΠΊΠΈ Π‘: gdb(1), sdb(1), dbx(1) ΠΈ xdb(1). Он Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ символичСский ΠΎΡ‚Π»Π°Π΄Ρ‡ΠΈΠΊ Perl с использованиСм модуля perldb ΠΈ стандартныС ΠΎΡ‚Π»Π°Π΄Ρ‡ΠΈΠΊΠΈ для Java ΠΈ Python. БрСдства, встроСнныС Π² сам Emacs Lisp, ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ ΠΈΠ½Ρ‚Π΅Ρ€Π°ΠΊΡ‚ΠΈΠ²Π½ΡƒΡŽ ΠΎΡ‚Π»Π°Π΄ΠΊΡƒ ΠΊΠΎΠ΄Π° Emacs Lisp.

К ΠΌΠΎΠΌΠ΅Π½Ρ‚Ρƒ написания ΠΊΠ½ΠΈΠ³ΠΈ (сСрСдина 2003 Π³ΠΎΠ΄Π°) Π΅Ρ‰Π΅ Π½Π΅ сущСствовало ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ для Tcl-ΠΎΡ‚Π»Π°Π΄ΠΊΠΈ ΠΈΠ· Emacs. ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡ Tcl Ρ‚Π°ΠΊΠΎΠ²Π°, Ρ‡Ρ‚ΠΎ вряд Π»ΠΈ ΠΊΠΎΠ³Π΄Π°-Π»ΠΈΠ±ΠΎ такая ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° Π±ΡƒΠ΄Π΅Ρ‚ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π°.

15.8.3. Emacs ΠΈ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒ вСрсий

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

К ΡΡ‡Π°ΡΡ‚ΡŒΡŽ, Emacs ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠΌΠΎΡ‡ΡŒ ΠΈ Π² Π΄Π°Π½Π½ΠΎΠΉ ситуации. Код, встроСнный Π² Emacs, Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅Ρ‚ простой Π² использовании ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠΉ интСрфСйс ΠΊ систСмам SCCS, RCS, CVS ΠΈΠ»ΠΈ Subversion. Команда Ctl-x v v пытаСтся ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ логичСски ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΡƒΡŽ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΡŽ контроля вСрсий, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ для Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΡƒΠ΅ΠΌΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π°. Π’ число Π΄Π°Π½Π½Ρ‹Ρ… ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ входят рСгистрация Ρ„Π°ΠΉΠ»Π°, Π΅Π³ΠΎ ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΊΠ° ΠΈ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠ°, Π° Ρ‚Π°ΠΊΠΆΠ΅ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ (ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ ΠΏΠΎ измСнСниям ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°ΡŽΡ‚ΡΡ Π²ΠΎ Π²ΡΠΏΠ»Ρ‹Π²Π°ΡŽΡ‰Π΅ΠΌ Π±ΡƒΡ„Π΅Ρ€Π΅)[134].

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

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