Yin 但愿能让程序员天然而然地表达他们的想法,它尝试解决以下问题:git
解决这些问题须要不少程序员的经验。所以 Yin 欢迎程序员贡献经验和观点,以便作出最好的决策。程序员
目前 Yin 语言处于设计阶段,不少设计上的决定已经作了,不少还没作。若是你但愿学习如何设计和实现一门语言,那么 Yin 语言值得一看。github
[1 2 3 4 5]
(* (+ 2 3) 4)
yin 语言采用了 lisp 所使用的基于 S 表达式的语法,这是由于做者认为 lisp 的基于 S 表达式的语法是最简单、最好看的语法:segmentfault
(define fact (fun ([x Int] [-> Int]) (if (= x 0) 1 (* x (fact (- x 1)))))) (fact 5) -- 120
--
表示注释。数组
if 一样是函数,第一个参数是条件,第二个参数是条件成立时的表达式,第三个参数是条件不成立时的表达式。闭包
函数采用以下格式:框架
(fun ([x 输入类型] [-> 输出类型]) 函数体)
使用 define
绑定函数的名字。函数
判断奇偶性的函数:工具
(define even (fun ([x Int] [-> Bool]) (if (= x 0) true (if (= x 1) false (odd (- x 1)))))) (define odd (fun ([x Int] [-> Bool]) (if (= x 0) false (if (= x 1) true (even (- x 1)))))) (even 10) -- true (even 11) -- false (odd 10) -- false (odd 11) -- true
Yin 最初使用 Typed Racket 实现,然而因为 Racket 系统报错信息的不精确,形成比较低的开发效率,所以后来换成了 Java。得益于简单的语法设计,Yin 的具备精确报错定位能力的解析器,实现只花了 2 小时,500 行 Java,且不依赖 Lex、Yacc 类工具。之后,Yin 语言将可以解释本身,从而能使用自身实现编译器,也就是自举。学习
Yin 语言是开源的,使用 AGPLv3 许可。