В духе некоторых общих дискуссий, подобных этой , я открываю эту ветку с намерением собрать мнения о том, какие открытые проблемы и актуальные темы в исследованиях по языкам программирования . Я надеюсь, что обсуждение может даже привести к поверхностному мнению относительно будущего исследований в языках программирования.
Я полагаю, что такого рода обсуждение поможет новым студентам-исследователям, таким как я, заинтересованным в PL, а также тем, кто уже несколько вовлечен.
Ответы:
Я думаю, что общая цель теории PL - снизить стоимость крупномасштабного программирования путем улучшения языков программирования и технической экосистемы, в которой используются языки.
Вот некоторые высокоуровневые, несколько расплывчатые описания областей исследований ЛП, которым уделяется постоянное внимание и которые, вероятно, будут продолжаться некоторое время.
Большинство исследований языка программирования проводилось в контексте последовательных вычислений, и к настоящему времени мы, возможно, сошлись в ядре функций, которые доступны в большинстве современных языков программирования (например, функции высшего порядка, (частичный) вывод типов, сопоставление с образцом). АДТ, параметрический полиморфизм) и хорошо понятны. Пока нет такого консенсуса относительно возможностей языка программирования для параллельных и параллельных вычислений.
Что касается предыдущего пункта, то в области исследований систем типирования большая часть его деятельности заключалась в последовательных вычислениях. Можем ли мы обобщить эту работу, чтобы найти пригодные для обучения и полезные дисциплины типизации, ограничивающие параллельные и параллельные вычисления?
Как частный случай предыдущего пункта, соответствие Карри-Ховарда связывает теорию структурного доказательства и функциональное программирование, приводящее к устойчивому обмену технологиями между информатикой и (основами) математики, например, теория гомотопического типа является впечатляющим примером. Есть много дразнящих намеков, что его можно распространить на (некоторые формы) параллельных и параллельных вычислений.
Спецификация и проверка программ в последние годы значительно выросли, например, с помощью интерактивных помощников по проверке, таких как Изабель и Кок, но технология все еще далека от того, чтобы ее можно было использовать в широком масштабе в повседневном программировании. Еще многое предстоит сделать, чтобы улучшить это положение дел.
Языки программирования и технологии верификации для новых форм вычислений. Я имею в
виду, в частности, квантовые вычисления и биологически вдохновленные вычислительные механизмы, см., Например, здесь .
Унификация. Существует множество подходов к языкам программирования, типам, верификации, и иногда кажется, что между ними много совпадений, и что существует более абстрактный подход, ожидающий своего открытия. В частности, биологически вдохновленные вычислительные механизмы, вероятно, по-прежнему сокрушат нас.
Одна из проблем исследования PL заключается в том, что нет таких явных открытых проблем, как вопрос P / NP, где мы можем сразу сказать, работает ли предложенное решение или нет.
источник
Позвольте мне перечислить некоторые предположения, которые ограничивают исследование языка программирования. С ними трудно оторваться, потому что они чувствуют, что являются неотъемлемой частью того, о чем говорят языки программирования, или потому что исследование альтернатив будет «больше не проектированием языка программирования». С каждым допущением я перечисляю его ограничивающие эффекты.
Программы являются синтаксическими конструкциями.
Частично написанная программа не может быть выполнена.
Программы о том, чтобы давать инструкции компьютерам.
Программирование - это как инжиниринг, и оно не может быть сделано обычными людьми.
Я думаю, что я мог бы продолжить.
источник
Есть одна проблема, которая меня интересует. Я понятия не имею, квалифицируется ли это как открытый вызов.
Математические знания неуклонно растут со временем. Теоретические основы, концепции, обозначения и доказательства развивались на протяжении веков. Математики управляли агрегацией, не обязательно проверяя ее глобальную согласованность систематическим и формальным образом в любой момент времени (хотя были попытки сделать это).
Мы должны ожидать, что языки программирования и программные библиотеки будут объединяться и развиваться аналогичным образом с течением времени. Какие инструменты могут помочь в управлении агрегацией результатов программирования и библиотек, чтобы обеспечить их согласованность и эффективность для всех, поскольку компьютеры могут быть более формальными и требовательными в отношении согласованности. Нужно ли переделывать библиотеки для каждого нового языка программирования. Почему мы должны выбирать язык, потому что он имеет правильные библиотеки для намеченного приложения, а не для его внутренних качеств в качестве среды программирования?
По другой теме вы можете найти идеи в следующем вопросе: становятся ли языки программирования более похожими на естественные языки? Я понимаю, что эта идея может не понравиться многим теоретическим компьютерным ученым, но она все же может быть полезна, если взглянуть на другие проблемы или с другой точки зрения. Я далек от того, чтобы согласиться со многими идеями, которые были опубликованы, но для этого и есть обсуждение.
источник
за последнее столетие произошли огромные инновации и взрыв в языках программирования с прикладной и теоретической сторон, однако можно было бы доказать, что это единичное / разовое событие в истории вычислительной техники, подобное "эволюционному взрыву" (см. также «Почему так много языков программирования?» на cs.se), и поэтому будущее в этом отношении не будет таким, как прошлое. однако есть некоторые идентифицируемые долгосрочные текущие тенденции в разработке / разработке.
Сложность программирования / программного обеспечения и способы управления / минимизации / смягчения / уменьшения - это тема, которая всегда влияла на дизайн языка и, возможно, даже более значима в нынешнем веке, когда очень большие / сложные программные системы встречаются довольно часто. это было основным аспектом обоснования проектирования ООП, но теперь у нас очень сложные системы ООП! сосредоточенное размышление об этом привело к классике в области, такой как Мифический человеко-месяц Бруксом, который во многих отношениях все еще является очень важной перспективой, возможно, даже более актуальной, чем когда она была написана.
параллелизм. происходит смещение аппаратного обеспечения в сторону большего параллелизма (например, многоядерности и т. д.), и увеличения тактовой частоты уже недостаточно для повышения производительности. этот сдвиг произошел примерно в середине 2000-х годов и оказывает большое влияние на исследования / дизайн языка. Параллелизм всегда был темой, но он имеет новую приоритетность / срочность, и существует широко распространенное мнение / консенсус, что параллелизм слишком сложен и труден в программировании, и, возможно, различные теоретические подходы могут смягчить некоторые из них. хороший рефлекс по этому вопросу: исследование параллельных вычислений: взгляд из Беркли
обработка данных / большие данные . они влияют на дизайн языка программирования. Кроме того, новые направления в архитектуре баз данных влияют на языки программирования.
Суперкомпьютеры оказывают значительное влияние на языковой дизайн, а также пересекаются с параллелизмом и обработкой данных / большими данными, например, с новыми языками, такими как MapReduce .
визуальное / потоковое программирование . возросло число этих типов «языков» (в некотором смысле визуальное программирование во многих отношениях фактически отделяет программирование от «языков»). также сильное перекрестное опыление с параллелизмом.
AI . это более дальний подстановочный знак, и сейчас не очень понятно, как это повлияет на компьютерные языки и программирование, но, вероятно, оно будет очень существенным. в прошлом [в другой форме] это приводило к целым языкам, таким как пролог . Ранним признаком того, как его можно применять с поразительными результатами, является Генетические алгоритмы / Генетическое программирование .
ссылка, которая может иметь некоторые полезные идеи в духе «будущего языков программирования», Beyond Java by Tate. он размышляет (хотя и спорные) , что может быть Java (возможно , один из самых сложных / комплексных языков программирования в наличии) начинает показывать свой возраст , и есть первые признаки новых языков / подходы , возникающие заполнить его место в долгосрочной перспективе.
источник