[今天生日]造了个编译到 Javascript 的语言取名叫做 Smooth - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐关注
Meteor
JSLint - a Javascript code quality tool
jsFiddle
D3.js
WebStorm
推荐书目
Javascript 权威指南第 5 版
Closure: The Definitive Guide
bramblex
V2EX    Javascript

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

  •  4
     
  •   bramblex 2016-05-24 23:04:50 +08:00 6619 次点击
    这是一个创建于 3459 天前的主题,其中的信息可能已经有所发展或是发生改变。

    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 
    72 条回复    2016-05-26 12:06:36 +08:00
    southwolf
        1
    southwolf  
       2016-05-24 23:09:09 +08:00
    生日快乐!
    bramblex
        2
    bramblex  
    OP
       2016-05-24 23:10:30 +08:00
    @southwolf 谢谢 /w\
    Slienc7
        3
    Slienc7  
       2016-05-24 23:18:54 +08:00
    生日快乐
    lichun
        4
    lichun  
       2016-05-24 23:24:47 +08:00
    happy birthday
    shyling
        5
    shyling  
       2016-05-24 23:28:35 +08:00 via iPad
    `我不是 js`
    bramblex
        6
    bramblex  
    OP
       2016-05-24 23:33:44 +08:00
    @shyling

    主要方便和 js 之间互操作 /w\
    bramblex
        7
    bramblex  
    OP
       2016-05-24 23:34:09 +08:00
    @Slienc7
    @lichun

    谢谢 ~ OwO ~
    ctsed
        8
    ctsed  
       2016-05-24 23:46:59 +08:00 via iPhone
    明年就可以一起过生日了
    mactaew
        9
    mactaew  
       2016-05-24 23:50:04 +08:00 via iPhone
    黑皮波斯忒
    zzNucker
        10
    zzNucker  
       2016-05-25 00:10:25 +08:00
    迟到的生快~!
    aprikyblue
        11
    aprikyblue  
       2016-05-25 00:26:50 +08:00 via Android
    快生
    upczww
        12
    upczww  
       2016-05-25 00:29:36 +08:00 via Smartisan T1
    膜拜大神,生日快乐,好像晚了
    justjavac
        13
    justjavac  
       2016-05-25 00:52:17 +08:00 via Android
    生日快乐\^O^/
    4679kun
        14
    4679kun  
       2016-05-25 00:55:07 +08:00 via Android
    迟到的生快(=ω)=
    msg7086
        15
    msg7086  
       2016-05-25 01:25:41 +08:00
    这位姐姐生快~
    hewigovens
        16
    hewigovens  
       2016-05-25 07:20:13 +08:00
    github 上的 readme 发现一处错别字,“其本质就是一个简单的 CPS 变幻” 应为 “变换”?
    xiamx
        17
    xiamx  
       2016-05-25 07:26:24 +08:00
    生日快乐!
    linux40
        18
    linux40  
       2016-05-25 07:52:22 +08:00 via Android
    完成之后马上弃坑么。。。
    bramblex
        19
    bramblex  
    OP
       2016-05-25 08:22:50 +08:00 via Android
    @hewigovens 对… cps 变换,输入法的锅
    bramblex
        20
    bramblex  
    OP
       2016-05-25 08:23:56 +08:00 via Android
    @linux40 不准备弃坑…我是准备拿这东西实用的…模块系统和类型系统还没加上去
    bramblex
        21
    bramblex  
    OP
       2016-05-25 08:28:09 +08:00 via Android
    bramblex
        22
    bramblex  
    OP
       2016-05-25 08:29:30 +08:00
    @aprikyblue
    @upczww
    @justjavac
    @4679kun
    @msg7086

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

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

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

    其实很多东西并没有想象得那么复杂,我建议是不看书,先用自己的方式尝试实现,等实现完了再去看书看理论。如果一开始就看书,可以说你完全不知道书里讲得啥;明白书里讲啥了还是不明白为啥要真么做;明白为啥这么做了又不知道这东西该用在那里;明白该用在那里了又不知道该怎么用……而先自己尝试用自己的想法去实现一个模型,再回去翻书,上面的一系列坑就都没有了。
    donghouhe
        36
    donghouhe  
       2016-05-25 11:24:48 +08:00
    服服服服服
    sinalvee
        37
    sinalvee  
       2016-05-25 11:26:07 +08:00
    虽然我也看不懂,但是生快!
    bramblex
        38
    bramblex  
    OP
       2016-05-25 11:53:11 +08:00
    @sinalvee 谢谢~
    gimp
        39
    gimp  
       2016-05-25 12:19:51 +08:00
    JJ 生日快乐~
    bramblex
        40
    bramblex  
    OP
       2016-05-25 12:53:30 +08:00
    @gimp 谢谢
    sdenvi
        41
    sdenvi  
       2016-05-25 13:40:24 +08:00 via iPhone
    生日快乐
    timhal
        42
    timhal  
       2016-05-25 13:48:52 +08:00
    啊 我明天呢( ̄ ̄")被你抢先一步
    Lothar
        43
    Lothar  
       2016-05-25 13:52:27 +08:00
    没写过 haskell 的表示看起来真要命 (生快
    superxzr
        44
    superxzr  
       2016-05-25 13:55:48 +08:00
    大触生快
    gamexg
        45
    gamexg  
       2016-05-25 14:15:14 +08:00
    生日快乐
    timeship
        46
    timeship  
       2016-05-25 14:20:25 +08:00
    生日快乐么么哒,感觉认识好久了
    bramblex
        47
    bramblex  
    OP
       2016-05-25 14:36:36 +08:00
    @timhal 那预祝明天生日快乐哈~ OwO~
    bramblex
        48
    bramblex  
    OP
       2016-05-25 14:37:04 +08:00
    @Lothar 只是语法像 haskell 因为我懒~
    bramblex
        49
    bramblex  
    OP
       2016-05-25 14:37:28 +08:00
    @superxzr 谢谢~
    wsph123
        50
    wsph123  
       2016-05-25 14:39:08 +08:00
    生日快乐!
    bramblex
        51
    bramblex  
    OP
       2016-05-25 14:39:20 +08:00
    @timeship /w\ 哈哈哈~
    narrowei
        52
    narrowei  
       2016-05-25 14:40:13 +08:00
    ()生日快乐
    SCaffrey
        53
    SCaffrey  
       2016-05-25 16:29:26 +08:00   1
    生日快乐\^O^/
    Exin
        54
    Exin  
       2016-05-25 16:34:41 +08:00   1
    又是个做编译器的大神
    timeback
        55
    timeback  
       2016-05-25 16:49:01 +08:00   1
    好吧,不认识,一样恭祝:生日快乐!!!
    ProfFan
        56
    ProfFan  
       2016-05-25 16:54:54 +08:00
    @Exin purescript
    jamesarch
        57
    jamesarch  
       2016-05-25 16:58:12 +08:00
    生日快乐
    cha1
        58
    cha1  
       2016-05-25 17:55:47 +08:00
    生日快乐! Star 一个先! ()
    bramblex
        59
    bramblex  
    OP
       2016-05-25 18:30:04 +08:00
    @narrowei
    @timeback
    @zqhong

    谢谢大家~
    bramblex
        60
    bramblex  
    OP
       2016-05-25 18:30:43 +08:00
    @ProfFan

    哎呦 /w\
    居然有人认识 PureScript ~
    hhkbp2
        61
    hhkbp2  
       2016-05-25 22:56:45 +08:00
    路过并支持
    自制语言其中的苦乐是一种很特别的经历
    ProfFan
        62
    ProfFan  
       2016-05-25 23:12:06 +08:00
    @bramblex CPS 变换给点赞~
    abcdabcd987
        63
    abcdabcd987  
       2016-05-25 23:37:54 +08:00
    哇塞, CPS 变换,比我前不久写的渣渣编译器厉害多了( http://v2ex.com/t/279656#reply2)
    guyskk
        64
    guyskk  
       2016-05-26 00:45:57 +08:00
    生日快乐!

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

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

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

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

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

    啦啦啦~
    6ufq0VLZn0DDkL80
        69
    6ufq0VLZn0DDkL80  
       2016-05-26 09:03:23 +08:00
    为什么用 purescript 写,这语言有什么优越之处?
    bramblex
        70
    bramblex  
    OP
       2016-05-26 10:26:42 +08:00
    @cholerae 显示优越感,光一个简单的 Monad 就能把绝大多数码农挡灾墙外
    Aidea
        71
    Aidea  
       2016-05-26 10:51:55 +08:00
    好,虽然看不懂,但还是生日快乐~
    dant
        72
    dant  
       2016-05-26 12:06:36 +08:00 via Android
    JJ 的思念生日快乐(
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     3147 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 30ms UTC 12:14 PVG 20:14 LAX 04:14 JFK 07:14
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86