小编5-t*_*o-9的帖子

列出在宏中实现密封特征的案例类

让我们假设我们有一个密封的特征和一些继承它的案例类:

  sealed trait SomeTrait
  final case class ClassA(somevalue : Int) extends SomeTrait
  final case class ClassB(str : String) extends SomeTrait
  (...)
Run Code Online (Sandbox Code Playgroud)

现在我想让所有这些案例类将特征扩展为集合.我将如何继续这样做?我甚至需要在什么类型的类中引用这些类?weakTypeTag?别的什么?

从一般意义上讲,这类似于Travis Brown在这里对case对象做同样的回答.

我的应用程序上下文:我有一个HTTP服务器和一个继承单个密封特征的case类的给定文件(更确切地说:这个层次结构实现了命令设计模式).现在,我想为每个案例类的HTTP-POST自动创建一个端点,并将传入的数据解析upickle到与该端点对应的案例类.以编程方式我不需要其他任何类/类型.

scala scala-macros

7
推荐指数
0
解决办法
348
查看次数

遍历LLVM操作数

使用ModulePass,我的目标是向上遍历一个SSA图:从一个带有0..2个操作数的语句(大多数操作码都属于那个),我想找出两件事:

  1. 操作数是元数据/常量(简单:只是尝试转换为常量类型)还是变量?
  2. 如果它是一个变量,请告诉我定义它的语句(因为LLVM IR是SSA形式,这是一个格式正确的查询),所以我可以递归地继续这个遍历.

例如,假设遵循LLVM IR:

define i32 @mul_add(i32 %x, i32 %y, i32 %z) {
entry:
  %tmp = mul i32 %x, %y
  %tmp2 = add i32 %tmp, %z
  ret i32 %tmp2
}
Run Code Online (Sandbox Code Playgroud)

我将从return语句开始.现在我想知道我要回来的东西:

  1. 我将获得返回声明的操作数
  2. 我检测到操作数是一个名为%tmp2的变量
  3. 我将获得自定义%tmp2的语句的操作数
  4. 我将首先遍历第一个操作数%tmp
  5. (......)
  6. %x是一个函数参数,因此可能是遍历的结束(或者是?)
  7. (...继续本DFS中的其他分支......)

我如何使用C++ API来实现这些步骤?

llvm llvm-ir llvm-c++-api

7
推荐指数
1
解决办法
417
查看次数

懒惰的Val - 如何重置价值?

我可能想要使用昂贵的方法并根据副作用返回结果.例如,取决于一天/一周的时间和量子时间动力学的蒙特卡罗模拟.因为它很贵而我可能不需要它,我会使用Scalaslazy val

lazy val maybeUnusedValue = getDayOfWeek
Run Code Online (Sandbox Code Playgroud)

现在我的程序仍在运行12个小时.我想重做计算,因为我的日子可能在此期间发生了变化.

是否有一种简单的方法可以强制Scala返回maybeUnusedValue到未初始化的状态,因此强制重新计算其下一次使用?

scala lazy-evaluation

4
推荐指数
1
解决办法
1126
查看次数

DirectX:查看矩阵的世界 - 我的误解在哪里?

我开始使用DirectX(和SharpDX,因此仅在C#/ hlsl中编程)并且我正在尝试构建自己的相机类.它应该是可旋转的,允许向前和向后移动以及"侧向"运动(经典的第一人称运动通常映射到A和D,在我的情况下加上和向下).为了方便bugfixing模型和世界空间是在我的情况一样,透视投影尚未实现,如旋转的摄像头,和我的相机应该是正Z轴看(到屏幕).我的错误修正模型是一个简单的四边形,宽度和高度为1.f,z = 0并且在屏幕上居中.
为了便于使用,我找到了DirectX Matrix.LookAtLH()并使用它构建我的矩阵,用于从世界到视图坐标的平移,基于我的相机在世界坐标中的位置,向上矢量(现在 - 没有旋转 - 总是正Y轴)和世界坐标中的目标点.
我的(顶点)着色器使用与此矩阵的简单乘法:
output.position = mul(position, worldToView);
LookAt-Matrix计算如下:
Matrix.LookAtLH(vec3(0, 0, -1), vec3(0, 0, 0.5f), vec3(0, 1, 0))
得到这张图片:
相机在(0,0,-1)处看(0,0,0.5f
现在我想将相机移到右边,在这种情况下,将1.f添加到它的X坐标.我的预期结果与之前的四元组相同,向左移动了一点.
我构建了一个新的LootAt矩阵,通过相同的向量移动眼睛坐标和目标坐标:
Matrix.LookAtLH(vec3(1, 0, -1), vec3(1, 0, 0.5f), vec3(0, 1, 0))
结果如下:
相机在(1,0,-1)处看(1,0,0.5f

我移动相机越多越好,但屏幕中心仍保持四边形的中心.这与我对潜在的误解有关Matrix.LookAtLH吗?

c# directx matrix directx-11 sharpdx

3
推荐指数
1
解决办法
2269
查看次数

"perf" - 计算每种方法的指令

我想在我的代码中为每个函数调用动态指令计数,以便我可以将该计数器视为:

name of function | instructions 
     foo()       |     3533 
     bar()       |     1234
Run Code Online (Sandbox Code Playgroud)

以下是子问题:

  1. 这可能用perf吗?
  2. 如果是:perf我应该使用什么样的标志来获取(至少)这些信息?
  3. 如果不是:我可以用什么其他程序这样做?

linux instructions perf

2
推荐指数
1
解决办法
415
查看次数

迭代迭代器并改变值会改变集合中的值吗?

我有一个HashMap<u32, u32>,我用它作为迭代器:

for (key, mut value) in map {
    if value == 0u32 {
        value = 1u32;
    }
    println!("{}", value);
} 
Run Code Online (Sandbox Code Playgroud)

这将编译并打印出的预期值,但它实际上改变地图的价值,而我遍历它,还是我只是阴影的实际值和值迭代结束后写了吗?

我是否正确假设迭代迭代与一般的Rust迭代器一起工作?

reference rust

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