OC

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

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

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变换。但是只要没有,那么依旧还是嵌套嵌套嵌套,最多就是把嵌套延迟了而已

登录 或者 注册
发布新帖
相关帖子
相关新闻
最新帖子

AltStyle によって変換されたページ (->オリジナル) /