Яка різниця між обчисленням і мовою програмування?


13

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

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

Мені це здається розумним розколом, але чи це загальноприйнятий сенс? А може, це навіть неправильно?

Пов’язано, чому деякі оперативні семантики недетерміновані (припустимо, що вони злиті)? Що отримують, якщо вибір стратегії залишається відкритим?

Я дійсно вдячний деяким уточненням з цього приводу; а конкретні посилання ще більше! Спасибі!


3
Вони різні слова для різних поглядів на одне і те ж.
Рафаель

1
@Raphael, як це відповідає на запитання? Це не місце займатися філософією.
fade2black

4
Іноді потрібно небагато філософії, де завгодно.
Андре Суза Лемос

Відповіді:


10

Значення слів не визначено, але я можу дати вам своє тлумачення.

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

Мова програмування - це те, що говорить нам, як обчислити. Це точно говорить нам, як користуватися правилами. Зазвичай ми дозволяємо комп’ютеру використовувати правила, оскільки це набагато швидше. Правила можуть бути недетермінованими, і можуть бути дуже вагомі причини того, що вони не детерміновані. Це може бути в характері обчислення, що воно не є детермінованим (думаю, одночасні комунікаційні процеси), або фіксація певної стратегії може бути згубною для методів впровадження та оптимізації.

Наприклад, -kalculus - теорія рівнянь . Існують вирази та рівняння, які говорять нам про те, коли вирази рівні. Рівняння не говорять нам, як їх застосовувати, хоча люди, як правило, мають приховані програми, і вони представляють рівняння, щоб згодом вони могли отримати з них корисні стратегії оцінювання. Але за своєю суттю -cculus - це купа рівнянь. Це не мова програмування.λλλ

Навпаки, Standard ML - мова програмування. Він задається з точки зору оперативної семантики, тобто правил обчислення. Є похідні поняття рівності (контекстна еквівалентність, спостережлива еквівалентність тощо), які ми можемо поставити поверх цього, щоб мислити про нього як про своєрідне обчислення.

Звичайно, між обчисленням та його проявом як мовою програмування часто є корисні сполучники. Нормалізація злиття - це лише один із способів переходу від обчислення до мови програмування (хоча, на жаль, деякі люди перетворили його на своєрідну релігію). Важливе значення має взаємодія між калькуляторами та мовами програмування: мовами програмування насправді можна користуватися, але розрахунки пояснюють, про що йдеться у програмах.

Для того, щоб роздратувати людей, дозвольте також зазначити, що прикидання того, що немає різниці між обчисленням та його оперативним проявом, іноді призводить до перекосів поглядів на програмування та міні-релігії всередині спільноти програмування. Ви можете спробувати відгадати, яку мову я маю на увазі. (Це дуже класна мова!)


Тож мови програмування - це обчислення, оснащене сумісною з ним стратегією / системою переписування?
xavierm02

Ну, можливо. Чи завжди оперативні дії зберігають сенс? Тобто, якщо програма проводить обчислення в один крок до програми , чи ми обов'язково хочемо вимагати, щоб це ? p p = p ppp=p
Андрій Бауер

Я б сказав, що ні, через мітки на переходах у -calculus. Я думаю, що це входить у вашу класифікацію як мову програмування (хоча я думаю, я також бачив, що це представлено рівняннями, але це не природний спосіб визначити це, і ці рівняння насправді не представляють обчислень). π
xavierm02

Ви можете представити рівняння, які говорять не тільки про програму, але й про її оточення (стан чи переходи). Але я б не сказав, що таке обчислення. Скоріше це алгебраїчна модель.
Андрій Бауер

Велике спасибі, Андрію, це має сенс для мене. Я усвідомлюю, що це може відрізнятися від людини до людини, але я приймаю цю відповідь як (я думаю) це найкраща.
Гвідо

2

Мета розрахунків - не просто вивчити еквівалентність програми, це вивчити програми. Приклад фантазійного обчислення - це те, коли стратегія (call-by-value або call-by-name) визначається локально. Вона може бути реалізована колись мовою програмування, але спочатку вона вивчається як обчислення. Ви також використовуєте калькуляції для вивчення типів систем (з деякими обчисленнями, такими як в теорії типів Мартіна-Лефа, також типи обчислень).


Я вважаю, що головна відмінність полягає в тому, що розрахунки мають бути (відносно) простими для вивчення формально, тоді як мови програмування мають бути (відносно) простими у використанні. Це призводить до таких відмінностей:

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

Калькулі мають повністю задану семантику, тоді як семантику ПЛ часто описують інтерпретатором / компілятором за замовчуванням.


Деякі оперативні семантики є недетермінованими, оскільки вони дозволяють:

  • Щоб довести речі про всі "підсемантики".
  • Щоб реалізація могла вибирати і, отже, (можливо) прискорювати справи.
  • Тому що іноді у вас є операція "radnom ()", і якщо вам не байдуже ймовірності, а лише те, що можливо, недетермінізм - це хороший спосіб її представити.

Зауважте, що значення за викликом не є детермінованим: ви можете спочатку оцінити функцію або аргумент.


Ні, я не згоден, що мова йде про рівень формалізації чи витонченості.
Андрій Бауер

2

"Мова програмування" та "числення" - це полісемічні терміни, тобто вони означають різні речі залежно від контексту.

У деяких контекстах мови програмування та калькуляції сходяться, щоб посилатися на ту саму концепцію, що і в системі переписування, що базується на наборі формальних правил, які можна «застосувати механічно».

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

Щоб відповісти прямо на ваше запитання, плутанина між мовами програмування та мовою програмування (наскільки це існує) - це не випадковість, а проект. Наш проект. Це свідчення нашого відносного успіху як наукової дисципліни.

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