Czysty skrypt

Czysty skrypt
PureScript Logo.png
Paradygmat Funkcjonalny
Zaprojektowany przez Phila Freemana
Po raz pierwszy pojawiły się 2013
Wersja stabilna
0.15.7 / 12 grudnia 2022 r .; 2 miesiące temu ( 2022-12-12 )
Dyscyplina pisania Wywnioskowane , statyczne , mocne
Licencja BSD
Rozszerzenia nazw plików .pur
Strona internetowa www.purescript.org _ _ Edit this at Wikidata
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ż

Linki zewnętrzne