小编exa*_*exa的帖子

在Hindley-Milner型系统中正确形式的letrec?

我无法理解维基百科上给出的HM系统的letrec定义,这里:https://en.wikipedia.org/wiki/Hindley%E2%80%93Milner_type_system#Recursive_definitions

对我来说,规则大致转换为以下算法:

  1. 推断letrec定义部分中 所有内容的类型
    1. 为每个定义的标识符分配临时类型变量
    2. 使用临时类型递归处理所有定义
    3. 成对,将结果与原始临时变量统一起来
  2. close(with 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获取临时类型的定义a
  • x获取一些临时类型的定义,但现在超出了我们的范围
  • in x,test获取临时类型的定义t
  • pa从范围中获取临时类型,使用HM规则作为变量
  • (f 5)得到由HM规则应用,造成类型是处理b(以及(统一a与结合Uint -> b)
  • ((p 5) 5)由同一规则处理,导致更多的统一和类型c,a现在结果统一Uint -> Uint -> c
  • 现在,测试关闭以输入 forall …

functional-programming type-inference lambda-calculus hindley-milner

11
推荐指数
1
解决办法
562
查看次数

使用 Vulkan 确定 GPU 核心占用率的“便携式”方法

对于编写 GPU 计算内核(在 GL/Vulkan 中又称为“计算着色器”),查询各种着色器参数(例如寄存器使用情况和共享内存使用情况)非常有用,这些参数确定可以调度到单个流式多处理器(SM 和nVidia、带有 AMD 的 CU 等)。

对于 AMD GPU,我们有一个适当的扩展,其中包含vkGetShaderInfoAMD,使用它可以获取有关占用的 VGPR/SGPR 和共享内存(又名 LDS)的一些信息,从而计算出对核心占用率的良好估计。

nVidia 和 Intel(可能还有其他)GPU 是否有任何此类可能性/扩展,或者是否有解决方法以其他方式测量特定硬件上 GLSL 着色器的属性?至少对于 nVidia 卡来说,该功能是在 CUDA 中实现的,但这对于调试 GLSL 着色器内容没有多大帮助。

shader gpu compute-shader vulkan

6
推荐指数
0
解决办法
271
查看次数

打包C++ 11程序源的可移植方法

因此,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

autoconf portability autotools package c++11

5
推荐指数
1
解决办法
190
查看次数

python 的 C/C++ shlex 替代品

一个简单的问题 - 是否有像 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)

c++ python shell quotes parsing

5
推荐指数
0
解决办法
1123
查看次数