Що таке "питання", на яке намагається відповісти теорія мови програмування?


10

Мене цікавили різні теми, такі як комбінаційна логіка, обчислення лямбда, функціональне програмування і вивчали їх. Однак, на відміну від "Теорії обчислень", яка прагне відповісти на питання "обчислюваності", тобто речей, які можна / не можна обчислити з різними обмеженнями, я намагаюся знайти аналог "Теорії програмування"

Вікіпедія описує це як:

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

Це як сказати "все", що насправді не є конкретним.

Загальне просування тем зазвичай таке:

Комбінаційна логіка> Обчислення лямбда> Теорія типів Мартіна Лофа> Введене обчислення лямбда> (тут щось відбувається)> Розроблені мови програмування - які мають дуже малий зв’язок з CL /λ

Я бачу основні "математики", пов'язані з CL /λі цікаві докази, які з'являються в результаті, включаючи теорему Церкви-Розсера, і це добре. Однак я намагаюся зрозуміти "кінцеву мету" всього цього починання? Що таке святий грааль PLT, якщо ти хочеш? Наразі, здається, це просто чухає інтелектуальний свербіж, але я не можу реально перетнути міст від досліджень / теорії до нічого практичного.

Примітка: я отримую це до моменту використання λ-калькуляція доказів невизначеності. Але поза його застосованості до "обчислюваності" я просто не розумію цього і мені важко навіть зрозуміти необхідність досліджень у ПЛТ з цього вузького ПОВ. Будь-які існуючі книги, посилання, які можуть кинути світло на "велику картину" PLT?


1
Ви повністю ігноруєте цілі пласти PLT у вашому "спільному прогресі". Чомусь ваш погляд, здається, перекошенийλ-нарахування і теорія типів. Давайте подивимось на прийняті документи POPL 2019 : паралельне рандомізоване програмування, імовірнісне програмування, перевіряється збірка, алгебраїчні ефекти, сертифікація нейронних мереж, PL та апаратних моделей слабкої пам'яті, квантове програмування тощо. Багато речей, які не є "просто" теорія типу ", ви б не сказали?
Андрій Бауер

Ви на 100% правильні. Звідси я викликав свою "вузьку POV". Я знайомий з "іншими темами" лише читаючи тут і перевіряючи матеріали SIGPLAN / POPL. Я ще не знайду "цілісного довідника / книги", який дає широкий огляд ПЛТ, що включає теми, про які ви згадали. Біт теорії типів складається лише з "мого" POV (створення?) Мов програмування. Чи були б у вас вказівки, які могли б забезпечити вступ на високому рівні до різних областей PLT, щоб отримати великий огляд картини? Мені цікаво знати, які основні "моделі" вони використовують і як?λ скрізь?
Кандидат наук

2
@PhD Немає високого рівня ознайомлення з різними напрямами PLT, які ви хочете, c'est la vie ! Можливо, одного дня це зміниться. Але не затримуй дихання. Поле швидко розвивається і диференціюється на підполі. Інші популярні прості моделі включаютьπ-розрахунок, структурна оперативна семантика, прості імперативні розрахунки (як мова WHILE) та багато інших. Часто хтось придумує іграшкове обчислення відповідно до сфери застосування.
Мартін Бергер

Відповіді:


13

Загальна мета ПЛТ - зробити інженерію промислового програмного забезпечення (у загальному розумінні) дешевшою (також у загальному розумінні) за рахунок оптимізації найважливішого інструмента (мови програмування) та пов'язаної з цим екосистеми інструментальних засобів.

Деякі причини, чому займається математика:

  • ПЛ дуже нетривіальні, і незрозуміло, що вони роблять правильно без доказів. Математика дає спрощену модель реальних мов програмування. Ця модель дозволяє нам вивчати реальні мови програмування у значно спрощеній обстановці, видаляючи (сподіваємось) більшість проблем уже на рівні моделі. Реальні мови програмування в даний час математично непереборні. Іншими словами: лямбда-числення - це плодова муха, E.Coli, сферична корова ПЛТ.

  • У PLT бракує відповідних емпіричних методів, які було б добре / краще мати, тому математика робиться як заміна.

  • Математика красива і глибока.

  • Математика дає просту, випробувану методологію дослідження, яка важлива для того, щоб допомогти аспірантам. Як правило, деякі варіанти, наприклад: Досліджують особливості PL XYZ шляхом додавання його до лямбда-числення. Додайте прості типи для XYZ і доведіть надійність типу. Додайте загальну інформацію для XYZ та доведіть надійність типу. Доведіть теорему про параметричність для дженріків XYZ. Додайте залежні типи для XYZ та доведіть надійність типу. Розробіть часткове умовивід для типів, залежних від XYZ. Додайте поступові типи для XYZ та доведіть надійність типу. Додайте контракти на XYZ. Кожен із них - це папір. Ви можете зупинитись, якщо у вашого доктора чи постдоктора вичерпається час. Кожне з перерахованого вище є цікавим і дасть зрозуміти загальну характеристику, параметричність, висновок про тип тощо. Цей конвеєр є чудовимспосіб навігації у складних водах усіх можливих мов програмування. Другий спосіб навчання - це реалізація мов у компіляторі, але це менш простежується для окремої людини.

Чи потрібен ПЛТ - цікаве питання. Більшість працюючих програмістів здається, що це не так. Вони помиляються: більшість мов, розроблених працюючими програмістами без фонового режиму PLT (наприклад, Javascript, PHP), починаються жахливими, і роблять усі помилки, яких теоретики PL довго навчились уникати. Якщо ПЛ, розроблений аматором, потрапляє в основний потік, теоретикам ЛЖ потрібно десятиліття або близько того, щоб виправити очевидні недоліки (наприклад, переобладнати статичну систему набору тексту, див. Типовий сценарій). Дозвольте підсумувати цю ситуацію:

 Every successful programming language ends up being ML! Either because 
 it was designed by a PL theorist as ML from the start, or because a 
 decade of painful evolution removes all the obvious flaws, leaving ML. ;-)

Убік: Такий стан справ повністю винен PLT, оскільки, оскільки більшість з них не має досвіду промислового програмування, тож насправді не знаю, які больові відчуття працюють у інженерів-программістів. Зокрема, з соціологічних причин більшість теоретиків з питань ПЛ вважають, що чисте функціональне програмування на таких мовах, як Agda - це рішення всіх проблем, яке не витримує уважного вивчення.


1
@MartinBerger: Чи вважає CompCert прикладом того, що можна теоретично обробляти мову програмування в реальному світі? Якщо ні, то наскільки високо ви встановлюєте планку, адже CompCert досить вражаючий.
Андрій Бауер

2
@MartinBerger: Будь ласка, подумайте, як поливати "більшість теоретиків з питань ПЛ вважають, що чисте функціональне програмування на таких мовах, як Agda, є рішенням усіх проблем", тому що це лише ваша оренда та вентиляція. Для початку, навіть якщо ви подивитесь на теми, які зараз присутні в ICFP та POPL, більшість стосується нечистих мов програмування.
Андрій Бауер

5
@PhD: PLT є набагато більше, ніж теорія типів. Саме ця теорія типів - це перше, що ви помічаєте, оскільки це один з головних інструментів PLT.
Андрій Бауер

1
@AndrejBauer CompCert, CakeML тощо вражають, але вони далекі від широко використовуваних компіляторів, таких як LLVM, GCC і т.д. яких ви просто не отримуєте в звичайній індустрії програмного забезпечення. Не кажучи вже про те, що значна частина ранньої роботи Ксав'є над CompCert полягала в тому, щоб уточнити специфікацію.
Мартін Бергер

2
@PhD Щодо "радикально більш продуктивних", ніж> не PLT C / C ++, Java, C # ", майте на увазі, що якщо ви подивитеся на ці мови, точніше, на їх еволюцію з часом, майже на все, що вони придбали за час, наприклад, лямбда, монади (LINQ), відповідність шаблону, частковий висновок типу походить від PLT. Команда C # має кандидатів з ПЛТ. Дійсно, вони намагалися мене найняти в якийсь момент. На співбесіді я намагався переконати Андерса Хейльсберга, що C # потребує дженериків, що йому не сподобалось у той час ...
Мартін Бергер
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.