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

Языки программирования, которые по умолчанию неизменяемы?

Существуют ли языки программирования, чьи "переменные" по умолчанию неизменяемы (const, final и т.д.)?

И, чтобы сделать его переменной, вам нужно объявить дополнительный неизменяемый квалификатор?

4b9b3361

Ответ 1

Философия Функциональное программирование Парадигма сильно ориентирована на то, чтобы все "переменные" были неизменными, а "изменчивые" были разрешены только в экстремальных условиях случаев (т.е. для ввода/вывода). Поэтому большинство функциональных языков программирования, таких как различные диалоги Lisp и Haskell, будут (чаще всего) усиливать неизменяемые переменные. Конечно, некоторые языки предлагают большую гибкость, чем другие, но центральная парадигма/философия остается, что ее обескураживает.


Изменить: в ответ на ваше редактирование:

Если вы ищете C-with-friendlier-константы, то принятие совершенно новой парадигмы программирования не является вашим решением. В функциональном программировании все является неизменным (в большинстве случаев), и вы обычно смотрите на совершенно новую фундаментальную философию и подход к программированию.

На самом деле это не решение, если все, что вам нужно, - упростить объявление констант.


Edit2: В ответ на людей, которые меня выказывают:

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


Edit3: Список Википедии функциональных языков программирования:

  • АПЗ
  • Благотворительность (чисто функциональная)
  • Чистый (чисто функциональный)
  • Curl
  • Карри
  • Erlang
  • F #
  • Haskell (чисто функциональный)
    • CAL
  • Hop
  • J
  • Joy
  • Kite
  • Lisp
    • Clojure
    • Общий Lisp
    • Дилан
    • Маленький b
    • Логотип
    • Схема
    • Чай
  • Lush
  • Mathematica
  • Miranda
  • ML
    • Стандарт ML
    • Алиса
    • Ocaml
    • Mythryl
  • Nemerle
  • Opal
  • OPS5
  • Poplog
  • R
  • Q
  • РЕФАЛ
  • Рассел
  • Scala
  • Электронные таблицы

Большинство из этих языков имеют некоторые незначительные элементы/влияния нефункциональной ереси; те, которые обозначены как "чисто функциональные", не делают.

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

Комментирует, что ADA - это языковой язык с обязательным/объектно-ориентированным языком с неизменяемыми переменными по умолчанию.

Ответ 2

Да.

Haskell и Erlang - два примера.

Ответ 3

Clojure - это диалект Lisp, предназначенный для виртуальной машины Java, работающий исключительно с неизменяемыми данными.

http://www.clojure.org

Ответ 4

Ближайшим аналогом, о котором я могу думать, является Objective Caml. Переменные, связанные с помощью let, всегда неизменяемы, но поля структур (так называемые записи в Caml) неизменяемы только по умолчанию, и можно пометить отдельное поле как mutable.

Среди функциональных языков Objective Caml оказался чрезвычайно привлекательным для программистов C. OCaml имеет довольно много императивных конструкций как в языке, так и в библиотеках, поэтому путь миграции не так странен. И если вы действительно хотите объекты и систему классов, они тоже есть.

Язык Microsoft.NET F # является потомком Objective Caml, но было внесено немало изменений, чтобы убедиться, что это язык .NET, и меня не информируют о изменчивости. Но если вы хотите попробовать функциональный язык в качестве относительно небольшого изменения в вашем текущем стиле программирования, вы можете изучить Objective Caml или F #.

Ответ 5

Все переменные в XSLT могут быть неизменными.