Plankalkül ( pronunciación alemana: [ˈplaːnkalkyːl] ) es un lenguaje de programación diseñado con 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.
Paradigma | Procesal |
---|---|
Diseñada por | Konrad Zuse |
Apareció por primera vez | 1948 | - concepto publicado por primera vez
Implementaciones importantes | |
Plankalkül-Compiler por la FU Berlín en 2000 | |
Influenciado por | |
Begriffsschrift [1] | |
Influenciado | |
Superplan de Heinz Rutishauser , ALGOL 58 [2] |
Kalkül 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 de planificación. [3]
Historia
En el campo de la creación de máquinas de computación, Zuse fue autodidacta y las desarrolló sin conocimiento sobre otras máquinas de computación mecánica que ya existían, aunque más tarde (construyendo la Z3 ) se inspiró en el libro de Hilbert y Ackermann sobre primaria. lógica matemática (cf. Principios de lógica matemática ). [4] Para describir los circuitos lógicos, Zuse inventó su propio diagrama y sistema de notación, al que llamó "combinatoria de condicionales" (en alemán : Bedingungskombinatorik ). Después de terminar el 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] Lo que Zuse tenía en mente, sin embargo, necesitaba ser mucho más poderoso (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] Escribió lo siguiente en su cuaderno:
Casi medio año de introducción gradual en la lógica formal. Allí redescubrí muchos de mis pensamientos anteriores. (combinatoria de condicionales = cálculo proposicional ; estudio de intervalos = teoría de celosía ). Ahora planeo la creación de "Cálculo de planes". Hay una serie de conceptos necesarios para aclarar esto. | Seit etwa einem halben Jahr allmähliches Einführen in die formale Logik. Viele meiner früheren Gedanken habe ich dort wieder gefunden. (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. |
—El cuaderno de Konrad Zuse [5] |
Mientras trabajaba en su tesis doctoral, Zuse desarrolló el primer sistema formal conocido de notación de algoritmos [7] capaz de manejar ramas y bucles. [8] [9] En 1942 comenzó a escribir un programa de ajedrez en Plankalkül. [10] En 1944, Zuse se reunió con el lógico y filósofo alemán Heinrich Scholz , quien expresó su aprecio por la utilización del cálculo lógico por parte de Zuse . [11] En 1945, Zuse describió a Plankalkül en un libro inédito. [12] Sin embargo, el colapso de la Alemania nazi le impidió enviar su manuscrito. [8]
En ese momento, las dos únicas computadoras que funcionaban en el mundo eran ENIAC y Harvard Mark I , ninguna de las cuales usaba un compilador, y ENIAC necesitaba ser reprogramado para cada tarea cambiando la conexión de los cables. [13]
Aunque la mayoría de sus computadoras fueron destruidas por las bombas aliadas, Zuse pudo rescatar una máquina, la Z4 , y trasladarla a la aldea alpina de Hinterstein [14] (parte de Bad Hindelang ).
El primer intento de idear un lenguaje algorítmico fue realizado en 1948 por K. Zuse. Su notación fue bastante general, pero la propuesta nunca obtuvo la consideración que merecía.
- Heinz Rutishauser , creador de ALGOL
Incapaz de continuar construyendo computadoras - lo que también fue prohibido por las Potencias Aliadas [15] - Zuse dedicó su tiempo al desarrollo de un modelo y lenguaje de programación de alto nivel. [8] En 1948 publicó un artículo en el Archiv der Mathematik y lo presentó en la Reunión Anual del GAMM . [16] Su trabajo no atrajo mucha atención. [ cita requerida ] En una conferencia de 1957, Zuse expresó su esperanza de que Plankalkül, "después de algún tiempo como Bella Durmiente , todavía cobre vida". [ cita requerida ] Expresó su decepción porque los diseñadores de ALGOL 58 nunca reconocieron la influencia de Plankalkül en su propio trabajo. [8] [17]
Plankalkül se publicó de manera más completa [ vaga ] en 1972. El primer compilador fue implementado por Joachim Hohmann en su disertación de 1975. [18] Otras implementaciones independientes siguieron en 1998 [19] y 2000 en la Universidad Libre de Berlín . [20]
Descripción
Plankalkül ha establecido comparaciones con el lenguaje APL y con el álgebra relacional . Incluye declaraciones de asignación, subrutinas , declaraciones condicionales, iteración, aritmética de punto flotante, matrices, estructuras de registros jerárquicos, afirmaciones, manejo de excepciones y otras características avanzadas como la ejecución dirigida por objetivos . Plankalkül proporciona una estructura de datos denominada gráfico generalizado ( gráfico verallgemeinerter ), que se puede utilizar para representar estructuras geométricas. [21]
Plankalkül compartió una notación idiosincrásica usando múltiples líneas con la Begriffsschrift de Frege de 1879 (que trata de la lógica matemática ). [ aclaración necesaria ]
Algunas características del Plankalkül: [22]
- solo variables locales
- las funciones no admiten la recursividad
- solo admite llamadas por valor
- los tipos compuestos son matrices y tuplas
- contiene expresiones condicionales
- contiene un bucle for y un bucle while
- no goto
Tipos de datos
El único tipo de datos primitivo en el Plankalkül es un solo bit o booleano ( alemán : Ja-Nein-Werte - valor sí-no en la terminología de Zuses). Está denotado por el identificador. Todos los demás tipos de datos son compuestos y se construyen a partir de primitivos mediante "matrices" y "registros". [23]
Entonces, una secuencia de ocho bits (que en la informática moderna podría considerarse un byte ) se denota pory matriz booleana de tamaño por es descrito por . También existe una notación abreviada, por lo que se podría escribir en vez de . [23]
Tipo podría tener dos valores posibles y . Por tanto, la 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 utilizar la representación decimal 9. [23]
Registro de dos componentes y está escrito como . [23]
Tipo ( alemán : Arte ) en Plankalkül consta de 3 elementos: valor estructurado ( alemán : Struktur ), significado pragmático ( alemán : Typ ) y posible restricción de valores posibles ( alemán : Beschränkung ). [23] Los tipos definidos por el usuario se identifican mediante la letra A con un número, como - primer tipo definido por el usuario.
Ejemplos de
Zuse usó muchos ejemplos de la teoría del ajedrez: [24]
Coordenada del tablero de ajedrez (tiene un tamaño de 8x8, por lo que 3 bits son suficientes) | ||
cuadrado del tablero (por ejemplo, L00, 00L denota e2 en notación algebraica ) | ||
pieza (por ejemplo, 00L0 - rey blanco) | ||
pieza en un tablero (por ejemplo, L00, 00L; 00L0 - rey blanco en e2) | ||
tablero (posiciones de las piezas, describe qué pieza contiene cada uno de los 64 cuadrados) | ||
estado del juego - Junta, - quien se mueve, - posibilidad de enroque (2 para el blanco y 2 para el negro), A2 - información sobre la célula en la que En passant movimiento es posible |
Identificadores
Los identificadores son caracteres alfanuméricos con un número. [23] Existen los siguientes tipos de identificadores para variables: [25]
- Valores de entrada ( alemán : Eingabewerte, Variablen ): marcados con una letra V.
- Valores temporales intermedios ( alemán : Zwischenwerte ): marcados con una letra Z.
- Constantes ( alemán : Constanten ) - marcadas con una letra С.
- Valores de salida ( alemán : Resultatwerte ): marcados con una letra R.
La variable particular de algún tipo se identifica mediante un número, escrito debajo del tipo. [23] Por ejemplo:
- , , etc.
Los programas y subprogramas están marcados con una letra P, seguida de un número de programa (y opcionalmente un subprograma). Por ejemplo, . [23]
Valor de salida del programa guardado allí en variable está disponible para otros subprogramas bajo el identificador , y leer el valor de esa variable también significa ejecutar el subprograma relacionado. [24]
Accediendo a elementos por índice
Plankalkül permite el acceso a elementos separados de la variable mediante el uso de "índice de componente" ( alemán : Komponenten-Index ). Cuando, por ejemplo, el programa recibe entrada en variable de tipo (estado del juego), luego - da el estado de la placa, - pieza en el cuadrado número i, y bit número j de esa pieza. [24]
En los lenguajes de programación modernos, que se describiría por la notación similar a V0[0]
, V0[0][i]
, V0[0][i][j]
(a pesar de tener acceso a un solo bit en lenguajes de programación modernos una máscara de bits se utiliza normalmente).
Sintaxis bidimensional
Debido a que los índices de las variables se escriben verticalmente, cada instrucción de Plankalkül requiere que se escriban varias filas.
La primera fila contiene el tipo de variable, luego el número de variable marcado con la letra V ( alemán : Variablen-Index ), luego los índices de los subcomponentes variables marcados con K ( alemán : Komponenten-Index ) y luego ( alemán : Struktur-Index ) marcado con S, que describe el tipo de variable. No se requiere escribir, pero Zuse señala que esto ayuda a leer y comprender el programa. [26]
En la linea tipos y podría acortarse a y . [26]
Ejemplos:
variable V3 - lista de pares de valores de tipo | |
La fila K se puede omitir cuando está vacía. Por lo tanto, esta expresión significa lo mismo que el anterior. | |
El valor del bit de ocho (índice 7), del primer par (índice 0), del elemento enésimo de la variable V3, tiene tipo booleano (). |
Los índices pueden ser no solo constantes. Las variables podrían usarse como índices para otras variables, y eso está marcado con una línea, que muestra en qué índice de componente se usaría el valor de la variable:
Elemento Z5 de la variable V3. Equivalente a la expresión V3[Z5] en muchos lenguajes de programación modernos. [26] |
Operación de asignación
Zuse introdujo en su operador de cálculo, desconocido para las matemáticas antes que él: asignación. Lo marcó con «», Y lo llamó signo de rendimiento ( 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. [27]
Zuse escribió esa expresión:
es análogo a una ecuación matemática más tradicional:
Hay afirmaciones de que Konrad Zuse usó inicialmente el glifo como señal de asignación, y comencé a usar bajo la influencia de Heinz Rutishauser . [26] Knuth y Pardo creen que Zuse siempre escribió, y eso fue presentado por los editores de «Über den allgemeinen Plankalkül als Mittel zur Formulierung schematisch-kombinativer Aufgaben» en 1948. [27] En la conferencia ALGOL 58 en Zurich, los participantes europeos propusieron utilizar para la asignación el carácter presentado por Zuse, pero la delegación estadounidense insistió en :=
. [26]
La variable que almacena el resultado de una asignación ( valor l ) se escribe en el lado derecho del operador de asignación. [27] La primera asignación a la variable se considera una declaración. [26]
El lado izquierdo del operador de asignación se usa para la expresión ( alemán : Ausdruck ), que define qué valor se asignará a la variable. Las expresiones pueden usar operadores aritméticos, operadores booleanos y operadores de comparación (etc.). [28]
La operación de exponenciación se escribe de manera similar a la operación de indexación, utilizando líneas en notación 2D: [29]
Flujo de control
Terminología
Zuse llamó a un solo programa un Rechenplan ("plan de cálculo"). Imaginó lo que llamó un Planfertigungsgerät ("dispositivo de montaje de planos"), que traduciría automáticamente la formulación matemática de un programa en una película perforada legible por máquina . [30]
Ejemplo
La notación original era bidimensional. [ aclaración necesaria ] 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 max3 (V0 [: 8.0], V1 [: 8.0], V2 [: 8.0]) → R0 [: 8.0]máx. (V0 [: 8.0], V1 [: 8.0]) → Z1 [: 8.0]máx. (Z1 [: 8.0], V2 [: 8.0]) → R0 [: 8.0]FINALP2 máx. (V0 [: 8.0], V1 [: 8.0]) → R0 [: 8.0]V0 [: 8.0] → Z1 [: 8.0](Z1 [: 8.0]Z1 [: 8.0] → R0 [: 8.0]FINAL
Ver también
- Historia de los lenguajes de programación
- Cronología de los lenguajes de programación
- Lista de lenguajes de programación
Notas
- ^ "Lenguajes de programación tempranos / CS208e: grandes ideas en informática" (PDF) .
- ^ Rojas, Raúl; Hashagen, Ulf (2002). Las primeras computadoras: historia y arquitecturas . Prensa del MIT. pag. 292. ISBN 978-0262681377. Consultado el 25 de octubre de 2013 .
- ^ Héctor Zenil (ed.), 2012. Un universo computable: comprensión y exploración de la naturaleza como computación con un prólogo de Sir Roger Penrose . Singapur: World Scientific Publishing Company. Página 791.
- ^ a b Hans Dieter Hellige, ed. (2004). Geschichten der Informatik. Visionen, Paradigmen, Leitmotive (en alemán). Berlín: Springer. págs. 113n 152, 216. ISBN 978-3-540-00217-8.
- ^ a b Rojas y col. 2004 , pág. 3.
- ^ "¿Por qué la lógica proposicional no es Turing completa?" .
- ^ Knuth y Pardo 1976 , p. 9
- ^ a b c d Giloi 1997
- ^ Hans Dieter Hellige (ed.): Geschichten der Informatik . Visionen, Paradigmen, Leitmotive. Berlín, Springer 2004, ISBN 3-540-00217-0 . pag. 56.
- ^ Hans Dieter Hellige (ed.): Geschichten der Informatik . Visionen, Paradigmen, Leitmotive. Berlín, Springer 2004, ISBN 3-540-00217-0 . pag. 216.217.
- ^ Hartmut Petzold, Moderne Rechenkünstler. Die Industrialisierung der Rechentechnik en Deutschland . München. CH Beck Verlag 1992
- ^ (texto completo del manuscrito de 1945)
- ^ Rojas y col. 2000 , pág. 3.
- ^ Knuth y Pardo 1976 , p. 8
- ^ Prof. Wolfgang Coy: Was ist Informatik? Zur Entstehung des Faches an den deutschen Universitäten , en: Hans Dieter Hellige (ed.): Geschichten der Informatik . Visionen, Paradigmen, Leitmotive. Berlín, Springer 2004, ISBN 3-540-00217-0 . pag. 474.
- ^ Hans Dieter Hellige (ed.): Geschichten der Informatik. Visionen, Paradigmen, Leitmotive. Berlín, Springer 2004, ISBN 3-540-00217-0 . pag. 89.
- ^ Knuth y Pardo 1976 , p. 15
- ^ Joachim Hohmann: Der Plankalkül im Vergleich mit algorítmischen Sprachen . Reihe Informatik und Operations Research, S. Toeche-Mittler Verlag, Darmstadt 1979, ISBN 3-87820-028-5 .
- ^ Descripción de Plankalkül-Compiler por Wolfgang Mauerer
- ^ Rojas y col. 2000 , pág. 2.
- ^ Prof. Wolfgang Giloi : Konrad Zuses Plankalkül als Vorläufer moderner Programmiermodelle, noviembre de 1990
- ^ Hans Dieter Hellige (ed.): Geschichten der Informatik. Visionen, Paradigmen, Leitmotive. Berlín, Springer 2004, ISBN 3-540-00217-0 . pag. 217.
- ↑ a b c d e f g h Bauer y Wössner 1972 , p. 679.
- ↑ a b c Bauer y Wössner , 1972 , p. 680.
- ↑ Zuse , 1945 , pág. 10.
- ↑ a b c d e f Bauer y Wössner 1972 , p. 681.
- ↑ a b c Knuth y Pardo , 1976 , p. 14.
- ^ Bauer y Wössner 1972 , p. 682.
- ↑ Zuse , 1945 , pág. 45.
- ^ Hellige, Hans Dieter, Geschichten der Informatik . Visionen, Paradigmen, Leitmotive. Berlín, Springer 2004, ISBN 3-540-00217-0 . págs.45, 104, 105
Referencias
- Giloi, Wolfgang (1997). "Plankalkül de Konrad Zuse: el primer lenguaje de programación de alto nivel" non von Neumann " . IEEE Annals of the History of Computing . 19 (2): 17-24. doi : 10.1109 / 85.586068 .
- Knuth, Donald Ervin; Pardo, Luis Trabb (1976), The Early Development of Programming Languages (PDF) , Universidad de Stanford, Departamento de Ciencias de la Computación, archivado desde el original (PDF) el 2017-09-12 , consultado el 2017-12-28CS1 maint: ref duplica el valor predeterminado ( enlace )
- Zuse, Konrad (1943), "Ansätze einer Theorie des allgemeinen Rechnens unter besonderer Berücksichtigung des Aussagenkalküls und dessen Anwendung auf Relaisschaltungen", (es decir, el inicio de una teoría universal de la computación con especial consideración del cálculo proposicional y su aplicación a los circuitos de retransmisión ). manuscrito inédito, Zuse Papers 045/018.
- Zuse, Konrad (1948/49). "Über den allgemeinen Plankalkül als Mittel zur Formulierung schematisch-kombinativer Aufgaben". Arco. Matemáticas. 1, págs. 441–449, 1948/49.
- Zuse, Konrad (1972). "Der Plankalkül". Gesellschaft für Mathematik und Datenverarbeitung. Nr. 63, BMBW - GMD - 63, 1972.
- Bauer, Friedrich L .; Wössner, Hans (1972). "El" Plankalkül "de Konrad Zuse: un precursor de los lenguajes de programación actuales" (PDF) . Archivado desde el original (pdf) el 20 de febrero de 2009. Cite journal requiere
|journal=
( ayuda )( Versión HTML ) - Rojas, Raúl ; Göktekin, Cüneyt; Friedland, Gerald; Krüger, Mike (2000). Plankalkül: el primer lenguaje de programación de alto nivel y su implementación (PDF) . Archivado desde el original el 1 de mayo de 2006.
- Rojas, Raúl ; Göktekin, Cüneyt; Friedland, Gerald; Krüger, Mike; Scharf, Ludmila (2004). Konrad Zuses Plankalkül - Seine Genese und eine moderne Implementierung (PDF) . doi : 10.1007 / 978-3-642-18631-8_9 . Archivado desde el original (PDF) el 1 de mayo de 2006.
enlaces externos
- El "Plankalkül" de Konrad Zuse: un precursor de los lenguajes de programación actuales por Friedrich L. Bauer ( fuente alternativa )
- Rojas, Raúl , et al. (2000). "Plankalkül: El primer lenguaje de programación de alto nivel y su implementación". Institut für Informatik, Freie Universität Berlin, Informe técnico B-3/2000. (texto completo) (archivado)
- 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 .
- "Plankalkül" . Archivo de Internet Konrad Zuse . Página archivada con subprogramas java de Plankalkül (no funciona) y varios documentos (alemán / inglés). 2014-08-21. Archivado desde el original el 21 de agosto de 2014 . Consultado el 4 de octubre de 2017 .CS1 maint: otros ( enlace )
- Bram Bruines: Plankalkul (2010) - Plankalkül descrito de manera formal