Sari la conținut

Cayenne (limbaj de programare)

De la Wikipedia, enciclopedia liberă
(Redirecționat de la Limbajul de programare Cayenne)

Cayenne este un limbaj de programare funcțional dependent, creat de Lennart Augustsson în 1998,[1] făcându-l una dintre cele mai vechi limbi de programare dependente (spre deosebire de dovezi asistent sau cadru logic). O decizie notabilă de proiectare este aceea că limbajul permite ca funcțiile recursive nerestricționate să fie utilizate la nivelul tipului, făcând ca tipul de verificare să fie indecis.[2]

Există foarte puține blocuri de construcție în limbă. Tipurile de bază sunt funcții, produse și sume. Funcțiile și produsele folosesc tipuri dependente pentru a obține o putere suplimentară. Sintaxa este în mare parte împrumutată de la Haskell. Nu există un sistem special de module, deoarece cu tipuri dependente de înregistrări (produse) sunt suficient de puternice pentru a defini module.

Implementarea lui Cayenne a fost scrisă în Haskell și, de asemenea, sa tradus la Haskell, dar în prezent nu mai este menținută.

Exemplu[modificare | modificare sursă]

Scopul principal al Cayenne nu este acela de a folosi tipurile pentru a exprima specificațiile (deși acest lucru se poate face), ci mai degrabă de a folosi sistemul de tip pentru a da tipului mai multe funcții. Un exemplu de funcție care poate fi dată unui tip în Cayenne este printf.

PrintfType :: String -> #
PrintfType (Nil)          = String
PrintfType ('%':('d':cs)) = Int    -> PrintfType cs
PrintfType ('%':('s':cs)) = String -> PrintfType cs
PrintfType ('%':( _ :cs)) =           PrintfType cs
PrintfType ( _ :cs)       =           PrintfType cs

aux :: (fmt::String) -> String -> PrintfType fmt
aux  (Nil)          out = out
aux  ('%':('d':cs)) out = \ (i::Int)    -> aux  cs (out ++ show i)
aux  ('%':('s':cs)) out = \ (s::String) -> aux  cs (out ++ s)
aux  ('%':( c :cs)) out =                  aux  cs (out ++ c : Nil)
aux  (c:cs)         out =                  aux  cs (out ++ c : Nil)

printf :: (fmt::String) -> PrintfType fmt
printf fmt = aux fmt Nil

Note[modificare | modificare sursă]

  1. ^ Augustsson, Lennart (1998). "Cayenne — a language with dependent types Arhivat în , la Wayback Machine.".
  2. ^ Altenkirch, Thorsten; McBride, Conor; McKinna, James (aprilie 2005). „Why dependent types matter” (PDF).