小编Sta*_*tas的帖子

D中的const ref和rvalue

struct CustomReal
{
   private real value;

   this(real value)
   {
      this.value = value;
   }

   CustomReal opBinary(string op)(CustomReal rhs) if (op == "+")
   {
      return CustomReal(value + rhs.value);
   }

   bool opEquals(ref const CustomReal x) const
   {
      return value == x.value; // just for fun
   }
}

// Returns rvalue 
CustomReal Create()
{
   return CustomReal(123.123456);
}

void main()
{
   CustomReal a = Create();
   assert(a == CustomReal(123.123456)); // OK. CustomReal is temporary but lvalue
   assert(a == Create());               // Compilation error (can't bind to …
Run Code Online (Sandbox Code Playgroud)

d ref rvalue

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

OCaml中的快速比特阵

另一个合成基准:Eratosthenes筛选

C++

#include <vector>
#include <cmath>

void find_primes(int n, std::vector<int>& out)
{
   std::vector<bool> is_prime(n + 1, true);
   int last = sqrt(n);
   for (int i = 2; i <= last; ++i)
   {
      if (is_prime[i])
      {
         for (int j = i * i; j <= n; j += i)
         {
            is_prime[j] = false;
         }
      }
   }

   for (unsigned i = 2; i < is_prime.size(); ++i)
   {
      if (is_prime[i])
      {
         out.push_back(i);
      }
   }
}
Run Code Online (Sandbox Code Playgroud)

OCaml(使用Jane Street的CoreRes库)

open Core.Std …
Run Code Online (Sandbox Code Playgroud)

c++ algorithm performance ocaml bitarray

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

仅清除控制台输出的一部分

我想做的事:

光标最初在屏幕的左上角闪烁:

剩余160个字符
_

当我按'我'时:

剩余159个字符

一世

当我按'a'时:

剩余158个字符

IA

当我按'm'时:

剩余157个字符

我是

等等.

需要做什么(据我所说):

  1. 需要清除屏幕的前三个字符.
  2. 更新屏幕上新按下的键

我尝试过的:

我试图清除整个屏幕并写下之前的所有内容.

为什么我对自己的所作所为不满意:

因为它给人一种生涩的外观.而且参赛作品并不顺利.

我需要你帮助我:

一些内置功能或其他一些技术只能清除部分屏幕.

我的规格:

Windows XP SP 3

IDE:Visual C++ 2010 Express

c++ windows console visual-c++ output

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

部署自包含的本机OCaml应用程序

我需要在Linux机器上部署一个依赖于几个动态库的本机OCaml应用程序.我们的想法是准备包含所有内容的独立包(不依赖于OCaml,OPAM等),并且可以假设任何现代x84 Linux盒子安装.在理想的世界中,只需要部署和运行一个文件.

我能想到的最好的方法是将所有需要的动态库(ldd app.native)与应用程序可执行文件一起部署,并通过LD_LIBRARY_PATH在调用应用程序之前导出的bash脚本运行应用程序.

任何想法如何让它变得更好是受欢迎的.

UPDATE

一些技巧:

  • 使用Linux Application Checker验证与不同Linux发行版的兼容性.
  • 在稳定但有点过时的分发(例如现在的CentOS 6)上构建二进制包以提高libc兼容性.
  • 用于构建二进制包并运行可执行文件的脚本示例.

linux deployment ocaml

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

使用Ocamlbuild使用配置文件信息构建本机可执行文件

如何使用Ocamlbuild构建启用的配置文件信息?它似乎-p不起作用.

现在,我用ocamlopt它.例如,

$ ocamlfind ocamlopt -c -p -thread -package core test.ml
$ ocamlfind ocamlopt -p -o test -thread -package core -linkpkg test.cmx
Run Code Online (Sandbox Code Playgroud)

怎么做同样的

ocamlbuild -user-ocamlfind test.native
Run Code Online (Sandbox Code Playgroud)

ocaml ocamlbuild ocamlfind

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

在OPAM中切换环境

这可能有几个共享相同编译器的开发环境吗?

实际上,我想使用4.00.1+short-types具有不同安装包的编译器,并且可以在这些环境之间轻松切换.opam switch如果我没有错过任何东西,只允许我在编译器之间切换.

ocaml opam

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

安全转换为Word8

看一下以下片段:

Prelude> import Data.Word
Prelude> data Foo = Foo Word8 deriving Show
Prelude> Foo 4
Foo 4
Prelude> Foo 44
Foo 44
Prelude> Foo 444
Foo 188
Run Code Online (Sandbox Code Playgroud)

我有点惊讶444被隐含地转换为188,就像在不安全的C中一样.它看起来很容易出错.在Haskell中安全处理此类转换的惯用方法是什么?

UPDATE

看起来这只是文字的多态行为,现代编译器对此提出警告.最重要的是类型系统不允许这种隐式截断.Foo (444 :: Int)生成类型不匹配,因此如果仅在运行时知道值,则这是完全安全的.

haskell

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

如何避免在Ocaml中隐藏stdlib模块?

我有一个程序使用BytesOcaml标准库中的Core_kernel.Std模块,并打开文件顶部的模块

open Core_kernel.Std

...

   let let buf = Bytes.make bom_len '\x00' in
Run Code Online (Sandbox Code Playgroud)

我遇到的问题是最新版本的Core_kernel引入了一个新的Bytes模块,该模块隐藏了标准库中的模块,导致Unbound value Bytes.make编译错误.

有没有办法解决这个命名问题,而没有摆脱open文件的顶部?如果我这样做,就需要改变很多东西.

ocaml ocaml-core

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

记录中的显式多态类型

在OCaml中,可以在记录中定义显式多态类型

type foo = { f : 'a. unit -> 'a };;
Run Code Online (Sandbox Code Playgroud)

看来我们只能分配一般值f喜欢

{ f = fun () -> failwith ""; }
Run Code Online (Sandbox Code Playgroud)

要么

{ f = fun () -> exit 1; }
Run Code Online (Sandbox Code Playgroud)

如何在现实世界中使用这种语言功能?有什么好的实际例子吗?

ocaml

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