Проектирование программ в среде Unix: аннотация науч

proektirovanie programm v srede unix annotacziya nauch

Сегодня давайте посмотрим на Разработку программ в среде Unix, опубликованную в 1983 году Пайком и Керниганом.

Документ начинается перечнем того, почему Unix был успешным, а затем комментариями о философии Unix и ее преимуществах. Это делается путем просмотра примеров, когда программы отличаются от философии Unix и обсуждения полученных компромиссов.

Причины успеха Unix:

  1. Портативность: ядро ​​и программы были написаны на C, поэтому их можно было перемещать из системы в систему, не переписывая на языке ассемблера, характерном для этой системы.
  2. Одна и та же ОС работала на разном аппаратном обеспечении, поэтому пользователи уже были знакомы, и им не нужно было учиться заново, когда было выпущено новое оборудование.
  3. Поставщики могли поставлять то же программное обеспечение с каждой машиной, несмотря на изменения в аппаратном обеспечении.
  4. Система была не слишком велика, и ее было легко модифицировать, поскольку все было написано на языке C.
  5. Это обеспечило новенькую философию, основанную на использовании инструментов общего предназначения. Они хорошо справлялись с одним делом, и их можно было объединить для выполнения конкретной задачи вместо создания гигантских монолитных инструментов, служивших только одной цели.

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

Затем бумага погружается в cat (Утилита командной строки Unix для объединения и печати файлов). Он копирует вход в выходной. Ввод обычно является последовательностью из одного или нескольких файлов или стандартным вводом. Выводом является файл или стандартный выход.

Основное предназначение cat должен был действовать как утилита для объединения файлов. Можно комбинировать с трубой (|) для дальнейшего совершенствования и расширения его полезности посредством перенаправления вывода.

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

Преимущества подхода Unix:

  1. Оболочка и приложения, которые она может вызвать, обеспечивают равномерный доступ к системным средствам. К примеру: аргументы имени файла расширяются оболочкой подобным образом для каждой команды. Через конвейеры нам не нужна каждая команда для предварительной и постобработки входных данных.
  2. Рост происходит легко, когда функции хорошо распределены.

Пример: добавлен оператор `(backtic), чтобы превратить исходные данные одной программы в входные данные другой, не требуя изменений в любой другой программе, как это интерпретирует оболочка. Все программы, вызываемые оболочкой, получают эту функцию автоматически. Если бы каждая программа, требовавшая эту функцию, интерпретировала ее, было бы очень трудно обеспечить однообразие и проводить дальнейшие эксперименты, поскольку каждая новая идея влияла бы на все программы, которые хотели ее использовать.

Однако в будущих версиях catбыло введено много новых опций (таких, как печать номеров строк и непечатных символов).

Авторы утверждают, что вместо добавления этих опций к cat само по себе, следовало использовать либо существующие программы, либо создать новые программы. К примеру, функция номера строки могла быть обеспечена с помощью pr. Однако не было никакой программы, позволяющей печатать непечатанные символы, что гарантировало бы создание новых.

Такая модификация путает что catРабота пользователя заключается в объединении файлов с
что это делается в обычном специальном случае, показывая файл на терминале. Программа UNIX должна хорошо выполнять одно дело, а несвязанные задачи оставлять другим программам. catЗадача — сбор данных в файлы. Программы, собирающие данные, не должны изменять данные; cat поэтому не следует преобразовывать его входящие данные.

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

Отдельные программы не всегда лучше, чем более широкие варианты; что лучшее, зависит от проблемы. Каждый раз, когда кому-то нужен способ выполнения новой функции, он сталкивается с выбором: добавить новую опцию или написать новую программу (предполагая, что ни один из программируемых инструментов не выполнит эту работу удобно). The
Руководящим принципом выбора должно быть то, что каждая программа выполняет одну функцию. Параметры должным образом добавляются в программу, которая уже имеет необходимую функциональность. Если такой программы нет, требуется новая программа. В этом случае следует использовать обычные критерии для разработки программы: программа должна быть как можно более общей, ее по умолчанию должно соответствовать наиболее распространенному использованию, и она должна сотрудничать с другими программами.

Давайте рассмотрим другой вопрос: иметь дело со скоростными конечными линиями. Как мы имеем дело с выходом из cat прокрутка за верхнюю часть экрана?

Есть два подхода:

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

Рассмотрим примеры обоих подходов: lsc и ls выводящий список файлов в каталоге.

lsc изменяет свой выход в зависимости от входа. Он отображает список в виде столбцов по всему экрану, чтобы o/p соответствовал, если он выводится на терминал. ls отображает все в одной колонке.

Сохраняя вывод одного столбца в файлах или каналах, lsc обеспечивает совместимость с такими программами, как grep или wc которые ожидают, что вещи будут напечатаны по одному на строчку. Эта специальная настройка формата вывода в зависимости от места назначения не только неприятна, она уникальна, ни одна стандартная команда UNIX не имеет такого свойства.

Авторы утверждают, что функция колонок является полезной в целом и не должна быть закрыта просто lsc , что делает его недоступным другим программам. Они выступают за другую программу, основной работой которой является создание колонок.

Подобные соображения предлагают решения для общей проблемы истечения данных с экранов (со столбцами или нет): отдельная программа, принимающая любой вход и печатающая его по экрану за раз. Такие программы уже широко доступны под названиями pg и т.д. Это решение не влияет на другие приложения, но его можно использовать со всеми ими. Как обычно, когда основная функция верна, программу можно расширить с помощью опций…

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

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

Ключ к решению проблемы в системе UNIX состоит в том, чтобы определить правильные примитивные операции и разместить их в нужном месте. Программы UNIX, как правило, решают общие проблемы, а не частные случаи. В очень свободном смысле программы ортогональны, охватывая пространство работ, которые нужно выполнить (хотя со справедливым
количество перекрытий по причине истории, удобства или эффективности). Функции размещаются там, где они принесут наибольшую пользу: в каждой программе, которая выдает исходные данные, не должно быть пейджера, равно как и соответствия шаблона имен файлов в каждой программе, использующей имена файлов.

Единственное, в чем UNIX не нуждается, это дополнительные функции. Он успешен отчасти потому, что имеет небольшое количество хороших идей, хорошо работающих вместе. Простое добавление функций не облегчает пользователям выполнение задач, а лишь делает инструкцию более толстой. Правильное решение в правильном месте всегда эффективнее
чем случайный злом.

Добавить комментарий

Ваш адрес email не будет опубликован.