Чому Дональд Кнут пише TAOCP, використовуючи мову монтажу?


20

Я не ненавиджу використання асемблерської мови, оскільки я написав їх у своєму курсі os. Але очевидно, що в мові складання не вистачає абстракції, ви повинні приділяти більше уваги деталям.

Чи справді важлива мова складання для написання TAOCP?


6
Подробиці там, де диявол.
Blrfl

5
@Blrfl Я не вірю в диявола. (Я вірю в деталі, хоча ... тремтіння )
Джиммі Хоффа

3
Перший том TAOCP був опублікований у 1968 році. Хоча, безумовно, існували мови вищого рівня, рукописний асемблер був набагато важливішим, і тоді обчислювальні ресурси на мейнфреймах могли бути такого ж порядку, як і деякі 8-бітні мікросхеми 1980-х років. Кнут також колись досить серйозно стверджував, що він зберігає goto, оскільки деякі алгоритми неможливо було написати, використовуючи вкладені структури потоків управління без деякої неефективності. Він насправді не виступав за передчасну оптимізацію навіть тоді, коли IIRC, він просто хотів, щоб був доступний варіант, коли необхідна оптимізація.
Steve314

3
@JimmyHoffa: О, ну, у вашому випадку, деталі - де де Віль .
Blrfl

1
Джеррі Коффіну вдалося зробити те, що я хотів зробити, він роздивився це в джерелі ;-). Я заглянув у розділи, де вводяться MIX та MIXAL, де я не знайшов таких тверджень ... можливо, я маю отримати електронну копію одного дня. У будь-якому випадку, я думаю, тег відповідей був би більш відповідним для відповіді Джеррі в цьому випадку.
Томас

Відповіді:


22

Він не тільки використовує MIXAL, свою мову складання для MIX, але і MIX, модель для простого комп'ютера (як той, який використовувався в шістдесяті роки). Це модель навчання, за якою він певною мірою не залежить від розвитку в даній галузі.

Якби він використовував іншу мову програмування (яка, до речі, ви думаєте, підходила б?), Скажімо, NPL (чудова мова програмування), йому довелося б або відмовитися від ідеї використання MIX, або запровадити компілятор якоїсь комп'ютерної мови за вибором (що набагато складніше, ніж те, з чим він має справу в т. 1). Таким чином він став би не TAOCP, а TAONPLP. Перший не залежить від такого вибору, і, з цієї причини, тимчасовим, таким чином, мало книжок про програмування коли-небудь буде. Друге, мабуть, уже забудене ...

Крім того, поки комп'ютери працюють в принципі так, як це робить його MIX, це добре врахувати, якщо ви дійсно зацікавлені в тому, як навчитися працювати з ними.


Зауважте, що "Методи компілятора" офіційно є темою прогнозованого тома 7. Це може все-таки трапитися, але, думаю, всі раді, що Кнут не дочекався, поки у нього з'явиться компілятор, щоб почати публікувати публікації.
Кіліан Фот

@KilianFoth так, я знаю. Але я б очікував, що в такій книзі будуть використані штучні мови програмування. Можливо, націлений на MMIX (другий M не є комп'ютером на основі друку :-). І ETA від vol. 5 - 2020 ....
Томас

56

Ви, молоді юначі, інколи мене дивуєте. Ви занадто часто не маєте поняття, що щось сталося перед початком школи. (У мене така ж проблема. Мені потрібно було довго зрозуміти, що 15 років - це насправді дуже короткий час, з точки зору дорослої людини. Це приблизно діапазон від Хіросіми до Кубинської ракетної кризи. Для мене Друга світова війна - це просто історія, але мій батько в ній воював, і моя мати під час неї була молодшою.)

TAOCP, вип. 1, «Основні алгоритми», 1-е видання, вперше надруковано в 1968 році. Це 45 років тому. Кнут почав планувати серію задовго до цього.

Для довідки: Intel 8086 вперше з'явився в 1978 році, через десять років. Мова PASCAL вперше з'явилася в 1971 році; книга Jensen & Wirth, що стосується другої версії мови, вийшла у 1974 р. Первісна розробка C була 1969-1973 рр .: K&R була опублікована у 1978 році.

Кнут задумав серію висвітлити поле. Він встановив стиль, ТОГО, щоб бути корисним практикуючим ЦЕ. Він ніколи не сподівався, що цей серіал стане цілком буквальним твором його життя, або його написання охоплює те, що, можливо, буде за півстоліття, коли він остаточно закінчиться.

Мова монтажу, напевно, не є настільки важливою, як раніше, але вона все ще набагато важливіша, ніж параметри Java / C ++ / Javascript / Python / Perl, які б ви хотіли всім вірити.

А тепер ОСТАЙТЕ МОЙ ПРАВО!


Knuth реалізував компілятор ALGOL в 1960 році, і ALGOL повинен був бути придатним для публікації алгоритмів, тому я не думаю, що це насправді відповідає на питання.
Пітер Тейлор

10
Я дійсно не переконаний, що міркування - це наявність часу. LISP був доступний, якщо він хотів, щоб він мав високий рівень абстракції, як це робить математика. Я думаю, що він пішов зі збором через перше слово назви; Фундаментальні. Ніщо не має більшого значення для алгоритмів, ніж покрокові інструкції до простої дурної машини; це змушує вас зламати алгоритм вниз повністю , а не розмірковувати про це на високому рівні, що не було його метою в книзі.
Джиммі Хоффа

1
Ось чому моя школа запропонувала історичний клас з обчислень, де ви можете програмувати Altair та деякі PDP.
Риг

@Rig - серйозно? Тепер я відчуваю себе старим. Хоча це не так вже й давно, як пояснювати HPGL новому прокату та виявляти, що вони ніколи не бачили та не чули про заговорщика ручки!
Мартін Бекетт

6
+1 через забавну розпуску, а також відповідну інформацію.
luser droog

43

Кнут обговорює свої міркування у передмові. Я цитую лише декілька біт і фрагментів:

... Мені потрібно було вирішити, чи використовувати алгебраїчну мову, наприклад ALGOL чи FORTRAN, або використовувати машинно орієнтовану мову для цієї мети. Можливо, багато хто з сучасних комп'ютерних експертів не погоджуються з моїм рішенням використовувати машинно орієнтовану мову, але я переконався, що це був безумовно правильний вибір з наступних причин:

  1. Алгебраїчні мови більше підходять для числових задач, ніж нечислові задачі, що розглядаються тут. [...]
  2. ... Написавши машинно орієнтованою мовою, програміст прагне використовувати набагато ефективніший метод; це набагато ближче до реальності.
  3. Програми, які нам потрібні, за невеликими винятками, все досить короткі ...
  4. Людина, яка більше ніж випадково цікавиться комп'ютерами, повинна добре навчатися машинною мовою ...
  5. Якась машинна мова була б потрібна в будь-якому випадку ...

Хоча він не вказує на це прямо, я думаю, що його згадка про АЛГОЛ і ФОРТРАН вказує на ще одну проблему, яку він уникнув, яка може бути ще важливішою. Припустимо, що він вибрав Алгол (явно краще підходить для нечислових програм, ніж Фортран у будь-якому випадку). Я б сказав, що Алгол, мабуть, був би більш чужий для більшості сучасних програмістів, ніж обрана ним мова монтажу.

У третьому виданні він переробив MIX, щоб тісніше відповідати сучасним процесорам, і йому довелося переписати код на нього. Однак я б сказав, що якби він використовував мову вищого рівня, переписування було б значно більшою - і всі причини, які він наводив, залишалися б також.


Крім того, компілятори були типово дорогими в ті часи. Через роки після виходу TAOCP том 1 я взяв інтерв'ю в місці, яке не хотіло витрачати гроші на одне (і, чесно кажучи, асемблер IBM 370 був не таким поганим), і моя дружина працювала в магазині мовних зборів досить кілька років після цього.
Девід Торнлі

2
Як я можу підвищити точку 4 ??
Хав'єр

5
@Javier отримай копію і напиши +1 у полі.
luser droog

29

Кнут також оновив своє обгрунтування :

Навіщо мати машинну мову?

Багато читачів без сумніву думають: `Чому Knuth замінює MIX іншою машиною, а не просто дотримується мови програмування високого рівня? Навряд чи хтось сьогодні використовує асемблери. ''

Такі люди мають право на свою думку, і їм не потрібно заважати читати машиномовні частини моїх книг. Але причини машинної мови, які я виклав у передмові до Тому 1, написаному на початку 1960-х, залишаються чинними і сьогодні:

  • Одна з головних цілей моїх книг - показати, як конструкції високого рівня реально реалізовані в машинах, а не просто показати, як вони застосовуються. Я пояснюю зв’язок кореневих програм, структури дерев, генерацію випадкових чисел, високоточну арифметику, конверсію радіусів, упаковку даних, комбінаторний пошук, рекурсію тощо.
  • Програми, потрібні в моїх книгах, як правило, такі короткі, що їх основні моменти легко зрозуміти.
  • Люди, які більш ніж випадково цікавляться комп'ютерами, повинні мати хоч якесь уявлення про те, що таке базове обладнання. Інакше програми, які вони пишуть, будуть досить дивними.
  • У будь-якому випадку потрібна машинна мова, як вихід багатьох описуваних програм.
  • Висловлення основних методів, таких як алгоритми сортування та пошуку машинною мовою, дозволяє проводити змістовні дослідження ефектів кешу та розміру оперативної пам’яті та інших апаратних характеристик (швидкість пам’яті, конвеєрна конфігурація, багаторазовий випуск, буфери зовнішньої сторони, розмір блоків кешу, тощо) при порівнянні різних схем.

Крім того, якщо я використовував мову високого рівня, якою вона повинна бути? У 1960-х я, мабуть, обрав би Algol W; у 1970-х мені тоді довелося б переписувати свої книги за допомогою Паскаля; у 1980-х я, безумовно, все змінив би на C; у 1990-х мені довелося б перейти на C ++, а потім, ймовірно, на Java. У 2000-х рр. Ще одна мова, безсумнівно, буде де-ріге. Я не можу дозволити собі час переписати свої книги, коли мови виходять і виходять з моди; мови - не суть моїх книг, справа - це те, що ви можете зробити улюбленою мовою. Мої книги зосереджені на позачасових істинах.

Тому я продовжуватиму використовувати англійську мову як мову високого рівня в TAOCP, і продовжуватиму використовувати мову низького рівня, щоб вказати, як машини насправді обчислюють. Читачі, які хочуть бачити лише алгоритми, які вже упаковані в плагін, використовуючи модну мову, повинні купувати книги інших людей.

Хороша новина полягає в тому, що програмування для машин RISC приємне і просте, коли машина RISC має гарний чистий дизайн. Тому мені не потрібно зупинятися на таємничих, чудернацьких деталях, які відволікають від основних моментів. У цьому відношенні MMIX буде значно кращим, ніж MIX.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.