先給出官網地址:deflang.orggit
一句話簡介:可擴展編程語言 Def 的目標是將 C++ 的高效抽象和 Lisp 的強大表現力融爲一體。程序員
你能夠經過閱讀 入門教程 、源碼 或 測試用例 來簡要或詳細的瞭解Def究竟是怎樣的一門編程語言。github
Def 有着雄心勃勃的計劃:在不損失效率的狀況下達到現代腳本語言的高度抽象,並儘量的減小程序員的負擔。目前已經實現的部分爲:類、泛型、函數重載、函數嵌套、函數模板、操做符綁定、徹底類型推導、基於宏的元編程等,接下來須要您幫助實現的部分是: 清晰友好的錯誤提示,lambda表達式等高級特徵。編程
Def 的前綴 可擴展編程語言 指的是:你能夠創造本來不存在的語義、自定義符號綁定的語法、甚至修改語言的內核。這一切意味着,你能夠親手將 Def打形成任何你想要的語言!編程語言
示例代碼:函數
;; 添加操做符綁定 let ( a + b ) ( add a b ) let ( a := b ) ( var a b ) let ( a.b ) ( elmget a b ) ;; 自定義類型 type Point ( Int x Int y ) ;; 定義變量並初始化 p1 := Point 1 2 ; 類型初始化語法與函數調用相同 p2 := Point 3 4 ;; 重載 add 函數,利用函數模板 tpf add(a b)( ; tpf 定義函數模板 Point (a.x)+(a.y) (b.x)+(b.y) ) ;; 重載的模板函數調用 p1 + p2 ;; Def 多返回值函數 fun getTuple()( ret tuple ( ; 返回元組類型 10 9.9 'a' ) ) ;; 獲得元組並使用 var tp getTuple ; 是的,函數調用不須要括號 var num elmget tp 0 ; num = tp[0] ;; 定義元組拆包宏 let upk(names val)( ; upk 爲 unpack 的縮寫 mcrfor(names)( var _v elmget val _i ) ; mcrfor 表示宏參數循環 _v 爲值 _i 爲循環索引 ) ;; 使用拆包宏 upk(a b c) tp