Qualche programma può essere implementato meccanicamente?


13

È possibile costruire un'implementazione meccanica a scopo unico (non Turing completa) di Microsoft Word? È possibile implementare cose come iteratori, funzioni di primo ordine, l'intera gamma di tecniche di programmazione? Gli ingranaggi e altre parti meccaniche potrebbero rappresentare strutture di dati o persino oggetti di programma? A un certo punto questo richiede la costruzione di una macchina equivalente per Turing per uso generale, oppure ciascuna funzione, variabile, ecc. Può avere il suo unico costrutto meccanico sotto forma di volani e / o ingranaggi, cricchetti, che cosa hai? In breve, mi chiedo se un dato software su un computer standard possa essere compilato in un progetto meccanico.


Penso che qualcosa che esegua Microsoft Word non debba nemmeno essere eseguito su una Turing Machine, poiché tutte le procedure in Word dovrebbero essere (probabilmente) interrotte (tranne se c'è un bug ofc), a parte il ciclo degli eventi principale.
Realz Slaw


1
Se questo è possibile - il che sembra probabile - allora dovrebbe essere possibile creare una macchina completa non turing che funge da compilatore, creando schemi per altre macchine dal codice sorgente. Macchine che possono o meno essere completate.
Nick Johnson,

@Realz Slaw: non se includi I / O, macro VBA o estensioni. Ad esempio, dubito che Word si lamenterebbe se gli avessi fornito un documento Word infinito. È probabilmente il sistema operativo sottostante a raggiungere un limite.
reinierpost,

@reinierpost ma ogni routine non deve essere completata; o terminerebbero in modo dimostrabile oppure no. Vale a dire se gli avessi fornito un documento infinito, non si sarebbe concluso. Il mio punto era che la maggior parte dei programmi che realizziamo non deve usare un linguaggio completo di Turing, perché possiamo limitarlo a programmi che possiamo dimostrare terminati, dati non infiniti, e non terminanti se dati infiniti; e se puoi farlo, non c'è nessun problema con il problema Halting. TLDR; se non riesci a dimostrare che le tue routine terminano o no, sei un programmatore terribile.
Realz Slaw, l'

Risposte:


23

Sì. Ecco come lo fai:

Puoi compilare praticamente qualsiasi programma che preferisci ai circuiti. Vedi ad esempio il lavoro di Dan Ghica e dei suoi collaboratori sulla Geometria della Sintesi, che mostra come compilare i programmi in circuiti.

  1. Dan R. Ghica. Geometria della sintesi: un approccio strutturato al design VLSI
  2. Dan R. Ghica, Alex Smith. Geometry of Synthesis II: dai giochi ai circuiti insensibili al ritardo
  3. Dan R. Ghica, Alex Smith. Geometria di Synthesis III: gestione delle risorse attraverso l'inferenza del tipo.
  4. Dan R. Ghica, Alex Smith, Satnam Singh. Geometria della sintesi IV: compilazione della ricorsione affine in hardware statico.

I circuiti si rivelano quindi riapparire più e più volte in ingegneria. John Baez offre una grande tabella di analogie di concetti e trova molte connessioni, in This Week's Finds 288-296. Quindi gli schemi circuitali generati dal compilatore di Dan potrebbero essere istanziati come sistemi meccanici o idraulici, se proprio lo desideri!

╔══════════════════════════════════════════════════════════════╗
║                 displacement  flow      momentum     effort  ║
╠══════════════════════════════════════════════════════════════╣
║ Mechanics      position      velocity  momentum     force    ║
║ (translation)                                                ║
║                                                              ║
║ Mechanics      angle         angular   angular      torque   ║
║ (rotation)                   velocity  momentum              ║
║                                                              ║
║ Electronics    charge        current   flux         voltage  ║
║                                        linkage               ║
║                                                              ║
║ Hydraulics     volume        flow      pressure     pressure ║
║                                        momentum              ║
╚══════════════════════════════════════════════════════════════╝
  1. http://math.ucr.edu/home/baez/week288.html
  2. http://math.ucr.edu/home/baez/week289.html
  3. http://math.ucr.edu/home/baez/week290.html
  4. http://math.ucr.edu/home/baez/week291.html
  5. http://math.ucr.edu/home/baez/week294.html
  6. http://math.ucr.edu/home/baez/week296.html

12
Corollario: i brevetti software non hanno senso.
András Salamon,

1
Risposta fantastica per una domanda che sapevo a malapena fare. Grazie per il grafico aggiunto!
Alex Nye,

5

Un esempio pratico di ciò è il computer Tic Tac Toe realizzato con Tinker Toys presso il Boston Science Museum (originariamente realizzato da un team di studenti del MIT). Naturalmente, questo è molto più semplice di Microsoft Word.

Ecco un articolo del Scientific American del 1989 che lo descrive.

Ci sono state anche macchine di Turing fatte di lego (questo imbroglia un po 'perché usa l'elettricità - anzi un computer - per il movimento, ma penso che il design potrebbe essere modificato per evitare questo) rottami metallici e altro ancora.


Mi è piaciuto l'articolo e la macchina lego, grazie.
Alex Nye,

1

Nel tentativo di affrontare in modo specifico il tuo esempio di creazione di un editor in hardware, è stato creato un primo computer sperimentale che implementava sia il sistema operativo che l'editor interamente in hardware. Successivamente l'editor fu sostituito con un software, che ridusse sostanzialmente l'hardware necessario. Questo è stato descritto in un libro sull'architettura e la storia del computer. Purtroppo ho dimenticato il nome e non ho trovato le parole chiave per rintracciare la fonte originale.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.