码
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) 另一个合成基准: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的Core和Res库)
open Core.Std …Run Code Online (Sandbox Code Playgroud) 我想做的事:
光标最初在屏幕的左上角闪烁:
剩余160个字符
_
当我按'我'时:
剩余159个字符
一世
当我按'a'时:
剩余158个字符
IA
当我按'm'时:
剩余157个字符
我是
等等.
需要做什么(据我所说):
我尝试过的:
我试图清除整个屏幕并写下之前的所有内容.
为什么我对自己的所作所为不满意:
因为它给人一种生涩的外观.而且参赛作品并不顺利.
我需要你帮助我:
一些内置功能或其他一些技术只能清除部分屏幕.
我的规格:
Windows XP SP 3
IDE:Visual C++ 2010 Express
我需要在Linux机器上部署一个依赖于几个动态库的本机OCaml应用程序.我们的想法是准备包含所有内容的独立包(不依赖于OCaml,OPAM等),并且可以假设任何现代x84 Linux盒子安装.在理想的世界中,只需要部署和运行一个文件.
我能想到的最好的方法是将所有需要的动态库(ldd app.native)与应用程序可执行文件一起部署,并通过LD_LIBRARY_PATH在调用应用程序之前导出的bash脚本运行应用程序.
任何想法如何让它变得更好是受欢迎的.
UPDATE
一些技巧:
libc兼容性.如何使用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) 这可能有几个共享相同编译器的开发环境吗?
实际上,我想使用4.00.1+short-types具有不同安装包的编译器,并且可以在这些环境之间轻松切换.opam switch如果我没有错过任何东西,只允许我在编译器之间切换.
看一下以下片段:
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)生成类型不匹配,因此如果仅在运行时知道值,则这是完全安全的.
我有一个程序使用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中,可以在记录中定义显式多态类型
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 ×6
c++ ×2
algorithm ×1
bitarray ×1
console ×1
d ×1
deployment ×1
haskell ×1
linux ×1
ocaml-core ×1
ocamlbuild ×1
ocamlfind ×1
opam ×1
output ×1
performance ×1
ref ×1
rvalue ×1
visual-c++ ×1
windows ×1