V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
davidlau
V2EX  ›  程序员

有什么语言支持:多个异步调用方法,按命令式顺序写?

  •  
  •   davidlau ·
    liuslevis · 2015-04-18 14:28:18 +08:00 · 3757 次点击
    这是一个创建于 3505 天前的主题,其中的信息可能已经有所发展或是发生改变。
    如 f1 ( callback: f2(callback: f3) )

    写成
    f1()
    f2()
    f3()
    21 条回复    2015-04-19 19:14:59 +08:00
    hooluupog
        1
    hooluupog  
       2015-04-18 14:31:52 +08:00   ❤️ 1
    支持async/await的语言(c#,dart,es7)或者goroutine+chanel都可以。
    sumhat
        2
    sumhat  
       2015-04-18 14:34:50 +08:00 via iPhone   ❤️ 1
    JS 中的 Promise 也可以
    Monad
        3
    Monad  
       2015-04-18 14:36:57 +08:00   ❤️ 1
    Coroutine就是拿来干这个的嘛…
    C/C++用makecontext/swapcontext, lua原生支持coroutine
    ChiChou
        4
    ChiChou  
       2015-04-18 15:08:04 +08:00   ❤️ 1
    @sumhat Promise 还是没有 yield 来的直接
    ChiChou
        5
    ChiChou  
       2015-04-18 15:08:44 +08:00   ❤️ 1
    @sumhat 好吧我突然明白你是想说 yield 一个 Promise 来着……
    mucid
        6
    mucid  
       2015-04-18 15:10:14 +08:00   ❤️ 1
    python3
    yield from
    coolicer
        7
    coolicer  
       2015-04-18 15:13:50 +08:00   ❤️ 1
    node的async库 ,隐
    bombless
        8
    bombless  
       2015-04-18 17:59:40 +08:00   ❤️ 1
    CPS嘛……

    其实加一个能处理 AST 的预处理期就好了,这个任何通用语言都能做。

    又或者让代码通过源代码解释执行,或者热加载代码。这些都不需要语言来支持,语言只需要能回调、支持 FFI,剩下的有平台支持就够了。

    在带有语法插件/Lisp宏的语言中会更方便。
    phoenixlzx
        9
    phoenixlzx  
       2015-04-18 18:13:00 +08:00   ❤️ 1
    promise/async 都比 yield 好用...
    yield 那货比 callback 还反人类...
    h4x3rotab
        10
    h4x3rotab  
       2015-04-18 20:43:27 +08:00
    C# async
    billzhuang
        11
    billzhuang  
       2015-04-18 22:00:41 +08:00
    所有语言的promise
    newtonisaac
        12
    newtonisaac  
       2015-04-18 23:06:28 +08:00
    JamesRuan
        13
    JamesRuan  
       2015-04-18 23:09:47 +08:00
    do syntax sugar for Haskell Monad
    binux
        14
    binux  
       2015-04-18 23:11:30 +08:00 via Android   ❤️ 1
    yield 可以在同一个作用域中干活,省去了参数传递
    clino
        15
    clino  
       2015-04-18 23:43:07 +08:00
    gevent AsyncResult
    ffffwh
        16
    ffffwh  
       2015-04-18 23:58:38 +08:00
    call/cc
    plantain
        17
    plantain  
       2015-04-19 07:20:13 +08:00
    C++17 await
    bolasblack
        18
    bolasblack  
       2015-04-19 10:53:22 +08:00
    试试这个? https://github.com/tj/co
    futursolo
        19
    futursolo  
       2015-04-19 14:37:20 +08:00
    Node.js: Promise
    Python(Tornado based Application): Future(Use with yield)
    Go: goroutine
    quix
        20
    quix  
       2015-04-19 17:20:20 +08:00
    还有一种思路,用future对象, 可以看下ruby的celluloid
    hitsmaxft
        21
    hitsmaxft  
       2015-04-19 19:14:59 +08:00 via iPhone
    java都行啦,killim在字节码层做下cps变换就行了。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5694 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 02:34 · PVG 10:34 · LAX 18:34 · JFK 21:34
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.