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 許可。