Подтвердить что ты не робот

С++ 0x (С++ 11) как функциональный язык?

Мне интересно, является ли С++ 0x (С++ 11) (с lambdas и совершенной переадресацией) (надмножеством) функционального языка. есть ли какая-либо особенность функциональных языков, что С++ не имеет?

4b9b3361

Ответ 1

Моделирование парадигмы функционального программирования как отношение между множествами и, следовательно, по своей сути декларативно. Однако на практике мы часто думаем о том, что функции необходимы, т.е. Вы вводите входное значение и получаете выходное значение, как и в случае с процедурой. С этой точки зрения характеристическое свойство функции состоит в том, что она не имеет побочных эффектов. Из-за двусмысленности терминов мы называем такую ​​функцию чистой, а язык, который имеет только чистые функции, будет чисто функциональным языком.

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

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

Я не знаю достаточно о Boost, чтобы решить, является ли С++ 03 + Boost жизнеспособным функциональным языком, но С++ 0x определенно делает С++ более функциональным, возможно, даже подталкивая его к субъективной границе области функциональных языков.

Как и в стороне, те же соображения применимы и к другим парадигмам программирования: С++ также не является чисто объектно-ориентированным языком (действительно, очень сложно - возможно, даже теоретически невозможно - создать язык, который является чисто функциональным и чисто объектным -ориентированный), и большинство функций, которые обычно ассоциируются с OO-языками (классы, наследование, инкапсуляция), на самом деле никоим образом не являются авторитарными...

Ответ 2

Ознакомьтесь со списком Функциональные языки программирования и обсудите с вики C2.

Некоторые из наиболее распространенных (и наименее оспариваемых) функций:

  • Функции первого класса - function класс представляет функции первого класса.
  • Функции более высокого порядка - могут быть эмулированы с объектами функции.
  • Лексические замыкания - могут быть эмулированы с классами.
  • Единое назначение - больше соглашения. Вы можете сделать это, объявив все переменные const.
  • Lazy Evaluation - может быть достигнуто с помощью TMP
  • Коллекция мусора - все еще отсутствует. Довольно многое необходимо на функциональном языке, поскольку время жизни и область видимости не совпадают, как отметил @Pascal в комментариях выше.
  • Тип вывода - auto
  • Оптимизация звонков с хвостом - не обязательно для функционального языка, но зависит от компилятора на С++.