小编Kar*_*und的帖子

为什么在使用macOS上的clang -O2编译C程序时,"空"循环会导致总线错误?

我在macOS High Sierra上.

$ uname -v
Darwin Kernel Version 17.2.0: Fri Sep 29 18:27:05 PDT 2017; root:xnu-4570.20.62~3/RELEASE_X86_64
Run Code Online (Sandbox Code Playgroud)

我有以下合成程序.

void nop1() {
  for (;;);
}

void nop2() {
  while (1);
}

void nop3() {
  int i = 0;
  while(1) {
    i++;
  }
}

void nop4() {
  static int i = 0;
  while(1) {
    i++;
  };
}

int main() {
  nop1();
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

编辑2:我现在已经在下面的例子中用clang明确编译了.

当我编译并运行以下C程序与clang -O2我得到总线错误时main()调用nop1(),nop2(),nop3()但不适合nop4().

$ ./a.out …
Run Code Online (Sandbox Code Playgroud)

c macos llvm clang bus-error

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

使用makeLenses,类约束和类型同义词

我对Haskell很新,并希望将makeLensesfrom Control.Lens和class约束与类型同义词一起使用,以使我的函数类型更紧凑(可读?).

我试图想出一个最小的虚拟示例来演示我想要实现的内容,并且该示例除此之外没有任何其他用途.

在这篇文章的最后,如果您对上下文感兴趣,我已经添加了一个更接近原始问题的示例.

最小的例子

举个例子,假设我定义了以下数据类型:

data State a = State { _a :: a
                     } deriving Show     
Run Code Online (Sandbox Code Playgroud)

,我也制作镜片:

makeLenses ''State
Run Code Online (Sandbox Code Playgroud)

为了对a类型构造函数State使用的类型参数强制执行类约束,我使用了一个智能构造函数:

mkState :: (Num a) =>  a -> State a
mkState n = State {_a = n}
Run Code Online (Sandbox Code Playgroud)

接下来,假设我有许多类型签名的函数,类似于:

doStuff :: Num a => State a -> State a
doStuff s = s & a %~ (*2)
Run Code Online (Sandbox Code Playgroud)

这一切都按预期工作,例如:

test = doStuff . mkState $ 5.5 -- results in State {_a = 11.0}
Run Code Online (Sandbox Code Playgroud)

问题 …

haskell

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

使用堆栈设置安装 ghc 时权限被拒绝

我正在按照http://seanhess.github.io/2015/08/04/practical-haskell-getting-started.html开始使用堆栈工具。

$> stack --version
Version 0.1.3.1, Git revision 908b04205e6f436d4a5f420b1c6c646ed2b804d7
Run Code Online (Sandbox Code Playgroud)

在“安装 GHC”步骤中我得到Permission denied

$> stack setup
Run from outside a project, using implicit global config
Using resolver: lts-3.2 from global config file: /Users/karl/.stack/global/stack.yaml
Preparing to download ghc-7.10.2 .../Users/karl/.stack/programs/x86_64-osx/ghc-7.10.2.tar.bz2.tmp: 
openBinaryFile: permission denied (Permission denied)
Run Code Online (Sandbox Code Playgroud)

这是预期的(指南中的错误)还是中的错误stack

运行相同的命令sudo似乎可以解决问题。这是预期的方法吗?

$> sudo stack setup
Password:
Downloaded ghc-7.10.2.                                      
Installed GHC.     
stack will use a locally installed GHC
For more information on paths, see 'stack path' and 'stack exec env' …
Run Code Online (Sandbox Code Playgroud)

haskell haskell-stack

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

类型同义词导致类型错误

作为我上一个问题的后续使用makeLenses,类约束和类型同义词,我有一个新的类型错误,我想了解.

类型错误是由type S = (Num n) => State n以下示例中引入类型同义词引起的.

{-# LANGUAGE TemplateHaskell #-}                                                                                                                              
{-# LANGUAGE RankNTypes #-}                                                                                                                                   

module Foo where                                                                                                                                              

import Control.Lens                                                                                                                                           

data State a = State { _a :: a                                                                                                                                
                     } deriving Show                                                                                                                          

makeLenses ''State -- Requires TemplateHaskell                                                                                                                

-- | Smart constructor enforcing class constraint on record field _a.                                                                                         
mkState :: (Num a) =>  a -> State a                                                                                                                           
mkState n = State {_a = n}                                                                                                                                    

doStuff1 :: Num a => State a -> State a …
Run Code Online (Sandbox Code Playgroud)

haskell

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

使用Megaparsec解析块注释,使用符号开始和结束

我想使用Megaparsec解析Haskell中与此类似的文本.

# START SKIP
def foo(a,b):
    c = 2*a # Foo 
    return a + b
# END SKIP
Run Code Online (Sandbox Code Playgroud)

,where # START SKIP# END SKIP标记要解析的文本块的开头和结尾.

skipBlockComment相比,我希望解析器返回开始和结束标记之间的行.

这是我的解析器.

skip :: Parser String
skip = s >> manyTill anyChar e
  where s = string "# START SKIP"
        e = string "# END SKIP"
Run Code Online (Sandbox Code Playgroud)

skip按预期解析器工作.

为了在开始和结束标记内允许可变数量的空格,例如# START SKIP我尝试了以下内容:

skip' :: Parser String
skip' = s >> manyTill anyChar e
  where s = symbol "#" >> …
Run Code Online (Sandbox Code Playgroud)

haskell megaparsec

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

标签 统计

haskell ×4

bus-error ×1

c ×1

clang ×1

haskell-stack ×1

llvm ×1

macos ×1

megaparsec ×1