Чистый скрипт
![]() | |
Парадигма | Функциональный |
---|---|
Разработано | Фил Фриман |
Впервые появился | 2013 |
Стабильная версия | |
Дисциплина набора текста | Предполагаемый , статичный , сильный |
Лицензия | БСД [1] |
Расширения имен файлов | .чистый |
Веб-сайт | www |
Под влиянием | |
Хаскелл , JavaScript |
PureScript — это строго типизированный язык чисто функциональный программирования , который трансформируется в JavaScript . [2] С++11 , [3] Эрланг , [4] и Иди . [5] Его можно использовать для разработки веб-приложений, серверных приложений, а также настольных приложений с использованием Electron или компиляторов C++11 и Go с подходящими библиотеками. Его синтаксис во многом аналогичен синтаксису Haskell . Кроме того, он вводит полиморфизм строк и расширяемые записи . [6] Кроме того, в отличие от Haskell, язык PureScript имеет строгую стратегию оценки . [7] хотя существуют несоответствующие серверные части, которые реализуют стратегию ленивой оценки . [8]
История [ править ]
Первоначально PureScript был разработан Филом Фриманом в 2013 году. Он начал работать над PureScript, поскольку его не удовлетворили другие попытки транспилировать Haskell в JavaScript (например, с использованием Fay, Haste или GHCJS). [9]
С тех пор он был подхвачен сообществом и разрабатывается на GitHub . Дополнительные основные инструменты, разработанные сообществом, включают специальный инструмент сборки «Pulp», [10] каталог документации «Погоня», [11] и менеджер пакетов "Спаго" [12]
Особенности [ править ]
PureScript отличается строгой оценкой , постоянными структурами данных и выводом типов . Система типов PureScript имеет много общих черт с аналогичными функциональными языками, такими как Haskell : алгебраические типы данных и сопоставление с образцом , типы более высокого типа , классы типов и функциональные зависимости , а также полиморфизм более высокого ранга . Система типов PureScript добавляет поддержку полиморфизма строк и расширяемых записей. [13] Однако в PureScript отсутствует поддержка некоторых более продвинутых функций Haskell, таких как GADT и семейства типов .
Транспиляторы PureScript стараются создавать читаемый код, где это возможно. Благодаря простому интерфейсу FFI он также позволяет повторно использовать существующий JavaScript. [14] /С++11 [15] [16] /Идти [17] код.
PureScript поддерживает инкрементальную компиляцию , а транспилятор для распространения JavaScript включает поддержку создания плагинов редактора исходного кода для итеративной разработки. [18] Плагины редактора существуют для многих популярных текстовых редакторов, включая Vim , Emacs , Sublime Text , Atom и Visual Studio Code .
PureScript поддерживает разработку на основе типов благодаря функции типизированных отверстий . [19] в котором программа может быть построена с отсутствующими подвыражениями. Транспилятор JavaScript впоследствии попытается определить типы отсутствующих подвыражений и сообщит об этих типах пользователю. Эта функция вдохновила на аналогичную работу в компиляторе GHC Haskell . [20]
Примеры [ править ]
Вот минимальная программа «Hello world» на PureScript:
module Main where
import Effect.Console (log)
main = log "Hello World!"
Здесь тип программы определяется и проверяется транспилятором PureScript. Более подробная версия той же программы может включать явные аннотации типов:
module Main where
import Prelude
import Effect (Effect)
import Effect.Console (log)
main :: Effect Unit
main = log "Hello World!"
См. также [ править ]
- Elm (язык программирования) – функциональный язык программирования.
- Причина (язык программирования) — расширение синтаксиса и набор инструментов для OCaml.
- JS++ – язык веб-программирования.
- TypeScript — язык программирования и расширенная версия JavaScript.
Ссылки [ править ]
- ^ «чистый скрипт/чистый скрипт» . Гитхаб . 3 июня 2022 г.
- ^ «Транспилятор PureScript в JavaScript» . Гитхаб . Проверено 22 января 2023 г.
- ^ «Транспилятор PureScript в C++11» . Гитхаб . Проверено 22 января 2023 г.
- ^ purerl — серверная часть PureScript Erlang , purerl, 04 сентября 2023 г. , получено 5 сентября 2023 г.
- ^ «Транспилятор PureScript to Go» . Гитхаб . Проверено 22 января 2023 г.
- ^ «Чистый скрипт» . purescript.org . Проверено 14 марта 2019 г.
- ^ purescript/documentation , PureScript, 19 февраля 2023 г. , получено 20 февраля 2023 г.
- ^ Альтернативные серверные части , PureScript, 19 февраля 2023 г. , получено 20 февраля 2023 г.
- ^ «Читать PureScript на примерах | Leanpub» . leanpub.com . Проверено 14 марта 2019 г.
- ^ Инструмент сборки для проектов PureScript , PureScript Contrib, 08 марта 2019 г. , получено 14 марта 2019 г.
- ^ "Преследование" . сайт преследования.purescript.org . Проверено 14 марта 2019 г.
- ^ 🍝 Менеджер пакетов и инструмент сборки PureScript на базе Dhall и наборы пакетов: spacchetti/spago , spacchetti, 14 марта 2019 г. , получено 14 марта 2019 г.
- ^ Документация по языку, компилятору и инструментам PureScript: purescript/documentation , PureScript, 14 марта 2019 г. , получено 14 марта 2019 г.
- ^ «Интерфейс внешней функции» . Чистый скрипт. 15 июля 2015 г. Проверено 22 января 2023 г.
- ^ «ФФИ» . Чистый скрипт. 26 июля 2019 г. Проверено 22 января 2023 г.
- ^ Реализации внешнего экспорта C++ для стандартной библиотеки , PureScript, 26 июля 2019 г. , получено 22 января 2023 г.
- ^ «Перейдите к зарубежным экспортным реализациям стандартной библиотеки» . Чистый скрипт. 13 декабря 2020 г. Проверено 22 января 2023 г.
- ^ Purs ide: Поддержка редактора и инструментов для языка программирования PureScript , 21 апреля 2019 г. , получено 21 апреля 2019 г.
- ^ Реализация поиска по типу для PureScript , 27 октября 2016 г.
- ^ Матиас Палл Гиссуарсон (27 сентября 2018 г.), «Предложение подходящих отверстий для типизированных отверстий (отчет об опыте)» , Уведомления ACM SIGPLAN , 53 (7): 179–185, doi : 10.1145/3299711.3242760 , S2CID 218480974