推荐关注
› Meteor
› JSLint - a JavaScript code quality tool
› jsFiddle
› D3.js
› WebStorm
推荐书目
› JavaScript 权威指南第 5 版
› Closure: The Definitive Guide
bramblex

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

  •  4
     
  •   bramblex · May 24, 2016 · 7410 views
    This topic created in 3816 days ago, the information mentioned may be changed or developed.

    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 replies  •  2016-05-26 12:06:36 +08:00
    southwolf
    southwolf
    May 24, 2016
    1
    生日快乐!
    bramblex
    bramblex
    OP
    May 24, 2016
    2
    @southwolf 谢谢 /w\
    Slienc7
    Slienc7
    May 24, 2016
    3
    🎉生日快乐🎉
    lichun
    lichun
    May 24, 2016
    4
    happy birthday
    shyling
    shyling
    May 24, 2016 via iPad
    5
    `我不是 js`
    bramblex
    bramblex
    OP
    May 24, 2016
    6
    @shyling

    主要方便和 js 之间互操作 /w\
    bramblex
    bramblex
    OP
    May 24, 2016
    7
    @Slienc7
    @lichun

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

    上一条手误了,谢谢大家~
    xcodebuild
    xcodebuild
    May 25, 2016 via Android
    23
    生日快乐🎉🎉
    chunqiuyiyu
    chunqiuyiyu
    May 25, 2016
    24
    虽然看不懂,但是并不妨碍我说一句“生日快乐”
    iphantom
    iphantom
    May 25, 2016
    25
    生快
    yuankui
    yuankui
    May 25, 2016
    26
    需要哪些准备才能造一门语言?
    silvernoo
    silvernoo
    May 25, 2016
    27
    生快
    w466397352
    w466397352
    May 25, 2016
    28
    生日快乐\^O^/
    虽然我也看不懂
    scarlex
    scarlex
    May 25, 2016
    29
    生日快乐 ~
    baocaixiong
    baocaixiong
    May 25, 2016
    30
    生日快乐
    pyufftj
    pyufftj
    May 25, 2016
    31
    @yuankui 编译原理看一下
    bramblex
    bramblex
    OP
    May 25, 2016
    32
    @codefalling

    赶紧抱紧大腿,膜拜之~
    bramblex
    bramblex
    OP
    May 25, 2016
    33
    guizer
    guizer
    May 25, 2016
    34
    生快 代码什么的看不懂...
    bramblex
    bramblex
    OP
    May 25, 2016
    35
    @pyufftj
    @yuankui

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

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

    谢谢大家~
    bramblex
    bramblex
    OP
    May 25, 2016
    60
    @ProfFan

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

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

    CPS 大法确实挺好的 /w\
    bramblex
    bramblex
    OP
    May 26, 2016
    66
    @abcdabcd987

    你的比我厉害多了 /w\ 我的还没有后端呢~
    bramblex
    bramblex
    OP
    May 26, 2016
    67
    @guyskk

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

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

    啦啦啦~
    6ufq0VLZn0DDkL80
    6ufq0VLZn0DDkL80
    May 26, 2016
    69
    为什么用 purescript 写,这语言有什么优越之处?
    bramblex
    bramblex
    OP
    May 26, 2016
    70
    @cholerae 显示优越感,光一个简单的 Monad 就能把绝大多数码农挡灾墙外
    Aidea
    Aidea
    May 26, 2016
    71
    好屌,虽然看不懂,但还是生日快乐~
    dant
    dant
    May 26, 2016 via Android
    72
    JJ 的思念生日快乐(
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   4032 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 221ms · UTC 05:36 · PVG 13:36 · LAX 21:36 · JFK 00:36
    ♥ Do have faith in what you're doing.