Как будущие языки программирования могут лучше абстрагироваться?

Одним из ключевых свойств при разработке понятного программного обеспечения (и, вообще, проектирования чего-либо вообще) является разработка хорошего набора абстракций. В наши дни эти абстракции включают такие функции, как функции, классы, интерфейсы, рекурсия и функции более высокого порядка. Но что еще есть? Как мы можем абстрагироваться от наших проектов, так что мне не нужно думать ни о чем, кроме моей непосредственной, прямой цели? Какие новые абстракции еще не задействованы существующими технологиями?

Также обратите внимание, что большинство элементов в моем списке (за исключением, возможно, рекурсии) также являются инструментами, используемыми для повторного использования кода. Повторное использование кода не является предметом этого вопроса и не является тем, что я считаю необходимым аспектом хорошей абстракции. Функции полезны как абстракции, потому что они скрывают то, что они делают за описательным именем, а не потому, что я могу назвать их из нескольких разных мест.

Плохо сформировавшаяся идея. Является ли функция драйвера, которая вызывает только последовательность других функций, не сохраняя никакого собственного состояния, действительно такая же, как функция? Мы пишем ее как функцию и называем ее функцией, но, возможно, она представляет собой другую концепцию? Это отражается на некоторых языках, делая различия между процедурами, возвращающими значения и процедуры, не возвращающими значения. Но может быть, есть лучший способ рассмотреть эту разницу, другой способ абстрагировать последовательность относительно несвязанных шагов?

Итак, чтобы подтвердить, , как будущие языки программирования лучше облегчают абстракцию?

Ответ 1

Мощный инструмент отвлечения, Lisp макросы. Почему бы не взглянуть в прошлое и настоящее?:)

Ответ 2

Они могут использовать самонастраивающуюся семантику, чтобы лучше разрешить метапрограммирование среды/языка, представленной в качестве интерфейса конечного пользователя. Математическая семантика языка.

Ответ 3

Некоторые области, которые, по моему мнению, потенциально плодотворны:

  • Преднамеренное программирование или что-то подобное. Компания Чарльза Симони "Умышленное программное обеспечение" некоторое время держалась довольно тихо, но теперь начинает демонстрировать некоторые обнадеживающие ранние демонстрации.

  • Функциональное программирование: идеи функционального программирования все чаще находят свой путь в более основные языки, такие как Python, С# (Linq, lambdas и т.д.) и даже С++ (lambdas в С++ 0x). F # становится первоклассным .NET-языком с полной поддержкой в ​​Visual Studio. Рост многоядерного развития - еще один фактор, стимулирующий более широкое внедрение функциональных концепций.

  • Языки домена (DSL): тесно связаны с идеями, связанными с преднамеренным программированием, Microsoft, похоже, прилагает определенные усилия поддерживая DSL как часть экосистемы .NET.

  • Много более сложных IDE. Уже есть некоторые позитивные разработки с инструментами рефакторинга в IDE, например Visual Studio и IntelliJ, но я думаю, что там много возможностей для прогресса в этой области. Переход от немых текстовых исходных файлов к чему-то более похожему на абстрактное синтаксическое представление дерева может значительно облегчить работу на более высоком уровне абстракции. Опять же, это связано со многими идеями, лежащими в основе преднамеренного программирования.

Ответ 4

Благодаря встроенному обнаружению глупых идей, которые при срабатывании блокируют разработчика из среды IDE и отказываются позволять им снова писать код.

ООП облегчает абстрагирование. Это разработчики, которые приходят с плохо сформированными идеями.

Ответ 5

Посмотрим, как сделать, чтобы абстракция была обязательной для каждого типа данных, а затем предоставить способы обобщения наших абстракций по параметрам типа? Подождите! Я только что заново изобрел CLU. Получаю ли я премию Тьюринга?

Любой, кто интересуется ролью абстракции в программировании, должен изучить CLU.

Ответ 7

Функциональное программирование, аспектно-ориентированное программирование, дизайн по контракту и вообще все, что отвлекает нас от темного возраста императивного программирования.

Кроме того, я надеюсь, что разработка не управляемых программ перестанет существовать. С++ и другие вещи низкого уровня меня огорчают.: - (

Мне нравится мой LINQ, мой лямбда-оператор, мои методы расширения и мои плавные интерфейсы. О, и я люблю PostSharp.NET. И F #, но я думаю, что это очень трудно НЕ любить F #.: -)

Ответ 8

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

О да, существует реальная теория, которая предшествует современным вычислениям, она называется теорией категорий.