"Solución maldita y estúpida": la historia de C



Por difícil que parezca de creer, C no nació como un manual de bolsillo irregular.



De una forma u otra, el lenguaje C ha influido en la formación de prácticamente todos los lenguajes de programación desarrollados desde la década de 1980. Algunos lenguajes como C ++, C # y Objective C estaban destinados a ser descendientes directos de C, mientras que otros simplemente adoptaron y adaptaron su sintaxis. Un programador que haya cambiado de Java, PHP, Ruby, Python o Perl no tendrá casi ninguna dificultad para comprender programas simples en C y, en este sentido, C puede considerarse la lengua franca de los programadores.



Sin embargo, C no surgió de la nada como un único monolito de programación. La historia de C comienza en Inglaterra, con un colega de Alan Turing y un programa de damas.



Dios salve al rey



Christopher Strachey ha sido llamado "el hombre de la programación ideal", según su extenso expediente en la revista Annals of the History of Computing . Obtuvo esta reputación en el Centro de Computación de la Universidad de Manchester en 1951. Strachey terminó allí gracias a su trabajo en una computadora en la Universidad Ferranti Mark I y su amistad con Alan Turing del King's College, Cambridge.



Strachey nació en 1916 en una familia británica bien conectada: su tío, Lytton Strachey, fue uno de los fundadores del Bloomsbury Group, y su padre, Oliver Strachey, jugó un papel decisivo en las operaciones de descifrado de códigos de los Aliados en ambas guerras mundiales.



Habría sido una sorpresa para los profesores de Strachey en su escuela privada y en la Universidad de Cambridge que Strachey se haya convertido en un experto reconocido en programación e informática. Strachey siempre mostró talento para las ciencias, pero rara vez las aplicó.



Si tenía alguna esperanza de una carrera en la investigación científica, recibió un duro golpe con los resultados poco notables de sus exámenes finales. Entonces, en cambio, durante la Segunda Guerra Mundial, Strachey trabajó para una empresa de electrónica británica y luego se convirtió en maestro de escuela, y finalmente terminó en una de las escuelas privadas más prestigiosas de Londres, Harrow.



En 1951, Strachey tuvo por primera vez la oportunidad de trabajar con computadoras: le presentaron a Mike Wudger del Laboratorio Nacional de Física del Reino Unido. Después de pasar un día de su fin de semana de Navidad explorando el Laboratorio Pilot ACE, en su tiempo libre en Harrow descubrió cómo enseñarle a una computadora a jugar a las damas. Según Martin Campbell-Kelly , que más tarde se convertiría en colega de Strachey, "cualquier persona con más experiencia y menos confianza estaría feliz con solo una tabla de cuadrados".



El primer intento no dio frutos: la computadora Pilot ACE simplemente no tenía suficiente memoria para jugar a las damas, pero mostró un aspecto de los intereses de Strachey que resultaría fundamental para el desarrollo de los lenguajes que eventualmente conducirían a C. En un momento en que las computadoras eran principalmente apreciadas por Su capacidad para resolver ecuaciones rápidamente, Strachey estaba más interesado en su capacidad para resolver problemas lógicos (como admitió más tarde en 1952 en la reunión de la Asociación de Maquinaria de Computación ).



La primavera siguiente, se enteró de que en la Universidad de Manchester se había instalado una computadora Ferranti Mark I. Alan Turing era el subdirector del laboratorio de computación de esa universidad. Turing escribió un libro de texto para programadores, y Strachey lo conocía lo suficiente por su colaboración en Cambridge como para pedir uno.



En julio de 1951, Strachey visitó Manchester y discutió personalmente con Turing su programa de borradores. Impresionado, Turing sugirió que como primer paso, escribir un programa que permita que el Ferranti Mark I se simule a sí mismo. El simulador permitirá a los programadores observar paso a paso cómo la computadora ejecutará el programa. Dicho programa de "rastreo" identificará las partes en las que el programa crea cuellos de botella o es ineficaz. En ese momento, tanto la memoria como los ciclos del procesador de la computadora valían una fortuna, por lo que este era un aspecto importante de la programación.



El programa de rastreo de Strachey contenía más de mil comandos; en ese momento era el programa más largo escrito para Ferranti Mark I. Después de trabajar toda la noche, Strachey pudo ejecutarlo y, al finalizar, el programa, según Campbell-Kelly , tocó el himno "Dios salve King ”a través del altavoz de la computadora.



Este logro amateur llamó la atención de Lord Halsbury, Director Gerente de la Corporación Nacional de Investigación y Desarrollo, quien pronto contrató a Strachey para administrar el trabajo del gobierno para promover las aplicaciones prácticas de las universidades británicas de informática en rápido crecimiento.



Fue en esta posición que se enteró de un proyecto de Cambridge dirigido por un trío de programadores llamado David.



David y Goliat Titán



El Centro de Computación de la Universidad de Cambridge tenía un fuerte enfoque en el servicio a los científicos. Las primeras computadoras del Laboratorio de Matemáticas, EDSAC y EDSAC 2, se pusieron a disposición de los investigadores de toda la universidad. Escribieron programas que se perforaron en cintas de papel y se insertaron en una máquina.



En el centro de cómputo, estas cintas perforadas fueron fijadas al tendedero y fueron ejecutadas una tras otra durante el horario laboral. Esta cola de programas en espera llegó a conocerse como la “cola de trabajos”, y el término todavía se usa hoy para describir formas mucho más complejas de organizar tareas computacionales.





A las 6:55, puede ver la "cola de trabajos" de EDSAC.



Apenas dos años después de que el EDSAC 2 entrara en funcionamiento, la universidad se dio cuenta de que pronto se necesitaría una máquina mucho más potente y para solucionar este problema tendrían que comprar un mainframe comercial. La universidad consideró opciones para IBM 7090 y Ferranti Atlas, pero no podía permitirse ninguna de estas máquinas. En 1961, el director del departamento de Ferranti, Peter Hall, propuso que se desarrollara una versión simplificada de la computadora Atlas con la Universidad de Cambridge. Cambridge obtendrá un prototipo llamado Titan y Ferranti podrá vender la nueva computadora a clientes para quienes Atlas es demasiado caro.



Para brindar servicios informáticos al resto de la universidad, esta computadora necesitará tanto un sistema operativo como al menos un lenguaje de programación de alto nivel.



Casi de inmediato, se abandonó la idea de extender el lenguaje desarrollado para EDSAC 2. "A principios de la década de 1960, se pensaba generalmente que 'estamos construyendo una nueva computadora, por lo que necesitamos un nuevo lenguaje de programación'", recordó David Hartley en un podcast de 2017 . Junto con David Wheeler y David Barron Hartley participó en las primeras etapas del desarrollo de un nuevo lenguaje de programación para esta computadora.



“La construcción de un nuevo sistema operativo era inevitable”, dijo Hartley, pero no un nuevo lenguaje de programación. “Pensamos que teníamos la oportunidad de experimentar con un nuevo idioma. En retrospectiva, parece que fue una decisión estúpida ".



Maurice Wilkes, quien dirigió el proyecto Titan, creía que no había necesidad de un nuevo lenguaje de programación. La principal tarea prevista de Titan era proporcionar servicios informáticos a la Universidad de Cambridge, y para ello sería óptimo fabricar y poner en marcha la máquina lo antes posible, dotándola de un lenguaje que ya es familiar para los usuarios.



Antes de aprobar una propuesta para desarrollar un nuevo lenguaje, Wilkes solicitó un análisis de los lenguajes de programación existentes. “Los elegimos con mucho cuidado”, recuerda Hartley, “para que él decida que ningún idioma es apropiado”. Curiosamente, el Grupo de trabajo de Fortran IV ni siquiera se acercó a los usuarios de Fortran en Cambridge que pudieran hablar sobre las capacidades adicionales disponibles en otros sabores de Fortran. Por eso, como recuerda Hartley , el grupo estaba convencido de que "podemos diseñar y desarrollar algo mucho mejor", pero después de unos años esta empresa terminó en un fracaso.



El trío había preparado un artículo en junio de 1962 en el que defendía la necesidad de un nuevo lenguaje y, como dice Hartley, "nos salimos con la nuestra".



Este nuevo lenguaje de programación se llamó CPL (Cambridge Programming Language) y en 1963 ya se estaba trabajando en él. A los programadores de Cambridge se unieron John Buxton y Eric Nixon de la Universidad de Londres, y CPL ahora significa Lenguaje de programación combinado. El proyecto creció y Wilkes decidió traer a Christopher Strachey para que lo dirigiera. Pronto, según Campbell-Kelly , las personas asociadas con el proyecto comenzaron a decodificar CPL como el "lenguaje de programación de Christopher".



El grupo de investigadores del lenguaje se reunió en Cambridge o Londres, así como en la Universidad de Londres, pero a veces se encontraban en el taller de la casa de Kensington donde Strachey vivía con su hermana. La habitación en la parte trasera de la casa estaba llena de sillas victorianas, almohadas en el piso y las paredes estaban adornadas con retratos de miembros del Grupo Bloomsbury por uno de los parientes de Strachey. Fue allí donde Strachey "organizó una fiesta en la corte", a veces vistiendo una bata y, como recordó David Barron unos años más tarde, "discutimos sobre cómo cambiar el mundo para mejor, y por la noche nos fuimos a casa".



En ese momento, David Wheeler había pasado a otros proyectos, dejando a sus cinco colegas: Hartley, Barron, Buxton, Nixon y Strachey.



A Hartley le encantaba trabajar en la CPL: “En realidad, fue un trabajo bastante interesante”, recuerda. Las reuniones fueron bastante informales. "Discutimos varios temas muy acaloradamente y con el tiempo incluso comenzamos a arrojarnos aviones de papel".



El grupo comenzó con las especificaciones ALGOL 60, con el objetivo de escribir un lenguaje “ideal” que fuera práctico para diferentes usuarios, pero al mismo tiempo estéticamente agradable y efectivo.



Las dificultades con la priorización comenzaron casi de inmediato. Como dijo David Barron sobre Strachey, "era típico de él defender su punto de vista sobre diferencias menores con la misma fuerza que sobre puntos importantes". Una de esas controversias menores fue la objeción de Strachey a la gramática de las construcciones "SI ... ENTONCES ... ELSE". “No puedo permitir que mi nombre se asocie con una recomendación de utilizar un inglés incorrectamente analfabeto”, esto, según las memorias de Hartley para los Annals of the History of Computing , era su punto de vista. Strachey prefirió "OR", que contradecía la forma en que se usaba "OR" en casi todos los demás idiomas existentes. Sin embargo, su preferencia ganó, y en la guía de referencia de CPL OR se utiliza donde los usuarios esperarían ELSE.





El manual de CPL, que por supuesto se puede encontrar en línea .



También se ha dedicado un tiempo valioso a desarrollar una forma de evitar el uso de un asterisco para denotar una operación de multiplicación. En este caso, las consideraciones estéticas llevaron a complicaciones que ralentizaron la implementación de un lenguaje de programación práctico, ya que se tuvieron que desarrollar reglas complejas para distinguir entre “3a” que significa “3 * a” y “3a” como nombre de variable.



Mientras tanto, los usuarios de Cambridge estaban cada vez más irritados por la falta de un lenguaje de programación práctico para las nuevas computadoras Atlas. La mayoría de las especificaciones del lenguaje estaban terminadas, pero el compilador aún no existía. El grupo de trabajo hizo que la CPL fuera tan compleja que los primeros intentos de escribir un compilador en código de máquina fueron increíblemente ineficaces.



Comenzando con la promoción



En 1965, Strachey se fue al Instituto de Tecnología de Massachusetts (MIT) durante varios meses y, a su regreso, se convirtió en director del Grupo de Investigación de Programación de Oxford. Mientras tanto, Martin Richards se unió al proyecto CPL en Cambridge. Se dedicó a desarrollar una versión simplificada de la CPL con la que los usuarios pudieran trabajar. Este lenguaje BCPL ("B" para "Básico", "simple") necesitaba un compilador eficiente.



Mientras estaba en el MIT, Strachey ayudó a Martin Richards a obtener un año sabático de dos años en el instituto, y en 1966 Richards se llevó a BCPL con él a Massachusetts, donde pudo trabajar en un compilador.



BCPL es un lenguaje "bootstrap" porque su compilador es capaz de autocompilarse. Básicamente, una pequeña parte del compilador BCPL está escrito en código ensamblador o de máquina, y el resto del compilador está escrito en un subconjunto correspondiente de BCPL. La parte del compilador escrita en BCPL se pasa a la parte de ensamblaje y el programa compilador resultante se puede utilizar para compilar cualquier programa escrito en BCPL.



Los compiladores de bootstrapping simplifican enormemente el proceso de trasladar un lenguaje de una computadora o sistema operativo a otro. Para que el compilador se ejecute en otra computadora, es suficiente reescribir una parte relativamente pequeña del compilador, escrita en código específico para una computadora en particular.



Mientras Richards trabajaba en el compilador BCPL en el MIT, el instituto comenzó a participar en el proyecto Multics con Bell Labs y GE. Para respaldar el proyecto, se creó una red que conecta MIT y Bell Labs.



Si bien la conexión de red entre las dos organizaciones estaba destinada nominalmente a facilitar el trabajo con Multics, Ken Thompson nos dijo que era socialmente aceptable "vagar" por los mainframes del MIT en busca de otros proyectos, y así fue como encontró el código y la documentación de BCPL. Los descargó al mainframe de Bell Labs y comenzó a trabajar en ellos. “Buscaba un idioma para hacer las cosas que quería”, recuerda Thompson. "Programar en esta era de sistemas operativos propietarios en máquinas enormes era muy difícil".



Alrededor de la época de los experimentos de Thompson con BCPL, Bell Labs se retiró del consorcio Multics, y el departamento de informática de Thompson se quedó temporalmente sin computadoras.



Cuando finalmente consiguió la computadora, era una PDP-7 usada, no particularmente poderosa incluso para los estándares de esa época. Sin embargo, Thompson logró construir y ejecutar la primera versión de Unix en esta máquina.



El PDP-7 tenía 8192 "palabras" en la memoria (una palabra en este caso era de 18 bits; la industria aún no había estandarizado un "byte" de 8 bits). Unix tomó las primeras 4.000 palabras, dejando 4.000 para ejecutar programas.



Thompson pellizcó su copia de BCPL (que en sí misma era una CPL simplificada) para encajar en las 4.000 palabras de la memoria libre del PDP-7. En el proceso de compresión, tomó prestadas partes del idioma que encontró cuando era estudiante en la Universidad de California en Berkeley. Este lenguaje SMALGOL era un subconjunto de ALGOL 60 diseñado para ejecutarse en computadoras menos potentes.



El lenguaje que Thompson terminó usando en el PDP-7 fue, según su propia descripción, "semántica BCPL con gran parte de la sintaxis SMALGOL", lo que significa que se parecía a SMALGOL y funcionaba como BCPL. Dado que este nuevo lenguaje consistía sólo en aquellos aspectos de BCPL que Thompson encontró más útiles y encajaban dentro de las limitaciones del PDP-7, decidió acortar el nombre de BCPL a sólo "B".



Thompson había escrito previamente Unix para el PDP-7 en ensamblador, pero incluso en 1969 no era una forma ideal de construir un sistema operativo. En el PDP-7, funcionó porque la computadora era bastante básica y Thompson escribió el sistema operativo principalmente por diversión.



Cualquier sistema operativo que deba ser compatible y actualizado por varios programadores, o que se ejecute en un hardware más sofisticado en ese momento, debe estar escrito en un lenguaje de programación de alto nivel.



Entonces, cuando Bell Labs adquirió el PDP-11 para el departamento en 1971, Thompson decidió que era hora de reescribir Unix en un lenguaje de programación de alto nivel. Se lo contó a Brian Kernighan en el escenario del VCF 2019 .



Al mismo tiempo, Dennis Ritchie tomó prestado B y lo adaptó para que se ejecutara en computadoras más potentes. Uno de los primeros aspectos que volvió a agregar a B fue la capacidad de "escribir" variables. Dado que la memoria del PDP-7 constaba de palabras de 18 bits, B podría simplificarse tratando cada variable como una palabra de memoria o como una secuencia de palabras referenciadas por su ubicación en la memoria del sistema. No había números decimales fijos o de coma flotante, enteros o cadenas en el idioma. Como dijo Thompson, "fueron solo palabras".



Este enfoque fue efectivo en una máquina simple con una huella de memoria muy pequeña y una base de usuarios pequeña, pero en sistemas más complejos con programas complejos y muchos usuarios podría conducir a formas específicas de determinar si una variable es una cadena o un número, así como a un uso ineficiente de la memoria. ...



Según la segunda edición de la Historia de los lenguajes de programación de Thomas Bergin y Richard Gibson, Ritchie denominó este lenguaje modificado NB ("Nuevo B"). Se instaló en el mainframe del Murray Hill Computing Center, que se puso a disposición de los usuarios a través de Bell Labs.



Naturalmente, cuando Thompson decidió reescribir Unix en Java, comenzó con NB. Los primeros tres intentos terminaron en un fracaso, y "debido a mi egoísmo, culpé al lenguaje por ello", recordó Thompson con una sonrisa en VCF.



Después de cada falla, Ritchie agregó características a NB que él y Ken necesitaban. Una vez agregó estructuras, variables que almacenan muchos valores individuales de manera coherente o "estructurada", y luego Thompson pudo escribir Unix en este nuevo lenguaje. Ritchie y Thompson consideraron la adición de estructuras que no estaban en B, SMALGOL, BCPL y CPL cambios lo suficientemente significativos como para cambiar el nombre del idioma, y ​​B se convirtió en C.



Vida bajo el signo C





Christopher Strachey en 1955 con Ferranti Mark 1 (también conocido como Manchester Electronic Computer).



C escapó de Bell Labs de la misma manera que lo hizo Unix. Ayudó a que la PDP-11 se convirtiera rápidamente en una de las miniordenadores más exitosas del mercado, pero lo que la hizo más atractiva fue el precio de Unix. Cualquier centro de datos con un PDP-11 podía instalar Unix por el costo de los medios y el correo, y



C vino con Unix. La presencia de C en tantos campus fue, según Thompson, la principal razón de su éxito. En una carta, escribió que "se graduaron de muchos chicos que conocían a C".



Otro impulso al éxito de C fue la publicación en 1978 de The C Programming LanguageDennis Ritchie y Brian Kernighan. Un pequeño libro de 228 páginas se convirtió, incluso para los estándares de esa época, en un trabajo notablemente simple y accesible.



Un amplio conocimiento de la sintaxis de C influyó en el desarrollo de muchos lenguajes que siguieron, poco o ningún parecido con C.Los lenguajes de scripting como PHP y JavaScript contienen bits de notación de programación que Thompson diseñó originalmente para encajar B en la pequeña huella de memoria del PDP-7. Por ejemplo, estos son los operadores de incremento "++" y decremento "-". Cuando solo tiene 4.000 palabras para trabajar, reducir "x = x + 1" a "x ++" ahorra una buena cantidad de espacio.



Thompson nunca pensó que C estaría tan extendido. “Había muchos lenguajes completamente diferentes, muy interesantes y útiles”, dijo Thompson. "Mi instinto estético me dijo que un idioma no puede cubrir todas las necesidades del universo".



Como Unix, C fue un éxito nacido del fracaso. En ambos casos, los programadores tomaron las mejores partes de los proyectos que estaban condenados porque se les pidió demasiado. Multics, que dio origen a Unix, se usó en su punto máximo en solo unas 80 computadoras, y la CPL, que finalmente condujo a la creación de C, nunca se completó y los investigadores de Cambridge la abandonaron en 1967.



Cuando Christopher Strachey inició el grupo de investigación de programación en Oxford, dijo, "dividir el trabajo en práctico y teórico es artificial y perjudicial".

Y aunque se suponía que CPL combinaba aspectos prácticos y teóricos, resultó ser demasiado teórico en su implementación. El grupo de trabajo de la CPL no intentó programar en la CPL.



Sin embargo, incluso si Strachey no pudo lograr una síntesis entre teoría y práctica en la CPL, su actitud fue definitivamente correcta. "C fue escrito para escribir Unix", recuerda Thompson. Y "Unix fue escrito para que todos pudiéramos escribir programas".






Publicidad



Servidores económicos para cualquier tarea: se trata de nuestros servidores épicos . Cree su propio plan con un par de clics, configuración máxima: 128 núcleos de CPU, 512 GB de RAM, 4000 GB de NVMe.






All Articles