推荐关注
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 · 6971 views
    This topic created in 3665 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
        1
    southwolf  
       May 24, 2016
    生日快乐!
    bramblex
        2
    bramblex  
    OP
       May 24, 2016
    @southwolf 谢谢 /w\
    Slienc7
        3
    Slienc7  
       May 24, 2016
    🎉生日快乐🎉
    lichun
        4
    lichun  
       May 24, 2016
    happy birthday
    shyling
        5
    shyling  
       May 24, 2016 via iPad
    `我不是 js`
    bramblex
        6
    bramblex  
    OP
       May 24, 2016
    @shyling

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

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

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

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

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

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

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

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

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

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

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

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

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

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