Значение Эпиграммы Перлиса № 22 - PullRequest
1 голос
/ 26 февраля 2010

С Эпиграммы в программировании Алан Дж. Перлис:

22. Хорошая система не может иметь слабый командный язык.

Что это значит? Каковы хорошие примеры этого принципа?

Где я могу узнать больше о том, как реализовать командный язык, соответствующий этому критерию?

1 Ответ

6 голосов
/ 26 февраля 2010

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

  • Компьютерные системы были более узко специализированы для конкретной задачи.
  • В системах были специальные операторы (которые не были программистами), прошедшие обучение на конкретных системах.
  • Знание одной системы нелегко перенести в другую систему. (Сегодня вы обучаете операторов конкретным программам , но редко - конкретным комбинациям аппаратного обеспечения и ОС. Другими словами, системы стали более похожими и приняли стандарты и соглашения.)

«Командный язык» сегодня означает только сценарии оболочки. Помните, что в командной строке вы вводите «команды».

Эти основы не по пути, это говорит мне о Пути Unix & trade;.

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

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

Я не знаю ни одного ресурса, который бы описывал все эти идеи и который вы могли бы использовать в качестве дорожной карты для реализации своего собственного командного языка. Понятие более эфирное, чем написанное в камне, как и другие эпиграммы в целом. Я рекомендую вам прочитать о Unix в целом, оболочках (например, стандарте POSIX для sh и других, таких как bash), других языках сценариев оболочки (что угодно со строкой shebang, таких как Perl и Python) и т. Д.

...