- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
关于resumable functions的论文中,在有关限制的部分中列出了三个限制:
- Resumable functions cannot use a variable number of arguments. For situations where varargs are necessary,the argument unwrapping may be placed in a function that calls a resumable function after doing the unwrapping of arguments.
- The return type of a resumable function must be
future<T>
orshared_future<T>
. The restrictions on T are defined bystd::future
, not this proposal, butT
must be a copyable or movable type, or ‘void
’. It must also be possible to construct a variable ofT
without an argument; that is, it has to have an accessible (implicit or explicit) default constructor if it is of a class type.- Await expressions may not appear within the body of an exception handler and should not be executed while a lock on any kind is being held by the executing thread.
此限制背后一定有一个原因,由于我缺乏并发知识,我无法推断出是什么原因。有人可以启发我这个话题吗?
这个限制是指 C 风格的可变参数函数还是 C++11 可变参数模板函数?
va_*
所做的魔术有关。宏?在这两种情况下,我认为编译器可以足够聪明地推断出要使用哪个函数。
我了解返回 std::future
的原因或 std::shared_future
,但我猜测可用类型背后的限制原因与 future 可以使用的类型有关。
因此,该论文提议使用两个新关键字(resumable 和 await)来扩展该语言,这两个关键字提供可恢复函数的行为,但最终它依赖于现有的结构来在函数和函数之间传输可恢复函数的返回值来电者。
为什么不也为返回值提出某种语言扩展呢?这可以(也许)释放对默认可构造和可复制/可移动类型的限制,并修复返回类型和返回类型之间的关联:
It should thus be noted that there is an asymmetry between the function’s observed behavior from the outside (caller) and the inside: the outside perspective is that function returns a value of type
future<T>
at the first suspension point, while the inside perspective is that the function returns a value of typeT
via a return statement (...)
我想在捕获异常的同时等待某些东西是没有意义的,但我对锁定线程的限制一无所知。
最佳答案
我很确定所有这些限制都与必须“保存”和“恢复”可恢复函数的上下文这一事实有关——我希望该机制将创建一个临时的“堆栈拷贝”或相似的东西。所以:
可变数量的参数
这实际上意味着使用 va_arg
功能 - 不是因为涉及宏,而是因为外部代理不可能知道实际参数的数量 - 对于 printf
,您必须阅读格式字符串,对于其他一些格式字符串,最后一个标记为 NULL
。那么需要保存多少上下文呢?
锁定线程
所以我们刚刚说“我们不希望这个线程被打断”,然后我们说“现在让我们运行其他东西”。这就像在走进浴缸时说“拜托,在任何情况下我洗澡的时候都不能被打扰”,同时说“你能在 2 分钟后给我打电话吗......” - 假设洗澡需要超过 2分钟,其中一个将是不真实的。
默认可构造
我很确定这里的逻辑是,如果要构造的返回值必须将参数传递给构造函数,这会使整个概念变得非常复杂。你甚至会如何描述这样的事情?在暂停状态下,您还必须“坚持”这些论点。同样,使上下文的保存更加复杂。
关于c++ - 可恢复函数限制背后的基本原理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23422889/
我试图允许用户使用Devise的可恢复选项重置密码。这似乎对我不起作用。 我扩展了Devise::PasswordsController,使其不使用应用程序布局。 class PasswordsCon
最近两周,我没有发布应用更新,却开始收到一堆数据库损坏的报告。下面是堆栈跟踪。 Android打不开数据库,我电脑上的sqlite-manager程序也打不开。但是,firefox 的 SQLite
我一直在试验 resumable.js,我对它在笔记本电脑上的内置 node.js 服务器的性能感到非常满意。但是,当我将它部署到 heroku 或 nodejitsu 并收到此错误时,它会在超过 1
我正在使用 YouTube Data API v3 从我的 Android 应用程序将视频上传到我的 YouTube 帐户.上传过程完美无缺。我需要的是,如果我的上传被中断(例如,由于互联网连接)
我是一名优秀的程序员,十分优秀!