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

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

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

НСпосрСдствСнный Π²Ρ‹ΠΈΠ³Ρ€Ρ‹Ρˆ ΠΎΡ‚ пСрСносимости Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ для Unix-ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ являСтся Π½ΠΎΡ€ΠΌΠΎΠΉ ΠΏΠ΅Ρ€Π΅ΠΆΠΈΡ‚ΡŒ свою ΠΈΡΡ…ΠΎΠ΄Π½ΡƒΡŽ Π°ΠΏΠΏΠ°Ρ€Π°Ρ‚Π½ΡƒΡŽ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡƒ, поэтому Π½Π΅ трСбуСтся ΠΊΠ°ΠΆΠ΄Ρ‹Π΅ нСсколько Π»Π΅Ρ‚ Π·Π°Π½ΠΎΠ²ΠΎ ΠΈΠ·ΠΎΠ±Ρ€Π΅Ρ‚Π°Ρ‚ΡŒ инструмСнты ΠΈ прилоТСния. БСгодня прилоТСния, ΠΏΠ΅Ρ€Π²ΠΎΠ½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎ написанныС для Version 7 Unix (1979), рСгулярно ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π° Unix-систСмах, "гСнСтичСски" происходящих ΠΎΡ‚ V7, Π½ΠΎ ΠΈ Π½Π° Ρ‚Π°ΠΊΠΈΡ… Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π°Ρ… систСмы, ΠΊΠ°ΠΊ Linux, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ API-интСрфСйс ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмы Π±Ρ‹Π» написан Π½Π° основании Unix-спСцификации ΠΈ Π½Π΅ содСрТит ΠΊΠΎΠ΄Π°, заимствованного Ρƒ Bell Labs.

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

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

17.1. Π­Π²ΠΎΠ»ΡŽΡ†ΠΈΡ Π‘

Π“Π»Π°Π²Π½Ρ‹ΠΌ Ρ„Π°ΠΊΡ‚ΠΎΠΌ ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠΈ Unix-программирования всСгда Π±Ρ‹Π»Π° ΡΡ‚Π°Π±ΠΈΠ»ΡŒΠ½ΠΎΡΡ‚ΡŒ языка Π‘ ΠΈ нСбольшого количСства слуТСбных интСрфСйсов, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ всСгда Π΅ΠΌΡƒ сопутствовали (особСнно стандартная 1/О-Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° ΠΈ ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹Π΅ Π΅ΠΉ). Π’ΠΎΡ‚ Ρ„Π°ΠΊΡ‚, Ρ‡Ρ‚ΠΎ i язык, созданный Π² 1973 Π³ΠΎΠ΄Ρƒ, Π² Ρ‚Π΅Ρ‡Π΅Π½ΠΈΠ΅ Ρ‚Ρ€ΠΈΠ΄Ρ†Π°Ρ‚ΠΈ Π»Π΅Ρ‚ интСнсивного использования ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΎΠ²Π°Π» Π½Π΅Π±ΠΎΠ»ΡŒΡˆΠΈΡ… ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ, являСтся Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Ρ‡Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ, Π² этом ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠΈ язык Π‘ Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ Π°Π½Π°Π»ΠΎΠ³ΠΎΠ² Π² ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π½ΠΎΠΉ Π½Π°ΡƒΠΊΠ΅.

Π’ Π³Π»Π°Π²Π΅ 4 ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΠ»ΠΈΡΡŒ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ Π² ΠΏΠΎΠ»ΡŒΠ·Ρƒ Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ Π‘ достиг успСха, благодаря Ρ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ выполняСт Ρ€ΠΎΠ»ΡŒ Ρ‚ΠΎΠ½ΠΊΠΎΠ³ΠΎ ΡΠ²ΡΠ·ΡƒΡŽΡ‰Π΅Π³ΠΎ уровня Π½Π°Π΄ Π°ΠΏΠΏΠ°Ρ€Π°Ρ‚Π½Ρ‹ΠΌ обСспСчСниСм ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π°, ΠΏΡ€ΠΈΠ±Π»ΠΈΠΆΠ°ΡŽΡ‰ΠΈΠΌΡΡ ΠΊ "стандартной Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π΅" [4]. Однако для Ρ‚ΠΎΠ³ΠΎ Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ½ΡΡ‚ΡŒ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Ρ„Π°ΠΊΡ‚ΠΎΡ€Ρ‹, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΊΡ€Π°Ρ‚ΠΊΠΎ Ρ€Π°ΡΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΈΡΡ‚ΠΎΡ€ΠΈΡŽ Π΄Π°Π½Π½ΠΎΠ³ΠΎ языка.

17.1.1. Ранняя история Π‘

Π―Π·Ρ‹ΠΊ Π‘ родился Π² 1971 Π³ΠΎΠ΄Ρƒ ΠΊΠ°ΠΊ язык систСмного программирования для PDP-11-Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π° Unix ΠΈ основывался Π½Π° Ρ€Π°Π½Π½Π΅ΠΌ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Π΅ языка Π’, Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π½Π½ΠΎΠ³ΠΎ КСном Вомпсоном. Π―Π·Ρ‹ΠΊ Π’, Π² свою ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ, Π±Ρ‹Π» смодСлирован с Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ языка ΠΎΠ±Ρ‰Π΅Π³ΠΎ программирования (Basic Common Programming Language β€” BCPL), Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π½Π½ΠΎΠ³ΠΎ Π² ΠšΠ΅ΠΌΠ±Ρ€ΠΈΠ΄ΠΆΡΠΊΠΎΠΌ унивСрситСтС Π² 1966 - 1967 Π³ΠΎΠ΄Π°Ρ…105.

ΠŸΠ΅Ρ€Π²ΠΎΠ½Π°Ρ‡Π°Π»ΡŒΠ½Ρ‹ΠΉ Π‘-компилятор ДСнниса Π ΠΈΡ‚Ρ‡ΠΈ (ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ часто Π½Π°Π·Ρ‹Π²Π°Π»ΠΈ "DMR" ΠΏΠΎ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»Π°ΠΌ Π΅Π³ΠΎ создатСля) обслуТивал сообщСство, быстро Ρ€Π°Π·Ρ€Π°ΡΡ‚Π°ΡŽΡ‰Π΅Π΅ΡΡ Π²ΠΎΠΊΡ€ΡƒΠ³ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмы Unix вСрсий 5, 6 ΠΈ 7. ΠžΡ‚ ΡˆΠ΅ΡΡ‚ΠΎΠΉ вСрсии Π‘ языка ΠΏΡ€ΠΎΠΈΠ·ΠΎΡˆΠ»Π° вСрсия Π‘ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ Whitesmiths, повторная рСализация, которая стала ΠΏΠ΅Ρ€Π²Ρ‹ΠΌ коммСрчСским Π‘-компилятором ΠΈ ядром IDRIS, ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ ΠΊΠ»ΠΎΠ½Π° Unix. Однако самыС соврСмСнныС Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π‘ смодСлированы Π½Π° основС "пСрСносимого Π‘-компилятора" (Portable Π‘ Compilerβ€” Π Π‘Π‘) Π‘Ρ‚ΠΈΠ²Π΅Π½Π° ДТонсона (Steven Π‘. Johnson), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π΄Π΅Π±ΡŽΡ‚ΠΈΡ€ΠΎΠ²Π°Π» Π² сСдьмой вСрсии ΠΈ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ Π·Π°ΠΌΠ΅Π½ΠΈΠ» компилятор DMR ΠΊΠ°ΠΊ Π² Π²Π΅Ρ‚Π²ΠΈ System V, Ρ‚Π°ΠΊ ΠΈ Π² BSD-вСрсиях Ρ‡Π΅Ρ‚Π²Π΅Ρ€Ρ‚ΠΎΠ³ΠΎ поколСния.

Π’ 1976 Π³ΠΎΠ΄Ρƒ Π² ΡˆΠ΅ΡΡ‚ΠΎΠΉ вСрсии Π‘ Π±Ρ‹Π»ΠΈ прСдставлСны объявлСния typedef, union ΠΈ unsigned int. Π’Π°ΠΊΠΆΠ΅ ΠΏΠΎΠ΄Π²Π΅Ρ€Π³Π»ΠΈΡΡŒ измСнСниям ΡƒΡ‚Π²Π΅Ρ€ΠΆΠ΄Π΅Π½Π½Ρ‹ΠΉ синтаксис для ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… ΠΈ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ составныС ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹.

ΠžΡ€ΠΈΠ³ΠΈΠ½Π°Π»ΡŒΠ½Ρ‹ΠΌ описаниСм языка Π‘ Π±Ρ‹Π»Π° ΠΊΠ½ΠΈΠ³Π° Π‘Ρ€Π°ΠΉΠ°Π½Π° ΠšΠ΅Ρ€Π½ΠΈΠ³Π°Π½Π° ΠΈ ДСнниса Π ΠΈΡ‚Ρ‡ΠΈ "The Π‘ Programming Language", ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ Ρ‚Π°ΠΊΠΆΠ΅ Π½Π°Π·Ρ‹Π²Π°Π»ΠΈ "Π‘Π΅Π»ΠΎΠΉ ΠΊΠ½ΠΈΠ³ΠΎΠΉ" [42]. Она Π±Ρ‹Π»Π° ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½Π° Π² 1978 Π³ΠΎΠ΄Ρƒ, Π² Ρ‚ΠΎΠΌ ΠΆΠ΅ Π³ΠΎΠ΄Ρƒ появился Π‘-компилятор Whitemiths.

БСлая ΠΊΠ½ΠΈΠ³Π° описывала ΡƒΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½ΡΡ‚Π²ΠΎΠ²Π°Π½Π½ΡƒΡŽ ΡˆΠ΅ΡΡ‚ΡƒΡŽ Π²Π΅Ρ€ΡΠΈΡŽ языка Π‘ с ΠΎΠ΄Π½ΠΈΠΌ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ касалось ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ общСдоступных ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…. ΠŸΠ΅Ρ€Π²ΠΎΠ½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎ Π ΠΈΡ‚Ρ‡ΠΈ намСрСвался ΡΠΌΠΎΠ΄Π΅Π»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€Π°Π²ΠΈΠ»Π° Π‘ с COMMON-объявлСний языка FORTRAN, ΠΎΡΠ½ΠΎΠ²Ρ‹Π²Π°ΡΡΡŒ Π½Π° тСорСтичСском сообраТСнии, Ρ‡Ρ‚ΠΎ любая машина, способная ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒ FORTRAN, Π±ΡƒΠ΄Π΅Ρ‚ Π³ΠΎΡ‚ΠΎΠ²Π° ΠΊ использованию Π‘. Π’ ΠΌΠΎΠ΄Π΅Π»ΠΈ с ΠΎΠ±Ρ‰ΠΈΠΌ Π±Π»ΠΎΠΊΠΎΠΌ общСдоступная пСрСмСнная ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ объявлСна нСсколько Ρ€Π°Π·; ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ‡Π½Ρ‹Π΅ объявлСния ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΡΡŽΡ‚ΡΡ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²Ρ‰ΠΈΠΊΠΎΠΌ. Однако Π΄Π²Π° Ρ€Π°Π½Π½ΠΈΡ… Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π° Π‘ (для мэйнфрСймов Honeywell ΠΈ IBM 360) Ρ€Π°Π±ΠΎΡ‚Π°Π»ΠΈ Π½Π° ΠΌΠ°ΡˆΠΈΠ½Π°Ρ… с ΠΎΡ‡Π΅Π½ΡŒ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π½ΠΎΠΉ ΠΎΠ±Ρ‰Π΅ΠΉ ΠΏΠ°ΠΌΡΡ‚ΡŒΡŽ ΠΈΠ»ΠΈ ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²Π½Ρ‹ΠΌ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²Ρ‰ΠΈΠΊΠΎΠΌ, ΠΈΠ»ΠΈ ΠΈΠΌΠ΅Π»ΠΈ ΠΎΠ±Π° нСдостатка. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, компилятор Version 6 Π‘ Π±Ρ‹Π» пСрСнСсСн Π² Π±ΠΎΠ»Π΅ ΡΡ‚Ρ€ΠΎΠ³ΡƒΡŽ модСль опрСдСлСния (которая Ρ‚Ρ€Π΅Π±ΠΎΠ²Π°Π»Π° максимум ΠΎΠ΄Π½ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ любой Π·Π°Π΄Π°Π½Π½ΠΎΠΉ общСдоступной ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΈ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ³ΠΎ слова extern, Π·Π°Π΄Π°ΡŽΡ‰Π΅Π³ΠΎ Π½Π° Π½Π΅Π΅ ссылки), ΠΎΠΏΠΈΡΠ°Π½Π½ΡƒΡŽ Π² [42].

Π­Ρ‚ΠΎ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ Π±Ρ‹Π»ΠΎ ΠΎΡ‚ΠΌΠ΅Π½Π΅Π½ΠΎ Π² Π‘-компиляторС, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ поставлялся с Version 7, послС выяснСния Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ большоС количСство ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π³ΠΎ исходного ΠΊΠΎΠ΄Π° зависСло ΠΎΡ‚ Π±ΠΎΠ»Π΅Π΅ свободных ΠΏΡ€Π°Π²ΠΈΠ». Под Π΄Π°Π²Π»Π΅Π½ΠΈΠ΅ΠΌ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠΉ совмСстимости Π·Π°ΠΊΠΎΠ½Ρ‡ΠΈΠ»Π°ΡΡŒ Π½Π΅ΡƒΠ΄Π°Ρ‡Π΅ΠΉ Π΅Ρ‰Π΅ ΠΎΠ΄Π½Π° ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠ° ΠΏΠ΅Ρ€Π΅ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒΡΡ (Π² вСрсии System V Release 1 1983 Π³ΠΎΠ΄Π°), ΠΏΠ΅Ρ€Π΅Π΄ Ρ‚Π΅ΠΌ ΠΊΠ°ΠΊ Π² 1988 Π³ΠΎΠ΄Ρƒ Π² ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅ стандарта ANSI (ANSI Draft Standard) ΠΎΠΊΠΎΠ½Ρ‡Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΠ»ΠΈΡΡŒ ΠΏΡ€Π°Π²ΠΈΠ»Π° опрСдСлСния. ΠžΠ±Ρ‰ΠΈΠΉ Π±Π»ΠΎΠΊ Π²Π½Π΅ΡˆΠ½ΠΈΡ… ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… Π΄ΠΎ сих ΠΏΠΎΡ€ являСтся ΠΎΠ±Ρ‰Π΅ΠΏΡ€ΠΈΠ·Π½Π°Π½Π½Ρ‹ΠΌ ΠΎΡ‚ΠΊΠ»ΠΎΠ½Π΅Π½ΠΈΠ΅ΠΌ ΠΎΡ‚ стандарта.

Π’ сСдьмой вСрсии Π‘ Π±Ρ‹Π»Π° Π²Π²Π΅Π΄Π΅Π½Π° конструкция enum, Π° значСния struct ΠΈ union ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚ΠΈΡ€ΠΎΠ²Π°Π»ΠΈΡΡŒ ΠΊΠ°ΠΊ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ класса, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°Π·Π½Π°Ρ‡Π°Ρ‚ΡŒ, ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Ρ‚ΡŒ Π² качСствС Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Ρ‚ΡŒ ΠΈΠ· Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ (вмСсто ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ ΠΏΠΎ адрСсу).

Π”Ρ€ΡƒΠ³ΠΈΠΌ Π³Π»Π°Π²Π½Ρ‹ΠΌ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ΠΌ Π² V7 Π±Ρ‹Π»ΠΎ Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Unix-объявлСния структур Π΄Π°Π½Π½Ρ‹Ρ… Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π»ΠΈΡΡŒ Π² Ρ„Π°ΠΉΠ»Π°Ρ… Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΎΠ² ΠΈ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Π»ΠΈΡΡŒ. Π’ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΡ… вСрсиях Unix структуры Π΄Π°Π½Π½Ρ‹Ρ… (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, для ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ΠΎΠ²) фактичСски ΠΏΠ΅Ρ‡Π°Ρ‚Π°Π»ΠΈΡΡŒ Π² руководствС, ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ программисты ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π»ΠΈ ΠΈΡ… Π² свой ΠΊΠΎΠ΄. ИзлишнС Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ это Π±Ρ‹Π»ΠΎ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΎΠΉ для пСрСносимости.

Π‘Ρ‚ΠΈΠ² ДТонсон.

ВСрсия System III Π‘ компилятора Π Π‘Π‘ (которая Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΠΎΡΡ‚Π°Π²Π»ΡΠ»Π°ΡΡŒ с BSD 4.1с) ΠΈΠ·ΠΌΠ΅Π½ΠΈΠ»Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ объявлСний struct Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Ρ‡Π»Π΅Π½Ρ‹ с ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹ΠΌΠΈ ΠΈΠΌΠ΅Π½Π°ΠΌΠΈ Π² Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… структурах Π½Π΅ ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚ΠΎΠ²Π°Π»ΠΈ. Π’Π°ΠΊΠΆΠ΅ Π±Ρ‹Π»ΠΈ внСсСны объявлСния void ΠΈ unsigned char. ΠžΠ±Π»Π°ΡΡ‚ΡŒ дСйствия extern-объявлСний Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Ρ… для Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ Π±Ρ‹Π»Π° ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π° Π΄Π°Π½Π½ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ ΠΈ Π±ΠΎΠ»Π΅Π΅ Π½Π΅ Π²ΠΊΠ»ΡŽΡ‡Π°Π»Π° всСго ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π³ΠΎ Π·Π° Π½Π΅ΠΉ ΠΊΠΎΠ΄Π°.

Π’ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅ стандарта ANSI Π‘ (ANSI Π‘ Draft Proposed Standard) Π±Ρ‹Π»ΠΈ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Ρ‹ опрСдСлСния const (для памяти Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для чтСния) ΠΈ volatile (для Ρ‚Π°ΠΊΠΈΡ… ячССк, ΠΊΠ°ΠΊ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Π΅ΠΌΡ‹Π΅ Π½Π° ΠΏΠ°ΠΌΡΡ‚ΡŒ рСгистры Π²Π²ΠΎΠ΄Π°/Π²Ρ‹Π²ΠΎΠ΄Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ асинхронно ΠΈΠ· ΠΏΠΎΡ‚ΠΎΠΊΠ° управлСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹). Π’ цСлях примСнСния ΠΊ Π»ΡŽΠ±ΠΎΠΌΡƒ Ρ‚ΠΈΠΏΡƒ Π±Ρ‹Π» ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ Ρ‚ΠΈΠΏΠ° unsigned, Π° Ρ‚Π°ΠΊΠΆΠ΅ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ signed. Π‘Ρ‹Π» Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ синтаксис для auto-массива, ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ΠΎΠ² структур, Π° Ρ‚Π°ΠΊΠΆΠ΅ Ρ‚ΠΈΠΏΠΎΠ² union. НаиболСС Π²Π°ΠΆΠ½ΠΎ Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Π±Ρ‹Π»ΠΈ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Ρ‹ ΠΏΡ€ΠΎΡ‚ΠΎΡ‚ΠΈΠΏΡ‹ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ.

Π‘Π°ΠΌΡ‹ΠΌΠΈ Π²Π°ΠΆΠ½Ρ‹ΠΌΠΈ измСнСниями Π² Ρ€Π°Π½Π½Π΅ΠΌ Π‘ Π±Ρ‹Π» ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ ΠΊ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΡŽ ΠΈ Π²Π²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΡ‚ΠΎΡ‚ΠΈΠΏΠΎΠ² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ Π² ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅ стандарта ANSI Π‘. Π―Π·Ρ‹ΠΊ ΠΏΠΎ сущСству остаСтся ΡΡ‚Π°Π±ΠΈΠ»ΡŒΠ½Ρ‹ΠΌ с Ρ‚Π΅Ρ… ΠΏΠΎΡ€, ΠΊΠ°ΠΊ Π² 1985 - 1986 Π³ΠΎΠ΄Π°Ρ… ΠΊΠΎΠΏΠΈΠΈ Ρ€Π°Π±ΠΎΡ‡ΠΈΡ… Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² ΠΊΠΎΠΌΠΈΡ‚Π΅Ρ‚Π° X3J11 ΠΏΠΎ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Ρƒ стандарта Π΄ΠΎΠ²Π΅Π»ΠΈ намСрСния ΠΊΠΎΠΌΠΈΡ‚Π΅Ρ‚Π° Π΄ΠΎ свСдСния Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ² компиляторов.

Π‘ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ история Ρ€Π°Π½Π½Π΅Π³ΠΎ Π‘ описана создатСлСм языка Π² ΡΡ‚Π°Ρ‚ΡŒΠ΅ [70].

17.1.2. Π‘Ρ‚Π°Π½Π΄Π°Ρ€Ρ‚Ρ‹ Π‘

Π Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° стандартов Π‘ Π±Ρ‹Π»Π° консСрвативным процСссом, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΡΠ΅Ρ€ΡŒΠ΅Π·Π½ΠΎΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ ΡƒΠ΄Π΅Π»ΡΠ»ΠΎΡΡŒ "ΡΠΎΡ…Ρ€Π°Π½Π΅Π½ΠΈΡŽ Π΄ΡƒΡ…Π°" ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ Π‘, Π° Π°ΠΊΡ†Π΅Π½Ρ‚ Π±Ρ‹Π» сдСлан скорСС Π½Π° ΡƒΡ‚Π²Π΅Ρ€ΠΆΠ΄Π΅Π½ΠΈΠΈ экспСримСнтов Π² ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… компиляторах, Ρ‡Π΅ΠΌ Π½Π° создании Π½ΠΎΠ²Ρ‹Ρ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ. Π”ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚-хартия Π‘9Π₯ (Π‘9Π₯ charter)106 являСтся прСвосходным Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ΠΌ Π΄Π°Π½Π½ΠΎΠΉ миссии.

Π Π°Π±ΠΎΡ‚Π° Π½Π°Π΄ ΠΏΠ΅Ρ€Π²Ρ‹ΠΌ ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΌ стандартом Π‘ Π½Π°Ρ‡Π°Π»Π°ΡΡŒ Π² 1983 Π³ΠΎΠ΄Ρƒ ΠΏΡ€ΠΈ содСйствии ΠΊΠΎΠΌΠΈΡ‚Π΅Ρ‚Π° X3J11 ANSI. Π“Π»Π°Π²Π½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹Π΅ дополнСния ΠΊ языку Π±Ρ‹Π»ΠΈ ΡƒΡ‚Π²Π΅Ρ€ΠΆΠ΄Π΅Π½Ρ‹ ΠΊ ΠΊΠΎΠ½Ρ†Ρƒ 1986 Π³ΠΎΠ΄Π°, ΠΈ с этого ΠΌΠΎΠΌΠ΅Π½Ρ‚Π° программисты стали Ρ€Π°Π·Π»ΠΈΡ‡Π°Ρ‚ΡŒ "K&R Π‘" ΠΈ "ANSI Π‘".

МногиС Π½Π΅ ΠΎΡΠΎΠ·Π½Π°ΡŽΡ‚, насколько Π½Π΅ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΌ, особСнно ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π»ΡŒΠ½Π°Ρ Ρ€Π°Π±ΠΎΡ‚Π° ANSI Π‘, Π±Ρ‹Π» ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ стандартизации языка Π² своСм ΡƒΠΏΠΎΡ€Π½ΠΎΠΌ Ρ‚Ρ€Π΅Π±ΠΎΠ²Π°Π½ΠΈΠΈ ΡΡ‚Π°Π½Π΄Π°Ρ€Ρ‚ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΡ€ΠΎΠ²Π΅Ρ€Π΅Π½Π½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. Π‘ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ ΠΊΠΎΠΌΠΈΡ‚Π΅Ρ‚ΠΎΠ² ΠΏΠΎ стандартизации языков тратят Π±ΠΎΠ»ΡŒΡˆΡƒΡŽ Ρ‡Π°ΡΡ‚ΡŒ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ Π½Π° созданиС Π½ΠΎΠ²Ρ‹Ρ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, Π·Π°Ρ‡Π°ΡΡ‚ΡƒΡŽ удСляя ΠΌΠ°Π»ΠΎ внимания ΠΈΡ… Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΠΉ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ. ЀактичСски нСсколько Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ANSI Π‘, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π±Ρ‹Π»ΠΈ созданы с нуля, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΏΠ΅Ρ‡Π°Π»ΡŒΠ½ΠΎ извСстныС "Ρ‚Ρ€ΠΈΠ³Ρ€Π°Ρ„Ρ‹" (trigraphs), Π±Ρ‹Π»ΠΈ самыми нСпопулярными ΠΈ Π½Π°ΠΈΠΌΠ΅Π½Π΅Π΅ ΡƒΡΠΏΠ΅ΡˆΠ½Ρ‹ΠΌΠΈ функциями Π‘89.