先给出官网地址: deflang.org
一句话简介: 可扩展编程语言 Def 的目标是将 C++ 的高效抽象和 Lisp 的强大表现力融为一体。
你可以通过阅读 入门教程 、 源码 或 测试用例 来简要或详细的了解Def到底是怎样的一门编程语言。
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
如果你对 Def 感兴趣,请上 Github 提交新的代码,或者 捐助 作者的开发工作。