Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Rust 对用于Objective-C运行时的SIMD类型和函数进行编码的正确方法是什么?_Rust_Simd_Metal_Objective C Runtime_Metalkit - Fatal编程技术网

Rust 对用于Objective-C运行时的SIMD类型和函数进行编码的正确方法是什么?

Rust 对用于Objective-C运行时的SIMD类型和函数进行编码的正确方法是什么?,rust,simd,metal,objective-c-runtime,metalkit,Rust,Simd,Metal,Objective C Runtime,Metalkit,我正在用Objective-C以外的语言开发一个应用程序,我遇到了。它使用来自SIMD API的vector\u float3类型 由于vector\u float3类型,我无法对该函数进行编码 我发现;这里的问题是,如果@encode未对SIMD类型进行编码,则无法为使用SIMD类型的函数创建正确的形式,然后消息发送验证失败。如何在消息发送验证中绕过此编码问题?作为一个实验,我请求使用以下方法为+newBoxWithDimensions:segments:geometryType:inward

我正在用Objective-C以外的语言开发一个应用程序,我遇到了。它使用来自SIMD API的
vector\u float3
类型

由于
vector\u float3
类型,我无法对该函数进行编码


我发现;这里的问题是,如果
@encode
未对SIMD类型进行编码,则无法为使用SIMD类型的函数创建正确的形式,然后消息发送验证失败。如何在消息发送验证中绕过此编码问题?

作为一个实验,我请求使用以下方法为
+newBoxWithDimensions:segments:geometryType:inwardNormals:allocator:
签名:

NSMethodSignature* sig = [MDLMesh methodSignatureForSelector:@selector(newBoxWithDimensions:segments:geometryType:inwardNormals:allocator:)];
然后我列举了它的参数及其类型编码。事实证明,签名只是跳过了两个向量参数。它总共显示了5个参数,其中包括隐式
self
\u cmd
参数,而这些参数应该有7个。编码为“@”,““:”,“q”,“c”,“@”,前两个对应于
self
\u cmd
,后三个与方法的最后三个参数匹配

我认为最安全的方法是编写一个Objective-C模块,该模块导出一个包装此方法的函数,但向量分量是分开传递的(即,维度的三个
float
参数和分段的三个
unsigned int
参数)。它将从这些单独的参数构造向量参数,并调用class方法,返回其结果。

解决生锈问题 对于那些使用Rust并有相同问题的人,我找到了绕过错误的解决方法,但请记住问题仍然存在,我的解决方案将使开发人员在调试过程中盲目

  • 如果您使用的是objc板条箱,请尝试从板条箱中删除
    verify_message
    功能,否则不要执行消息验证
  • 对向量数据使用
    simd
    表示法,并将数据放入消息中,无需任何编码
  • 在这种情况下,您在开发过程中是盲目的,我建议的一种方法是将调试引入Xcode(这也不太好!)

你能重新表述一下你的问题吗,这样你就清楚你有什么问题了?@E_net4和Shepmaster我的问题仍然正确,因为问题仍然存在,我只是绕过了它。一定有办法克服这个问题,我想其他语言也在设法解决这个问题。如果我有时间的话,我会去看看。如果我在那里找到了我的答案,是的,我当然会把我自己的答案贴在下面!我知道问题的标题有点笼统,但对于那些遇到同样问题的人来说,这是一个很好的起点,我认为这是他们头脑中的第一件事。也许问题的主体需要一些编辑。
我认为你最安全的方法…
这正是我不喜欢的。我只接受这一点,因为那个编码建议,我认为这是正确的,我很快会测试它。嗯,那不是一个建议。我认为Objective-C运行时无法处理向量参数,因此失败了(正如您所发现的)。我打算证实这一点。我不知道。它能处理返回带有给定C签名的函数指针的API吗?您可以调用
[MDLMesh methodForSelector:@selector(newBox…)
,然后将结果视为
MDLMesh*(*)(id,SEL,vector\u float3,vector\u uint3,MDLGeometryType,BOOL,id)