Дослідження та відкриті виклики в теорії мови програмування


32

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

Я вважаю, що подібне обговорення допоможе новим студентам-дослідникам, як я, зацікавленим у ПЛ, а також тим, хто вже дещо задіяний.


7
Вікі спільноти?
Суреш Венкат

2
Я думаю, що це справді покращило б це питання та тих, хто відповів би на нього, якби ви цитували чи узагальнювали текст питання "Межі ТКС". Очікуваний обсяг відповідей на це питання є неясним, тоді як інше питання є більш точним щодо того, що він очікував.
Vijay D

коли я запитав це питання на stackoverflow деякий час тому назад, я отримав репутацію, і моє запитання було закрито!
Роршах

Відповіді:


23

Я думаю, що загальна мета теорії PL - знизити витрати на широкомасштабне програмування шляхом вдосконалення мов програмування та технологічної екосистеми, в якій використовуються мови.

Ось декілька виразних, дещо розпливчих описів дослідницьких напрямків ЛЖ, які були приділені постійній увазі, і, ймовірно, будуть робити це ще деякий час.

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

  • Згідно з попереднім пунктом, дослідницька сфера машинописних систем бачила більшу частину своєї діяльності щодо послідовних обчислень. Чи можемо ми узагальнити цю роботу, щоб знайти корисні та корисні дисципліни, що обмежують одночасне та паралельне обчислення?

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

  • В останні роки специфікація та верифікація програм значно визріла, наприклад, з інтерактивними помічниками доказів, такими як Ізабел та Кок, але ця технологія все ще далека від широкого застосування в повсякденному програмуванні. Потрібно ще багато роботи для покращення такого стану речей.

  • Мови програмування та технологія перевірки нових форм обчислень. Я
    думаю тут , зокрема , квантових обчислень і біологічно натхненні обчислювальні механізми, дивись , наприклад , тут .

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

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


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

1
@NikosM. Я погоджуюсь, КК - це велика справа і досить широко досліджується. У цьому документі показаний дивовижний зв’язок між основами квантової механіки та теорією мови програмування, виявленими лише абстракцією.
Мартін Бергер

Приємно, можливо, питання може стосуватись таких формальних (чи не формальних) відносин
Нікос М.

11

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

  1. Програми - це синтаксичні конструкції.

    • Справжні програмісти ніколи не використовуватимуть iPad для створення вихідного коду. І навіть якби вони це зробили, вони ніколи не могли бути настільки ефективними, як у Emacs, Eclipse, NetBeans, XCode тощо.
    • Дослідження альтернативних способів побудови програм - це не дизайн мови програмування, а або графічний дизайн інтерфейсу користувача, або освіта (пор. Scratch).
  2. Частково написана програма не може бути виконана.

    • Принаймні, помилка виконання виникає, коли виконання доходить до відсутньої частини.
    • Що корисного може бути у запуску незавершених програм?
  3. Програми стосуються надання інструкцій комп’ютерам.

    • Дизайн мови програмування не має нічого сказати про те, як писати та впорядковувати закони. альянси.
    • Бактерії не пишуть програм.
  4. Програмування немов інженерне, тому звичайні люди його не можуть робити.

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

Я думаю, що я міг би продовжувати.


2
Джеймс: чудово, я повідомлю тітці. Мартін: я саме про таку річ, про яку я говорю - нетекстуальне програмування не було переконливо встановлено, оскільки спільнота PL не сприймає це серйозно, оскільки воно не було переконливо встановлено. Але мені здається цілком очевидним, що люди не були створені для набору слів на екранах. Ми добре кидаємо речі та збираємо чорницю.
Андрій Бауер

1
@AndrejBauer Як науковий аргумент, "це для мене цілком очевидно" не виходить за межі вдосконалення. Якщо ви подивитесь на історію письмових систем, мовами програмування яких є лише нещодавній приклад, їх історична траєкторія відійшла від логографічного написання. Можливо, наша здатність до розбору струн є більш актуальною, ніж чорниця. Письмо алфавіту розвивалося протягом тисячоліть, тому навряд чи воно містить масивні помилки, які легко виправити. З цього приводу я радий вірити, що ми можемо зробити краще, ніж лінійні рядки на основі ASCII. Я думаю, що минемо ще деякий час.
Мартін Бергер

1
Сенс моєї відповіді полягає в тому, щоб "мислити поза межами". Вивчити приховані припущення в дослідженні ЛП та побачити, як вони обмежують потенційне дослідження ПЛ.
Андрій Бауер

4
@AndrejBauer, я вважаю, що обмеження сфери застосування POPL є помилкою - багато подібних робіт виконуються в OOPSLA, або в ICSE, або навіть у CHI. POPL не зацікавлений, якщо не існує офіційного підходу, але POPL - це не все співтовариство з ПЛ.
Сем Тобін-Хохштадт

2
@DominicMulligan: звичайно, це все дуже вітальні ідеї. Своїми коментарями я намагаюся змінити уявлення про те, що таке програмування. Тож якщо теоретичні ідеї можна буде добре застосувати на практиці (маючи на увазі, що "звичайні" програмісти будуть використовувати їх у повсякденному житті), то ми перемогли.
Андрій Бауер

0

Є одна проблема, про яку я задався питанням. Я поняття не маю, чи можна це кваліфікувати як відкритий виклик.

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

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

З іншої теми ви можете знайти ідеї в наступному запитанні: чи мови програмування стають більш схожими на природні мови? Я усвідомлюю, що ідея може не сподобатися багатьом теоретикам-комп’ютерам, але вона все-таки може бути корисною, дивлячись на різні проблеми чи з іншої точки зору. Я далеко не згоден з багатьма ідеями, які були опубліковані, але саме для цього дискусія.


Стислість переоцінена.
Андрій Бауер

1
Я можу бачити, що щодо цієї, як би скромної, пропозиції не було багато згоди. Але все-таки може бути корисніше, принаймні, мені кілька пояснювальних слів щодо того, чому. У випадку, якщо мені було незрозуміло, я ніколи не мав на увазі сказати, що математика може бути непослідовною, лише що вона не (обов'язково) сукупна з послідовними засобами (історики сказали б краще). З точки зору CS, я можу помилятися з приводу труднощів агрегації (я ніколи не робив жодної технічної роботи з цього приводу), але я пов'язую лише досвід користувачів і загальнозвучну точку зору, опосередковано згубний для мов, створених TCS.
бабу

1
Що ж, моє зауваження здебільшого стосується того, що послідовність - це ідея, яка є абсолютно нічим, тоді як насправді більшість програмного забезпечення є "переважно послідовними". І все ж ми використовуємо його і вважаємо корисним. Чому тоді теоретики одержимі тим, що здається практично недосяжною і занадто ідеалістичною концепцією? Здавалося б, краще змогти кількісно оцінити консистенцію дещо менш тривіальним способом.
Андрій Бауер

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

1
Я думаю, що я просто ганяв про "чистих теоретиків", ось і все. Будь ласка, ігноруйте мене.
Андрій Бауер

0

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

  • Складність програмування / програмного забезпечення та способи управління / мінімізація / пом’якшення / зменшення - це тема, яка завжди впливала на мовний дизайн і, можливо, є ще більш значущою в нинішній час, коли дуже великі / складні програмні системи є досить поширеними. це було головним аспектом обгрунтування проекту OOP, але зараз у нас є дуже складні системи OOP! цілеспрямоване розмірковування над цим призвело до таких класиків, як Міфічний людиномісячний місяць Брукса, що багато в чому є дуже вагомою перспективою, можливо, навіть більш актуальною, ніж тоді, коли це було написано.

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

  • обмін даними / великі дані . це впливає на дизайн мови програмування. також нові напрямки в архітектурі баз даних - це розпушування / вплив на мови програмування.

  • суперкомп'ютер має значний вплив на дизайн мови, а також перетинається з паралелізмом та обміном даних / великими даними, наприклад, з новими мовами, такими як MapReduce .

  • візуальне / програмування потоків даних . спостерігалося збільшення цих типів "мов" (у певному сенсі візуальне програмування багато в чому фактично відокремлює програмування від "мов"). також сильне перехресне запилення з паралелізмом.

  • AI . це скоріше підказка про лонггранж, і зараз не дуже зрозуміло, як це вплине на комп'ютерні мови та програмування, але, ймовірно, це буде дуже суттєвим. в минулому [в іншій формі] це призводило до цілих мов, як пролог . Ранньою ознакою того, як це можна застосувати з вражаючими результатами, є генетичні алгоритми / генетичне програмування .

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

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