Сравнение функциональных языков программирования
В таблице показано сравнение языков функционального программирования , в котором сравниваются различные функции и конструкции разных языков функционального программирования .
Имя | Чистый | Ленивая оценка | Ввод текста | Абстрактные типы данных | Алгебраические типы данных | Данные неизменяемы | Типовые классы | Сбор мусора | Впервые появился |
---|---|---|---|---|---|---|---|---|---|
Общий Лисп | Нет [1] | Частично, смоделировано с помощью thunks [2] | Динамический [3] | Да [4] | Частичный, с продлением [5] | Нет [6] | Непригодный | Да | 1984 |
Схема | Нет [7] | Да [8] | Динамический [7] | Да [9] | Частично, смоделировано с помощью thunks [10] | Нет [11] | Непригодный | Да | 1975 |
Ракетка | Нет | Да, по умолчанию в Lazy Racket [12] | Динамический по умолчанию, постепенный с помощью Typed Racket [13] | Да [14] | Да, с алгебраической ракеткой [15] | Частичный [16] | Нет | Да | 1995 |
Кложур | Нет [17] | Да [18] | Динамический [19] | Да [20] | Да [21] | Да [22] | Непригодный | Да | 2007 |
Стандартный ML | Нет [23] | Нет [24] [25] | Статический [26] | Да | Да | Да [27] | Нет | Да | 1983 |
OCaml | Нет [28] | Да [28] | Статический [29] | Да [30] | Да [31] | Да [32] | Частично, моделируется с помощью параметрических модулей [33] | Да | 1996 |
Ф# | Нет [34] | Да [35] | Статический [36] | Да [37] | Да [38] | Да [39] | Нет | Да | 2005 |
Хаскелл | Да [40] | По умолчанию [41] | Статический [42] | Да [40] | Да [43] | Да [44] | Да [45] | Да | 1990 |
Скала | Нет [46] | Да [47] | Статический [46] | Да [48] | Да [48] | Да [49] | Да [50] | Да | 2004 |
JavaScript | Нет [51] [ ненадежный источник? ] | Частичный, с продлением [52] | Динамический [53] | Частичный, с продлением [54] | Частичный, с продлением [55] | Частичный [56] [57] | Непригодный | Да | 1995 |
Чистый | Да [58] | Да, с дополнительными аннотациями строгости [59] | Статический с уникальностью /опционально динамический [60] | Да [59] | Да [59] | Да, за исключением уникальных типов [59] | Да [59] | Да | 1987 |
Миранда | Да [61] | По умолчанию [62] | Статический [61] | Да [63] | Да [61] | Да | Нет | Да | 1986 |
SASL | Да [64] | Да | Динамический [65] | Да | Да | Да | Нет | Да | 1972 |
Эликсир | Нет | Частичный, с модулем Stream [66] | Динамический | Да | Нет | Да | Непригодный | Да | 2012 |
Эрланг | Нет | Нет [67] | Динамический | Да [68] | Нет | Да [69] | Непригодный | Да | 1986 |
Вяз | Да | Нет | Статический [70] | ? | Да [71] | Да [70] | Нет | Да | 2012 |
Футарк | Да | Нет | Статический [72] | Да | Да | Да [70] | Нет | Да | 2014 |
Питон | Нет [73] | Частичное, моделируется с помощью генераторов | Динамический [74] | Да [75] | Нет | Частичный [76] | Непригодный | Да | 1991 |
Идрис | Да [77] | Да [77] | Статический [77] | Да [77] | Да [77] | Да [77] | Да [77] | Да | 2007 |
Никс | Да | Нет | Статический | Нет | Да | Да | Нет | Да | 2003 |
Вольфрам Язык | Нет | Нет | Статический | Да | Да | Да | Нет | Да | 1988 |
Котлин | Нет | Частичное, ленивое делегирование [78] и последовательность [79] | Статический | Да | Нет | Да | Нет | Да | 2011 |
Быстрый | Нет | Нет | Статический | Да | Да | Да | Нет | Swift использует автоматический подсчет ссылок , который отличается от отслеживания сборки мусора , но предназначен для предоставления аналогичных преимуществ с большей производительностью. | 2014 |
Юлия | Нет | Нет [80] | Динамический [81] | Да [81] | Нет | Частичный [81] | Непригодный | Да | 2012 |
Чистый скрипт | Да | Нет | Статический | Да | Да | Да | Да | Да | 2013 |
Ржавчина | Нет | Частично, итераторы ленивы, [82] существуют внешние библиотеки [83] | Статический [84] | Да [85] | Да [86] | Да [87] | Да, через черты характера [85] | Нет | 2010 |
Лес | Нет | Нет | Статический | Да | Да | Да | Unknown | Да | 2019 |
Д | Да, несколько уровней подписки [88] [89] | Да, но не по умолчанию [90] | Статический [91] | ? | Да | Да [92] | Нет | Да [93] | 2001 |
Ссылки [ править ]
- ^ «Введение в ЛИСП» . Проверено 26 ноября 2013 г.
- ^ Антониотти, Марко. «CLAZY: ленивый вызов в Common Lisp» . Проверено 26 ноября 2013 г.
- ^ Тратт, Лоуренс (июль 2009 г.). «Динамически типизированные языки» . Достижения в области компьютеров . 77 : 149–184. дои : 10.1016/s0065-2458(09)01205-4 . Проверено 26 ноября 2013 г.
- ^ «Учебная лекция 3: Абстракция данных» .
- ^ «Алгебраические типы данных в Common Lisp» . Гитхаб . Проверено 11 мая 2020 г.
- ^ «Изменяемые структуры данных» (PDF) . Проверено 28 ноября 2013 г.
- ↑ Перейти обратно: Перейти обратно: а б «Сходные функциональные языки» . Проверено 26 ноября 2013 г.
- ^ «(Схема) 17. Ленивая оценка» . Проверено 30 апреля 2020 г.
- ^ «Записи – исправленные 6 Отчет об алгоритмической языковой схеме» . Проверено 11 мая 2020 г.
- ^ «Алгебраические типы данных в схеме» . Проверено 11 мая 2020 г.
- ^ «Программы с государством» . Проверено 29 ноября 2013 г.
- ^ Барзилай, Эли. «Ленивая ракетка» . Проверено 8 февраля 2020 г.
- ^ Тобин-Хохштадт, Сэм; Сент-Амур, Винсент; Добсон, Эрик; Такикава, Асуму. «Напечатанная ракетка» . Проверено 8 февраля 2020 г.
- ^ «Руководство по рэкету: типы данных, определяемые программистом» . Проверено 8 февраля 2020 г.
- ^ Гриффис, Эрик. «Алгебраическая ракетка» . Проверено 8 февраля 2020 г.
- ^ Баттрик, Мэтью. «Красивая ракетка: Структуры данных» . Проверено 8 февраля 2020 г.
- ^ «Функциональное программирование на Clojure» .
- ^ «Кложур — ленивый» . Проверено 27 ноября 2013 г.
- ^ «Изучаем Clojure: динамическая типизация» . 7 декабря 2012 года . Проверено 26 ноября 2013 г.
- ^ Энгельберг, Марк (21 апреля 2009 г.). «Мысли о программировании» . Проверено 26 ноября 2013 г.
- ^ «clojure-contrib, пример ввода» . Проверено 26 ноября 2013 г.
- ^ «Clojure: обзор функционального программирования» . Проверено 26 ноября 2013 г.
- ^ «Введение в функциональное программирование» (PDF) . Проверено 26 ноября 2013 г.
- ^ «Ленивая и нетерпеливая оценка» (PDF) . Проверено 26 ноября 2013 г.
- ^ Харпер, Маккуин, Милнер. «Стандарт ML» (PDF) . Раздел 3.6 .
{{cite web}}
: CS1 maint: несколько имен: список авторов ( ссылка ) - ^ Wikibooks: Стандартное программирование/типы машинного обучения
- ^ «Изменяемые и необязательные данные» . Проверено 28 ноября 2013 г.
- ↑ Перейти обратно: Перейти обратно: а б «Функциональное программирование — OCaml» . Проверено 26 ноября 2013 г.
- ^ Хикки, Джейсон. «Введение в Objective Caml» (PDF) . Раздел 2.4 . Издательство Кембриджского университета. Архивировано из оригинала (PDF) 2 октября 2013 года . Проверено 26 ноября 2013 г.
- ^ «Определения типов и исключений» .
- ^ «Изучение OCaml — типы данных» .
- ^ «Изучение OCaml — обязательные функции» .
- ^ «Реализация классов типов как модулей OCaml» . Проверено 11 мая 2020 г.
- ^ «Изучение F#» . Проверено 6 декабря 2013 г.
- ^ «Ленивые вычисления (F#)» . Сеть разработчиков Microsoft . Проверено 26 ноября 2013 г.
- ^ «О F#» . Проверено 26 ноября 2013 г.
- ^ «Структуры — F#» . Проверено 11 мая 2020 г.
- ^ «Дискриминированные профсоюзы» .
- ^ «Спецификация языка F# 3.0: 1.1.2 Упрощение данных» (PDF) . Проверено 26 ноября 2013 г.
- ↑ Перейти обратно: Перейти обратно: а б «Хаскелл Вики» . Проверено 26 ноября 2013 г.
- ^ «Ленивая оценка Haskell Wiki» . Проверено 26 ноября 2013 г.
- ^ «Типирование на Хаскеле» . ХаскеллВики . Проверено 26 ноября 2013 г.
- ^ «Абстрактный тип данных Haskell Wiki» . Проверено 26 ноября 2013 г.
- ^ «Хаскелл Вики» . Проверено 27 ноября 2013 г.
- ^ «Классы типов и перегрузка» .
- ↑ Перейти обратно: Перейти обратно: а б «Обзор Scala» (PDF) . Проверено 26 ноября 2013 г.
- ^ «Скала на примере» (PDF) . Проверено 26 ноября 2013 г.
- ↑ Перейти обратно: Перейти обратно: а б «Справочник по Scala» (PDF) . Проверено 26 ноября 2013 г.
- ^ «Изменяемые и неизменяемые коллекции» . Проверено 26 ноября 2013 г.
- ^ «Руководство для неофитов по Scala, часть 12: Классы типов» . Проверено 29 ноября 2013 г.
- ^ Список мультипарадигмальных языков программирования#Обзор языка
- ^ Тао, Дэн. «Ленивый.js» . Дэн Тао . Проверено 26 ноября 2013 г.
- ^ «Обзор JavaScript» . Сеть разработчиков Mozilla . Сеть разработчиков Mozilla . Проверено 26 ноября 2013 г.
- ^ Фрэнк, Томас. «Добавьте класс в JavaScript» . thomasfrank.com . Архивировано из оригинала 8 декабря 2013 года . Проверено 26 ноября 2013 г.
- ^ Фаубион, Натан. «АДТ» . НПМ . Джойент, нодеджицу . Проверено 26 ноября 2013 г.
- ^ Неизменяемый объект#JavaScript
- ^ «Структуры данных Javascript» . Сеть разработчиков Mozilla . Сеть разработчиков Mozilla . Проверено 26 ноября 2013 г.
- ^ «Часто задаваемые вопросы — Чистота» .
- ↑ Перейти обратно: Перейти обратно: а б с д и Пласмейер, Ринус; Ван Экелен, Марко; Ван Гронинген, Джон (декабрь 2011 г.). Отчет о языке чистой версии 2.2 (PDF) . Кафедра программных технологий, Университет Неймегена . Проверено 23 мая 2018 г.
- ^ "Чистый" .
- ↑ Перейти обратно: Перейти обратно: а б с «Официальный сайт Миранды» .
- ^ «Обзор Миранды» .
- ^ «Обзор Миранды» .
- ^ Тернер, Д.А. «Внедрение SASL». Технический отчет факультета компьютерных наук Университета Сент-Эндрюс. ТР/75/4.
- ^ Кан, Жиль; Берто, Ив; Юэ, Жерар; Леви, Жан-Жак; Плоткин, Гордон (24 сентября 2009 г.). Сети Кана на заре функционального программирования . ISBN 9780521518253 .
- ^ «Стрим — Эликсир v.1.6.0» .
- ^ «Справочное руководство по Эрлангу» . Проверено 27 ноября 2013 г.
- ^ «Язык программирования Erlang — абстрактные шаблоны» .
- ^ «Переполнение стека – как изменить запись в erlang?» . Проверено 15 декабря 2013 г.
- ↑ Перейти обратно: Перейти обратно: а б с «Блог Elm — интерактивное программирование» . Архивировано из оригинала 6 октября 2013 года . Проверено 29 ноября 2013 г.
- ^ «Синтаксис Elm — алгебраические типы данных» . Архивировано из оригинала 13 марта 2016 года . Проверено 29 ноября 2013 г.
- ^ «Вывод типа» . Проверено 24 июля 2023 г.
- ^ «Функциональное программирование на Python» .
- ^ «Что такое Питон?» .
- ^ «Абстрактные типы данных и стеки» (PDF) .
- ^ Неизменяемый объект#Python
- ↑ Перейти обратно: Перейти обратно: а б с д и ж г «Обзор Идриса» . Проверено 6 декабря 2013 г.
- ^ «Котлин — Делегированные свойства» .
- ^ «kotlin-stdlib — kotlin.sequences» .
- ^ «Примечательные отличия от других языков — язык Джулии» .
- ↑ Перейти обратно: Перейти обратно: а б с «Типы — язык Джулии» .
- ^ «Язык программирования Rust, обработка серии элементов с помощью итераторов» .
- ^ «Ржавый ящик «ленивый» » .
- ^ «Язык программирования Rust, типы данных» .
- ↑ Перейти обратно: Перейти обратно: а б «Язык программирования Rust, особенности» .
- ^ «Язык программирования Rust, перечисления» .
- ^ «Язык программирования Rust, переменные и изменчивость» .
- ^ «D чистые функции» . Проверено 3 февраля 2024 г.
- ^ «D-безопасные функции» . Проверено 3 февраля 2024 г.
- ^ «Лень — Дланг-тур» . Проверено 7 апреля 2020 г.
- ^ «Система типов» . Проверено 7 апреля 2020 г.
- ^ «Неизменяемое — Дланг-тур» . Проверено 7 апреля 2020 г.
- ^ «Сбор мусора» . Проверено 7 апреля 2020 г.