首页   注册   登录
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐关注
Meteor
JSLint - a JavaScript code quality tool
jsFiddle
D3.js
WebStorm
推荐书目
JavaScript 权威指南第 5 版
Closure: The Definitive Guide
Coding
V2EX  ›  JavaScript

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    啦啦啦~
        69
    cholerae   2016-05-26 09:03:23 +08:00
    为什么用 purescript 写,这语言有什么优越之处?
        70
    bramblex   2016-05-26 10:26:42 +08:00
    @cholerae 显示优越感,光一个简单的 Monad 就能把绝大多数码农挡灾墙外
        71
    Aidea   2016-05-26 10:51:55 +08:00
    好屌,虽然看不懂,但还是生日快乐~
        72
    dant   2016-05-26 12:06:36 +08:00 via Android
    JJ 的思念生日快乐(
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   2643 人在线   最高记录 5043   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.3 · 34ms · UTC 13:29 · PVG 21:29 · LAX 05:29 · JFK 08:29
    ♥ Do have faith in what you're doing.