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

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

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

21
задан sivabudh 29 June 2010 в 00:27
поделиться

5 ответов

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


Редактировать: В ответ на вашу правку:

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

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


Edit2: В ответ на людей, проголосовавших за меня:

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


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

  • APL
  • Charity (чисто функциональный)
  • Чистый (чисто функциональный)
  • Curl
  • Карри
  • Эрланг
  • F #
  • Haskell (чисто функциональный)
    • CAL
  • Hop
  • J
  • Joy
  • Kite
  • Lisp
    • Clojure
    • Common Lisp
    • Dylan
    • Little b
    • Logo
    • Scheme
    • Tea
  • Lush
  • Mathematica
  • Miranda
  • ML
    • Стандартный ML
    • Алиса
    • Окамл
    • Мифрил
  • Немерл
  • Опал
  • OPS5
  • Поплог
  • R
  • Q
  • РЕФАЛ
  • Рассел
  • Scala
  • Электронные таблицы

Большинство этих языков имеют некоторые второстепенные элементы / влияния нефункциональной ереси; помеченные как «чисто функциональные» - нет.

(Насколько мне известно, языки функционального программирования - единственные, которые поощряют неизменяемые переменные по философии. Могут быть языки с неизменяемыми по умолчанию переменными, которые не являются функциональными по парадигме. Эта концепция звучит для меня довольно странно, но Я не могу гарантировать общее утверждение «никогда не когда-либо», учитывая огромное, огромное, огромное количество языков программирования. Я просто скажу, что, насколько мне известно, это крайне маловероятно)

Комментатор предположил что ADA является императивным / объектно-ориентированным языком программирования с неизменяемыми переменными по умолчанию.

36
ответ дан 29 November 2019 в 06:38
поделиться

Да.

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

7
ответ дан 29 November 2019 в 06:38
поделиться

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

4
ответ дан 29 November 2019 в 06:38
поделиться

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

http://www.clojure.org

5
ответ дан 29 November 2019 в 06:38
поделиться

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

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

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

6
ответ дан 29 November 2019 в 06:38
поделиться
Другие вопросы по тегам:

Похожие вопросы: