小编cho*_*ger的帖子

将int值添加到双精度时是否存在性能优势/惩罚?

给定向量:

  NPNumber NPNumber::plus(const double o) const {
    vector<double> c;
    for (double a : values)
       c.push_back(a + o);

    return NPNumber(width, c);
  }
Run Code Online (Sandbox Code Playgroud)

在NPNumber包含双精度矢量(字段值)的情况下,当我只添加一个整数而不是另一个NPNumber时,与转换该整数并使用上述函数相比,是否存在性能优势或损失?

即,这在任何架构上都更快/更慢:

  NPNumber NPNumber::plus(const int i) const {
    vector<double> c;
    for (double a : values)
       c.push_back(a + i);

    return NPNumber(width, c);
  }
Run Code Online (Sandbox Code Playgroud)

c++

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

OCaml中的多态递归对象类型

为什么在OCaml中这是不可能的:

type 'a cl = < f : 'b . 'b -> 'b cl >;;
Run Code Online (Sandbox Code Playgroud)

从我到目前为止看到的,对象类型中允许使用通用量化类型,但我的解释器产生:

Error: In the definition of cl, type 'b cl should be 'a cl
Run Code Online (Sandbox Code Playgroud)

那么,通常不可能有这种对象或者我是否会错过一些特殊的语法?那个(令人惊讶的具体)消息是什么意思?

ocaml types

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

OCaml 顶层多重依赖

当我有多个依赖项时,比如说

module A = struct
  open B
  ...
  end

module B = struct
  ...
  end
Run Code Online (Sandbox Code Playgroud)

是否可以让 OCaml toplevel/utop 加载具有所有依赖项的 A.ml(即#use "./A.ml"自动加载 B.ml)?

ocaml

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

如何复制OCaml闭包?

我想存储一个OCaml闭包供以后由外部C库使用.我能够做到以下几点:

<TARGET> = caml_alloc(Wosize_val(<SOURCE>), Tag_val(<SOURCE>));
caml_register_global_root(<TARGET>);
Code_val(<TARGET>) = Code_val(<SOURCE>);
Run Code Online (Sandbox Code Playgroud)

但正如名称"封闭"所暗示的那样,仅仅复制代码位置是不够的.

如何制作(垃圾收集器友好)副本<SOURCE>

c closures ocaml

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

在服务器模式下使用emacs中的ssh代理

我在服务器模式下运行emacs作为systemd用户服务,并希望使用magit从pubkey认证的远程存储库中提取.不幸的是,magit(或它的git子进程)无法使用我已经加载的公钥.显然,我无法从emacs的上下文中连接到我的ssh-agent.

从emacs中运行:

~ ssh-add  
Could not open a connection to your authentication agent.
Run Code Online (Sandbox Code Playgroud)

有没有一种已知的方法来解决这个问题,还是我必须深入研究ssh-agent和客户端实际上的沟通方式?

emacs ssh ssh-agent systemd

5
推荐指数
2
解决办法
822
查看次数

默认模板参数如何工作?

我知道很多关于模板默认参数语法的问题.

通常,答案(与我对它应该如何工作的理解同步)是使用类似的东西:

template <class T = SomeDefault> class T1 {};
Run Code Online (Sandbox Code Playgroud)

最近我想检查Boost在其中使用哪个地图实现mapped_vector.并找到以下代码段:

template<class T, class A>
class mapped_vector:
Run Code Online (Sandbox Code Playgroud)

显然,参数没有默认绑定A,但显然,我可以实例化mapped_vector<int>一下就好了.Obviosuly以某种方式推断出默认参数,但是如何?

编辑:准确地说,我在谈论这个文件中的第279行

c++ templates default-arguments

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

确保一个类不是抽象的

当我更改虚拟方法的签名时,它经常发生,继承类变为抽象.这可能导致(容易混淆的)错误消息显然完全不相关(对原始更改)位置.在这些消息的某处,我读到"Foo是抽象的".但解析这些错误消息是乏味的.有没有办法强制一个类抽象?

c++ abstract-class compiler-errors class typechecking

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

调试Apache 2.4 PerlAuthenHandler

我正在尝试调试apache升级后出现的问题.我想将redmine集成到我的apache身份验证/访问控制中.

这是我的apache配置:

<Location "/git/">                                         

  AuthType Basic                                           

  AuthName "Git Access"                                    

  Require valid-user                                       

  Order deny,allow                                         
  Allow from all                                           

  PerlAccessHandler Apache::Authn::Redmine::access_handler 
  PerlAuthenHandler Apache::Authn::Redmine::authen_handler 
  ...
Run Code Online (Sandbox Code Playgroud)

这是访问/验证处理程序:

sub access_handler {                                                                                                       
  my $r = shift;                                                                                                           

  unless ($r->some_auth_required) {                                                                                        
      $r->log_reason("No authentication has been configured");                                                             
      return FORBIDDEN;                                                                                                    
  }                                                                                                                        

  return OK unless request_is_read_only($r);                                                                               

  my $project_id = get_project_identifier($r);                                                                             

  $r->log_error("Setting Auth to OK") if is_public_project($project_id, $r) && anonymous_role_allows_browse_repository($r);
  $r->log_error("Content: " . $r->get_handlers("PerlAuthenHandler"));                                                      

  $r->set_handlers(PerlAuthenHandler => [\&ok_authen_handler])                                                             
      if is_public_project($project_id, $r) && anonymous_role_allows_browse_repository($r);                                

  return OK                                                                                                                
}                                                                                                                          

sub ok_authen_handler {                                                                                                    
  my $r = shift;                                                                                                           
  $r->log_error("ok_authen_handler()..."); …
Run Code Online (Sandbox Code Playgroud)

apache authentication perl redmine mod-perl2

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

如何在启用“pipefail”的脚本中使用“head”?

想象一下这样的调用:

./generator.sh | head -1
Run Code Online (Sandbox Code Playgroud)

该脚本嵌入在更大的上下文中,可能会由于配置错误等原因导致部分脚本失败。在这种情况下,我们不想继续该脚本,因此我们设置了该pipefail选项。但现在我们显然面临这样的问题:当head关闭接收端时,生成器将失败。我们怎样才能缓解这个问题?

有没有办法告诉head继续前进,但丢弃输入(这将是理想的,因为我们甚至不想要这里的提前退出语义)。

我知道我们可以禁用/重新启用pipefail该部分,但我想知道是否有更短的选项。

error-handling bash pipe

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

可记录记录的编码

您可能知道,记录在ocaml中有些特殊,因为每个标签必须唯一地分配给标称记录类型,即在没有上下文的情况下不能键入以下函数:

let f r = r.x
Run Code Online (Sandbox Code Playgroud)

适当的第一类记录(即表现像带有标签的元组的东西)可以使用对象进行简单编码,例如

let f r = r#x 
Run Code Online (Sandbox Code Playgroud)

当以正确的方式创建对象时(即没有自我递归,没有突变),它们的行为就像记录一样.

但是,我对此解决方案有点不满意,原因有两个:

  1. 当使记录更新表时(即通过为每个标签l)添加显式的"with_l"方法,类型有点过于宽松(它应该与原始记录相同).承认,人们可以强制执行这种平等,但这仍然不方便.

  2. 我怀疑OCaml编译器并不推断这些记录实际上是不可变的:在一个函数中

    设fr = r#x + r#x

编译器是否能够运行公共子表达式消除?

出于这些原因,我想知道是否有更好的编码:

在OCaml中是否存在另一种(除了使用对象)类型安全编码(例如使用多态变体)的记录具有可推断的类型?这种编码可以避免上述问题吗?

encoding ocaml record

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