Def Lang

可扩展编程语言
授权协议 MIT
开发语言 C/C++
所属分类 程序开发、 脚本编程语言
软件类型 开源软件
地区 国产
投 递 者 罗诚
操作系统 跨平台
开源组织
适用人群 未知
 软件概览

可扩展编程语言 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
  • 利用langid包识别语种,demo代码 import langid def lang_by_langid(para_text): ''' 语种识别,根据langid包 ''' ret = langid.classify(para_text) print(f"langid:{ret}") return ret[0] lang_arr=[

  • 前言 在日常Java开发中,我们经常碰到java.lang.NoClassDefFoundError这样的错误,需要花费很多时间去找错误的原因,具体是哪个类不见了?类明明还在,为什么找不到?而且我们很容易把java.lang.NoClassDefFoundError和java.lang.ClassNotfoundException这两个错误搞混,事实上这两个错误是完全不同的。我们往往花费时间去不断

  • package lee; public interface Inf { public void getString(); } package lee; public class Impl implements Inf { public void getString() { System.out.println("yes"); } public static void main(String[] a

  • 这里我们将总结字符串相关的知识,除了总结String的API用法,同时我们还会总结一些相关的知识点,包括字符串常量池、StringBuffer、StringBuilder,以及equals和==的用法。 一、String的用法 String类在java.lang包中,java使用String类创建一个字符串变量,字符串变量属于对象。java把String类声明的final类,不能有子类。Strin

  • 1.错误分析 项目所用jdk的安装有问题。一般如下: %JAVA_HOME%\lib\tools.jar并不存在,反而是存在%JAVA_HOME%\lib\tools.pack %JAVA_HOME%\jre\lib\rt.jar并不存在,反而是存在%JAVA_HOME%\jre\lib\rt.pack 2.解决方法 提供三种方法: 2.1.手动修复 –>打开cmd窗口 –>cd至%JAVA_HO

  • 此问题相比与ClassNotFoundException,不容易找到,当然这两者都属于jvm加载类时的错误。导致 NoClassDefFoundException的原因:编译时不报错,运行时在内存中找不到该类的对象。也正是这个原因,导 致不好找到,深层次的原因我们得分析jvm加载机制,这个我会在下篇文章中发表个人愚见,这里我们就描述一 些我们实际开发中,由于我们的哪些疏忽导致此问题出现。看到网上好

  • 报错信息:java.lang.NoSuchMethodException: java.util.List.() 严重: Servlet.service() for servlet [dispatcherServlet] in context with path [/video_analysis] threw exception [Request processing failed; nested

  • 现在我会的三种转字符串的方法有 (String) 这个局限性大(我报错就是因为这个) Boolean boolean = true; String str = (String)boolean;//这行代码会报错,编译不过 .toString() Boolean boolean = true; String str = boolean.toString();/

  • spark:java.lang.ClassCastException: java.lang.Double cannot be cast to java.lang.String java.lang.ClassCastException: java.lang.Double cannot be cast to java.lang.String java.lang.ClassCastException:

 相关资料
  • 不久前,如果你问 Lisp 是用来干什么的,很多人会回答说 "人工智能(articial intelligence)" 。事实上,Lisp 和人工智能之间的联系只是历史的偶然。 Lisp 由 John McCarthy 发明,同样是他首次提出了 "人工智能" 这一名词。那时他的学生和同事用 Lisp 写程序,于是它就被称作一种 AI 语言。这个典故在 1980 年代 AI 短暂升温时又被多次提起,

  • 有可能从Java代码中访问扩展函数吗? 我在静态编程语言文件中定义了扩展函数。 其中MyModel是(生成的)java类。现在,我想在我的普通java代码中访问它: 然而,那是行不通的。IDE无法识别bar()方法,编译失败。 work使用kotlin的静态函数: 通过使用导入com.test.extensions.ExtensionsPackage我的IDE似乎配置正确。 我从kotlin文档中

  • 我是android的新手,但我仍然不明白什么是Java中的扩展。

  • 多亏这些改变,我们可以去创建自己的builder和代码块。我们已经在使用一些有趣的函数,比如with。如下简单的实现: inline fun <T> with(t: T, body: T.() -> Unit) { t.body() } 这个函数接收一个T类型的对象和一个被作为扩展函数的函数。它的实现仅仅是让这个对象去执行这个函数。因为第二个参数是一个函数,所以我们可以把它放在圆括号外面,所以我们

  • Markdown 标准 本身所包含的功能有限,所以产生了许多第三方的扩展语法,如 GitHub Flavored Markdown。 这里只介绍众多扩展语法中的一部分内容,它们在不同平台或工具的支持程度不同,请参考具体平台或工具的文档和说明来使用。 删除线 代码块和语法高亮 表格 Task List CommonMark CommonMark 试图将碎片化的 Markdown 实现和扩展进行标准化

  • 用法 创建树(Tree)     <ul id="tt"></ul>     $('#tt').etree({         url: 'tree_data.json',         createUrl: ...,         updateUrl: ...,         destroyUrl: ...,         dndUrl: ...     }); 设置

  • 8.1. 定义访问令牌类型 8.2. 定义新的端点参数 8.3. 定义新的授权许可类型 8.4. 定义新的授权端点响应类型 8.5. 定义其他错误代码

  • 通过使用绝对URI作为令牌端点的“grant_type”参数的值指定许可类型,并通过添加任何其他需要的参数,客户端使用扩展许可类型。 例如,采用[OAuth-SAML]定义的安全断言标记语言(SAML)2.0断言许可类型请求访问令牌,客户端可以使用TLS发起如下的HTTP请求(额外的换行仅用于显示目的): POST /token HTTP/1.1 Host: server.example.com