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

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

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

Π§Ρ‚ΠΎ касаСтся Unix, Π΄Π²Π° дСсятка Π»Π΅Ρ‚ изучСния вопросов опрСдСлСния пСрСносимых API-интСрфСйсов ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΠ»ΠΈ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ Ρ€Π΅ΡˆΠΈΡ‚ΡŒ Π΄Π°Π½Π½ΡƒΡŽ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ. БрСдства, описанныС Π² Π•Π΄ΠΈΠ½ΠΎΠΉ спСцификации Unix, вСроятно, Π±ΡƒΠ΄ΡƒΡ‚ ΠΏΡ€ΠΈΡΡƒΡ‚ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ Π²ΠΎ всСх соврСмСнных Unix-ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ°Ρ… ΠΈ вряд Π»ΠΈ Π½Π΅ Π±ΡƒΠ΄ΡƒΡ‚ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒΡΡ Π² Π±ΡƒΠ΄ΡƒΡ‰Π΅ΠΌ.

Однако Π½Π΅ всС зависимости ΠΎΡ‚ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹ Ρ€Π°Π·Ρ€Π΅ΡˆΠ°ΡŽΡ‚ΡΡ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ систСмных ΠΈΠ»ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅Ρ‡Π½Ρ‹Ρ… API-интСрфСйсов. Π―Π·Ρ‹ΠΊ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Ρ‚Π°ΠΊΠΆΠ΅ ΠΈΠΌΠ΅Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅; ΠΊΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ обусловлСны структурой Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΎΠΉ систСмы ΠΈ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹ΠΌΠΈ отличиями ΠΌΠ΅ΠΆΠ΄Ρƒ исходной ΠΈ Ρ†Π΅Π»Π΅Π²ΠΎΠΉ систСмой. Однако ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ° Unix ΡƒΠΆΠ΅ ΠΏΠΎΠ΄Ρ‚Π²Π΅Ρ€Π΄ΠΈΠ»Π° способы Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ Π΄Π°Π½Π½Ρ‹Ρ… ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ.

17.5.1. ΠŸΠ΅Ρ€Π΅Π½ΠΎΡΠΈΠΌΠΎΡΡ‚ΡŒ ΠΈ Π²Ρ‹Π±ΠΎΡ€ языка

ΠŸΠ΅Ρ€Π²Ρ‹ΠΌ вопросом Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ, ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°ΡŽΡ‰Π΅ΠΌ ΠΏΠ΅Ρ€Π΅Π½ΠΎΡΠΈΠΌΠΎΡΡ‚ΡŒ, являСтся Π²Ρ‹Π±ΠΎΡ€ языка Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ. ВсС основныС языки, рассмотрСнныС Π² Π³Π»Π°Π²Π΅ 14, ΡΠ²Π»ΡΡŽΡ‚ΡΡ высоко пСрСносимыми Π² Ρ‚ΠΎΠΌ смыслС, Ρ‡Ρ‚ΠΎ совмСстимыС Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ доступны Π½Π° всСх соврСмСнных Unix-систСмах, Π° для Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π° ΠΈΠ· Π½ΠΈΡ… Ρ‚Π°ΠΊΠΆΠ΅ доступны Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ для Windows ΠΈ MacOS. ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ пСрСносимости часто Π²ΠΎΠ·Π½ΠΈΠΊΠ°ΡŽΡ‚ Π½Π΅ Π² основных языках, Π° Π² Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°Ρ… ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ ΠΈ стСпСни ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΠΈ с Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΌ ΠΎΠΊΡ€ΡƒΠΆΠ΅Π½ΠΈΠ΅ΠΌ (особСнно Π² IPC-ΠΌΠ΅Ρ‚ΠΎΠ΄Π°Ρ… ΠΈ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠΈ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½Ρ‹ΠΌΠΈ процСссами, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ инфраструктуру для GUI-интСрфСйсов).

17.5.1.1. ΠŸΠ΅Ρ€Π΅Π½ΠΎΡΠΈΠΌΠΎΡΡ‚ΡŒ Π‘

Π‘Π°Π·ΠΎΠ²Ρ‹ΠΉ язык Π‘ Π² Π²Ρ‹ΡΡˆΠ΅ΠΉ стСпСни пСрСносим. Π•Π³ΠΎ стандартной Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ Π² Unix являСтся GNU C-компилятор, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ повсСмСстно распространСн Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Unix-систСмах с ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΌ исходным ΠΊΠΎΠ΄ΠΎΠΌ, Π½ΠΎ ΠΈ соврСмСнных коммСрчСских Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π°Ρ… ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмы. GNU Π‘ Π±Ρ‹Π» пСрСнСсСн Π½Π° Windows ΠΈ ΠΊΠ»Π°ΡΡΠΈΡ‡Π΅ΡΠΊΡƒΡŽ MacOS, Π½ΠΎ Π½ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ· этих срСд Π½Π΅ стал ΡˆΠΈΡ€ΠΎΠΊΠΎ распространСнным, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ испытываСт нСдостаток Π² пСрСносимых привязках ΠΊ собствСнным GUI-интСрфСйсам Π΄Π°Π½Π½Ρ‹Ρ… систСм.

Бтандартная Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° Π²Π²ΠΎΠ΄Π°/Π²Ρ‹Π²ΠΎΠ΄Π°, матСматичСскиС ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΈ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° ΠΈΠ½Ρ‚Π΅Ρ€Π½Π°Ρ†ΠΈΠΎΠ½Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ пСрСносимы Π²ΠΎ всСх рСализациях Π‘. Π€Π°ΠΉΠ»ΠΎΠ²Ρ‹ΠΉ Π²Π²ΠΎΠ΄/Π²Ρ‹Π²ΠΎΠ΄, сигналы ΠΈ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ процСссами ΡΠ²Π»ΡΡŽΡ‚ΡΡ пСрСносимыми ΠΌΠ΅ΠΆΠ΄Ρƒ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π°ΠΌΠΈ Unix, ΠΏΡ€ΠΈ условии, Ρ‡Ρ‚ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ соврСмСнныС API-интСрфСйсы, описанныС Π² Π•Π΄ΠΈΠ½ΠΎΠΉ спСцификации Unix; Π±ΠΎΠ»Π΅Π΅ старый C-ΠΊΠΎΠ΄ часто содСрТит нагромоТдСния условных ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ² прСпроцСссора, Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½Π½Ρ‹Ρ… Π½Π° достиТСниС пСрСносимости, Π½ΠΎ ΠΎΠ½ΠΈ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ интСрфСйсы, появившиСся Π΄ΠΎ стандарта POSIX, ΠΈΠ· старых коммСрчСских Unix-систСм, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎ ΡΠΎΡΡ‚ΠΎΡΠ½ΠΈΡŽ Π½Π° 2003 Π³ΠΎΠ΄ устарСли ΠΈΠ»ΠΈ Π±Π»ΠΈΠ·ΠΊΠΈ ΠΊ этому.

Π‘ΠΎΠ»Π΅Π΅ ΡΠ΅Ρ€ΡŒΠ΅Π·Π½Ρ‹Π΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ с ΠΏΠ΅Ρ€Π΅Π½ΠΎΡΠΈΠΌΠΎΡΡ‚ΡŒΡŽ Π‘ Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‚ΡΡ Π² области IPC, ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½Ρ‹Ρ… процСссов ΠΈ GUI-интСрфСйсов. Вопросы пСрСносимости IPC ΠΈ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½Ρ‹Ρ… процСссов ΠΎΠ±ΡΡƒΠΆΠ΄Π°Π»ΠΈΡΡŒ Π² Π³Π»Π°Π²Π΅ 7. Π Π΅Π°Π»ΡŒΠ½ΡƒΡŽ ΠΏΡ€Π°ΠΊΡ‚ΠΈΡ‡Π΅ΡΠΊΡƒΡŽ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ ΡΠΎΠ·Π΄Π°ΡŽΡ‚ GUI-инструмСнтарии. Π‘ΠΎΠ»ΡŒΡˆΠΎΠ΅ количСство GUI-инструмСнтариСв с ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΌ исходным ΠΊΠΎΠ΄ΠΎΠΌ ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½ΠΎ пСрСносятся ΠΌΠ΅ΠΆΠ΄Ρƒ соврСмСнными Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π°ΠΌΠΈ Unix, Π° Ρ‚Π°ΠΊΠΆΠ΅ Π² Windows ΠΈ ΠΊΠ»Π°ΡΡΠΈΡ‡Π΅ΡΠΊΡƒΡŽ MacOS β€” Tk, wxWindows, GTK ΠΈ Qt β€” Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅ Ρ…ΠΎΡ€ΠΎΡˆΠΎ извСстных Π²ΠΈΠ΄Π° инструмСнтария с ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΌ исходным ΠΊΠΎΠ΄ΠΎΠΌ ΠΈ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠ΅ΠΉ, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ Π½Π΅Ρ‚Ρ€ΡƒΠ΄Π½ΠΎΠΉ Π½Π°ΠΉΡ‚ΠΈ Π² Web. Однако Π½ΠΈ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· Π½ΠΈΡ… Π½Π΅ распространяСтся со всСми ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ°ΠΌΠΈ, ΠΈ (ΠΏΠΎ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π°ΠΌ Π±ΠΎΠ»Π΅Π΅ ΡŽΡ€ΠΈΠ΄ΠΈΡ‡Π΅ΡΠΊΠΈΠΌ, Ρ‡Π΅ΠΌ тСхничСским) Π½ΠΈ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· Π½ΠΈΡ… Π½Π΅ прСдоставляСт Π½Π° всСх ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ°Ρ… СстСствСнный Π²ΠΈΠ΄ ΠΈ восприятиС GUI-интСрфСйса. Π’ Π³Π»Π°Π²Π΅ 15 Π΄Π°Π½Ρ‹ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄Π°Ρ†ΠΈΠΈ, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰ΠΈΠ΅ ΡΠΏΡ€Π°Π²ΠΈΡ‚ΡŒΡΡ с Π΄Π°Π½Π½ΠΎΠΉ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΎΠΉ.

По Ρ‚Π΅ΠΌΠ΅ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ пСрСносимого C-ΠΊΠΎΠ΄Π° написаны Ρ†Π΅Π»Ρ‹Π΅ Ρ‚ΠΎΠΌΠ°. Π­Ρ‚Π° ΠΊΠ½ΠΈΠ³Π° Π½Π΅ Π²Ρ…ΠΎΠ΄ΠΈΡ‚ Π² ΠΈΡ… число, ΠΈ Π°Π²Ρ‚ΠΎΡ€Ρ‹ Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΡŽΡ‚ Π²Π½ΠΈΠΌΠ°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΠΈΠ·ΡƒΡ‡ΠΈΡ‚ΡŒ "Recommended Π‘ Style and Coding Standards" [11], Π° Ρ‚Π°ΠΊΠΆΠ΅ Π³Π»Π°Π²Ρƒ ΠΎ пСрСносимости ΠΈΠ· ΠΊΠ½ΠΈΠ³ΠΈ "The Practice of Programming" [40].

17.5.1.2. ΠŸΠ΅Ρ€Π΅Π½ΠΎΡΠΈΠΌΠΎΡΡ‚ΡŒ Π‘++

Для Π‘++ Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмы Ρ…Π°Ρ€Π°ΠΊΡ‚Π΅Ρ€Π½Ρ‹ Ρ‚Π΅ ΠΆΠ΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ пСрСносимости, Ρ‡Ρ‚ΠΎ ΠΈ для Π‘, Π° Ρ‚Π°ΠΊΠΆΠ΅ ряд собствСнных. Одной ΠΈΠ· Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ являСтся Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ GNU компилятор с ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΌ исходным ΠΊΠΎΠ΄ΠΎΠΌ для Π‘++ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ отстаСт ΠΎΡ‚ коммСрчСских Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΉ; поэтому ΠΊ сСрСдинС 2003 Π³ΠΎΠ΄Π° Π½Π΅ сущСствовало ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½ΠΎ внСдряСмого эквивалСнта GNU Π‘, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡΠ½ΠΎΠ²Ρ‹Π²Π°Ρ‚ΡŒ стандарт Π΄Π΅-Ρ„Π°ΠΊΡ‚ΠΎ. Π‘ΠΎΠ»Π΅Π΅ Ρ‚ΠΎΠ³ΠΎ, Π½ΠΈ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· компиляторов Π‘++ Π½Π΅ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Ρ‹Π²Π°Π΅Ρ‚ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ ISO-стандарт C++99, хотя GNU Π‘++ подошСл ΠΊ этому ΠΎΡ‡Π΅Π½ΡŒ Π±Π»ΠΈΠ·ΠΊΠΎ.

17.5.1.3. ΠŸΠ΅Ρ€Π΅Π½ΠΎΡΠΈΠΌΠΎΡΡ‚ΡŒ shell

ΠŸΠ΅Ρ€Π΅Π½ΠΎΡΠΈΠΌΠΎΡΡ‚ΡŒ shell-сцСнариСв, ΠΊ соТалСнию, являСтся Π½ΠΈΠ·ΠΊΠΎΠΉ. ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΠ° Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π½Π΅ Π² самой ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠ΅; bash(1) (Bourne Again shell с ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΌ исходным ΠΊΠΎΠ΄ΠΎΠΌ) распространСна достаточно ΡˆΠΈΡ€ΠΎΠΊΠΎ, для Ρ‚ΠΎΠ³ΠΎ Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΌΠ°Π»ΠΎΡ€Π°Π·Π²ΠΈΡ‚Ρ‹Π΅ shell-сцСнарии ΠΌΠΎΠ³Π»ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ ΠΏΠΎΡ‡Ρ‚ΠΈ Π² любой срСдС. ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΠ° Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Π² Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π΅ shell-сцСнариСв интСнсивно ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ ΠΈ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΡΠ²Π»ΡΡŽΡ‚ΡΡ ΠΌΠ΅Π½Π΅Π΅ пСрСносимыми, ΠΈ ΠΈΡ… присутствиС Π½Π° ΠΊΠ°ΠΊΠΎΠΉ-Π»ΠΈΠ±ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΉ Ρ†Π΅Π»Π΅Π²ΠΎΠΉ машинС Π½ΠΈΠΊΠΎΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ Π½Π΅ гарантируСтся.

Π”Π°Π½Π½ΡƒΡŽ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€Π΅ΠΎΠ΄ΠΎΠ»Π΅Ρ‚ΡŒ гСроичСскими усилиями, ΠΊΠ°ΠΊ Π² инструмСнтах autoconf(1). Однако это Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ достаточно Ρ‚Ρ€ΡƒΠ΄Π½ΠΎ, ΠΈ Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ ΡΠ»ΠΎΠΆΠ½Π΅ΠΉΡˆΠΈΡ… случаСв программирования, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π»ΠΈΡΡŒ Π² shell, ΠΏΠ΅Ρ€Π΅ΠΌΠ΅ΡΡ‚ΠΈΠ»ΠΈΡΡŒ ΠΊ языкам сцСнариСв Π²Ρ‚ΠΎΡ€ΠΎΠ³ΠΎ поколСния, Ρ‚Π°ΠΊΠΈΠΌ ΠΊΠ°ΠΊ Perl, Python ΠΈ Tcl.

17.5.1.4. ΠŸΠ΅Ρ€Π΅Π½ΠΎΡΠΈΠΌΠΎΡΡ‚ΡŒ Perl

Perl отличаСтся Ρ…ΠΎΡ€ΠΎΡˆΠ΅ΠΉ ΠΏΠ΅Ρ€Π΅Π½ΠΎΡΠΈΠΌΠΎΡΡ‚ΡŒΡŽ. Π’ стандартном Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π΅ языка Π΄Π°ΠΆΠ΅ прСдоставляСтся пСрСносимый Π½Π°Π±ΠΎΡ€ привязок ΠΊ Tk-ΠΈΠ½ΡΡ‚Ρ€ΡƒΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΡŽ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ пСрСносимыС GUI-интСрфСйсы Π² Unix, MacOS ΠΈ Windows. Однако этому ΠΌΠ΅ΡˆΠ°Π΅Ρ‚ ΠΎΠ΄Π½Π° ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°. Perl-сцСнарии часто Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‚ Π΄ΠΎΠ±Π°Π²ΠΎΡ‡Π½Ρ‹Ρ… Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ ΠΈΠ· Π°Ρ€Ρ…ΠΈΠ²Π° CPAN (Comprehensive Perl Archive Network β€” ΠΏΠΎΠ»Π½Ρ‹ΠΉ сСтСвой Π°Ρ€Ρ…ΠΈΠ² Perl), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΠΏΡ€ΠΈΡΡƒΡ‚ΡΡ‚Π²ΡƒΡŽΡ‚ Π² любой Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Perl.

17.5.1.5. ΠŸΠ΅Ρ€Π΅Π½ΠΎΡΠΈΠΌΠΎΡΡ‚ΡŒ Python

Python ΠΈΠΌΠ΅Π΅Ρ‚ ΠΏΡ€Π΅Π²ΠΎΡΡ…ΠΎΠ΄Π½ΡƒΡŽ ΠΏΠ΅Ρ€Π΅Π½ΠΎΡΠΈΠΌΠΎΡΡ‚ΡŒ. Как ΠΈ Perl, стандартный Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ Python прСдоставляСт пСрСносимый Π½Π°Π±ΠΎΡ€ привязок ΠΊ Tk-ΠΈΠ½ΡΡ‚Ρ€ΡƒΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΡŽ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ пСрСносимыС GUI-интСрфСйсы Π² Unix, MacOS ΠΈ Windows.

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

17.5.1.6. ΠŸΠ΅Ρ€Π΅Π½ΠΎΡΠΈΠΌΠΎΡΡ‚ΡŒ Tcl

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

Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, для ΠΌΠ΅Π»ΠΊΠΈΡ… ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ², Π½Π΅ зависящих ΠΎΡ‚ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠΉ, ΠΏΠ΅Ρ€Π΅Π½ΠΎΡΠΈΠΌΠΎΡΡ‚ΡŒ Tcl прСвосходна. Однако ΠΊΡ€ΡƒΠΏΠ½Ρ‹Π΅ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Ρ‹ часто сильно зависят ΠΊΠ°ΠΊ ΠΎΡ‚ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠΉ, Ρ‚Π°ΠΊ ΠΈ (ΠΊΠ°ΠΊ Π² случаС с shell-ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ) ΠΎΡ‚ Π²Ρ‹Π·Ρ‹Π²Π°Π΅ΠΌΡ‹Ρ… Π²Π½Π΅ΡˆΠ½ΠΈΡ… ΠΊΠΎΠΌΠ°Π½Π΄, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ ΠΎΡ‚ΡΡƒΡ‚ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ Π½Π° Ρ†Π΅Π»Π΅Π²ΠΎΠΉ машинС; часто ΠΎΠ½ΠΈ ΠΈΠΌΠ΅ΡŽΡ‚ ΡΠ»Π°Π±ΡƒΡŽ ΠΏΠ΅Ρ€Π΅Π½ΠΎΡΠΈΠΌΠΎΡΡ‚ΡŒ.

ΠŸΠ°Ρ€Π°Π΄ΠΎΠΊΡΠ°Π»ΡŒΠ½ΠΎ, Π½ΠΎ Tcl ΠΌΠΎΠΆΠ΅Ρ‚ ΡΡ‚Ρ€Π°Π΄Π°Ρ‚ΡŒ ΠΎΡ‚ простоты добавлСния Π² Π½Π΅Π³ΠΎ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠΉ. К Ρ‚ΠΎΠΌΡƒ ΠΌΠΎΠΌΠ΅Π½Ρ‚Ρƒ, ΠΊΠΎΠ³Π΄Π° ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ΅ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ становится интСрСсным Π² качСствС части стандартного дистрибутива, сущСствуСт, ΠΊΠ°ΠΊ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, нСсколько Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… Π΅Π³ΠΎ вСрсий. На симпозиумС Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ² Tcl/Tk (Tcl/Tk Workshop 1995 Π³ΠΎΠ΄Π°) Π”ΠΆΠΎΠ½ АустСрхоут (John Ousterhout) объяснил, ΠΏΠΎΡ‡Π΅ΠΌΡƒ Π² стандартном дистрибутивС Tcl отсутствуСт ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° ОО-срСдств, Ρ‚Π°ΠΊ:

ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²ΡŒΡ‚Π΅ сСбС ΠΏΡΡ‚ΡŒ ΠΌΡƒΠ»Π», сидящих Π½Π΅ΠΏΠΎΠ΄Π°Π»Π΅ΠΊΡƒ, ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚: "Π£Π±Π΅ΠΉ Π΅Π³ΠΎ, ΠΎΠ½ Π½Π΅Π²Π΅Ρ€Π½Ρ‹ΠΉ". Если Π±Ρ‹ я Π²Π½Π΅Π΄Ρ€ΠΈΠ» ΡΠΏΠ΅Ρ†ΠΈΡ„ΠΈΡ‡Π΅ΡΠΊΡƒΡŽ ОО-схСму Π² ядро, Ρ‚ΠΎ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· Π½ΠΈΡ… сказал Π±Ρ‹: "Π‘Π»Π°Π³ΠΎΡΠ»ΠΎΠ²Π»ΡΡŽ тСбя, сын ΠΌΠΎΠΉ, Ρ‚Ρ‹ моТСшь ΠΏΠΎΡ†Π΅Π»ΠΎΠ²Π°Ρ‚ΡŒ ΠΌΠΎΠΉ ΠΏΠ΅Ρ€ΡΡ‚Π΅Π½ΡŒ", Π° ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Π΅ Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅ сказали Π±Ρ‹ "Π£Π±Π΅ΠΉ Π΅Π³ΠΎ, ΠΎΠ½ Π½Π΅Π²Π΅Ρ€Π½Ρ‹ΠΉ".

17.5.1.7. ΠŸΠ΅Ρ€Π΅Π½ΠΎΡΠΈΠΌΠΎΡΡ‚ΡŒ Java

ΠŸΠ΅Ρ€Π΅Π½ΠΎΡΠΈΠΌΠΎΡΡ‚ΡŒ Java прСвосходна β€” Π² ΠΊΠΎΠ½Ρ†Π΅ ΠΊΠΎΠ½Ρ†ΠΎΠ², основной Ρ†Π΅Π»ΡŒΡŽ создания языка Π±Ρ‹Π» Π΄Π΅Π²ΠΈΠ· "написанноС ΠΎΠ΄Π½Π°ΠΆΠ΄Ρ‹ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π²Π΅Π·Π΄Π΅". ВмСстС с Ρ‚Π΅ΠΌ ΠΏΠ΅Ρ€Π΅Π½ΠΎΡΠΈΠΌΠΎΡΡ‚ΡŒ Java Π½Π΅ идСальна. Врудности Π² основном связаны с ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°ΠΌΠΈ пСрСкоса вСрсий ΠΌΠ΅ΠΆΠ΄Ρƒ JDK 1.1 ΠΈ Π±ΠΎΠ»Π΅Π΅ старым GUI-инструмСнтариСм AWT (с ΠΎΠ΄Π½ΠΎΠΉ стороны) ΠΈ JDK 1.2 ΠΈ Π±ΠΎΠ»Π΅Π΅ Π½ΠΎΠ²Ρ‹ΠΌ Swing. Π­Ρ‚ΠΎ обусловлСно нСсколькими Π²Π°ΠΆΠ½Ρ‹ΠΌΠΈ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π°ΠΌΠΈ.

β€’ ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡ AWT Sun Π±Ρ‹Π»Π° Π½Π°ΡΡ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π΅Π°Π΄Π΅ΠΊΠ²Π°Ρ‚Π½ΠΎΠΉ, Ρ‡Ρ‚ΠΎ Π΅Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π±Ρ‹Π»ΠΎ Π·Π°ΠΌΠ΅Π½ΠΈΡ‚ΡŒ инструмСнтариСм Swing.

β€’ ΠžΡ‚ΠΊΠ°Π· Microsoft ΠΎΡ‚ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ Java-Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π½Π° Windows ΠΈ ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠ° Π·Π°ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹ΠΉ язык Π‘#.

β€’ РСшСниС Microsoft ΡƒΠ΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΡƒ Π°ΠΏΠ»Π΅Ρ‚ΠΎΠ² Π² Internet Explorer Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ JDK 1.1.

β€’ Π›ΠΈΡ†Π΅Π½Π·ΠΈΠΎΠ½Π½Ρ‹Π΅ полоТСния Sun, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΄Π΅Π»Π°ΡŽΡ‚ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΠΉ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ JDK 1.2 с ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΌ исходным ΠΊΠΎΠ΄ΠΎΠΌ, замСдляя Π²Π½Π΅Π΄Ρ€Π΅Π½ΠΈΠ΅ ΠΏΠ°ΠΊΠ΅Ρ‚Π° (особСнно Π² ΠΌΠΈΡ€Π΅ Linux).