Чи можна будь-яку програму реалізовувати механічно?


13

Чи можливо побудувати єдину мету (не Тюрінг повну) механічну реалізацію, скажімо, Microsoft Word? Чи можливо реалізувати такі речі, як ітератори, функції першого порядку, всю гаму технік програмування? Чи можуть передачі та інші механічні деталі представляти структуру даних або навіть об’єкти програми? У певний момент це потребує побудови машини загального призначення, еквівалентної Тьюрінгу, чи може кожна функція, змінна тощо мати свою унікальну механічну конструкцію у вигляді маховиків та / або шестерень, храповиків, що у вас є? Підсумовуючи запитання, мені цікаво, чи можна було б скласти будь-яку частину програмного забезпечення на стандартному комп’ютері до механічного креслення.


Я думаю, те, що працює з Microsoft Word, навіть не потрібно запускати на машині Тьюрінга, оскільки всі процедури в Word повинні бути (доказливо) завершені (за винятком випадків, коли є помилка ofc), окрім основного циклу подій.
Realz Slaw


1
Якщо це можливо - що здається ймовірним - тоді слід створити нестандартну машину, яка виступає компілятором, створюючи креслення для інших машин із вихідного коду. Машини, які можуть, а можуть і самі не бути завершеними.
Нік Джонсон

@Realz Slaw: не якщо ви включаєте макроси вводу / виводу, VBA або розширення. Наприклад, я сумніваюся, що Word поскаржився б, якщо ви подали йому нескінченний документ Word. Це, мабуть, основна ОС, яка досягне межі.
reinierpost

@reinierpost, але кожен режим не повинен бути завершеним; вони або доказувально припиняться, або доказувально ні. Тобто якби ви подавали йому нескінченний документ, він, мабуть, не припиниться. Моя думка полягала в тому, що більшість програм, які ми створюємо, не повинні використовувати повну мову Тюрінга, оскільки ми можемо обмежити це програмами, які ми можемо довести, що закінчується, надаючи нескінченні дані, і не припиняються, якщо надаються нескінченні дані; і якщо ви можете це зробити, проблеми з зупинкою не виникає. TLDR; якщо ви не можете довести, що ваша програма припиняється чи ні, ви страшний програміст.
Realz Slaw

Відповіді:


23

Так. Ось як це зробити:

Ви можете скласти в основному будь-яку програму, яка вам подобається в схемах. Дивіться, наприклад, роботу Дена Гіки та його співробітників з геометрії синтезу, де показано, як складати програми в схеми.

  1. Ден Р. Гіка. Геометрія синтезу: структурований підхід до проектування VLSI
  2. Ден Р. Гіка, Алекс Сміт. Геометрія синтезу II: від ігор до замикаючих нечутливих схем
  3. Ден Р. Гіка, Алекс Сміт. Геометрія синтезу III: Управління ресурсами за допомогою виводу типу.
  4. Ден Р. Гіка, Алекс Сміт, Сатнам Сінгх. Геометрія синтезу IV: складання афінної рекурсії в статичну техніку.

Потім, як виявляється, схеми знову з’являються в техніці. Джон Баез наводить велику таблицю аналогій понять і працює в багатьох зв'язках у цій справі 288-296. Тож схеми генерування компілятора Дана можна створити як механічну або гідравлічну системи, якби ви цього дуже хотіли!

╔══════════════════════════════════════════════════════════════╗
║                 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
Наслідок: патенти на програмне забезпечення не мають сенсу.
Андрас Саламон

1
Фантастична відповідь на запитання, яке я ледве вмів задати. Дякуємо за доданий графік!
Алекс Най

5

Практичним прикладом цього є комп’ютер Tic Tac Toe, виготовлений з іграшок Tinker в Бостонському науковому музеї (спочатку виготовлений командою студентів MIT). Звичайно, це набагато простіше, ніж Microsoft Word.

Ось стаття 1989 року від Science American, що описує її.

Були також машини Тьюрінга, виготовлені з лего (це трохи обманює, оскільки він використовує електроенергію --- справді комп'ютер --- для руху, але я думаю, що дизайн міг би бути модифікований, щоб уникнути цього) металобрухт тощо.


Мені сподобалось стаття та машина лего, спасибі.
Алекс Най

1

Намагаючись розглянути конкретно ваш приклад створення редактора в апаратному забезпеченні, був створений ранній експериментальний комп'ютер, який реалізував як операційну систему, так і редактор повністю апаратно. Пізніше редактор був замінений на програмне забезпечення, яке значно скоротило необхідне обладнання. Це було описано в книзі про комп'ютерну архітектуру та історію. На жаль, я забув ім'я та не знайшов ключових слів, щоб відстежувати початкове джерело.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.