Що таке практична архітектура, що не фон Неймана?


16

Чи є якісь практичні додатки для моделей програмування, які не фон Неймана? Які найпоширеніші мови програмування не фон Неймана?


6
що таке модель програмування "не фон Неймана"?
Суреш Венкат

Я також не розумію питання, можливо, ви можете додати деякі питання до питання, щоб стало легше зрозуміти, що ви запитуєте.
Каве

3
von neumann архітектура має процесор. тому архітектура паралельної обробки, мабуть, не фон Неймана (архітектура Неймана була винайдена до паралельної обробки). але погодився питання здається неоднозначним або туманним. фон Нейманн відноситься до комп'ютерної архітектури, а не насправді точно до моделі програмування. модель програмування та архітектура процесора / комп’ютера існують у вигляді синергії / симбіозу, але також є дещо незалежними одна від одної .... різні архітектури можуть реалізовувати різні моделі програмування, не моделюючи програмування, "поєднуючись" з архітектурою ...
vzn

1
Що таке не-фон Неймана програмування мови ? Що з цього питання, що таке мова програмування фон Неймана? (Я не знаходжу визначення Backus --- по суті "імперативні мови" --- навіть крихітний трішки переконливий.)
Jeffε

1
@Ronny: Сторінка Вікіпедії просто папуга "Стаття Бекуса".
Jeffε

Відповіді:


12

Коли я кажу "архітектура фон Неймана", я маю на увазі деяке обладнання, яке обмежене "вузьким місцем" фон Неймана - тобто, всі дані переносяться через вузьку шину даних.

Мови програмування Neonann, які я натрапляю, найчастіше - VHDL та Verilog . У VHDL та Verilog за замовчуванням все відбувається одночасно. Програмісту доводиться докладати додаткових зусиль, щоб ряд подій відбувався в послідовному порядку. Це сильно відрізняється від більшості інших мов програмування, що передбачає "вказівник інструкції", який за замовчуванням виконує щонайбільше один рядок коду в будь-який момент, і програмісту доводиться докладати додаткових зусиль, щоб зробити кілька речей, що відбуваються одночасно час.

Деякі люди кажуть, що це більш природний дефолт. Багато студентів, що починають програмувати, очікують, що цикл "while (x> 0) {...}" вийде з моменту, коли x стає рівним нулю, і вони здивовані, дізнавшись, що комп'ютер не оцінює безперервно цю умову.

Більшість людей, що пишуть код VHDL та Verilog, збирають свої програми на FPGA, створюючи невеликі блоки активності, які весь час працюють на повній швидкості. Часто такі люди встановлюють "конвеєр", який зчитує дані з вхідних штифтів, обробляє їх через ряд блоків, вихідні штифти одного блоку безпосередньо підключаються до вхідних штифтів наступного блоку, а кінцевий блок надсилає результат назовні вихідні штифти Це нагадує конвеєр Unix , за винятком того, що надходить новий фрагмент даних і з'являється новий фрагмент даних на кожному тактовому циклі.

Вхідні штифти, проміжні ступені та вихідні штифти не залежать один від одного - вам не доведеться повторно використовувати одну шину даних, мультиплексовану між різними фрагментами даних.

Можливо, вас також зацікавить: Чи є інші архітектури комп’ютера, окрім архітектури von neumann / turing?


11

Я припускаю, що не фон Фон Нойман, ви маєте на увазі мови, які обійшли "Пляшку фон Неймана" відповідно до статті Беруса "Чи можна програмування звільнити від стилю фон Неймана?". Для зацікавлених можна знайти копію тут: http://www.thocp.net/biographies/papers/backus_turingaward_lecture.pdf

Відповідь на ваше запитання має бути неоднозначною з кількох причин.

По-перше, які мови задовольняли критеріям у його роботі? Хоча є й такі, які відслідковують функціональне програмування цього документу, це зараз розцінюється як непорозуміння, оскільки він мав на увазі щось на кшталт точкового програмування. То ви йдете з оригінальним непорозумінням чи справжнім наміром газети? Щоб отримати докладнішу інформацію про те, що він мав на увазі, дивіться наступне: http://en.wikipedia.org/wiki/Function-level_programming

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

Отже, залежно від точки зору:

  1. Haskell - найпопулярніша з абсолютно чистих функціональних мов, які я знаю, і в ній написані програми. Однак, хоча велика вага у спільноті функціонального програмування, він не популярний у більшій спільноті програмування. Також, використовуючи його, я не вважав, що це практично для використання в реальному світі, і, здається, його цінують за теоретичну роботу. Це дозволяє без точкового стилю, тому ви можете підійти до деяких цілей Backus з цим.

  2. Clojure, Scala і F # - менш чисті, але більш практичні та популярні функціональні мови. F # також дружній до точкового стилю.

  3. Forth, можливо, є прототипним прикладом безточкової мови, і вона була досить поширеною в свої дні, хоча зараз ... Фактор - це ще одна вільна мова, яка привернула певну увагу, але я сумніваюся, що вона відповідала популярності Forth у свій розквіт. .

  4. АПЛ згадав Бекус в один момент (можливо, не у своїй роботі) як крок до, але не повністю сумісний із його цілями. У свій день це було великим у фінансовому секторі. Обов’язково перевіряйте її нащадків, як Дж.

  5. JavaScript не є функціональним, але він досить привітно ставиться до стилю програмування вищого порядку, про що свідчить його велике використання закриттів. Враховуючи свою популярність, вона може просто відповідати критеріям. Не забудьте ознайомитися з деякими цікавими матеріалами, зробленими за допомогою JavaScript, як-от currying та комбінатор.

Як виноска, щоб дати вам більше уявлення про його цілі, ви можете перевірити дві мови, які він розробив, щоб відповідати його критеріям. Вони зовсім не популярні в AFAIK, тому це було б лише заради знань:

http://en.wikipedia.org/wiki/FP_(programming_language )

http://en.wikipedia.org/wiki/FL_(programming_language )


1
Здається, він мав на увазі щось на кшталт точкового програмування, а не функціонального програмування - чи є якийсь вказівник на дискусію з цього приводу? звучить цікаво.
Суреш Венкат

Модель програмування Backus має назву "Програмування на рівні функцій", і тут є стаття: en.wikipedia.org/wiki/Function-level_programming . Я не знаю жодних справді хороших посилань (я хотів би знати, якщо ви знайдете якісь!), Але "Програмування на рівні функцій" Гуглінга виявляє цікаві посилання, включаючи відео.
Ронні

1
@SureshVenkat: Мови FP та FL були створені Backus спеціально для підтримки його ідеї програмування на рівні функцій. Дивіться також "мовчазне програмування", а точніше мова J , яка поєднує APL та FP / FL, щоб створити те, що може бути і найкриптичнішим, і найвиразнішим загальнонаціональним мовою фактичного використання. Я також згадую публікацію на SO про використання негласного програмування у функціональних мовах.
CA McCann

До речі, хронологія в цій публікації здається істотно вимкненою. Функціональне програмування (як у традиціях Ліспа, так і в ML) давно передує лекції Backus's Turing Award, як і більшість або всі існуючі парадигми програмування - включаючи саме функціонування на рівні функцій, у формі комбінаційної логіки , що передує як лямбдальному численню церкви, так і Тьюрінгу робота над теорією обчислень! (О, і я набагато краще використовувати Haskell в практичних цілях, ніж жорстокість, як Javascript.)
CA McCann

@camccann Я ніколи не ставив хронології в дописі. Також Lisp занадто широкий, щоб підтримувати будь-які претензії. Наприклад, не всі Lisps функціональні, оскільки не всі хвостові рекурсивні. Мені подобається ваше посилання на комбінаторну логіку, але я думаю, що сенс Бекуса полягав у тому, що мова могла запрограмувати комп'ютер, що підтримує парадигму. Тому, хоча комбінаційна логіка проливає світло на його аргумент, це в кінцевому рахунку не впливає на його думку.
Ронні

2

Я думаю, що програмування Linda та tuplespace може відповідати законопроекту. Асоціативні / узгоджуючі операції з пам’яттю з одночасністю означають, що (концептуально) вузьке вузол Фон-Неймана усунуто.

Ідучи в цьому напрямку, чисті мови акторської моделі також моделюють спілкування, а не послідовність інструкцій. І хоча вони є формалізмами, а не власне мовами програмування, обчислюють обробку, як обчислення Pi, CSP та Петрі Нетса, спілкування моделей пов'язаними способами.

Дивіться у wikipedia за посиланнями (я новий користувач і під захистом від спаму), але про якийсь химерний гумор щодо імені Лінди читайте на веб- сторінці http://c2.com/cgi/wiki?LindaEtymology .

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