¿Qué podemos inferir sobre el lenguaje de programación utilizado en "Jurassic Park" (el libro, no la película)?

En la novela Jurassic Park de Michael Crichton , el programador descontento Dennis Nedry instala una puerta trasera en el código informático que controla el parque. Para desenredar el lío de Nedry, el ingeniero del parque Ray Arnold va "detrás de escena para mirar el código, las instrucciones línea por línea que le decían a la computadora cómo comportarse. Arnold estaba tristemente consciente de que el programa completo de Jurassic Park contenía más de la mitad de un millones de líneas de código, la mayoría sin documentar, sin explicación". [página 219] Crichton nos da al menos tres ejemplos del código de Nedry, que puede encontrar al final de esta pregunta.

Ahora, yo mismo soy un programador. Soy muy consciente de que este "código" no es ningún lenguaje vivo, no es sintácticamente plausible para ningún lenguaje informático y está claramente fabricado por parte de Crichton. Sin embargo, con eso como un hecho, todavía hay algunas semánticas que podemos inferir de este código, ¿verdad? ¿Qué podemos inferir sobre el propósito de estos fragmentos de código? y ¿ cómo logran su propósito? Las explicaciones dentro y fuera del universo son igualmente bienvenidas. :)

(página 219)

*/Jurassic Park Main Modules/
*/
*/ Call Libs
Include: biostat.sys
Include: sysrom.vst
Include: net.sys
Include: pwr.mdl
*/
*/Initialize
SetMain [42]2002/9A{total CoreSysop %4 [vig. 7*tty]}
if ValidMeter(mH) (**mH).MeterVis return
Term Call 909 c.lev { void MeterVis $303 }  Random(3 #*MaxFid)
on SetSystem(!Dn) set shp_val.obj to lim(Val{d}SumVal)
  if SetMeter(mH) (**mH).ValdidMeter(Vdd) return
  on SetSystem(!Telcom) set mxcpl.obj to lim(Val{pd})NextVal

(página 230)

curV = GetHandl {ssm.dt} tempRgn {itm.dd2}.
curH = GetHandl {ssd.itl} tempRgn2 {itm.dd4}.
on DrawMeter(!gN) set shp_val.obj to lim(Val{d})-Xval.
if ValidMeter(mH) (**mH).MeterVis return.
if Meterhandl(vGT) ((DrawBack(tY)) return.
limitDat.4 = maxBits (%33) to {limit .04} set on.
limitDat.5 = setzero, setfive, 0 {limit .2 - var(szh)}.
on whte_rbt.obj call link.sst {security, perimeter} set to off.
vertRange = {maxRange+setlim} tempVgn(fdn-&bb+$404).
horRange = {maxRange-setlim/2} tempHgn(fdn-&dd+$105).
void DrawMeter send_screen.obj print.

(página 238)

Vg1 = GetHandl {dat.dt} tempCall {itm.temp}
Vg2 = GetHandl {dat.itl} tempCall {itm.temp}
if Link(Vg1,Vg2) set Lim(Vg1,Vg2) return
if Link(Vg2,Vg1) set Lim(Vg2,Vg1) return
on whte_rbt.obj link set security (Vg1), perimeter (Vg2)
limitDat.1 = maxBits (%22) to {limit .04} set on
limitDat.2 = setzero, setfive, 0 {limit .2 - var(dzh)}
on fini.obj call link.sst {security, perimeter} set to on
on fini.obj set link.sst {security, perimeter} restore
on fini.obj delete line rf whte_rbt.obj, fini.obj
Vg1 = GetHandl {dat.dt} tempCall {itm.temp}
Vg2 = GetHandl {dat.itl} tempCall {itm.temp}
limitDat.4 = maxBits (%33) to {limit .04} set on
limitDat.5 = setzero, setfive, 0 {limit .2 - var(szh)}

(página 239)

Vg1 = GetHandl {dat.dt} tempCall {itm.temp}
Vg2 = GetHandl {dat.itl} tempCall {itm.temp}
if Link(Vg1,Vg2) set Lim(Vg1,Vg2) return
if Link(Vg2,Vg1) set Lim(Vg2,Vg1) return
limitDat.1 = maxBits (%22) to {limit .04} set on
limitDat.2 = setzero, setfive, 0 {limit .2 - var(dzh)}
Vg1 = GetHandl {dat.dt} tempCall {itm.temp}
Vg2 = GetHandl {dat.itl} tempCall {itm.temp}
limitDat.4 = maxBits (%33) to {limit .04} set on
limitDat.5 = setzero, setfive, 0 {limit .2 - var(szh)}

Y aquí está el rastro que registró KeyCheck de las acciones de Nedry justo antes de que se apagara la seguridad. [página 228] Para que conste, los códigos ASCII son basura ( .*y XM..z.,4MZ.c.d.m7g?.cW<.,...+?..9Ygz.,4X.....9bdfg.p.?...MCX...) que indican que Nedry simplemente estaba golpeando el teclado ("Probablemente solo estaba matando el tiempo", dijo Wu. "Hasta que finalmente decidió ponerse manos a la obra" [página 228 ] ] ) o que estaba en una GUI usando los códigos del teclado para la navegación (pero eso es inverosímil dado el rango de teclas que está presionando).

13,42,121,32,88,77,19,13,122,13,44,52,77,90,13,99,13,100,13,109,55,103
144,13,99,87,60,13,44,12,09,13,43,63,13,46,57,89,103,122,13,44,52,88,9
31,13,21,13,57,98,100,102,103,13,112,13,146,13,13,13,77,67,88,23,13,13
system
nedry
goto command level
nedry
040/#xy/67&
mr goodbytes
keycheck off
safety off
sl off
security
whte_rbt.obj
Siento que esto está muy cerca de ser una pregunta de discusión... ¿para qué estás buscando respuestas específicamente?
Moví las viñetas hacia abajo en una respuesta y puse en negrita la pregunta específica aquí, con la esperanza de que eso ayude. Soy consciente de que esta es una pregunta límite para la ciencia ficción, pero realmente no parece encajar en las películas (porque estoy preguntando específicamente sobre una parte del libro que no está en la película) o stackoverflow. No estoy seguro de qué otros sitios de SE podrían estar interesados ​​en el cruce (libros de ciencia ficción + programación + construcción de mundos) ... ¡sugerencias bienvenidas si alguien tiene una!
Tal vez si pregunta qué intenta lograr cada uno de los fragmentos de código. En este momento estás diciendo "mira este código y dime qué piensas al respecto".
@Mooz eso suena excelente; He tratado de adoptar esa idea en mi última edición. También eliminé el requisito específico de que las respuestas sean interesantes. ;)
En los agradecimientos, Crichton dice que "los programas de computadora de Bob Gross inspiraron algunos de los gráficos". Sin embargo, no puedo encontrar nada a través de Google en ese frente. Tal vez la gente más ingeniosa pueda y podría conducir a alguna idea.
@NKCampbell FWIW, creo que por "los gráficos" se refería a las cosas del genoma en las páginas 103-105. Bob Gross es este tipo .
Este parece ser un ejemplo clásico de Hollywood Coding, con palabras legibles por humanos como " {seguridad, perímetro} activado" mezcladas con galimatías. Hay un ejemplo en cada bloque de código.
@Valorum De acuerdo. La primera vez que leí esos bits (ejem) inmediatamente los descarté como una combinación de código increíblemente legible (el "on fini.obj" en el tercer bloque de código) y alquimia informática (el "SetMain" en el primer bloque de código), obviamente destinado a aquellos lectores que no saben nada sobre lenguajes de programación. También descubrí la parte sobre el idioma que debe interpretarse para que el cambiador de código haga cualquier cosa, un completo absurdo en sistemas grandes.
Parece que es un lenguaje de programación basado en C. El lenguaje de programación C se usa desde 1969. Ha sido estandarizado por el Instituto Nacional Estadounidense de Estándares (ANSI) desde 1989 (ver ANSI C) y posteriormente por la Organización Internacional de Estandarización (ISO).
Hmm, ¿entonces esta pregunta está de vuelta en Cerrar cola de votación? acaba de ser reabierto
No puedo ir más allá del "¿qué podemos inferir?" parte de la pregunta Podemos inferir muchas cosas. Puede haber una pregunta viable aquí, pero primero debe pulirse.

Respuestas (2)

Desde una perspectiva puramente fuera del universo , estos fragmentos parecen ser un ejemplo perfecto del tropo Hollywood Hacking , con cada bloque de código que contiene una porción de texto legible por humanos.

en whte_rbt.obj llame a link.sst {seguridad, perímetro} desactivado.

aplastado en un trozo de basura sin sentido (para que el lector trabaje por ello y se sienta inteligente). Hay un ejemplo de esto en casi todos los fragmentos;

en fini.obj llamar a link.sst {seguridad, perímetro} activado
en fini.obj establecer link.sst {seguridad, perímetro} restaurar
en fini.obj eliminar línea rf whte_rbt.obj, fini.obj


Para que conste, Crichton era en realidad un programador bastante consumado por derecho propio. De hecho, su 'Oscar' fue en realidad un premio técnico que se le otorgó en 1995 por ser pionero en el software de programación y contabilidad de películas que todavía utilizan muchos estudios, por lo que definitivamente habría conocido la diferencia entre el software que realmente hizo algo, en oposición al software que simplemente parecía un software, pero no tiene ningún propósito real.

Quiero quejarme de que no hay suficientes advertencias en este artículo sobre la naturaleza tvtropes de uno de los enlaces, que es peligroso y puede causar mucho daño.
@JorgeCórdoba - Tienes que aprender a pasar el mouse sobre los enlaces antes de hacer clic en ellos.
Por teléfono no pude... ahí van 30 minutos de mi vida... y tengo la suerte de haberme escapado :P

Esta discusión se publicó originalmente como parte de la pregunta, pero la estoy moviendo a una respuesta en su lugar:

  • Un fragmento termina la mayoría de sus declaraciones con un punto .; el otro no usa ningún terminador de declaración en absoluto (excepto las líneas nuevas). Supongo que esto fue solo un descuido por parte de Crichton, pero hay algunos lenguajes reales en los que los terminadores de declaraciones son opcionales: por ejemplo, Javascript .

  • En un par de lugares, el código tiene if (some-condition) some-expression return, como si fuera un lenguaje Sujeto-Objeto-Verbo. El único lenguaje SOV remotamente convencional que conozco es Forth . ¿Habría conocido Crichton a Forth? No estoy seguro de cuán plausible hubiera sido para Nedry escribir el sistema informático en Forth (y medio millón de líneas en Forth, para el caso).

  • Uno de los aspectos menos plausibles del código, en mi humilde opinión, es la gran variedad de caracteres de puntuación que utiliza. Expresiones como [42]2002/9Ay 3#*MaxFidme parecen completamente inverosímiles... pero ¿hay algún idioma en el que tales expresiones sean significativas? ¿Qué pasa con el uso repetido de prefijo- !(¿significa "no" como en C?) y prefijo- %?

  • Una de las características más poderosas del lenguaje de Crichton parece ser la onconstrucción, que parece configurar lo que hoy llamaríamos un "controlador de eventos" para monitorear el sistema y tomar medidas cuando se cumple una condición determinada. El código de Nedry contiene las cláusulas on SetSystem(!Dn), on SetSystem(!Telcom)(anidadas dentro de la cláusula anterior, lo cual es emocionante) y, on whte_rbt.objla última de las cuales en realidad está escuchando el texto whte_rbt.objque se escribe .en el símbolo del sistema! (Página 230: "El gordo bastardo puso lo que parecía una llamada de objeto, pero en realidad es un comando...") ¿Cuál es el precedente más cercano para este tipo de cosas en los sistemas informáticos reales? La estrecha integración del lenguaje con el analizador de comandos me sugiere que esto se parece más a un antiguo sistema de mainframe (es decir, esto no es Unix; no lo sé).

  • La última característica ingeniosa del código de Nedry es que "El comando llamado fini.objrestablece los parámetros vinculados... Pero hace algo más. Luego borra las líneas de código que se refieren a él. Destruye toda evidencia de que alguna vez estuvo allí. Bastante ingenioso". [página 238] No tengo conocimiento de ningún idioma, excepto quizás INTERCAL , que admita una automodificación tan fácil. Y simplemente "borrar [ing] las líneas de código" en realidad no sería lo suficientemente bueno, a menos que se interprete el lenguaje ... ¡o a menos que lo que estamos viendo aquí sea en realidad un volcado desensamblado del código binario real! Pero la idea de que esta es la idea de alguien de un volcado de ensamblador legible es aún más difícil de tragar para mí.

Si esos símbolos parecen inverosímiles, echa un vistazo a APL
Bueno, conozco APL, pero no conozco los lenguajes J y K basados ​​en ASCII (ni si esos lenguajes existían en la era de Nedry). ¿El uso de los símbolos ASCII !, &, %, **parece similar a alguno de esos idiomas? Sospecho que no, pero realmente no lo sé. (¡Publica una respuesta! :))
Perl usa una amplia variedad de símbolos ASCII en una amplia variedad de combinaciones. Especialmente Perl6.