web-dev-qa-db-fra.com

Pourquoi Donald Knuth écrit-il TAOCP à l'aide de la langue d'assemblage?

Je ne déteste pas d'utiliser la langue d'assemblage, car j'ai écrit certains dans mon cours OS. Mais évidemment, la langue de montage manque d'abstraction, vous devez accorder plus d'attention aux détails.

Le langage de montage est-il vraiment essentiel pour écrire TAOCP?

20
Lucas Li

Il n'utilise pas seulement Mixal, son langage de montage pour mélanger, mais également mélanger, un modèle pour un ordinateur simple (comme celui utilisé dans les années soixante). Il s'agit d'un modèle d'enseignement avec lequel il est, dans une certaine mesure, indépendamment du développement sur le terrain.

S'il avait utilisé un autre langage de programmation (lequel, à propos, pensez-vous que vous auriez pu être adapté?), Dites NPL (Nifty Programming Language), il aurait dû abandonner l'idée d'utiliser un mélange ou d'introduire un compilateur de certains langages informatiques de choix (qui est une chose beaucoup plus complexe que ce qu'il gère dans le vol 1). De cette façon, cela n'aurait pas été devenu tacp mais taonplp. Le premier est indépendant d'un tel choix et, pour cette raison, intemporel d'une manière peu de livres sur la programmation. Le second serait probablement oublié d'ici ...

De plus, tant que les ordinateurs travaillent en principe de la manière dont son mélange fait, c'est une bonne chose à prendre en compte si vous êtes vraiment intéressé à apprendre à travailler avec eux.

22
Thomas

VOUS JEUNES WHIPPERSNAPPERS SUPÉRIEZ-MOI PARFAIRE PARPORÉ. Vous n'avez tout trop souvent aucun indice que rien ne s'est passé avant de commencer l'école. (J'ai le même problème. Il m'a fallu beaucoup de temps pour saisir que 15 ans était en fait une très peu de temps, d'un point de vue de l'adulte. C'est à peu près l'étendue de Hiroshima à la crise de missile cubaine. Pour moi, la Seconde Guerre mondiale est juste L'histoire, mais mon père a combattu et ma mère était en junior haute pendant.)

TAOCP, vol. 1, "Algorithmes fondamentaux", la 1ère édition, a été imprimée pour la première fois en 1968. C'est il y a 45 ans. Knuth a commencé à planifier la série bien avant.

Pour référence: L'Intel 8086 est apparu pour la première fois en 1978, dix ans plus tard. Le langage Pascal est apparu pour la première fois en 1971; Le livre Jensen & Wirth, sur la deuxième version de la langue, est venu en 1974. Le développement initial de C était 1969-1973: K & R a été publié en 1978.

Knuth voulait la série de couvrir le champ. Il fixe le style, puis pour être utile aux pratiquants alors. Il ne s'attendait jamais à ce que cette série devienne littéralement le travail de sa vie, ou son écriture pour couvrir ce qui va probablement bien plus d'un demi-siècle lorsqu'il finit enfin.

Le langage de montage n'est sans doute pas aussi critique qu'aujourd'hui, mais il est encore beaucoup plus important que les Mavens Java/C++/JavaScript/Python/Perl voudraient que vous croyiez tous.

Maintenant sortez de ma pelouse!

56
John R. Strohm

Knuth discute de son raisonnement dans la préface. Je citerai quelques bits et quelques morceaux:

... Je devais décider d'utiliser une langue algébrique telle que Algol ou Fortran, ou pour utiliser une langue orientée automobile à cette fin. Peut-être que de nombreux experts en informatique d'aujourd'hui ne seront pas d'accord avec ma décision d'utiliser une langue orientée automobile, mais je suis devenu convaincu que c'était définitivement le bon choix, pour les raisons suivantes:

  1. Les langues algébriques sont plus adaptées à des problèmes numériques que les problèmes non nulmériques considérés ici. [...]
  2. ... en écrivant dans une langue orientée machine, le programmeur aura tendance à utiliser une méthode beaucoup plus efficace; C'est beaucoup plus proche de la réalité.
  3. Les programmes dont nous avons besoin sont, à quelques exceptions près, tout assez court ...
  4. Une personne qui est plus que par hasard intéressée par les ordinateurs devrait être bien scolarisée dans la langue de la machine ...
  5. Une langue de machine serait nécessaire de toute façon ...

Bien qu'il ne le signalait pas directement, je pense que sa mention d'Algol et de Fortran pointe un autre problème, il évitait que cela pourrait être encore plus important. Supposons qu'il avait choisi Algol (clairement mieux adapté à des programmes non numériques que Fortran de toute façon). Je pose que l'algol serait probablement même plus étranger à la plupart des programmeurs d'aujourd'hui que le langage de montage qu'il a choisi.

Pour la troisième édition, il a repensé le mélange pour s'adapter plus près aux processeurs modernes et a dû réécrire le code pour cela. Je posi, cependant, cela avait utilisé une langue de niveau supérieur, la réécriture aurait été substantiellement plus grande - et toutes les raisons qu'il a données resteraient également.

43
Jerry Coffin

Knuth a mis à jour son Justification aussi:

Pourquoi avoir une langue de la machine?

De nombreux lecteurs pensent sans aucun doute: `` Pourquoi Knuth remplace-t-il le mélange par une autre machine au lieu de simplement coller à un langage de programmation de haut niveau? Presque personne utilise des assembleurs ces jours-ci. ''

Ces personnes ont droit à leurs opinions et ils n'ont pas besoin de la lutte contre la lecture des parties de la machine de mes livres. Mais les raisons de la langue de la machine que j'ai donnée dans la préface au volume 1, écrites au début des années 1960, restent valables aujourd'hui:

  • L'un des principaux objectifs de mes livres consiste à montrer comment les constructions de haut niveau sont réellement mises en œuvre dans des machines, pas simplement pour montrer comment elles sont appliquées. J'explique la liaison coroutine, les structures d'arborescences, la génération de nombres aléatoires, l'arithmétique de haute précision, la conversion Radix, l'emballage de données, la recherche combinatoire, la récursivité, etc., à partir de la masse.
  • Les programmes nécessaires dans mes livres sont généralement si courts que leurs points principaux puissent être facilement saisis.
  • Les personnes qui sont plus que peu elles-mêmes intéressées par les ordinateurs devraient avoir au moins une idée de ce que le matériel sous-jacent est comme. Sinon, les programmes qu'ils écrivent seront plutôt bizarres.
  • La langue de la machine est nécessaire dans tous les cas, comme la production de nombreux logiciels que je décris.
  • Exprimer des méthodes de base telles que des algorithmes pour le tri et la recherche dans la langue de la machine permettent d'effectuer des études significatives des effets du cache et RAM et autres caractéristiques matérielles (vitesse de la mémoire, pipelining, problème multiple, Les tampons de lookaside, la taille des blocs de cache, etc.) lors de la comparaison de différents schémas.

De plus, si je faisais une langue de haut niveau, quelle langue devrait-elle être? Dans les années 1960, j'aurais probablement choisi Algol W; Dans les années 1970, j'aurais alors dû réécrire mes livres en utilisant Pascal; Dans les années 1980, j'aurais sûrement tout changé en C; Dans les années 1990, j'aurais dû passer à C++, puis probablement à Java. Dans les années 2000, une autre langue sera sans aucun doute de riguer. Je ne peux pas me permettre le temps de réécrire mes livres, car les langues vont et disparaître de la mode; Les langues ne sont pas le point de mes livres, le point est plutôt ce que vous pouvez faire dans votre langue préférée. Mes livres se concentrent sur des vérités intemporelles.

Par conséquent, je continuerai à utiliser l'anglais comme langue de haut niveau dans le TAOCP, et je continuerai à utiliser une langue de bas niveau pour indiquer comment les machines calculent réellement. Les lecteurs qui souhaitent seulement voir des algorithmes déjà emballés de manière plug-in, utilisant une langue à la mode, devraient acheter des livres d'autres personnes.

La bonne nouvelle est que la programmation pour les machines RISC est agréable et simple, lorsque la machine à RISC a une belle conception propre. Donc, je n'ai pas besoin de m'attarder sur Arcane, fidèles peu de détails qui distraient des points principaux. À cet égard, MMIX sera nettement meilleur que mélanger.

29
Alan Shutko