Yaklang 升级: 更灵活的语法让写插件变得更轻松

Yaklang 升级: 更灵活的语法让写插件变得更轻松

背景

前段时间 Yaklang 实现了重构,在实现原有语法的基础上增加了很多新的语法,非常的好用。在之前的一次更新中,我们悄咪咪的更新了语言引擎,现在经过了几个版本的迭代,新语言引擎逐渐稳定。本篇简单介绍下新语言引擎一些有意思的更新内容。完整的语言教程已经在官网更新 https://www.yaklang.com/docs/yak-basic/intro

报错信息

报错信息是最直观的,新引擎的报错更好看了,更方便我们写代码时排查错误。

错误信息中包含了触发异常的调用栈文件路径触发错误的代码所处结构(函数或是全局代码)行号和异常代码预览

错误处理

回顾下之前YAK的异常处理,很像Go的风格,例如

data,err = codec.DecodeBase64("aaa")
if err{
    log.info("decode error: %v",err)
    return
}
dump(data)

YAK还增加了die函数,有点类似assert ,有错误则直接panic,没错则什么也不处理

data,err = codec.DecodeBase64("aaa")
die(err)
dump(data)

本次更新增加了小尾巴,效果和die类似,如下,在函数调用后增加一个~,函数的最后一个返回值会被小尾巴吃掉,并且对它检查,如果不为空则panic。

data = codec.DecodeBase64("aaa")~
dump(data)

try-catch的支持如下,可以对代码块捕获panic信息,当出现panic时会直接进入catch代码块处理异常。不影响代码后续执行。

try-catch还可以与小尾巴一起使用,可以对 ` 从请求包提取url instance ` 这个代码块进行异常捕获,相较于之前每次函数调用都要处理error方便多了。

字符串

字符串在原本基础上,支持了前缀,包括b、f、x。前缀b用法和python类似,可以直接创建[]byte类型数据,前缀用法f类似javascript,可以通过${}执行表达式并拼接到字符串中,x是YAK特有的Fuzztag语法,与WebFuzzer的Fuzztag相同

除此之外还有一些有意思的语法糖,如字符串格式化、字符串切片,使用*重复字符串

类型内置函数

字符串、列表、字典类型都支持了内置函数,这里只演示几个比较常用的函数,全部函数可以去官网查看(代码补全也可以看)

For循环

除了支持传统的for i=0;i<n;i++ {}用法,还支持golang风格的for index,value = range list{},还有新增的python风格的for in

for v in ["a", "b", "c", "d"] {
    print(v)
}
// abcd

还有YAK风格的for-number用法,下面的for in和for range是等价的

for i in 4 {
    print(i)
}
// 0123
for i range 4 {
    print(i)
}
// 0123
for range 4 {
    print(1)
}
// 1111

作用域相关

新版本对作用域进行了更严格的限制,支持块级作用域

if true {
    a = 1
}
dump(a) // 输出为nil

顺便还解决了旧版本的老问题,以后可以这样使用了

for i = range 10{
    go func(i){
        print(i)
    }(i)
}
time.sleep(1)
// 输出 9861405732

支持闭包,闭包函数定义时会继承当前作用域,如下,虽然For循环结束了,但For代码块的作用域由于被闭包函数继承,所以并不会被销毁。

a = 1
for i = range 10{
    a = func(){
        println(i)
    }
}
a() // 输出9

STRICT模式

对于未声明的变量,Yaklang的处理方式是赋予nil值并在控制台warn log警告。但这种对未声明变量的使用,几乎都是非预期的,可能会造成一些非预期的错误,所以提供了strict模式。 在环境变量中添加YVMODE=strict即可开启

对于未声明变量,会在Yak Runner中标注出来,编译时会抛出编译错误

总结

本篇介绍了Yaklang的部分更新,真的很好用,师傅们可以在插件中使用新语法了,完整的介绍可以看官网 https://www.yaklang.com/docs/yak-basic/intro

Yak官方资源

Yak 语言官方教程:
https://yaklang.com/docs/intro/
Yakit 视频教程:
https://space.bilibili.com/437503777
Github下载地址:
https://github.com/yaklang/yakit
Yakit官网下载地址:
https://yaklang.com/
Yakit安装文档:
https://yaklang.com/products/download_and_install
Yakit使用文档:
https://yaklang.com/products/intro/
常见问题速查:
https://yaklang.com/products/FAQ

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值