MathLink 中的数据包链:数据包是否始终严格排序?

发布于 2024-10-18 13:29:11 字数 759 浏览 1 评论 0原文

文档没有明确说明返回数据包的顺序 由从属内核通过 MathLink 实现。很自然地假设(当 发送带有头 EnterExpressionPacket 的输入表达式并在标准模式下工作):

1) 下一个 InputNamePacket 之前的最后一个数据包始终是 ReturnExpressionPacket

2) 可能始终只有一个 ReturnExpressionPacket 和一个 OutputNamePacket 代表一个 EnterExpressionPacket

3) ReturnExpressionPacket 始终是 OutputNamePacket 之后的下一个

4) MessagePacket 之后code> 下一个数据包始终是 TextPacket 该消息的所有内容

5) 标准模式下返回的数据包只有 7 种类型:InputNamePacketOutputNamePacketReturnExpressionPacketDisplayPacketDisplayEndPacket消息包文本包

以下哪些说法是正确的?

The Documentation does not state clear the order of packets returned
by slave kernel via MathLink. It is natural to suppose that (when
sending an input expression with head EnterExpressionPacket and working in standard mode):

1) the last packet before the next InputNamePacket is always
ReturnExpressionPacket

2) there may be always only one ReturnExpressionPacket and one
OutputNamePacket for one EnterExpressionPacket

3) ReturnExpressionPacket is always the next after OutputNamePacket

4) after MessagePacket the next packet is always TextPacket with
all contents of that message

5) there are only 7 types of returned packets in the standard mode: InputNamePacket, OutputNamePacket, ReturnExpressionPacket, DisplayPacket, DisplayEndPacket,
MessagePacket, TextPacket.

Which of these statements are true?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

暮年慕年 2024-10-25 13:29:11
  • 1 可能无法保证。
  • 2 绝对不正确(计算:“2+2\n2+3”)。
  • 3 可能是正确的,但可能不能保证。
  • 我相信4是真的。
  • 5 不保证。

一般来说,您编写的代码不应依赖于来自内核的数据包的顺序。在您收到新的 InputNamePacket 之前,评估应被视为“活动”。 OutputNamePacket 应该更新一些变量。 ReturnExpressionPacket 应使用该变量的当前输出名称。如果您收到未知数​​据包,只需忽略它并继续处理下一个数据包。

  • 1 is probably not guaranteed.
  • 2 is definitely not true (evaluate: "2+2\n2+3").
  • 3 is probably true but probably not guaranteed.
  • I believe 4 is true.
  • 5 is not guaranteed.

In general you should write your code to not rely on the order of packets coming from the kernel. The evaluation should be considered "active" until you receive a new InputNamePacket. OutputNamePacket should update some variable. ReturnExpressionPacket should use the current output name from that variable. If you receive an unknown packet simply ignore it and move on to the next packet.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文