Czysty skrypt
Paradygmat | Funkcjonalny |
---|---|
Zaprojektowany przez | Phila Freemana |
Po raz pierwszy pojawiły się | 2013 |
Wersja stabilna | 0.15.7 / 12 grudnia 2022 r
|
Dyscyplina pisania | Wywnioskowane , statyczne , mocne |
Licencja | BSD |
Rozszerzenia nazw plików | .pur |
Strona internetowa |
|
Pod wpływem | |
Haskella , JavaScript |
PureScript to czysto funkcjonalny język programowania o silnych typach , który można przenieść na JavaScript , C++11 i Go . Można go używać do tworzenia aplikacji internetowych, aplikacji serwerowych, a także aplikacji desktopowych przy użyciu Electrona lub kompilatorów C++ 11 i Go z odpowiednimi bibliotekami. Jego składnia jest w większości porównywalna ze składnią Haskella . Ponadto wprowadza polimorfizm wierszy i rozszerzalne rekordy . Ponadto, w przeciwieństwie do Haskella, język PureScript definiuje się jako posiadający ścisłą strategię oceny , chociaż istnieją niezgodne backendy, które wdrażają leniwą strategię oceny .
Historia
PureScript został pierwotnie zaprojektowany przez Phila Freemana w 2013 roku. Zaczął pracować nad PureScript, ponieważ nie zadowalały go inne próby transpilacji Haskella na JavaScript (np. przy użyciu Fay, Haste lub GHCJS).
Od tego czasu został przejęty przez społeczność i jest rozwijany w GitHub . Dodatkowe podstawowe narzędzia opracowane przez społeczność obejmują dedykowane narzędzie do kompilacji „Pulp”, katalog dokumentacji „Pursuit” i menedżer pakietów „Spago”
Cechy
PureScript charakteryzuje się ścisłą oceną , trwałymi strukturami danych i wnioskowaniem o typach . System typów PureScript ma wiele wspólnych cech z podobnymi językami funkcjonalnymi, takimi jak Haskell : algebraiczne typy danych i dopasowywanie wzorców , typy wyższego rodzaju , klasy typów i zależności funkcjonalne oraz polimorfizm wyższego rzędu . System typów PureScript dodaje obsługę polimorfizmu wierszy i rozszerzalne rekordy. Jednak PureScript nie obsługuje niektórych bardziej zaawansowanych funkcji Haskella, takich jak GADT i rodziny typów .
Tam, gdzie to możliwe, transpilery PureScript próbują wygenerować czytelny kod. Dzięki prostemu interfejsowi FFI umożliwia także ponowne wykorzystanie istniejącego kodu JavaScript/C++11/Go.
PureScript obsługuje kompilację przyrostową , a transpiler do dystrybucji JavaScript obejmuje obsługę tworzenia wtyczek edytora kodu źródłowego na potrzeby programowania iteracyjnego. Wtyczki edytora istnieją dla wielu popularnych edytorów tekstu, w tym Vim , Emacs , Sublime Text , Atom i Visual Studio Code .
PureScript obsługuje rozwój oparty na typach poprzez funkcję dziurek wpisanych, dzięki której można skonstruować program z brakującymi podwyrażeniami. Transpiler JavaScript będzie następnie próbował wywnioskować typy brakujących podwyrażeń i zgłosić te typy użytkownikowi. Ta funkcja zainspirowała podobną pracę w GHC Haskell .
Przykłady
Oto minimalny program „Hello world” w PureScript:
moduł Main gdzie import Effect.Console ( log ) main = log "Hello World!"
Tutaj typ programu jest określany i sprawdzany przez transpiler PureScript. Bardziej szczegółowa wersja tego samego programu może zawierać wyraźne adnotacje typu:
moduł Główny gdzie import Preludium import Efekt ( Efekt ) import Efekt.Konsola ( log ) main :: Jednostka efektów main = log "Hello World!"
Zobacz też
- Elm (język programowania) – Funkcjonalny język programowania
- Powód (język programowania) – rozszerzenie składni i zestaw narzędzi dla
- JS++ – język programowania WWW
- TypeScript – język programowania i nadzbiór JavaScript