¿Por qué tener un lenguaje de máquina?
Sin duda, muchos lectores piensan: `` ¿Por qué Knuth reemplaza MIX por otra máquina en lugar de limitarse a un lenguaje de programación de alto nivel? Casi nadie usa ensambladores en estos días ''.
Dichas personas tienen derecho a sus opiniones, y no necesitan molestarse en leer las partes de mis libros en lenguaje máquina. Pero las razones para el lenguaje de máquina que di en el prefacio del Volumen 1, escrito a principios de la década de 1960, siguen siendo válidas hoy en día:
- Uno de los objetivos principales de mis libros es mostrar cómo se implementan realmente las construcciones de alto nivel en las máquinas, no simplemente mostrar cómo se aplican. Explico el enlace de rutina, las estructuras de árbol, la generación de números aleatorios, la aritmética de alta precisión, la conversión de radix, el empaque de datos, la búsqueda combinatoria, la recursividad, etc., desde cero.
- Los programas necesarios en mis libros son generalmente tan cortos que sus puntos principales se pueden entender fácilmente.
- Las personas que están más que casualmente interesadas en las computadoras deberían tener al menos una idea de cómo es el hardware subyacente. De lo contrario, los programas que escriben serán bastante extraños.
- El lenguaje de máquina es necesario en cualquier caso, como resultado de muchos de los programas de software que describo.
- Expresar métodos básicos como algoritmos para ordenar y buscar en lenguaje máquina hace posible realizar estudios significativos de los efectos del tamaño de la memoria caché y la RAM y otras características del hardware (velocidad de memoria, canalización, problema múltiple, buffers laterales, el tamaño de los bloques de memoria caché, etc.) al comparar diferentes esquemas.
Además, si utilicé un lenguaje de alto nivel, ¿qué idioma debería ser? En la década de 1960 probablemente habría elegido Algol W; en la década de 1970, habría tenido que reescribir mis libros usando Pascal; en la década de 1980, seguramente habría cambiado todo a C; en la década de 1990, habría tenido que cambiar a C ++ y luego probablemente a Java. En la década de 2000, sin duda, otro idioma será de rigor. No puedo darme el tiempo para reescribir mis libros a medida que los idiomas pasan de moda; los idiomas no son el punto de mis libros, el punto es más bien lo que puedes hacer en tu idioma favorito. Mis libros se centran en verdades eternas.
Por lo tanto, continuaré usando el inglés como idioma de alto nivel en TAOCP, y continuaré usando un idioma de bajo nivel para indicar cómo las máquinas realmente calculan. Los lectores que solo quieran ver algoritmos que ya están empaquetados de forma complementaria, utilizando un lenguaje moderno, deben comprar los libros de otras personas.
La buena noticia es que la programación para máquinas RISC es agradable y simple, cuando la máquina RISC tiene un diseño limpio y agradable. Así que no necesito detenerme en pequeños detalles arcanos y complicados que distraen de los puntos principales. A este respecto, MMIX será significativamente mejor que MIX.