Приложения

А Глоссарий аббревиатур

В данном приложении даны определения наиболее важных аббревиатур, используемых в основном тексте книги.

API

Application Programming Interface. Программный интерфейс приложений. Набор процедурных вызовов, который обменивается данными со связываемой библиотекой процедур или ядром операционной системы, или их комбинацией.

BSD

Berkeley System Distribution, или Berkeley Software Distribution. Дистрибутив системы Беркли, или дистрибутив программного обеспечения Беркли. Документальные свидетельства неоднозначны. Общее название дистрибутивов Unix, выпущенных Computer Science Research Group в Калифорнийском университете в Беркли в период между 1976 и 1994 годами, а также Unix-систем с открытым исходным кодом, генетически происходящих от данных дистрибутивов.

CLI

Command Line Interface. Интерфейс командной строки. Считается некоторыми архаичным, но остается весьма полезным в мире Unix.

CPAN

Comprehensive Perl Archive Network. Полный сетевой архив Perl-программ. Центральный Web-репозиторий Perl-модулей и расширений .

GNU

GNU's Not Unix! GNU — не Unix! Рекурсивная аббревиатура для проекта фонда свободного программного обеспечения (Free Software Foundation) по созданию клона Unix с полностью свободным программным обеспечением. Данный проект не достиг абсолютного успеха, однако в его рамках создано множество основных инструментов современной Unix-разработки, включая редактор Emacs и коллекцию компиляторов GNU (GNU Compiler Collection).

GUI

Graphical User Interface. Графический пользовательский интерфейс. Современный стиль интерфейса приложений, использующих мышь, окна и пиктограммы, созданный в лаборатории Xerox PARC в 1970-х годах как противоположность более старым CLI- или rogue-подобным стилям.

IDE

Integrated Development Environment. Интегрированная среда разработки. Автоматизированные инструментальные средства разработки с GUI-интерфейсом для создания кода, описания средств и быстрого просмотра структур данных. В Unix данные средства не получили широкого распространения по причинам, описанным в главе 15.

IETF

Internet Engineering Task Force. Инженерная группа по решению конкретной задачи в Internet. Орган, ответственный за определение Internet-протоколов, таких как TCP/IP. Свободная, коллегиальная организация, главным образом состоящая из технических специалистов.

IPC

Inter-Process Communication. Межпроцессное взаимодействие. Любой метод передачи данных между процессами, запущенными в отдельных адресных пространствах.

MIME

Multipurpose Internet Mail Extensions. Многоцелевые расширения почтового стандарта в Internet. Ряд документов RFC, которые описывают стандарты для внедрения двоичных и многокомпонентных сообщений в почту стандарта RFC-822. Кроме использования для передачи почты, MIME-формат используется в качестве нижнего уровня для важных протоколов уровня приложений, включая HTTP и ВЕЕР.

OO

Object Oriented. Объектно-ориентированный. Стиль программирования, при котором код и управляемые им данные инкапсулируются в изолированные (теоретически) контейнеры — объекты. В противоположность данному стилю, в необъектно-ориентированном программировании внутреннее устройство структур данных и кода отображается более свободно объектно-ориентированное.

OS

Operating System. Операционная система. Базовое программное обеспечение машины. Именно оно управляет задачами, распределяет пространство памяти и предоставляет пользователю стандартный интерфейс для управления приложениями. Средства, предоставляемые операционной системой, и ее общая философия проектирования чрезвычайно сильно оказывают влияние на стиль программирования и техническую культуру, которая формируется вокруг машин, поддерживающих данную систему.

PDF

Portable Document Format. Переносимый формат документов. PostScript-язык для управления принтерами и другими устройствами, формирующими изображение. PDF представляет собой последовательность PostScript-страниц, упакованных с аннотациями таким образом, что его можно легко использовать в качестве формата отображения.

PDP-11

Programmable Data Processor 11. Программируемый процессор данных 11. Вероятно, единственная наиболее успешная конструкция мини-компьютера в истории; непосредственный предшественник компьютеров VAX. Впервые был представлен в 1970 году, последний PDP-11 появился в 1990 году. Данный мини-компьютер был первой крупной Unix-платформой.

PNG

Portable Network Graphics. Формат переносимой сетевой графики. Стандарт Консорциума WWW (The World Wide Web Consortium), рекомендуемый формат для растровых графических изображений. Элегантно разработанный формат растровой графики, описанный в главе 5.

RFC

Request For Comment. Запрос на комментарии. Internet-стандарт. Название, которое возникло в то время, когда документы считались предложениями, представленными для рассмотрения в ходе тогда еще несуществующего, но ожидаемого формального процесса согласования. Формальный процесс согласования никогда не осуществлялся.

RPC

Remote Procedure Call. Удаленный вызов процедур. Использование IPC-методов, которые призваны создать иллюзию того, что процессы, обменивающиеся данными, работают в одном адресном пространстве и могут экономично (а) совместно использовать комплексные структуры и (b) вызывать друг друга как библиотеки функций, игнорирующие задержку и другие проблемы производительности. Общеизвестно, что эту иллюзию трудно поддерживать.

TCP/IP

Transmission Control Protocol/Internet Protocol. Протокол управления передачей/Internet-протокол. Базовый протокол Internet с момента преобразования NCP (Network Control Protocol — протокол управления сетью) в 1983 году. Обеспечивает гарантированную транспортировку потоков данных.

UDP/IP

Universal Datagram Protocol/Internet Protocol. Протокол универсальных дейтаграмм/Internet протокол. Обеспечивает негарантированную, но с малой задержкой, транспортировку небольших пакетов данных.

UI

User Interface. Пользовательский интерфейс.

VAX

Формально Virtual Address Extension — виртуальное расширение адреса. Название классической конструкции мини-компьютеров, разработанной Digital Equipment Corporation (позднее претерпевшей слияние с Compaq, которая в свою очередь впоследствии была поглощена Hewlett-Packard) на основе PDP-11. Первый мини-компьютер VAX был представлен в 1977 году. В течение десяти лет после 1980 года мини-компьютеры VAX были в числе важнейших Unix-платформ. Доработанные микропроцессоры поставляются и в настоящее время.

Б Список литературы

Хронология индустрии Unix и GNU/Linux опубликована на страницах и . Историческая диаграмма версий операционной системы Unix также представлена на Web-странице .

1. Appleton R. Improving Context Switching Performance of Idle Tasks under Linux. 2001. - C. 188.

Статья доступна на Web-странице .

2. Baldwin C., Clark K. Design Rules, Vol 1: The Power of Modularity. MIT Press, 2000. - C. 107.

3. Bentley J. Programming Pearls. (Второе издание). Addison-Wesley, 2000. — C. 245.

В третьем эссе данной книги "Data Structures Programs" обсуждается учебный пример, подобный примеру в главе 9. Некоторая часть книги доступна в Web .

4. Blaauw G. A., Brooks F. P. Computer Architecture: Concepts and Evolution. Addison-Wesley, 1997. — C. 122, 428.

5. Bolinger D., Bronson T. Applying RCS and SCCS. O'Reilly & Associates, 1995. - C. 398.

Данная книга — не просто "рецептурный" справочник, в ней исследуются проблемы конструкции систем управления версиями.

6. Brokken F. С++Annotations Version, 2002. - С. 358.

Книга также доступна в Web: .

7. Brooks D. Converting a UNIX.COM Site to Windows. 2000. - C. 82.

Книга также доступна в Web: .

8. Brooks F. P. The Mythical Man-Month, (двадцатое юбилейное издание). Addison-Wesley, 1995. - С. 39, 40, 334, 472.

9. Boehm H. Advantages and Disadvantages of Conservative Garbage Collection. — C. 352.

Исчерпывающий анализ компромиссов между средами "с уборкой мусора" и без нее. Статья доступна в Web

10. Cameron D., Rosenblatt В., Raymond E. Learning GNU Emacs, (второе издание). O'Reilly & Associates, 1996. - C. 382.

11. Cannon L. W., Elliot R. A., Kirchhoff L. W., Miller J. A., Milner J. M„ Mitzw R. W., Schan E. P., Whittington N. O., Spencer H., Keppel D., Brader M. Recommended С Style and Coding Standards, 1990. - C. 443.

Обновленная версия документа Indian Hill С Style and Coding Standards с изменениями, внесенными тремя последними авторами. В документе описан рекомендованный стандарт кодирования для С-программ. Документ доступен в Web .

12. Christensen C. The Innovator's Dilemma. HarperBusiness, 2000. — C. 75.

Книга, в которой вводится понятие "пробивной технологии". Интересное исследование, демонстрирующее, как и почему солидные технологические компании остаются позади начинающих фирм. Бизнес-книга, которую следует прочесть техническими специалистам.

13. Cooper A. The Inmates Are Running the Asylum. Sams, 1999. — C. 509.

Данная книга представляет собой глубокий анализ ошибок в конструкции программных интерфейсов и методов их исправления.

14. Comer D. Статья "Pervasive Unix: Cause for Celebration" в журнале Unix Review, октябрь 1985. - С. 57.

15. Coram Т., Lee J. Experiences — A Pattern Language for User Interface Design, 1996. — C. 295.

Статья доступна в Web .

16. DuBois P. Software Portability with Imake. O'Reilly & Associates, 1993. — C. 394.

17. Eckel B. Thinking in Java, (Третье издание). Prentice-Hall, 2003. — C. 372.

Книга доступна в Web .

18. Feller J., Fitzgerald B. Understanding Open Source Software. Addison-Wesley, 2002. — C. 471.

19. Flanagan D. Java in a Nutshell. O'Reilly & Associates, 1997. - C. 372.

20. Flanagan D. JavaScript: The Definitive Guide, (Четвертое издание). O'Reilly & Associates, 2002. - C. 235.

21. Fowler M. Refactoring. Addison-Wesley, 1999. - C. 118.

22. Friedl J. Mastering Regular Expressions, (Второе издание). O'Reilly & Associates, — C. 217.

23. Miller В., Koski D., Lee C. P., Maganty V., Murthy R., Natarajan A., Steidl J. Fuzz Revisited: A Re-examination of the Reliability of Unix Utilities and Services, 2000. — С. 31.

Документ доступен в Web: .

24. Gamma E., Helm R., Johnson R., Vlissides J. Design Patterns: Elements of Reusable Object-Oriented Software. Addison-Wesley, 1997. — С. 23.

25. Gabriel R. Good News, Bad News, and How to Win Big, 1990. - C. 328, 471.

Статья доступна в Web .

26. Gancarz M. The Unix Philosophy. Digital Press, 1995. - C. 19.

27. Garfinkel S., Weise D., Strassman S. The Unix Hater's Handbook. IDG Books, 1994. — C. 28.

Книга доступна в Web .

28. Gentner D., Nielsen J. "The Anti-Mac Interface". Статья в журнале Communications of the ACM Ассоциации вычислительной техники (Association for Computing Machinery). - август 1996. - С. 290.

29. Gettys J. The Two-Edged Sword, 1998. - C. 33.

Статья доступна в Web: .

30. Glickstein B. Writing GNU Emacs Extensions. O'Reilly & Associates, 1997. - C. 374.

31. Graham P. A Plan for Spam. - C. 246.

Статья доступна в Web: .

32. Harold E. R., Means W. S. XML in a Nutshell, (Второе издание). O'Reilly & Associates, 2002. - C. 142, 467.

33. Hatton L. "Re-examining the Defect-Density versus Component Size Distribution". IEEE Software. — март/апрель 1997. — С. 110.

Статья доступна в Web .

34. Hatton L. "Does OO Sync with the Way We Think?". IEEE Software, 15(3). - C. 357.

Статья доступна в Web .

35. Hauben R. History of UNIX. - C. 57.

Документ доступен в Web .

36. Heller S. С++: A Dialog: Programming with the С++ Standard Library. Prentice-Hall,

2003. - C. 358.

37. Hunt A., Thomas D. The Pragmatic Programmer: From Journeyman to Master. Addison-Wesley, 2000. - C. 18, 114.

38. Kernighan B. Experience with Tcl/Tk for Scientific and Engineering Visualization. Доклады конференции USENIX Association Tcl/Tk Workshop, 1995. — C. 366.

Документ доступен в Web .

39. Kernighan В., Pike R. The Unix Programming Environment. Prentice-Hall, 1984. — C. 19, 354, 360, 386.

40. Kernighan В., Pike R. The Practice of Programming. Addison-Wesley, 1999. — C. 18, 443. (Б. Керниган, P. Пайк. Практика программирования. ИД "Вильямс", 2004 г.)

Отличный трактат по написанию высококачественных программ, данная книга, несомненно, должна стать классикой в своей области.

41. Kernighan В., Plauger P.J. Software Tools. Addison-Wesley, 1976. - С. 37.

42. Kernighan В., Ritchie D. The С Programming Language, (Второе издание). Prentice-Hall Software Series, - C. 118, 355, 428, 430.

43. Lampson B. "Hints for Computer System Design". Обзор операционных систем (ACM Operating Systems Review) Ассоциации вычислительной техники (Association for Computing Machinery). — октябрь 1983 г. — C. 53.

Документ доступен в Web .

44. Lapin J. E. Portable С and Unix Systems Programming. Prentice-Hall, 1987. — C. 430.

45. Leonard A. BSD Unix: Power to the People, from the Code, 2000. - C. 58.

Документ доступен в Web .

46. Levy S. Hackers: Heroes of the Computer Revolution. Anchor/Doubleday, 1984. — C. 67.

Книга доступна в Web .

47. Lewine D. POSIX Programmer's Guide: Writing Portable Unix Programs. O'Reilly & Associates, 1992. - C. 434.

48. Libes D., Ressler S. Life with Unix. Prentice-Hall, 1989. - C. 58.

В данной книге более подробно описывается ранняя история Unix, особенно период 1979-1986 годов.

49. Lions J. Lions's Commentary on Unix, 6th Edition. Peer-To-Peer Communications, 1996. - C. 57.

PostScript-версии оригинальной книги Лайонза путешествуют по Web, данная ссылка может быть нестабильной .

50. Loukides М., Oram A. Programming with GNU Software. O'Reilly & Associates, 1996.-С.380, 387.

51. Lutz M. Programming Python. O'Reilly & Associates, 1996. - C. 368.

52. McIlroy M. D., Pinson E. N., Tague B. A. "Unix Time-Sharing System Forward". Статья в техническом журнале корпорации Bell System (The Bell System Technical Journal), Bell Laboratories, 1978. — C. 34.

53. McIlroy M. D. "Unix on My Mind". В материалах конференции Virginia Computer Users Conference. — C. 55.

54. Miller G. "The Magical Number Seven, Plus or Minus Two". The Psychological Review. — C. 112.

Статья доступна в Web .

55. Mumon. The Gateless Gate. — C. 179.

Книга доступна в Web .

56. Ockman S., DiBona C. Open Sources: Voices from the Open Source Revolution. O'Reilly & Associates, 1999. - C. 85.

Книга доступна в Web .

57. Oram A., Talbot S. Managing Projects with Make. O'Reilly & Associates, 1991. - C. 387.

58. Ousterhout J. Tcl and the Tk Toolkit. Addison-Wesley, 1994.

59. Ousterhout J. Why Threads Are a Bad Idea (for most purposes), 1996.

Доклад на конференции USENIX 1996. Соответствующего напечатанного документа нет, но презентация доступна в Web .

60. Padlipsky M. The Elements of Networking Style. iUniverse.com, 2000. - C. 128, 496.

61. David P. L. "On the Criteria to Be Used in Decomposing Systems into Modules". Communications of the ACM. — C. 109.

Статья доступна в Web в разделе классики на странице ACM

62. Pike R. Notes on Programming in С. — C. 34.

Документ доступен на странице .

63. Prechelt L. An Empirical Comparison of C, С++, Java, Perl, Python, Rexx, and Tcl for a Search/String-Processing Program. — C. 353. .

64. Raskin J. The Humane Interface. Addison-Wesley, 2000. — C. 282.

Краткий конспект приведен на странице .

65. The Memory Management Reference. — C. 46.

Доступно в Web .

66. The New Hacker's Dictionary, (Третье издание). MIT Press, 1996. — C. 69, 332.

Книга доступна в Web на странице файла жаргона .

67. Raymond Е. S. The Cathedral and the Bazaar, (Второе издание). O'Reilly & Associates, 1999. — C. 72, 471, 508.

68. Reps P., Senzaki N. Zen Flesh, Zen Bones. Shambhala Publications, 1994. — C. 18. Превосходная антология основных Дзэн-источников как они есть.

69. Ritchie D. М. The Evolution of the Unix Time-Sharing System, 1979. — C. 53.

Книга доступна в Web .

70. Ritchie D. M. The Development of the С Language, 1993. - C. 429.

Статья доступна в Web .

71. Ritchie D. M. An Incomplete History of the QED Text Editor, 2003. - C. 335.

Статья доступна в Web .

72. Ritchie D. M., Thompson K. The Unix Time-Sharing System. — C. 56.

Книга доступна в Web .

73. Saltzer J. H., Reed D. P., Clark D. D. "End-to-End Arguments in System Design". Статья ACM Transactions on Computer Systems Ассоциации вычислительной техники (Association for Computing Machinery). — ноябрь 1984 г. — С. 149.

Статья доступна в Web .

74. Salus P. H. A Quarter-Century of Unix. Addison-Wesley, 1994. - C. 34.

Превосходный обзор истории Unix, объясняющий многие из конструкторских решений словами их создателей.

75. Schaffer Е., Wolf М. The Unix Shell as a Fourth-Generation Language, 1991. — С. 190.

Документ доступен в Web . Реализация с открытым исходным кодом, NoSQL, доступна и легко находится с помощью поисковых машин.

76. Schwartz R., Phoenix Т. Learning Perl, (Третье издание). O'Reilly & Associates, 2001. - С. 363.

77. Spinellis D. "Notable Design Patterns for Domain-Specific Languages". Journal of Systems and Software. — февраль 2001 г. — С. 236.

Статья доступна в Web .

78. Stallman R. M. The GNU Manifesto. - C. 62.

Документ доступен в Web .

79. Stephenson N. In the Beginning Was the Command Line. 1999. — C. 290.

Документ доступен в Web .

80. Stevens W. R. Unix Network Programming. Prentice-Hall, 1990. - C. 205.

Классическая книга по данной тематике. В некоторых поздних изданиях опущено рассмотрение сетевых средств Unix версии 6, таких как

 mx()
.

81. Stevens W. R. Advanced Programming in the Unix Environment. Addison-Wesley, 1992. - C. 18.

Исчерпывающее руководство по Unix API. Полезная книга для опытного программиста или талантливого новичка, стоящее дополнение к Unix Network Programming

82. Stroustrup В. The С++ Programming Language. Addison-Wesley, 1991. - C. 358.

83. Tanenbaum A. S., Van Renesse R. A Critique of the Remote Procedure Call Paradigm. Доклады конференции EUTECO'88, 1988. - С. 207.

84. Tidwell D. XSLT:MasteringXML Transformations. O'Reilly & Associates, 2001. - C. 223.

85. Torvalds L., Diamond D .Just for Fun: The Story of an Accidental Revolutionary. HarperBusiness, 2001. - C. 428, 436.

86. Vaughan G. V., Tromey Т., Taylor I. L. GNU Autoconf, Automake, and Libtool. New Riders Publishing, 2000. - C. 395.

Пользовательское руководство по инструментам автоконфигурирования GNU. Доступно в Web .

87. Vo K.-P. "The Discipline and Method Architecture for Reusable Libraries". Software Practice & Experience, 2000. — C. 124.

Статья доступна в Web .

88. Wall L., Christiansen Т., Orwant J. Programming Perl, (Третье издание). O'Reilly & Associates, 2000. - C. 363.

89. Welch B. Practical Programming in Tсl and Tk. Prentice-Hall, 1999. - C. 366.

90. Williams S. Free as in Freedom. O'Reilly & Associates, 2002. - C. 70.

Книга доступна в Web .

91. Yourdon E. Death March. The Complete Software Developer's Guide to Surviving "Mission Impossible" Projects. Prentice-Hall, 1997. - C. 408.

В Персональный вклад

Любой из посетивших конференцию USENIX в модном отеле может сказать, что фраза вроде: "Вы один из тех компьютерных людей, не так ли?" подобна фразе: "Смотри, вот еще одна поразительно подвижная форма омерзительного пудинга!", прозвучавшей из уст гостиничной официантки, разносящей коктейли.

—Элизабет Звикки (Elizabeth Zwicky)

Кен Арнольд (Ken Arnold) был членом группы, которая создавала версии 4BSD Unix. Он написал первичную библиотеку curses(3) и был одним из авторов оригинальной игры rogue(6). Кен Арнольд является также соавтором Java Reference Manual (Справочник по языку Java) и одним из ведущих экспертов по Java и ОО-технологиям.

Стивен М. Белловин (Steven М. Bellovin), работая в 1979 г. в Университете Северной Каролины, вместе с Томом Траскоттом (Tom Truscott) и Джимом Эллисом (Jim Ellis) создал Usenet. В 1982 году он вошел в состав AT&T Bell Laboratories, где одним из первых начал заниматься исследованием вопросов безопасности, криптографии и сетей на основе Unix-систем, а также участвовал в других проектах. Он является активным членом IETF (Internet Engineering Task Force — Инженерная группа по решению конкретной задачи в Internet), а также Национальной инженерной академии (National Academy of Engineering).

Стюарт Фельдман (Stuart Feldman) был одним из членов группы разработчиков Unix в Bell Labs. Он написал утилиты make(1) и f77(1). В данный момент он является вице-президентом IBM, отвечающим за компьютерные исследования.

Джим Геттис (Jim Gettys) вместе с Бобом Шейфлером (Bob Scheifler) и Китом Паккардом (Keith Packard) был одним из разработчиков системы X Window в конце 1980-х годов. Он написал X-библиотеки, X-лицензию, а также провозгласил основное кредо в конструкции X: "механизм, а не политика".

Стив Джонсон (Steve Johnson) написал утилиту уасс(1), а затем использовал ее для написания портативного компилятора С, который заменил оригинальный DMR С и стал предшественником большинства более поздних C-компиляторов в Unix.

Брайан Керниган (Brian Kernighan) является единственным видным выразителем хорошего стиля в сообществе Unix. Он стал автором и соавтором нескольких книг, ставших классикой, включая "The Practice of Programming", "The C Programming Language", "The Unix Programming Environment". Работая в Bell Labs, он стал соавтором языка awk(1) и ведущим разработчиком семейства инструментов troff, включая eqn(1) (совместно с Лориндой Черри (Lorinda Cherry)), pic(1), и grap(1) (с Джоном Бентли (Jon Bentley)).

Дэвид Корн (David Korn) написал командный интерпретатор Korn, стилистический предшественник почти всех современных оболочек в Unix. Он создал UWIN, эмулятор Unix для тех, кто вынужден использовать Windows. Дэвид также провел исследования по разработке файловых систем и средств для обеспечения переносимости исходного кода.

Майк Леск (Mike Lesk) входил в состав первоначальной команды разработчиков Unix в Bell Labs. Среди прочего его вкладом является пакет макросов ms, инструменты для обработки текстов tb(1) и refer(1), генератор лексических анализаторов lex(1) и программа UUCP (программа копирования из Unix в Unix).

Дуг Макилрой (Doug McIlroy) возглавлял исследовательскую группу Bell Labs, где возникла Unix, и создал Unix-канал (pipe). Он написал такие утилиты, как spell(1), diff(1), sort(1), join(1), tr(1), и другие классические инструменты Unix, а также способствовал определению стиля документации Unix. Он также проводил исследования по алгоритмам распределения памяти и компьютерной безопасности.

Маршал Кирк Маккьюзик (Marshall Kirk McKusick) реализовал быструю файловую систему 4.2BSD и был специалистом по компьютерным исследованиям в группе CSRG (Computer Systems Research Group — Исследовательская группа по компьютерным системам) в Беркли, следя за разработкой и выпуском версий 4.3BSD и 4.4BSD.

Кит Паккард (Keith Packard) внес главный вклад в создание первоначального кода X11. Во время начавшейся в 1999 году второй фазы разработки, Кит переписал код визуализации в X, создав более мощную и значительно более компактную реализацию, подходящую для портативных компьютеров и PDA.

Эрик С. Реймонд (Eric S. Raymond) с 1982 года создает программное обеспечение для Unix. В 1991 году он исправил "The New Hacker's Dictionary" (Новый словарь хакера), и с тех пор изучает Unix-сообщество и культуру Internet-хакеров, с исторической и антропологической точки зрения. В 1997 году как результат этих исследований появилась книга "The Cathedral and the Bazaar", которая помогла (пере)определить и оптимизировать движение открытого исходного кода. Он лично курирует более 30 программных проектов и около 10 ключевых FAQ-документов.

Генри Спенсер (Henry Spencer) был лидером первой волны программистов, принявших Unix (средина 1970-х годов). Его вклад: свободно-распространяемая библиотека getops(3), первая библиотека с открытым исходным кодом для обработки строк, модуль с открытым исходным кодом для обработки регулярных выражений, который нашел свое применение в 4.4BSD и как исходная точка стандарта POSIX. Кроме того, Спенсер — известный эксперт в области языка С, он является соавтором журнала С News. В течение многих лет он считается лидером в Usenet и одним из наиболее уважаемых представителей сообщества.

Кен Томпсон (Ken Thompson) — создатель Unix.

Г Корни без корней: Unix-коаны Мастера Фу

Предисловие редактора

Открытие коллекции коанов, известных как "Корни без корней" (Rootless Root), вызвало ожесточенные споры в ученых кругах. Проливают ли эти аутентичные документы новый свет на методы преподавания патриархов Unix? Или это просто искусная стилизация, подразумевающая среди прочего и авторитет таких полумифических фигур, как патриархи Томпсон, Ритчи и Макилрой, для доктрин, которые эволюционировали ближе к нашему времени?

Ответить определенно на этот вопрос невозможно. Все участники дискуссии якобы имеют отношение к этой освященной веками классике ('The Tao of Programming")[160]. Но "Корни без корней" резко отличаются по тону и стилю от свободных поэтических анекдотов в переводе Джеймса (James), сконцентрированных на загадочной и замечательной личности Мастера Фу.

Было бы более уместно искать параллели в "AI-коанах"[161] (AI Koans); действительно, есть определенные признаки того, что автор трактата "Корни без корней", возможно, редактировал некоторые версии "AI Koans". Также будет небезосновательным поиск связей с "Loginataka"[162]; действительно, вполне возможно, что неизвестные авторы "AI Koans" и "Loginataka" на самом деле являются одним и тем же лицом, возможно, учеником самого Мастера Фу.

Следует также упомянуть и о "Сказках Дзэн-мастера Грега" (Tales of Zen Master Greg)[163], хотя существуют определенные сомнения в их древности, и поэтому маловероятно, что они повлияли на "Корни без корней".

Можно с достаточной уверенностью сказать, что название этой работы является ссылкой на Дзэн-классику "Врата без врат" (Gateless Gate)[164] Мумона (Mumon). Эти отголоски чувствуются в нескольких коанах.

Возник серьезный спор о том, к какой из школ, выросших из раннего эпохального путешествия патриарха Томпсона в Беркли, следует причислить Мастера Фу — к Восточной (Нью-Джерси) или к Западной. Если этот вопрос до сих пор не разрешен, то, вероятно, именно потому, что мы не можем даже точно установить — а существовал ли вообще Мастер Фу? Под этим именем может скрываться просто группа учителей или все последователи Дхармы.

Даже если предположить, что легенда о Мастере Фу сформировалась вокруг учения какой-то одной личности, как быть с его любимым учеником Ньюби (Nubi)? У Ньюби есть все признаки типичного образцового ученика. Вспоминаются легенды о любимом последователе Будды Ананде (Ananda). Представляется вероятным, что существовал исторический Ананда, однако никакие следы его реальной личности не пережили эфемерный процесс, который отполировал личность Будды и превратил его в вечный миф.

В конечном итоге все, что мы можем, — это принять эти поучительные истории и извлечь те зерна мудрости, которые в них содержатся.

Мастер Фу и десять тысяч строк

Однажды Мастер Фу сказал заезжему программисту: "В одной строке кода shell-сценария больше духа Unix, чем в десяти тысячах строк на языке С!"

Программист, гордый своими познаниями в С, ответил: "Может ли быть такое? Ведь С — язык, в котором реализовано само ядро Unix!"

На это Мастер Фу ответил: "Это так. Тем не менее, в одной строке shell-сценария больше духа Unix, чем в десяти тысячах строк С!"

Программист выглядел удрученным. "Но ведь через язык С мы познаем просвещенность патриарха Ритчи! Мы уподобляемся человеку с операционной системой и компьютером, который получает непревзойденную производительность!"

Мастер Фу сказал: "То, что ты говоришь, правда. Однако в одной строке shell-сценария больше духа Unix, чем в десяти тысячах строк С".

Программист усмехнулся и поднялся, чтобы удалиться. Но Мастер Фу кивнул своему ученику Ньюби, который писал строку shell-кода на стоящей рядом белой доске, и сказал: "Господин программист, посмотрите на этот конвейер! Не заняла бы его реализация на С десять тысяч строк?"

Просматривая то, что писал Ньюби, программист что-то бормотал в бороду. В конце концов, он согласился, что это так.

"И сколько часов потребовалось бы вам для реализации и отладки этой программы на языке С?"

"Много", — признал заезжий программист. "Но только безумец стал бы тратить столько времени, когда его ждет множество более достойных задач".

"Так кто лучше понимает дух Unix?" — спросил Мастер Фу. "Тот, кто пишет десять тысяч строк, или тот, кто, сознавая тщетность этих усилий, извлекает пользу, не программируя?"

Услышав это, программист достиг просветления.

Мастер Фу и Скрипт Кидди

Незнакомец из страны Вут пришел к Мастеру Фу во время его утренней трапезы.

"Я не раз слышал о вашем величии, — сказал он. — Пожалуйста, научите меня всему, что знаете".

Ученики Мастера Фу переглянулись, смущенные варварским языком пришельца. Мастер Фу только улыбнулся и ответил: "Вы хотите изучить путь Unix?"

"Я хочу быть волшебником-хакером,— ответил незнакомец, — и владеть всеми компьютерами".

"Я не учу этому", — ответил Мастер Фу.

Волнение незнакомца росло. "Отец, вы — позер и ничего больше, — сказал он. — Если бы Вы знали хоть что-нибудь, то научили бы меня".

"Есть путь, который может привести тебя к мудрости", — сказал Мастер Фу. Мастер нацарапал какой-то IP-адрес на клочке бумаги. "Взлом этого сервера не составит для тебя большого труда, поскольку его хранители не компетентны. Возвращайся и расскажи мне, что ты ищешь".

Незнакомец поклонился и вышел. Мастер Фу закончил трапезу.

Прошли дни, а затем месяцы. О незнакомце забыли.

Спустя годы незнакомец из страны Вут вернулся.

"Будь ты проклят!" — воскликнул он. — Я взломал этот сервер, это было не трудно, как ты и сказал. Но ФБР схватило меня и бросило в тюрьму".

"Хорошо", — сказал Мастер Фу. — Ты готов к следующему уроку". Он написал IP-адрес на бумаге и передал его незнакомцу.

"Вы с ума сошли?", — пронзительно вскрикнул тот. — После всего, что я прошел, я не собираюсь снова взламывать компьютеры!"

Мастер Фу улыбнулся. "Здесь, — сказал он,— начинается мудрость".

Услышав это, странник достиг просветления.

Мастер Фу рассуждает о двух дорогах

Мастер Фу учил своих студентов:

"В учении дхармы есть направление, выражаемое мантрой патриарха Макилроя — "Делай хорошо одну вещь", которая подчеркивает, что программное обеспечение движется по пути Unix, если оно ведет себя просто и последовательно, и обладает свойствами, которые могут быть легко смоделированы в мозгу пользователя и использованы другими программами".

"Но есть и другое направление в учении дхармы, примером которого может служить великая мантра патриарха Томпсона — "Находясь в сомнении, используй грубую силу", и различные сутры о большей ценности 90% функций прямо сейчас, чем 100% позже, что подчеркивает надежность и простоту реализации".

"Теперь скажите мне: каким программам присущ дух Unix?"

Помолчав, Ньюби заметил: "Учитель, эти два учения могут противоречить друг другу".

"Простой реализации может не хватить логики в граничных ситуациях, таких как нехватка ресурсов или неудачная попытка закрыть окно или таймаут во время незаконченной транзакции".

"Когда возникают подобные граничные ситуации, поведение программного обеспечения становится непредсказуемым и сложным. Конечно, это не есть путь Unix".

Мастер Фу кивнул в знак согласия.

"С другой стороны, хорошо известно, что причудливые алгоритмы хрупки. Кроме того, каждая попытка охватить граничные случаи имеет тенденцию взаимодействовать с центральными алгоритмами других программ и с кодами, описывающими другие граничные ситуации".

"Таким образом, попытка изначально охватить все граничные случаи, гарантируя "простоту описания", может на деле привести к созданию кода, который излишне усложнен или слишком неустойчив, или который в случае, если он переполнен ошибками, не будет завершен никогда. Конечно, это не есть путь Unix".

Мастер Фу кивнул в знак согласия.

"Каков же, в таком случае, путь дхармы?" — спросил Ньюби.

И учитель ответил: "Когда орел летит, забывает ли он о том, что его лапы касались земли? Когда тигр после прыжка настигает свою жертву, забывает ли он о моменте, проведенном в воздухе? Три фунта VAX!"

Услышав это, Ньюби достиг просветления.

Мастер Фу и консультант по методологии

Когда Мастер Фу и его ученик Ньюби посещали святые места, по вечерам Мастер Фу имел обыкновение выступать перед неофитами Unix тех городов и сел, где они останавливались на ночлег.

Однажды среди тех, кто собрался его послушать, оказался консультант по методологии.

"Если при доводке вы не профилируете регулярно ваш код в поисках узких мест, то вы уподобляетесь рыбаку, который закидывает сеть в озеро, в котором нет рыбы", — сказал Мастер Фу.

"Не верно ли тогда и то, — сказал консультант по методологии, — что если вы не замеряете постоянно вашу производительность при управлении ресурсами, то вы уподобляетесь рыбаку, который закидывает сеть в озеро, в котором нет рыбы".

"Однажды я встретил рыбака, который только что уронил сеть в озеро, по которому плыла его лодка, — сказал Мастер Фу. — Он долго шарил по дну лодки, пытаясь найти ее".

"Но если он уронил свою сеть в озеро, — сказал консультант по методологии, — то почему он искал ее в лодке?"

"Потому, что он не умел плавать",— ответил Мастер Фу.

Услышав это, консультант достиг просветления.

Мастер Фу рассуждает о графическом пользовательском интерфейсе

Однажды вечером Мастер Фу и Ньюби посетили собрание программистов, которые встретились, чтобы поучиться друг у друга. Один из программистов спросил у Ньюби, к какой школе принадлежит он и его учитель. Когда Ньюби сказал ему, что он и его учитель — последователи Великого Пути Unix, программист презрительно усмехнулся.

"Средства командной строки Unix грубые и отсталые, — насмешливо сказал он. — Современные, правильно спроектированные операционные системы делают все через графический интерфейс пользователя".

Мастер Фу не проронил ни слова, но указал на Луну. Находившийся поблизости пес залаял на руку учителя.

"Я не понимаю вас",— сказал программист.

Мастер Фу молчал и показал на образ Будды. Потом он указал на окно.

"Что вы хотите мне этим сказать?" — спросил программист.

Мастер Фу указал на голову программиста. Потом он указал на камень.

"Почему вы не можете сказать яснее?" — потребовал программист.

Мастер Фу задумчиво нахмурился, дважды щелкнул программиста по носу и бросил его в находившийся рядом мусорный контейнер.

Пока программист пытался выбраться из горы мусора, пес ходил рядом и лаял на него.

В этот момент программист достиг просветления.

Мастер Фу и фанатик Unix

Один фанатик Unix, услышав, что Мастер Фу обладает мудростью Великого Пути, пришел к нему поучиться. Мастер Фу сказал ему:

Когда патриарх Томпсон изобрел Unix, он не понял этого. Потом к нему пришло понимание, но он уже не мог ничего изобрести.

Когда патриарх Макилрой изобрел канал, он знал, что это преобразит программное обеспечение, но он не знал, что это изменит его мышление.

Когда патриарх Ритчи изобрел язык С, он обрек программистов на адские муки переполнения буфера, повреждения данных и ошибки из-за недействительного указателя.

Действительно, патриархи были слепы и глупы!.

Фанатик был очень рассержен словами Мастера Фу.

"Просвещенные, — запротестовал он, — открыли нам Великий путь Unix. И если мы будем насмехаться над ними, мы потеряем добродетель и возродимся как звери или MCSE".

"Бывает ли когда-либо твой код полностью без погрешностей и ошибок?" — спросил Мастер Фу?

"Нет, — ответил фанатик, — такое недоступно человеку".

"Мудрость патриархов, — сказал Мастер Фу, — в том, что они знали, что они безумцы".

Услышав это, фанатик достиг просветления.

Мастер Фу рассуждает о природе Unix

Один ученик сказал Мастеру Фу: "Нам говорят, что фирма SCO удерживает реальную власть над Unix".

Мастер Фу кивнул в знак согласия.

Ученик продолжал: "Однако нам также говорят, что другая фирма, OpenGroup, также удерживает реальную власть над Unix".

Мастер Фу кивнул в знак согласия.

"Как такое возможно?" — спросил ученик.

Мастер Фу ответил: "SCO действительно владеет кодом Unix, но код Unix — это не сама Unix. OpenGroup действительно владеет маркой Unix, но название Unix — это не сама Unix".

"В чем же тогда сущность Unix?" — спросил студент.

Мастер Фу ответил: "Не в коде. Не в имени. Не в мышлении. Вообще ничего материального. Вечное изменение без перемен".

"Сущность Unix проста и пуста. Поскольку она проста и пуста, она сильнее тайфуна".

"Повинуясь естественным законам, она непреклонно расцветает в умах программистов, ассимилируя конструкции в свою собственную природу. Всякое программное обеспечение, которое хотело бы конкурировать с Unix, должно стать таким, как Unix: пустым, пустым, глубоко пустым, абсолютно лишенным содержания потоком!"

Услышав это, ученик достиг просветления.

Мастер Фу и конечный пользователь

В другой раз, когда Мастер Фу давал публичную лекцию, один пользователь, наслушавшись рассказов о мудрости Учителя, подошел к нему за советом.

Он трижды поклонился Мастеру Фу. "Я хочу постичь тайны Великого Пути, но командная строка вводит меня в замешательство".

Некоторые из наблюдавших это неофитов начали насмехаться над пользователем, называя его невежественным и говоря, что Великий путь Unix предназначен только для тех, в ком есть порядок и интеллект.

Учитель поднял руку, призывая к тишине, и позвал самого шумного из неофитов, который засмеялся первым, подойти к месту, где они сидели с пользователем.

"Расскажи мне" — спросил он у неофита, — о коде, который ты написал, и о работе по проектированию, которую ты проделал".

Неофит начал, заикаясь, отвечать, но не мог ничего сказать.

Мастер Фу повернулся к пользователю. "Скажи мне, — осведомился он, — зачем ты ищешь Великий Путь?"

"Мне не нравится программное обеспечение, которое окружает меня, — отвечал пользователь. — Оно работает ненадежно и не радует глаз и сердце. Услышав о том, что путь Unix, хотя и труден, но превосходен, я пытаюсь отбросить все препоны и обман".

"И чем же ты занимаешься, если так борешься с нынешним программным обеспечением?" — спросил Мастер Фу.

"Я — строитель, — ответил пользователь. — Многие дома в этом городе построены моими руками".

Мастер Фу повернулся к неофиту. "Кошка может насмехаться над тигром, — сказал он, — но это не превратит мяуканье в рев".

Услышав это, неофит достиг просветления.

Дополнительная информация

В процессе составления оригинала данной книги какое-либо частное программное обеспечение не использовалось. Черновики были набраны из главных файлов XML-DocBook, созданных с помощью редактора GNU Emacs. Формирование PostScript-представления осуществлялась с помощью программы Тима Bora (Tim Waugh)

xmlto
, таблиц стилей XSL Нормана Уолша (Norman Walsh), программы xlsproc Даниеля Вейлларда (Daniel Veillard), PassiveTeX-макросов Себастьана Ратца (Sebastian Rahtz), ТеТеХ-дистрибутива наборной машины TEX Дональда Кнутта (Donald Knuth) и постпроцессора Томаса Рокики (Thomas Rokicki) dvips. Все диаграммы компоновались автором с помощью утилиты
pic2graph
, управляющей gpic, и
grap2graph
, управляющей grap-реализацией Теда Фабера (Ted Faber) (утилита
grap2graph
была написана автором для данного проекта и в настоящее время является частью дистрибутива groff). Вся инструментальная связка работала на стандартной системе Red Hat Linux.

Дизайн обложки — композиция двух изображений из оригинальных Дзэн-комиксов (Zen Comics) Иоанны Саладжан (Ioanna Salajan). Он был адаптирован и раскрашен в основном Джерри Вотта (Jerry Votta) при участии автора.

Загрузка...