Articulo de referencia

Plankalkül

"}},"i":0}}]}"> Plankalkül ( pronunciación en alemán: [ ˈplaːnkalkyːl ] ) es un lenguaje de programación diseñado para fines de ingeniería por Konrad Zuse entre 1942 y 1945. Fue...

Plankalkül ( pronunciación en alemán: [ ˈplaːnkalkyːl ] ) es un lenguaje de programación diseñado para fines de ingeniería por Konrad Zuse entre 1942 y 1945. Fue el primer lenguaje de programación de alto nivel diseñado para una computadora. Zuse nunca implementó Plankalkül en ninguna de sus máquinas de la serie Z. [ 2 ]

Kalkül (del latín calculus ) es el término alemán para un sistema formal —como en Hilbert-Kalkül , el nombre original del sistema de deducción al estilo de Hilbert— , por lo que Plankalkül se refiere a un sistema formal para la planificación. [ 3 ]

Historia de la programación

En el ámbito de la creación de máquinas de computación, Zuse fue autodidacta y las desarrolló sin conocimiento de otras máquinas de computación mecánicas ya existentes, aunque más tarde, al construir la Z3 , se inspiró en el libro de Hilbert y Ackermann sobre lógica matemática elemental (véase Principios de lógica matemática ). [ 4 ] : 113, 152, 216 Para describir circuitos lógicos, Zuse inventó su propio sistema de diagramas y notación, al que llamó "combinatoria de condicionales" ( en alemán : Bedingungskombinatorik ). Tras finalizar la Z1 en 1938, Zuse descubrió que el cálculo que había ideado de forma independiente ya existía y se conocía como cálculo proposicional . [ 5 ] : 3

Lo que Zuse tenía en mente debía ser mucho más potente. El cálculo proposicional no es Turing-completo y no es capaz de describir ni siquiera cálculos aritméticos simples [ 6 ] . En mayo de 1939, describió sus planes para el desarrollo de lo que se convertiría en Plankalkül. [ 4 ] : 113, 152, 216 Escribió lo siguiente en su cuaderno:

Seit etwa einem halben Jahr allmähliches Einführen in die formale Logik. Viele meiner früheren Gedanken habe ich dort wiedergefunden. (Bedingungskombinatorik = Aussagenlogik; Lehre von den Intervallen = Gebietenkalkül). Ich plane jetzt die Aufsetzung des 'Plankalküls'. Hierzu sind eine Reihe von Begriffen zu klären.

Traducción:

Casi medio año de introducción gradual a la lógica formal. Allí redescubrí muchas de mis ideas previas (combinatoria de condicionales = cálculo proposicional ; estudio de intervalos = teoría de retículos ). Ahora planeo incorporar el "Cálculo de planes" a este campo. Para ello, es necesario aclarar una serie de conceptos.

Cuaderno de Konrad Zuse [ 5 ] : 3
Una placa conmemorativa en la casa de Hinterstein donde Zuse trabajó en Plankalkül.

Mientras trabajaba en su tesis doctoral , Zuse desarrolló el primer sistema formal conocido de notación de algoritmos [ 7 ] : 9 capaz de manejar bifurcaciones y bucles. [ 8 ] : 18 [ 4 ] : ​​56 En 1942 comenzó a escribir un programa de ajedrez en Plankalkül. [ 4 ] : ​​216–217 En 1944, Zuse se reunió con el lógico y filósofo alemán Heinrich Scholz , quien expresó su aprecio por la utilización que Zuse hacía del cálculo lógico . [ 9 ] En 1945, Zuse describió Plankalkül en un libro inédito. [ 10 ] El colapso de la Alemania nazi le impidió presentar su manuscrito. [ 8 ] : 18

En aquel entonces, los únicos dos ordenadores que funcionaban en el mundo eran ENIAC y Harvard Mark I , ninguno de los cuales utilizaba un compilador, y ENIAC necesitaba ser reprogramado para cada tarea cambiando la forma en que estaban conectados los cables. [ 5 ] : 3

Aunque la mayoría de sus ordenadores fueron destruidos por las bombas aliadas, Zuse logró rescatar una máquina, la Z4 , y trasladarla al pueblo alpino de Hinterstein , parte de Bad Hindelang . [ 7 ] : 8

El primer intento de crear un lenguaje algorítmico lo realizó K. Zuse en 1948. Su notación era bastante general, pero la propuesta nunca obtuvo la atención que merecía.

Heinz Rutishauser , creador de ALGOL

Incapaz de continuar construyendo computadoras —lo cual también estaba prohibido por las Potencias Aliadas [ 11 ] — Zuse dedicó su tiempo al desarrollo de un modelo y lenguaje de programación de nivel superior. [ 8 ] : 18 En 1948, publicó un artículo en el Archiv der Mathematik y presentó en la Reunión Anual de la GAMM . [ 4 ] : 89 Su trabajo no logró atraer mucha atención.

En el semestre de invierno de 1948/49, el lógico alemán Wilhelm Britzelmayr, quien en ese entonces era profesor adjunto de lógica formal en la LMU de Múnich , invitó a Konrad Zuse a impartir una conferencia sobre lógica aplicada y su sistema formal de planificación, es decir, el Plankalkül, en su coloquio. [ 4 ] : 88 En una conferencia de 1957, Zuse expresó su esperanza de que el Plankalkül, "después de un tiempo como una Bella Durmiente , finalmente cobre vida". [ 5 ] : 3 Expresó su decepción porque los diseñadores de ALGOL 58 nunca reconocieron la influencia del Plankalkül en su propio trabajo. [ 8 ] : 18 [ 7 ] : 15

Plankalkül fue republicado con comentarios en 1972. [ 12 ] El primer compilador para Plankalkül fue implementado por Joachim Hohmann en su tesis doctoral de 1975. [ 13 ] Otras implementaciones independientes siguieron en 1998 [ 14 ] y 2000 en la Universidad Libre de Berlín . [ 5 ] : 2

Descripción

Plankalkül se ha comparado con el lenguaje APL y con el álgebra relacional . Incluye sentencias de asignación, subrutinas , sentencias condicionales, iteración, aritmética de punto flotante , matrices, estructuras de registro jerárquicas, aserciones, manejo de excepciones y otras características avanzadas como la ejecución orientada a objetivos y el retroceso desde una solución deseada para construir una forma de alcanzar el producto final. Plankalkül proporciona una estructura de datos llamada grafo generalizado ( verallgemeinerter Graph ), que puede utilizarse para representar estructuras geométricas. [ 15 ]

Muchas características del Plankalkül reaparecen en lenguajes de programación posteriores; una excepción es su peculiar notación bidimensional que utiliza varias líneas.

Algunas características del Plankalkül: [ 4 ] : 217

Tipos de datos

El único tipo de dato primitivo en el Plankalkül es un bit simple o booleano ( en alemán : Ja-Nein-Werte – valor sí-no en la terminología de Zuse). Se denota mediante el identificadorS0{\displaystyle S0}Todos los demás tipos de datos son compuestos y se construyen a partir de tipos primitivos mediante "matrices" y "registros". [ 16 ] : 679

Así, una secuencia de ocho bits (que en la informática moderna podría considerarse un byte ) se denota por8×S0{\displaystyle 8\times S0}y matriz booleana de tamañometro{\displaystyle m}pornorte{\displaystyle n} es descrito pormetro×norte×S0{\displaystyle m\times n\times S0}Existe una notación abreviada, por lo que se podría escribirS1norte{\displaystyle S1\cdot n}en lugar denorte×S0{\displaystyle n\times S0}. [ 16 ] : 679

TipoS0{\displaystyle S0}podría tener dos valores posibles0{\displaystyle 0}yL{\displaystyle L}. Por lo tanto, una secuencia de 4 bits podría escribirse como L00L, pero en los casos en que dicha secuencia represente un número, el programador podría usar la representación decimal 9. [ 16 ] : 679

Registro de dos componentesσ{\displaystyle \sigma }yτ{\displaystyle \tau }se escribe como(σ,τ){\displaystyle (\sigma ,\tau )}. [ 16 ] : 679

El tipo ( en alemán : Art ) en Plankalkül consta de 3 elementos: valor estructurado ( en alemán : Struktur ), significado pragmático ( en alemán : Typ ) y posible restricción sobre los valores posibles ( en alemán : Beschränkung ). [ 16 ] : 679 Los tipos definidos por el usuario se identifican con la letra A seguida de un número, comoA1{\displaystyle A1}– primer tipo definido por el usuario.

Ejemplos

Zuse utilizó muchos ejemplos de la teoría del ajedrez: [ 16 ] : 680

Identificadores

Los identificadores son caracteres alfanuméricos con un número. [ 16 ] : 679 Existen los siguientes tipos de identificadores para variables: [ 10 ] : 10

  • Valores de entrada ( alemán : Eingabewerte, Variablen )  : marcados con una letra V.
  • Valores intermedios y temporales ( alemán : Zwischenwerte )  : marcados con la letra Z.
  • Constantes ( en alemán : Constanten )  — marcadas con la letra С.
  • Valores de salida ( en alemán : Resultatwerte )  — marcados con la letra R.

Una variable particular de algún tipo se identifica mediante un número, escrito debajo del tipo. [ 16 ] : 679 Por ejemplo:

V0{\displaystyle {\begin{matrix}V\\0\end{matrix}}},Z2{\displaystyle {\begin{matrix}Z\\2\end{matrix}}},do31{\displaystyle {\begin{matrix}C\\31\end{matrix}}}etc.

Los programas y subprogramas se marcan con la letra P, seguida de un número de programa (y opcionalmente de subprograma). Por ejemplo:PAG13{\displaystyle P13},PAG57{\displaystyle P5\cdot 7}. [ 16 ] : 679

Valor de salida del programa PAG13{\displaystyle P13}guardado allí en variableR0{\displaystyle {\begin{matrix}R\\0\end{matrix}}}está disponible para otros subprogramas bajo el identificadorR170{\displaystyle {\begin{matrix}R17\\0\end{matrix}}}y leer el valor de esa variable también implica ejecutar el subprograma relacionado. [ 16 ] : 680

Acceso a elementos por índice

Plankalkül permite el acceso a elementos separados de una variable mediante el uso de un "índice de componentes" ( en alemán : Komponenten-Index ). Por ejemplo, cuando el programa recibe una entrada en una variableV0{\displaystyle {\begin{matrix}V\\0\end{matrix}}}de tipoA10{\displaystyle A10}(estado del juego), entoncesV00{\displaystyle {\begin{matrix}V\\0\\0\end{matrix}}} — le da estado a la junta,V00i{\displaystyle {\begin{matrix}V\\0\\0\cdot i\end{matrix}}} — pieza en el cuadrado número i, yV00ij{\displaystyle {\begin{matrix}V\\0\\0\cdot i\cdot j\end{matrix}}}bit número j de esa pieza. [ 16 ] : 680

En los lenguajes de programación modernos, eso se describiría con una notación similar a V0[0], V0[0][i], V0[0][i][j](aunque para acceder a un solo bit en los lenguajes de programación modernos se suele utilizar una máscara de bits ).

sintaxis bidimensional

Debido a que los índices de las variables se escriben verticalmente, cada instrucción de Plankalkül requiere escribir varias filas.

La primera fila contiene el tipo de variable, luego el número de variable marcado con la letra V ( en alemán : Variablen-Index ), luego los índices de los subcomponentes de la variable marcados con K ( en alemán : Komponenten-Index ), y luego el índice de estructura ( en alemán : Struktur-Index ) marcado con S, que describe el tipo de variable. El tipo no es obligatorio, pero Zuse señala que esto ayuda a leer y comprender el programa. [ 16 ] : 681

En la líneaS{\displaystyle S}tiposS0{\displaystyle S0}yS1{\displaystyle S1}podría acortarse a0{\displaystyle 0}y1{\displaystyle 1}. [ 16 ] : 681

Ejemplos:

Los índices no solo pueden ser constantes. Las variables pueden usarse como índices para otras variables, y esto se indica con una línea que muestra en qué índice de componente se usaría el valor de la variable:

Operación de asignación

Zuse introdujo en su cálculo un operador de asignación, desconocido en matemáticas antes de él. Lo marcó con "{\displaystyle \Rightarrow }", y lo llamó signo de cede ( en alemán : Ergibt-Zeichen ). El uso del concepto de asignación es una de las diferencias clave entre las matemáticas y la informática. [ 7 ] : 14

Zuse escribió que la expresión:

Z+1ZV11{\displaystyle {\begin{array}{r|lll}&Z+1&\Rightarrow &Z\\V&1&&1\\\end{array}}}

es análogo a la ecuación matemática más tradicional:

Z+1=ZV11Kii+1{\displaystyle {\begin{array}{r|lll}&Z+1&=&Z\\V&1&&1\\K&i&&i+1\\\end{array}}}

Hay afirmaciones de que Konrad Zuse inicialmente usó el glifo como un signo de asignación, y comenzó a usarlo{\displaystyle \Rightarrow }bajo la influencia de Heinz Rutishauser . [ 16 ] : 681 Knuth y Pardo creen que Zuse siempre escribió{\displaystyle \Rightarrow }, y que fue introducido por los editores de «Über den allgemeinen Plankalkül als Mittel zur Formulierung esquematisch-kombinativer Aufgaben» en 1948. [ 7 ] : 14 En la conferencia ALGOL 58 en Zurich, los participantes europeos propusieron utilizar el carácter de asignación introducido por Zuse, pero la delegación estadounidense insistió en :=. [ 16 ] : 681

La variable que almacena el resultado de una asignación ( valor l ) se escribe a la derecha del operador de asignación. [ 7 ] : 14 La primera asignación a la variable se considera una declaración. [ 16 ] : 681

El lado izquierdo del operador de asignación se utiliza para una expresión ( en alemán : Ausdruck ), que define qué valor se asignará a la variable. Las expresiones pueden utilizar operadores aritméticos, operadores booleanos y operadores de comparación (=,,{\displaystyle =,\neq ,\leq }etc.). [ 16 ] : 682

La operación de exponenciación se escribe de forma similar a la operación de indexación, utilizando líneas en la notación bidimensional: [ 10 ] : 45

Notación de exponenciación en Plankalkül

Flujo de control

Los valores booleanos se representaban como enteros con FALSE=0y TRUE=1. El flujo de control condicional adoptaba la forma de una instrucción protegida A -> B, que ejecutaba el bloque Bsi Aera verdadero. También había un operador de iteración, de la forma W { A -> X; B -> Y} que se repetía hasta que todas las protecciones fueran falsas. [ 17 ]

Terminología

Zuse denominó a un programa individual Rechenplan («plan de cálculo»). Imaginó lo que llamó Planfertigungsgerät («dispositivo de ensamblaje de planes»), que traduciría automáticamente la formulación matemática de un programa a una película perforada legible por máquina , algo que hoy se denominaría traductor o compilador . [ 4 ] : 45, 104, 105

Ejemplo

La notación original era bidimensional, es decir, la indentación y, por lo tanto, la relación espacial de los diferentes símbolos terminales eran importantes en lo que respecta a la semántica que abarcaba varias líneas . Para una implementación posterior en la década de 1990, se desarrolló una notación lineal.

El siguiente ejemplo define una función max3(en una transcripción lineal) que calcula el máximo de tres variables:

P1 máx3 (V0[:8.0],V1[:8.0],V2[:8.0]) → R0[:8.0] max(V0[:8.0],V1[:8.0]) → Z1[:8.0] máx(Z1[:8.0],V2[:8.0]) → R0[:8.0] FIN P2 máx (V0[:8.0],V1[:8.0]) → R0[:8.0] V0[:8.0] → Z1[:8.0] (Z1[:8.0] < V1[:8.0]) → V1[:8.0] → Z1[:8.0] Z1[:8.0] → R0[:8.0] FIN

Véase también

Referencias

  1. Rojas, Raúl ; Hashagen, Ulf [en alemán] (2002). Los primeros ordenadores: historia y arquitecturas . MIT Press . pág.  292. ISBN 978-0-26268137-7. Consultado el 25 de octubre de 2013 .
  2. "PLANKALKÜL de Bernhard Behr" (PDF) .
  3. Zenil, Héctor [en Wikidata] , ed. (2012). Un universo computable: comprender y explorar la naturaleza como computación, con un prólogo de Sir Roger Penrose . Singapur: World Scientific Publishing Company . pág. 791. 
  4. 1 2 3 4 5 6 7 8 Hellige, Hans Dieter, ed. (Enero de 2004) [noviembre de 2002]. Escrito en Bremen, Alemania. Geschichten der Informatik. Visionen, Paradigmen, Leitmotive (en alemán) (1 ed.). Berlín/Heidelberg, Alemania: Springer-Verlag . págs.45 , 56, 89, 104–105 , 113, 152, 216–217 . doi : 10.1007/978-3-642-18631-8 . ISBN   978-3-540-00217-8ISBN 3-540-00217-0.(xii+514 páginas)
  5. 1 2 3 4 5 Rojas, Raúl ; Göktekin, Cüneyt; Friedland, Gerald; Kruger, Mike; Scharf, Ludmila; Kuniss, Denis; Langmack, Olaf (enero de 2004) [noviembre de 2002]. "Konrad Zuses Plankalkül - Seine Genese und eine moderne Implementierung" (PDF) . En Hellige, Hans Dieter (ed.). Geschichten der Informatik. Visionen, Paradigmen, Leitmotive. Parte 3: Leitideen und Paradigmen in der Entwicklung der Programmiersprachen und der Programmierung (en alemán) (1 ed.). Berlín/Heidelberg, Alemania: Springer-Verlag . págs. 215–235 [2–4]. doi : 10.1007/978-3-642-18631-8_9 . ISBN   978-3-642-62208-3Archivado del original (PDF) el 1 de mayo de 2006.(21 [24] páginas)
  6. "¿Por qué la lógica proposicional no es Turing completa?" . Matemáticas. StackExchange . 1 de abril de 2013. Archivado del original el 2 de noviembre de 2023. Consultado el 2 de noviembre de 2023 .
  7. 1 2 3 4 5 6 Knuth, Donald Ervin ; Pardo, Luis Isidoro Trabb [en portugués] (agosto de 1976). "El desarrollo temprano de los lenguajes de programación" (PDF) . Universidad de Stanford, Departamento de Ciencias de la Computación. págs. 8, 9, 14, 15. Archivado del original (PDF) el 12 de septiembre de 2017. Recuperado el 28 de diciembre de 2017 . 
  8. 1 2 3 4 Giloi, Wolfgang K. [en alemán] (abril-junio de 1997). "Plankalkül de Konrad Zuse: el primer lenguaje de programación de alto nivel "no von Neumann"" . IEEE Annals of the History of Computing . 19 (2). IEEE : 17–24 . doi : 10.1109/85.586068 .(8 páginas)
  9. ^ Petzold, Hartmut [en alemán] (1992). Rechenkünstler moderno. Die Industrialisierung der Rechentechnik en Deutschland (en alemán). Múnich, Alemania: CH Beck Verlag .
  10. ^ Zuse , Konrad ( 1946 ) [1945]. Rojas, Raúl ; Wagner, G.; Scharf, Ludmila; Schöttker-Söhl [Schötke-Suhl], Susanne (eds.). Der Plankalkül (In der Fassung von 1945) (Manuscrito) (en alemán). Archivo de Internet de Konrad Zuse. págs. 10, 45. ZIA ID: 0233. Archivado desde el original el 16 de abril de 2015 . Consultado el 1 de noviembre de 2023 . (1+1+180 páginas)
  11. ^ Coy, Wolfgang [en alemán] (enero de 2004) [noviembre de 2002]. "¿Was ist Informatik? Zur Entstehung des Faches an den deutschen Universitäten" . En Hellige, Hans Dieter (ed.). Geschichten der Informatik. Visionen, Paradigmen, Leitmotive. Parte 5: Wandel der Leitkonzepte in der Wissenschaftsdisziplin Informatik (en alemán) (1 ed.). Berlín/Heidelberg, Alemania: Springer-Verlag . págs. 473–498 [474]. doi : 10.1007/978-3-642-18631-8_17 . ISBN   978-3-540-00217-8ISBN 3-540-00217-0.
  12. ^ Zuse, Konrad (1972). Der Plankalkül. Kommentierter Nachdruck der Fassung von 1945 (en alemán). vol. 63. Sankt Augustin, Alemania: Gesellschaft für Mathematik und Datenverarbeitung (GMD) / Bundesministerium für Bildung und Wissenschaft (BMBW). BMW-GMD-63. 
  13. ^ Hohmann, Joaquín (1979). Der PLANKALKÜL im Vergleich mit algoritmicschen Sprachen . Reihe Informatik und Operations Research (en alemán). vol. 7 (1 ed.). Darmstadt, Alemania: S. Toeche-Mittler-Verlag (stmv). ISBN   3-87820-028-5.(136 páginas) Índice
  14. Mauerer, Wolfgang (3 de junio de 2016). "Der Plankalkül von Konrad Zuse" (en alemán). Implementación en alemán. Archivado desde el original el 15 de noviembre de 2016 . Consultado el 3 de octubre de 2017 .{{cite web}}: Mantenimiento CS1: bot: estado de la URL original desconocido ( enlace ) ; Mauerer, Wolfgang (3 de junio de 2016). "Der Plankalkül von Konrad Zuse" (en alemán). Implementación en alemán. Archivado desde el original el 3 de junio de 2016 . Consultado el 3 de octubre de 2017 .
  15. ^ Giloi, Wolfgang K. [en alemán] (noviembre de 1990), Konrad Zuses Plankalkül als Vorläufer moderner Programmiermodelle (en alemán)
  16. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 Bauer , Friedrich L. ; Wössner , Hans ( 1972 ) . "El "Plankalkül" de Konrad Zuse: un precursor de los lenguajes de programación actuales" (PDF) . Communications of the ACM . 15 (7): 678– 685. doi : 10.1145/361454.361515 . S2CID 17681101. Archivado del original (PDF) el 20 de febrero de 2009. ( HTML )
  17. Rojas, Raúl (2001). "Plankalkül" (PDF) . Enciclopedia de computadoras e historia de la informática . Chicago/Londres: Fitzroy Dearborn Publishers . pág. 634. ISBN  1-57958235-4. Consultado el 26 de mayo de 2023 .

Lecturas adicionales

  • Zuse, Konrad (1943). Ansätze einer Theorie des allgemeinen Rechnens unter besonderer Berücksichtigung des Aussagenkalküls und dessen Anwendung auf Relaisschaltungen [ Inicio de una teoría universal de la computación con especial consideración del cálculo proposicional y su aplicación a circuitos de relés ] (manuscrito inédito) (en alemán). Documentos Zuse 045/018.
  • Zuse, Konrad (6 de diciembre de 1948) [noviembre de 1948]. Escrito en Hopferau bei Füssen, Alemania. "Über den allgemeinen Plankalkül als Mittel zur Formulierung Schematisch-Kombinativer Aufgaben". Archiv der Mathematik (en alemán). 1 (6). Karlsruhe / Stuttgart / Basilea, Alemania: Birkhäuser Verlag : 441– 449. doi : 10.1007/BF02038459 . eISSN 1420-8938 . ISSN 0003-889X .  (9 páginas)
  • Rojas, Raúl ; Göktekin, Cüneyt; Friedland, Gerald; Kruger, Mike; Kuniss, Denis; Langmack, Olaf (febrero de 2000). Plankalkül: el primer lenguaje de programación de alto nivel y su implementación (PDF) . Berlín, Alemania: Institut für Informatik, Freie Universität Berlin y Feinarbeit.de. Informe Técnico B-3/2000. Archivado desde el original el 1 de mayo de 2006.(22 páginas)
  • Bruines, Bram (2010-01-08). "Plankalkül" (PDF) (Tesis). Archivado (PDF) del original el 2 de noviembre de 2023. Recuperado el 2 de noviembre de 2023 .(24 páginas)
  • "Plankalkül-Programme" . Konrad Zuse Internet Archive (en alemán e inglés). 21 de agosto de 2014. Archivado del original el 21 de agosto de 2014. Consultado el 4 de octubre de 2017 .(Nota: Applets y documentos de Plankalkül Java.)