Я не ненавиджу використання асемблерської мови, оскільки я написав їх у своєму курсі os. Але очевидно, що в мові складання не вистачає абстракції, ви повинні приділяти більше уваги деталям.
Чи справді важлива мова складання для написання TAOCP?
Я не ненавиджу використання асемблерської мови, оскільки я написав їх у своєму курсі os. Але очевидно, що в мові складання не вистачає абстракції, ви повинні приділяти більше уваги деталям.
Чи справді важлива мова складання для написання TAOCP?
Відповіді:
Він не тільки використовує MIXAL, свою мову складання для MIX, але і MIX, модель для простого комп'ютера (як той, який використовувався в шістдесяті роки). Це модель навчання, за якою він певною мірою не залежить від розвитку в даній галузі.
Якби він використовував іншу мову програмування (яка, до речі, ви думаєте, підходила б?), Скажімо, NPL (чудова мова програмування), йому довелося б або відмовитися від ідеї використання MIX, або запровадити компілятор якоїсь комп'ютерної мови за вибором (що набагато складніше, ніж те, з чим він має справу в т. 1). Таким чином він став би не TAOCP, а TAONPLP. Перший не залежить від такого вибору, і, з цієї причини, тимчасовим, таким чином, мало книжок про програмування коли-небудь буде. Друге, мабуть, уже забудене ...
Крім того, поки комп'ютери працюють в принципі так, як це робить його MIX, це добре врахувати, якщо ви дійсно зацікавлені в тому, як навчитися працювати з ними.
Ви, молоді юначі, інколи мене дивуєте. Ви занадто часто не маєте поняття, що щось сталося перед початком школи. (У мене така ж проблема. Мені потрібно було довго зрозуміти, що 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, які б ви хотіли всім вірити.
А тепер ОСТАЙТЕ МОЙ ПРАВО!
Кнут обговорює свої міркування у передмові. Я цитую лише декілька біт і фрагментів:
... Мені потрібно було вирішити, чи використовувати алгебраїчну мову, наприклад ALGOL чи FORTRAN, або використовувати машинно орієнтовану мову для цієї мети. Можливо, багато хто з сучасних комп'ютерних експертів не погоджуються з моїм рішенням використовувати машинно орієнтовану мову, але я переконався, що це був безумовно правильний вибір з наступних причин:
- Алгебраїчні мови більше підходять для числових задач, ніж нечислові задачі, що розглядаються тут. [...]
- ... Написавши машинно орієнтованою мовою, програміст прагне використовувати набагато ефективніший метод; це набагато ближче до реальності.
- Програми, які нам потрібні, за невеликими винятками, все досить короткі ...
- Людина, яка більше ніж випадково цікавиться комп'ютерами, повинна добре навчатися машинною мовою ...
- Якась машинна мова була б потрібна в будь-якому випадку ...
Хоча він не вказує на це прямо, я думаю, що його згадка про АЛГОЛ і ФОРТРАН вказує на ще одну проблему, яку він уникнув, яка може бути ще важливішою. Припустимо, що він вибрав Алгол (явно краще підходить для нечислових програм, ніж Фортран у будь-якому випадку). Я б сказав, що Алгол, мабуть, був би більш чужий для більшості сучасних програмістів, ніж обрана ним мова монтажу.
У третьому виданні він переробив MIX, щоб тісніше відповідати сучасним процесорам, і йому довелося переписати код на нього. Однак я б сказав, що якби він використовував мову вищого рівня, переписування було б значно більшою - і всі причини, які він наводив, залишалися б також.
Кнут також оновив своє обгрунтування :
Навіщо мати машинну мову?
Багато читачів без сумніву думають: `Чому Knuth замінює MIX іншою машиною, а не просто дотримується мови програмування високого рівня? Навряд чи хтось сьогодні використовує асемблери. ''
Такі люди мають право на свою думку, і їм не потрібно заважати читати машиномовні частини моїх книг. Але причини машинної мови, які я виклав у передмові до Тому 1, написаному на початку 1960-х, залишаються чинними і сьогодні:
- Одна з головних цілей моїх книг - показати, як конструкції високого рівня реально реалізовані в машинах, а не просто показати, як вони застосовуються. Я пояснюю зв’язок кореневих програм, структури дерев, генерацію випадкових чисел, високоточну арифметику, конверсію радіусів, упаковку даних, комбінаторний пошук, рекурсію тощо.
- Програми, потрібні в моїх книгах, як правило, такі короткі, що їх основні моменти легко зрозуміти.
- Люди, які більш ніж випадково цікавляться комп'ютерами, повинні мати хоч якесь уявлення про те, що таке базове обладнання. Інакше програми, які вони пишуть, будуть досить дивними.
- У будь-якому випадку потрібна машинна мова, як вихід багатьох описуваних програм.
- Висловлення основних методів, таких як алгоритми сортування та пошуку машинною мовою, дозволяє проводити змістовні дослідження ефектів кешу та розміру оперативної пам’яті та інших апаратних характеристик (швидкість пам’яті, конвеєрна конфігурація, багаторазовий випуск, буфери зовнішньої сторони, розмір блоків кешу, тощо) при порівнянні різних схем.
Крім того, якщо я використовував мову високого рівня, якою вона повинна бути? У 1960-х я, мабуть, обрав би Algol W; у 1970-х мені тоді довелося б переписувати свої книги за допомогою Паскаля; у 1980-х я, безумовно, все змінив би на C; у 1990-х мені довелося б перейти на C ++, а потім, ймовірно, на Java. У 2000-х рр. Ще одна мова, безсумнівно, буде де-ріге. Я не можу дозволити собі час переписати свої книги, коли мови виходять і виходять з моди; мови - не суть моїх книг, справа - це те, що ви можете зробити улюбленою мовою. Мої книги зосереджені на позачасових істинах.
Тому я продовжуватиму використовувати англійську мову як мову високого рівня в TAOCP, і продовжуватиму використовувати мову низького рівня, щоб вказати, як машини насправді обчислюють. Читачі, які хочуть бачити лише алгоритми, які вже упаковані в плагін, використовуючи модну мову, повинні купувати книги інших людей.
Хороша новина полягає в тому, що програмування для машин RISC приємне і просте, коли машина RISC має гарний чистий дизайн. Тому мені не потрібно зупинятися на таємничих, чудернацьких деталях, які відволікають від основних моментів. У цьому відношенні MMIX буде значно кращим, ніж MIX.