我无法理解维基百科上给出的HM系统的letrec定义,这里:https://en.wikipedia.org/wiki/Hindley%E2%80%93Milner_type_system#Recursive_definitions
对我来说,规则大致转换为以下算法:
letrec定义部分中
所有内容的类型forall)推断类型,将它们添加到基础(context)并用它推断表达式部分的类型我遇到这样的程序有问题:
letrec
p = (+) --has type Uint -> Uint -> Uint
x = (letrec
test = p 5 5
in test)
in x
Run Code Online (Sandbox Code Playgroud)
我观察的行为如下:
p获取临时类型的定义ax获取一些临时类型的定义,但现在超出了我们的范围x,test获取临时类型的定义tpa从范围中获取临时类型,使用HM规则作为变量(f 5)得到由HM规则应用,造成类型是处理b(以及(统一a与结合Uint -> b)((p 5) 5)由同一规则处理,导致更多的统一和类型c,a现在结果统一Uint -> Uint -> cforall …functional-programming type-inference lambda-calculus hindley-milner
对于编写 GPU 计算内核(在 GL/Vulkan 中又称为“计算着色器”),查询各种着色器参数(例如寄存器使用情况和共享内存使用情况)非常有用,这些参数确定可以调度到单个流式多处理器(SM 和nVidia、带有 AMD 的 CU 等)。
对于 AMD GPU,我们有一个适当的扩展,其中包含vkGetShaderInfoAMD,使用它可以获取有关占用的 VGPR/SGPR 和共享内存(又名 LDS)的一些信息,从而计算出对核心占用率的良好估计。
nVidia 和 Intel(可能还有其他)GPU 是否有任何此类可能性/扩展,或者是否有解决方法以其他方式测量特定硬件上 GLSL 着色器的属性?至少对于 nVidia 卡来说,该功能是在 CUDA 中实现的,但这对于调试 GLSL 着色器内容没有多大帮助。
因此,C++ 11已经存在了一段时间,并且鉴于已经有大多数平台上都支持它的编译器,在一些真正的软件中使用它会很好 - 例如可以像便携式一样打包的软件. - 可能的包,最好提供./configure等.
因为Clang和GCC当前都需要-std = c ++ 11标志来编译c ++ 11源代码,并且两者有时都需要特定的标志才能正常工作(例如,参见如何在OSX Lion上使用clang 3.2编译C++ 11?或C++ 11 Thread无法正常工作),我担心由于编译器调用错误,该软件包无法在已支持c ++ 11的某些平台上运行.
问:有没有一些标准如何正确和可移植地编译c ++ 11?例如autotools/autoconf检查或一些描述所有可能需要的选项的编译器/平台指令列表?或者情况是否来自c ++ 11标准实现当前被标记为"实验性"的事实,并且标准最终将稳定并成为默认选择,不需要使用额外的编译器标志?
谢谢
-exa
一个简单的问题 - 是否有像 python 的 shlex 包这样的东西,它可以让我在 C 或(可能)C++ 中简单地解析/拆分/引用/转义类似 shell 的引用/反斜杠字符串?
shlex 包的用途非常好(让迷你语言和其他东西容易诞生),在 C 中拥有类似的通用处理工具会很好。
链接到 shlex 文档:http ://docs.python.org/3.4/library/shlex.html
shlex 的作用示例:
>>> import shlex
>>> shlex.split('abc ab\\ c "ab\\"cd" key="\\"val\\""')
['abc', 'ab c', 'ab"cd', 'key="val"']
Run Code Online (Sandbox Code Playgroud)