(Translated by https://www.hiragana.jp/)
Idris - 维基百科,自由的百科全书 とべ转到内容ないよう

Idris

维基百科ひゃっか自由じゆうてき百科ひゃっかぜん
Idris
编程范型函数かんすうしき编程
設計せっけいしゃEdwin Brady
发行时间2007ねん,​17ねんまえ​(2007[1]
とうぜん版本はんぽん
  • 1.3.3(2020ねん5がつ23にち[2]
編輯維基數據鏈接
かたたい系統けいとうせい态类がた, つよ类型, 赖类がた
操作そうさけいまたが平台ひらだい
許可きょかしょうBSD-3
ぶんけん扩展めい.idr, .lidr
あみIdris
啟發けいはつげん
Agda, Coq, EpigramえいEpigram (programming language), Haskell, ML

Idrisいち通用つうようてき赖类がた纯函数式すうしき编程语言,其类型けいあずかAgda以及EpigramえいEpigram (programming language)相似そうじ

Idris语言备堪あずかCoq媲美てき交互こうごしき定理ていり证明能力のうりょく带tactics,而其设计标侧じゅう通用つうようけい统编ほどさら甚于辅助证明。Idrisてき其他设计标还包括ほうかつ观的”だい性能せいのう,对副作用ふくさようてきひかえせい,以及对于实现嵌入かんにゅうしき领域特定とくてい语言(Embedded Domain Specific Language,EDSL)てき支持しじ

Idrisどおり过一个依赖类型的核心语言TT生成せいせいC语言的中てきちゅう间代码并编译到本地ほんじつくえ码,并利用りようりょういち个基于Cheney算法さんぽうてき垃圾收集しゅうしゅう实现。Idrisまた拥有 JavaScriptJavaLLVMてき编译きさきはし[4]

Idrisてき名字みょうじ于20せい纪70年代ねんだいてき英国えいこく儿童动画へん车头もぐさどるえいIvor_the_Engine#Idris_the_Dragonさと一条いちじょうかい唱歌しょうかてき[5]

语言特性とくせい

[编辑]

赖类がた

[编辑]

Idris 支持しじ赖类がたてきてい义。如下てい义了そく元素げんそ类型 てき -もと组类がた

data Nat = O | S Nat
infixr 5 ::

data Vect : Type -> Nat -> Type where
    VNil : Vect a O
  | (::) : a -> Vect a k -> Vect a (S k)

嵌入かんにゅうしき领域特定とくてい语言(EDSL)

[编辑]

Idris 对嵌入かんにゅうしき领域特定とくてい语言てき支持しじ主要しゅよう包括ほうかつ以下いか方面ほうめん[6]

  1. 编译もとめ值。
  2. じゅうてき语法。
  3. あずかC语言库的せっこう,以及だかこうてきだい生成せいせい

类型提供ていきょう(Type Provider)

[编辑]

Idris 拥有あずか F# 相似そうじてき类型提供ていきょう,它允许编译器ざい编译间根すえしょ执行だい码的需求而生成せいせいしんてき类型しんいき。这使とくせい态类がたけい统更扩展せい[7]

しめせれい

[编辑]

语法

[编辑]

Idris てき语法あずか Haskell ゆう许多相似そうじ处。いち个最简单てき Hello World ほどじょ如下:

module Main

main : IO ()
main = putStrLn "Hello, World!"

该程じょあずか Haskell てきとうこううつしほう仅有两点不同ふどう:类型签名使用しよう单个おかせごう“:”而不そうおかせごう“::”;开头てき声明せいめいちゅう使用しよう where 从句。

Idris また支持しじ where 从句、let ひょう达式、with 规则、简单てき case ひょう达式しきひきはいとう

赖类がた

[编辑]

いち个在 Idris ちゅう使用しよう赖类がたてきしめせれい

total
append : Vect n a -> Vect m a -> Vect (n + m) a
append Nil       ys = ys
append (x :: xs) ys = x :: append xs ys

该函すうしょういち包含ほうがん m 个类がた a てき元素げんそてき vector 连接いたいち包含ほうがん n 个类がた a てき元素げんそてき vector きさきよし于输にゅう vector てき确切类型赖于它的值,ざい编译(类型检查)时即证输てき vector 必将包含ほうがん (n + m) 个类がた a てき元素げんそ

关键“total”しょうかい执行函数かんすうてきかんせいせい(totality)检查。わか函数かんすうてい义未涵盖所有しょゆう可能かのうてきじょうがた(partial function),则检查器かい报错。

另一个使用依赖类型的示例:

total
pairAdd : Num a => Vect n a -> Vect n a -> Vect n a
pairAdd Nil       Nil       = Nil
pairAdd (x :: xs) (y :: ys) = x + y :: pairAdd xs ys

Num a 标志类型 a ぞくType classえいType class Num。注意ちゅういざい这里,该函すう认为かんせいてき(total),つきかん未定みてい义一个参すう Nil 而另いち个参すう Nil てきしき原因げんいんざい于两个作为参すうてき vector ただのう备相どうてき长度,这一点通过依赖类型系统得到了保证,いん此在编译时两しゃ长度不同ふどうてきじょうがた绝无可能かのう发生。这使とく该函すうてい义仍しかかんせいてき

もとめ策略さくりゃく

[编辑]

Idris だま认采及早もとめ(Eager evaluation),而非 Haskell てき惰性だせいもとめ(Lazy evaluation)方式ほうしき。Idris 支持しじ使用しよう Lazy 关键显式指定してい惰性だせいもとめ值:

data Lazy : Type -> Type where
  Delay : (val : a) -> Lazy a

Force : Lazy a -> a

boolCase : Bool -> Lazy a -> Lazy a -> a;
boolCase True t e = t;
boolCase False t e = e;

参考さんこう文献ぶんけん

[编辑]
  1. ^ Brady, Edwin. Index of /~eb/darcs/Idris. University of St Andrews School of Computer Science. 2007-12-12. (原始げんし内容ないようそん档于2008-03-20). 
  2. ^ Release 1.3.3. 2020ねん5がつ23にち [2020ねん5がつ24にち]. 
  3. ^ Release 1.3.3. [2020-05-25]. (原始げんし内容ないようそん档于2021-02-04). 
  4. ^ Idris - News. [2013-12-24]. (原始げんし内容ないようそん档于2013-12-24). 
  5. ^ Idris - FAQ. [2013-12-24]. (原始げんし内容ないようそん档于2012-03-11). 
  6. ^ Slides from Systems Programming with Dependent Types at DTP11 (PDF). [永久えいきゅう失效しっこう連結れんけつ]
  7. ^ Christiansen, David. Dependent type providers (PDF). 2013 [2014-08-26]. (原始げんし内容ないよう (PDF)そん档于2017-08-09). 

外部がいぶ链接

[编辑]