[今天生日]造了个编译到 JavaScript 的语言取名叫做 Smooth

brambles 发布于 2016年05月24日
tinyfool 等1人欣赏。

Github 传送门:https://github.com/bramblex/Smooth

线上试用:http://bramblex.github.io/Smooth/

特点:

利用 do..with 语法糖轻松解决异步问题。

# 异步的 delay 函数
delay = `(ms)=>(f)=>setTimeout(()=>f(ms),ms)`

# 将一个普通的函数封装成异步函数
mkasync = `(job)=>(f)=>{job();f()}`

# 将多个异步函数串联到一起
async f g = f g

# 以同步的方式写异步,每隔一秒依次输出 "hello" "world" "smooth"
asyncJob = with async do
     delay 1000
     mkasync _-> print $ "hello"
     delay 2000
     mkasync _-> print "world"  
     n <- delay 3000 # 还可以取得异步函数的数据
     mkasync _-> print $ "smooth " + n 

main _ = asyncJob _ -> print "done"

可以自定义运算符

# 定义 `+` 符号
infixl 4 + add
add = `(x)=>(y)=>x+y`

# 定义 `<` 符号
infixl 6 < lt
lt = `(x)=>(y)=>x<y`

# 定义 `$` 符号,用来消除括号
infixr 0 $ app
app f x = f x

函数式和指令式混用

# 定义 `+` 符号
infixl 4 + add
add = `(x)=>(y)=>x+y`

# 定义 `<` 符号
infixl 6 < lt
lt = `(x)=>(y)=>x<y`

impFunc n =
    let result = 0
    let i = 0
    while i < n
        result = result + i
        i = i + 1

decFunc n = if n < 0 then 0 else n + decFunc n
共5条回复
tinyfool 回复于 2016年05月24日

纯粹无聊么?

brambles 回复于 2016年05月24日

1楼 @tinyfool

不算无聊……准备哪来实用,这只是最小模型而已。

主要是因为不想再写 js 了,但是又找不到一个方便好用的替代品,所以就干脆自己造一个

tinyfool 回复于 2016年05月25日

2楼 @brambles 老赵不是有一个js异步框架么?js有啥不好的?我反正没咋写。不过还有很多轮子吧?为啥要造一个自己的轮子呢?

tinyfool 回复于 2016年05月25日

2楼 @brambles 你有在玩机器学习么?

brambles 回复于 2016年05月25日

3楼 @tinyfool

只要还在使用 J's这门语言…任何框架都是没有太大意义的…因为这真的只是简简单单无法层面上的一个cps变换。但是只要没有,那么依旧还是嵌套嵌套嵌套,最多就是把嵌套延迟了而已

登录 或者 注册