2011-11-07 11 views
7

Stavo guardando il film MATRIX-II ieri, mostra "Agent Smith", che è un programma, si intromette in altri programmi e li rende la replica di se stesso. Quindi entrambi iniziano a comportarsi da soli, ma con le stesse caratteristiche.Agent Smith auto-replicazione da MATRIX-II

  1. Per tale replica "Agente Smith" deve copiare il suo codice e dati ad altri prog rimuovere il vecchio
  2. Ora entrambi si comportano e terminano in modo indipendente, ma sono ugualmente in grado

mi chiedevo se/come è possibile.

+1

A meno che il target non sia stato jailbroken. – Thilo

risposta

9

Agent Smith è un quine.

A proposito di 1. - In realtà non lo so davvero. Da quello che sappiamo, il vecchio codice non viene sovrascritto (che è forse il motivo per cui l'oracolo esiste ancora alla fine). Sembra più possibile che si verifichi una sorta di iniezione di codice, il vecchio codice viene ignorato e viene eseguito il codice di Smith.

Inoltre, non essere sicuro che tutti i cloni di Smith si comportino allo stesso modo. Mi sembra che ci sia un "server" centrale Smith e tutti gli altri sono clienti.

+0

Vale anche la pena ricordare che questo è strettamente correlato a [Kleene's Recursion Theorem] (http://en.wikipedia.org/wiki/Kleene%27s_recursion_theorem), che ha dimostrato le possibilità teoriche di stampare/replicare un codice. – amit

+1

Agent Smith * potrebbe * essere un quine, ma poiché gli unici sistemi in città sono eseguiti su server amministrati da Machines, potrebbe essere semplicemente che il codice iniettato utilizza execv per sostituire l'immagine con '/ usr/bin/smith', che si connette all'originale per caricare lo stato corrente (memoria a breve termine, ecc.). –

1

Suppongo che tutta l'intelligenza, compresa l'intelligenza artificiale, sia chaotic in quanto sensibile alle condizioni iniziali. Dopo la replica, Agent Smith # 1 guarda a sinistra e Agent Smith # 2 e Agent Smith # 2 guardano direttamente a Agent Smith # 1. Questo è sufficiente per inviarli lungo percorsi di comportamento leggermente diversi.

Per di più, la replica (quine come per Lucian), probabilmente randomizza alcuni coefficienti del programma, rendendolo leggermente diverso.

Due teste sono meglio di una, ma solo se non hanno esattamente gli stessi pensieri!

1

Dai anche un'occhiata a come funziona fork(2). Ottieni programmi identici, ma la prossima dichiarazione controlla se sei la copia o l'originale e agisce di conseguenza.