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

自己手撸了一个语言玩

  •  2
     
  •   bramblex · Oct 16, 2015 · 9115 views
    This topic created in 3863 days ago, the information mentioned may be changed or developed.

    GayHub 求 start : https://github.com/bramblex/BlxScript

    在线测试地址:http://bramblex.github.io/BlxScript

    求各种指教 /w\

    Supplement 1  ·  Oct 16, 2015
    函数式语言……支持闭包,函数柯里化……
    Supplement 2  ·  Oct 17, 2015
    已经为自己的语言实现了 cps 变换。
    80 replies    2016-01-09 13:11:07 +08:00
    anym0us
        1
    anym0us  
       Oct 16, 2015
    友情先支持一下
    bramblex
        2
    bramblex  
    OP
       Oct 16, 2015
    @anym0us /w\ 感谢支持
    bramblex
        3
    bramblex  
    OP
       Oct 16, 2015
    然而并没有什么人理我 TnT
    matsuijurina
        4
    matsuijurina  
       Oct 16, 2015   ❤️ 1
    挺有意思的,可以起个名字叫 goffeescript
    pubby
        5
    pubby  
       Oct 16, 2015
    @matsuijurina 缩进的, gothon 哈哈
    fyyz
        6
    fyyz  
       Oct 16, 2015
    支持尾递归优化吗?
    bramblex
        7
    bramblex  
    OP
       Oct 16, 2015
    @fyyz

    以后我自己解释的时候考虑下怎么做
    bramblex
        8
    bramblex  
    OP
       Oct 16, 2015
    @matsuijurina

    然而不喜欢 coffee
    Felldeadbird
        9
    Felldeadbird  
       Oct 16, 2015
    楼主这个语言最终是编译成 JS 么
    dsphper
        10
    dsphper  
       Oct 16, 2015
    := 哈哈
    Ouyangan
        11
    Ouyangan  
       Oct 16, 2015
    19
    oott123
        12
    oott123  
       Oct 16, 2015 via Android
    玻璃心 Script (逃
    bramblex
        13
    bramblex  
    OP
       Oct 16, 2015
    @Felldeadbird

    是啊,因为我懒(好吧,其实如果让我自己解决运行的问题的话,处理闭包和函数柯里化都比较复杂啦)……
    bramblex
        14
    bramblex  
    OP
       Oct 16, 2015
    @dsphper TnT 这是从 Io lang 抄来的
    bramblex
        15
    bramblex  
    OP
       Oct 16, 2015
    @Ouyangan thx /w\
    bramblex
        16
    bramblex  
    OP
       Oct 16, 2015
    @oott123

    对啊,楼主玻璃心,只能赞不能喷 /w\
    oott123
        18
    oott123  
       Oct 16, 2015 via Android
    @bramblex 赞赞赞
    Gonster
        19
    Gonster  
       Oct 16, 2015 via iPhone
    /w\ lz 好萌,点 star 看看
    cxshun
        20
    cxshun  
       Oct 16, 2015
    哈哈,果断 star 一下看看。
    linux40
        21
    linux40  
       Oct 16, 2015
    先友情支持一下。。。。
    ooTwToo
        22
    ooTwToo  
       Oct 16, 2015
    不明觉叼
    bramblex
        23
    bramblex  
    OP
       Oct 16, 2015
    @oott123

    thx
    bramblex
        24
    bramblex  
    OP
       Oct 16, 2015
    @Gonster
    @cxshun
    @linux40

    /w\ 感谢各种 star
    lzhtony
        25
    lzhtony  
       Oct 16, 2015
    很棒的样子.支持下.
    bramblex
        26
    bramblex  
    OP
       Oct 16, 2015
    @lzhtony
    感谢支持
    yxzblue
        27
    yxzblue  
       Oct 16, 2015
    已 start
    sun2920989
        28
    sun2920989  
       Oct 16, 2015
    这就是编译原理学完了之后不知道这门课能干啥的结果..................o(∩_∩)o 支持一下
    bramblex
        29
    bramblex  
    OP
       Oct 16, 2015
    @sun2920989

    话说,其实我都没有按照编译原理来 TnT
    firemiles
        30
    firemiles  
       Oct 16, 2015
    @bramblex 先 star 支持下,
    l := List 1 2 3 4 5 End
    print l # => [1, 2, 3, 4, 5]
    这个 list 定义好奇怪,为什么选择这么奇怪的写法
    bramblex
        31
    bramblex  
    OP
       Oct 16, 2015
    @firemiles

    因为 List 是一个函数。 List 接受一个参数以后,返回一个函数,直到接收的参数是 End 才会中止,并且返回数组。

    举个栗子
    l1 := List 1 2 3 4 5
    l2 := l1 6 7 End
    l3 := l1 8 9 End

    print l2 # => [1,2,3,4,5,6,7]
    print l3 # => [1,2,3,4,5,8,9]
    jiyinyiyong
        32
    jiyinyiyong  
       Oct 16, 2015
    模块方案和对象系统看得人够呛, 嗾使自己造的吗还是说 AMD 改的..
    parser 部分还没看明白...
    编译代码我当时做过后来干脆用 ES6 AST 直接发到 Babel 编译了, 推荐用 Babel 生成
    winkidney
        33
    winkidney  
       Oct 16, 2015   ❤️ 1
    lz 傻逼(好像 kso 的风气并不能带到 v2 哈哈哈
    bramblex
        34
    bramblex  
    OP
       Oct 16, 2015
    @jiyinyiyong

    那个 Class.js 还是不要看得好,太多黑科技了不适合观看。模块方案是 AMD 改编,不过这个也不用看啊……

    看代码只需要看 src/ 下的就行了。 dist/ 下的都是我用自己的工具包装过的,不适合观看。
    nooper
        35
    nooper  
       Oct 16, 2015 via iPad
    感觉语法很怪异
    bramblex
        36
    bramblex  
    OP
       Oct 16, 2015
    @winkidney 滚粗
    bramblex
        37
    bramblex  
    OP
       Oct 16, 2015
    @nooper

    如果你玩过 Haskell ,或者你懂 Lambda 演算。那么你会觉得我的语法很亲切
    LancerComet
        38
    LancerComet  
       Oct 16, 2015
    兹词一个,本人第一反应应该是 GoScript

    另外尝试传多个参数的时候报错,然后把例子复制过去也是报错



    难道是打开方式不对……
    bramblex
        39
    bramblex  
    OP
       Oct 16, 2015
    @LancerComet

    其实,这个语言里面没有中缀运算符……

    改成 a := add x y 就好了……
    bramblex
        40
    bramblex  
    OP
       Oct 16, 2015   ❤️ 1
    @LancerComet

    PaserError At Line 2, Char 10 刚好就是那个 + 号。 TnT
    oxyflour
        41
    oxyflour  
       Oct 16, 2015   ❤️ 1
    这个挺好玩的(已 star

    前段时间用 call/cc 玩 control flow 的时候自己也撸了个类似 lua 的函数式语言
    http://vlr.ofr.me/oxyflour/yalls
    https://github.com/oxyflour/yalls

    跟你的很像也区分了 = 和 := 呢
    不过到现在连 test 都没写完,更不要提文档了 orz (懒癌没治系列
    bramblex
        42
    bramblex  
    OP
       Oct 16, 2015
    @oxyflour

    已 star~

    我这里根本没有 test /w\……

    作为递归党来说,只要过程 pure ,那么只要一步是正确的,那么所有步肯定都是正确的 /w\。

    = 和 := 的区分我是从 Io lang 里面抄的。
    jiyinyiyong
        43
    jiyinyiyong  
       Oct 16, 2015
    @bramblex 我来凑个热闹.. http://script.cirru.org/
    Parser 部分实现完全不一样的, 代码生成直接 Babel 了
    bramblex
        44
    bramblex  
    OP
       Oct 16, 2015
    @jiyinyiyong

    /w\ 这种 lisp 式的语法好玩。
    zhantss
        45
    zhantss  
       Oct 16, 2015
    凑热闹看看
    htc502
        46
    htc502  
       Oct 16, 2015
    看着很牛逼的样子,虽然不懂。。。已 star 支持
    firemiles
        47
    firemiles  
       Oct 16, 2015
    @bramblex 都使用 lisp 的前缀语法,语法应该会很精简
    Exin
        48
    Exin  
       Oct 16, 2015
    感觉 V 站近期这样高技术水平的帖子少啊,新来的水货们都看不懂(包括我
    bramblex
        49
    bramblex  
    OP
       Oct 16, 2015
    @Exin

    嘛……我觉得我这个就是水贴而已……
    vicvinc
        50
    vicvinc  
       Oct 16, 2015
    太刁,当年编译原理挂了的,我现在只能做前端设计了
    bramblex
        51
    bramblex  
    OP
       Oct 16, 2015
    @vicvinc

    编译原理我就看了一个通宵,花了 5 个小时看书。然后过了
    yonka
        52
    yonka  
       Oct 16, 2015
    很像 py go
    bramblex
        53
    bramblex  
    OP
       Oct 16, 2015
    @yonka

    嗯……你多接触点语言以后就不会觉得像了 py go 了
    wittyfox
        54
    wittyfox  
       Oct 16, 2015 via Android
    👍
    linux40
        55
    linux40  
       Oct 16, 2015
    @bramblex 我暂时还没有账号,纯顶贴的。。。。
    dqh3000
        56
    dqh3000  
       Oct 16, 2015
    楼主做的很好,以后世界上所有语言都会被编译成 javascript 的!
    bramblex
        57
    bramblex  
    OP
       Oct 16, 2015
    @linux40 没事,好玩就好啦~
    bramblex
        58
    bramblex  
    OP
       Oct 16, 2015
    @dqh3000

    翻译成 JavaScript 是无奈之举……
    不过 JavaScript 哪里都可以用,什么特性都有,作为目标语言还是挺方便的
    dant
        59
    dant  
       Oct 16, 2015
    JJ 的思念(
    jings
        60
    jings  
       Oct 16, 2015
    求大鸡鸡神戴妃
    Exin
        61
    Exin  
       Oct 16, 2015
    @bramblex 是吗,我还是继续去撸自己的编译器好了
    Actrace
        62
    Actrace  
       Oct 17, 2015
    最适合编程的语言就是人类的语言。
    ototsuyume
        63
    ototsuyume  
       Oct 17, 2015
    想起来自己 2 年前也做过一个玩具语言
    https://github.com/ototsuyume/tinyscript
    虽然不像楼主那样支持那么多特性(当时还不知道 cury 是什么东西。。。),但是直接把代码编译然后用虚拟机执行的,可以跑过 8 皇后快排等代码,可是后面实在太忙没时间搞完。现在再看发现代码风格实在太差而且生成二进制代码的方法有问题,以后看来得重新开个坑来完善才行。。
    bramblex
        64
    bramblex  
    OP
       Oct 17, 2015
    @ototsuyume

    我已经可以给自己的语言做 cps 变换了 /w\
    bramblex
        65
    bramblex  
    OP
       Oct 17, 2015
    @Actrace

    最不适合编程的才是人类语言……
    bramblex
        66
    bramblex  
    OP
       Oct 17, 2015
    @Exin /w\ 加油
    bramblex
        67
    bramblex  
    OP
       Oct 17, 2015
    @dant /w\ 死基佬,看我肛你
    lizhuoli
        68
    lizhuoli  
       Oct 17, 2015 via iPhone
    @ototsuyume 已关注
    bramblex
        69
    bramblex  
    OP
       Oct 17, 2015 via iPad
    @jings 带你妹
    shakespaces
        70
    shakespaces  
       Oct 17, 2015
    已 star ,膜拜大神
    banxi1988
        71
    banxi1988  
       Oct 17, 2015
    List 的声明怎么比 JavaScript 现在的还到退了啊?

    l := List 1 2 3 4 5 End

    vs

    var l = [ 1,2,3,4,5]

    我宁愿下面一种。

    PS : 我就是因为 Java 对于字面量数组、字典支持不好而不喜欢的。
    bramblex
        72
    bramblex  
    OP
       Oct 17, 2015 via iPad
    @banxi1988

    List 是一个函数…能理解什么是函数么…
    bramblex
        73
    bramblex  
    OP
       Oct 17, 2015 via iPad
    @banxi1988

    况且把 List End 换成…[ ] 就几分钟的事而已……
    bramblex
        74
    bramblex  
    OP
       Oct 17, 2015 via iPad
    @banxi1988 顺便给你举个好玩的栗子

    l := List

    n := 0
    while not (compare 10 n)
    l = l n
    n = add n 1

    print (l End)
    keroro520
        75
    keroro520  
       Oct 18, 2015
    QAQ 原谅我孤陋寡闻,原来 js 能写这种东西啊,我一直以为 js 就是写 web 前端的。
    bramblex
        76
    bramblex  
    OP
       Oct 18, 2015 via iPad
    @keroro520 然而我这个编译器也能在网页前端上面跑

    不在于什么语言,而在于怎么用这门语言
    jings
        77
    jings  
       Oct 20, 2015
    没地方水,来着水。
    啦啦啦啦
    bramblex
        78
    bramblex  
    OP
       Oct 21, 2015
    @jings /w\ 干嘛来这里水
    icymorn
        79
    icymorn  
       Oct 21, 2015
    后排支持,等我整理完代码也来发
    adubi
        80
    adubi  
       Jan 9, 2016 via Android
    不明觉叼,可否加个 QQ
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   5245 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 156ms · UTC 01:13 · PVG 09:13 · LAX 18:13 · JFK 21:13
    ♥ Do have faith in what you're doing.