[今天生日]造了个编译到 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
6139 次点击
所在节点    JavaScript
72 条回复
bramblex
2016-05-25 08:28:09 +08:00
bramblex
2016-05-25 08:29:30 +08:00
@aprikyblue
@upczww
@justjavac
@4679kun
@msg7086

上一条手误了,谢谢大家~
xcodebuild
2016-05-25 08:37:41 +08:00
生日快乐🎉🎉
chunqiuyiyu
2016-05-25 09:10:03 +08:00
虽然看不懂,但是并不妨碍我说一句“生日快乐”
iphantom
2016-05-25 09:12:35 +08:00
生快
yuankui
2016-05-25 09:16:55 +08:00
需要哪些准备才能造一门语言?
silvernoo
2016-05-25 09:19:40 +08:00
生快
w466397352
2016-05-25 09:34:38 +08:00
生日快乐\^O^/
虽然我也看不懂
scarlex
2016-05-25 09:38:49 +08:00
生日快乐 ~
baocaixiong
2016-05-25 09:51:39 +08:00
生日快乐
pyufftj
2016-05-25 10:40:39 +08:00
@yuankui 编译原理看一下
bramblex
2016-05-25 11:15:52 +08:00
@codefalling

赶紧抱紧大腿,膜拜之~
bramblex
2016-05-25 11:16:31 +08:00
guizer
2016-05-25 11:21:14 +08:00
生快 代码什么的看不懂...
bramblex
2016-05-25 11:22:18 +08:00
@pyufftj
@yuankui

我在造第一个版本,也就是 Smooth 的前身 BlxScript 的时候还没有看过编译原理……

其实很多东西并没有想象得那么复杂,我建议是不看书,先用自己的方式尝试实现,等实现完了再去看书看理论。如果一开始就看书,可以说你完全不知道书里讲得啥;明白书里讲啥了还是不明白为啥要真么做;明白为啥这么做了又不知道这东西该用在那里;明白该用在那里了又不知道该怎么用……而先自己尝试用自己的想法去实现一个模型,再回去翻书,上面的一系列坑就都没有了。
donghouhe
2016-05-25 11:24:48 +08:00
服服服服服
sinalvee
2016-05-25 11:26:07 +08:00
虽然我也看不懂,但是生快!
bramblex
2016-05-25 11:53:11 +08:00
@sinalvee 谢谢~
gimp
2016-05-25 12:19:51 +08:00
JJ 生日快乐~
bramblex
2016-05-25 12:53:30 +08:00
@gimp 谢谢

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

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

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

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

© 2021 V2EX