gpt4 book ai didi

serialization - 支持序列化协程的语言

转载 作者:行者123 更新时间:2023-12-04 10:13:30 25 4
gpt4 key购买 nike

我认为当前的语言中不存在这种支持。我认为我想做的事情可以通过“工作流引擎”来解决。但我对工作流程的问题通常是:

  • 声明式/详细,我发现命令式风格更简洁
  • 重量级,我会有很多简单但多样的小状态机

  • 我调查过 serializing iterators in C#但这并不能让我确切地到达我想要的位置。我目前正在考虑将 DSL 放在 Boo 中但不确定我是否能够将类似协程的行为引入 Boo,并且也能够对其进行序列化。

    例子

    这是我想做的有限虚构示例。主要问题是在例程中的任何时候您都可能需要获取用户输入。输入之间的时间可能很长,因此需要将服务状态序列化到磁盘。
        def RunMachine(user)
    var lever = user.ChooseLever()
    lever.Pull()
    var device = CreateDevice(user)
    machine.Add(device)
    machine.Run()

    def CreateDevice(user)
    var color = user.ChooseColor()
    var shape = user.ChooseShape()
    return Device(color, shape)

    更新

    我在 CPython 中有一个工作“引擎”。它捎带在 python 中的迭代器/产量支持上。所以代码看起来像这样:
    def escape(self, you):        
    roll = yield self.game.rollDice(you)
    if roll < 5:
    self.caughtAction(you)

    哪里 rollDice可以中断。一些用户操作。 CPython 但是不会序列化迭代器。

    由于游戏的整个状态可以定义为一系列命令,我将游戏状态序列化到协程开始的点,然后是剩余的命令列表。所以保存/恢复看起来像这样:
    def dumpGameState(game):
    if gameState.partialState:
    return pickle.dumps({ 'partialState': game.partialState, 'partialInputs': game.partialInputs })

    return pickle.dumps(game)

    def loadGameState(data):
    state = pickle.loads(data)

    if state.__class__ is Game:
    return state

    r = pickle.loads(state['partialState'])

    for input in state['partialInputs']:
    game.execute(**input)
    return game

    当前调查

    我仍然觉得这并不令人满意。因为我最终不得不在几乎所有方法上使用“产量”。我宁愿不必专门装饰一个方法。它在序列化方面也很失败。

    目前我正在研究走函数式路线,因为函数式语言似乎对元编程/DSL 创建有更好的支持。目前在看
  • F# Computational Expressions
  • Haskell

  • 我希望通过足够强大的元编程设施,我可以自动化状态存储机制。另外,如果我走 F# 路线,我很确定我可以回到 "technique"/(hack)我曾经序列化迭代器。

    最佳答案

    有趣的是你今天应该问这个,然后我读到了 Continuations in Mono .看起来像你所追求的那种东西。特别是对 Microthreading in Second Life 的引用,包括这个描述:

    SecondLife required that code be suspended at any point in time and that its entire state be serializable into a format suitable for storage into a database. Serialized state could then be restored at a different point in time or on a different computer (for example while moving from node to node).



    除非我误解了你,否则这可能是一个很好的探索途径。

    关于serialization - 支持序列化协程的语言,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/734638/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com