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

2016-05-24 23:04:50 +08:00
 bramblex

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
6335 次点击
所在节点    JavaScript
72 条回复
hhkbp2
2016-05-25 22:56:45 +08:00
路过并支持
自制语言其中的苦乐是一种很特别的经历
ProfFan
2016-05-25 23:12:06 +08:00
@bramblex CPS 变换给点赞~
abcdabcd987
2016-05-25 23:37:54 +08:00
哇塞, CPS 变换,比我前不久写的渣渣编译器厉害多了( http://v2ex.com/t/279656#reply2)
guyskk
2016-05-26 00:45:57 +08:00
生日快乐!

mkasync 要是改成 await ,当作关键字,就跟 python3.5, es6, c# 的异步差不多了
bramblex
2016-05-26 08:47:26 +08:00
@ProfFan

CPS 大法确实挺好的 /w\
bramblex
2016-05-26 08:47:52 +08:00
@abcdabcd987

你的比我厉害多了 /w\ 我的还没有后端呢~
bramblex
2016-05-26 08:51:42 +08:00
@guyskk

当然差很多……
说句不好听的 pthon3.5 / es6 的 await 全是垃圾,把原本非常简单的问题搞得那么复杂。 c # 不会,所以不喷
bramblex
2016-05-26 08:58:20 +08:00
@guyskk

/w\ 其实说实话,我就是因为不想写 JavaScript ,并且觉得 Coffee 不够好, PureScript 不够方便我才自己造的~

啦啦啦~
6ufq0VLZn0DDkL80
2016-05-26 09:03:23 +08:00
为什么用 purescript 写,这语言有什么优越之处?
bramblex
2016-05-26 10:26:42 +08:00
@cholerae 显示优越感,光一个简单的 Monad 就能把绝大多数码农挡灾墙外
Aidea
2016-05-26 10:51:55 +08:00
好屌,虽然看不懂,但还是生日快乐~
dant
2016-05-26 12:06:36 +08:00
JJ 的思念生日快乐(

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/281036

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX