小编Dan*_*Dan的帖子

epoll边缘触发选项的目的是什么?

来自epoll的手册页:

epoll is a variant of poll(2) that can be used either as an edge-triggered
or a level-triggered interface
Run Code Online (Sandbox Code Playgroud)

什么时候会使用边缘触发选项?手册页给出了一个使用它的示例,但我不明白为什么在示例中有必要.

c sockets epoll

56
推荐指数
2
解决办法
2万
查看次数

有序/无序比较是什么意思?

看着SSE运营商

CMPORDPS - ordered compare packed singles
CMPUNORDPS - unordered compare packed singles
Run Code Online (Sandbox Code Playgroud)

有序和无序是什么意思?我在x86指令集中寻找等效指令,它似乎只有无序(FUCOM).

x86 assembly sse

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

推拉式FRP在实施游戏时有帮助吗?

我一直在比较拉动式FRP(即netwire)和推拉式FRP(即反应性 - 香蕉)在游戏的实施中.一个优于另一个有优势吗?我注意到的事情是:

  • 推送事件可以轻松地从GLFW或GLUT获得鼠标点击/按键事件
  • netwire使用的箭头化FRP更少IO漂浮,这总是更好.
  • 看起来像对鼠标移动这样的东西的只做拉回应可能会导致时间泄漏.

我还错过了什么?

编辑,以减少基于意见:主要目标是尽可能具有表达/简洁的东西,没有时间泄漏.

更新:我发现Netwire的一个大问题是,似乎没有一种方便的方法来获得多个帧速率,如"修复你的时间步"一文中所述.

更新2:我解决这个问题的方法是让我的游戏模拟线返回一个Float -> IO ()获取alpha值并使用该alpha插值的所有GL调用.理想情况下,我应该能够通过一个"绘制函数"传递给另一个线程MVar并在该线程中运行它.男人,哈斯克尔太棒了.

更新3:在提出这个问题后的六个月里,我开发了一个基于Netwire 的简单渲染引擎,以及"实体组件编程"的概念.在这个过程中,我实际上没有发现使用FRP非常有用.Wire在某些情况下,s 的表现力实际上已成为障碍.问题集中在对象的"身份"上.在定义Wire类型的值时,它没有标识,即它可以在整个网络中多次重复使用,并且每次表示不同的物理事物.当你想要做一些像碰撞检测这样的事情并且无法遍历场景图时,这是一个巨大的痛苦,因为它不能在不融合成单根不透明线的情况下存在.在"玩具"示例中不会出现此问题,因为很容易准确指定哪些对象与哪些其他对象以哪种方式交互.我相信这是任何一种FRP的问题.

如果一些Haskell向导在这方面证明我错了,那将是很棒的,但我真的没有看到它的方法.此外,如果解释不是很好,我很抱歉,但如果不自己尝试,这并不容易理解.

haskell frp reactive-banana netwire

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

为什么GHC在脱毒之前会进行类型检查?

是否有充分的理由首先运行类型检查器?如果它运行在较小的语法上,那么类型检查器似乎会变得非常简单,特别是因为在当前系统中,每个语法扩展都需要触及类型检查器.这个问题尤其适用于箭头语法,这里的评论中所述的类型检查被认为是虚假的.

我想这样做的一个原因是不会发出提及生成代码的错误,但是在deriving条款未能进行类型检查的情况下已经涵盖了这种情况; GHC知道代码是生成的.

compiler-construction haskell ghc

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

从哪里开始阅读GHC的源代码

我正在尝试学习如何实现GHC的各个方面,如类型推断,模式匹配和其他代码转换.

然而,代码库相当大,文件名使用了很多首字母缩略词(简单,stg,stranal ......).这些是什么意思,代码是如何组织的?

haskell ghc

22
推荐指数
2
解决办法
583
查看次数

奇怪的ghc错误信息,"我的大脑爆炸了"?

当我尝试使用proc语法(使用Netwire和Vinyl)对GADT 进行模式匹配时:

sceneRoot = proc inputs -> do
            let (Identity camera :& Identity children) = inputs 
            returnA -< (<*>) (map (rGet draw) children) . pure
Run Code Online (Sandbox Code Playgroud)

我从ghc-7.6.3得到(相当奇怪的)编译器错误

  My brain just exploded
    I can't handle pattern bindings for existential or GADT data constructors.
    Instead, use a case-expression, or do-notation, to unpack the constructor.
    In the pattern: Identity cam :& Identity childs

当我将模式放在模式中时,我得到了类似的错误proc (...).为什么是这样?它不健全,还是只是未实现?

haskell arrows gadt

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

为什么ghc会生成这么多无用的嵌套案例表达式?

我有一些Haskell代码

indLoc index way = do
    Store p <- ask
    return $ plusPtr p localAddr
    where localAddr = (stHeader + stIndices + index + stIndices * way) * blockSize
--snip...
    (Just way, _) -> do
        liftIO $ pokeElemOff loc way a
        indLoc index way
Run Code Online (Sandbox Code Playgroud)

这产生了一些相当奇怪的核心:

  case GHC.Prim.writeInt64OffAddr#
         @ GHC.Prim.RealWorld a4_s4UV i_s4UW x_s4UX new_s_s4UY
  of s2_s4V0 { __DEFAULT ->
  let {
    sat_s528 :: GHC.Ptr.Ptr b_a1UV
    [LclId]
    sat_s528 =
      case r_s4Us `cast` ... of _ { GHC.Ptr.Ptr addr_s4Vb ->
      case index_s4Um of …
Run Code Online (Sandbox Code Playgroud)

haskell

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

返回元组的工厂函数的C++ 11模式

在我的项目中,我有一些功能

std::tuple<VAO, Mesh, ShaderProgram> LoadWavefront(std::string filename);
Run Code Online (Sandbox Code Playgroud)

我可以像这样使用:

VAO teapotVAO;
Mesh teapotMesh;
ShaderProgram teapotShader;
std::tie(teapotVAO, teapotMesh, teapotShader)
    = LoadWavefront("assets/teapot.obj");
Run Code Online (Sandbox Code Playgroud)

问题是,这要求每个类都有一个默认构造函数,它在无效状态下创建它们,这很容易出错.如何在不必std::get<>每件物品的情况下解决这个问题?有一种优雅的方式来做到这一点?

c++ factory c++11

13
推荐指数
2
解决办法
1163
查看次数

有没有理由我们不能使用DataKinds填充类型?

使用DataKinds,定义如

data KFoo = TFoo
Run Code Online (Sandbox Code Playgroud)

介绍种类KFoo :: BOX和类型TFoo :: KFoo.为什么我不能继续定义

data TFoo = CFoo
Run Code Online (Sandbox Code Playgroud)

这样CFoo :: TFoo,TFoo :: KFoo,KFoo :: BOX

所有构造函数都需要属于属于该类型的类型*吗?如果是这样,为什么?

编辑:当我这样做时,我没有收到错误,因为构造函数和类型共享一个命名空间,但GHC允许冲突,因为它将名称消歧为常规类型,而不是提升构造函数.文档说前缀为a '来引用提升的构造函数.当我改变第二行时

data 'TFoo = CFoo
Run Code Online (Sandbox Code Playgroud)

我收到了错误

格式错误的类型或类声明:TFoo

haskell data-kinds

11
推荐指数
2
解决办法
269
查看次数

编译器输出语言 - LLVM IR与C.

对于编写编译器,使用LLVM IR vs C作为目标语言有哪些优缺点?我知道两者都被使用了,我想如果我使用clang来编译C,那么最终的机器代码会是相似的.那么还有什么需要考虑的事情呢?

compiler-construction code-generation llvm llvm-ir

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