我编写了一个C++程序(命令行,可移植代码),我试图在Windows版本的同时发布Linux版本.我写了一个makefile如下:
ayane: *.cpp *.h
g++ -Wno-write-strings -oayane *.cpp
到目前为止已经足够直截了当; 但是我理解通常采取第二步安装make.所以当我把make:target放在makefile中时......应该将什么命令与它相关联?(如果可能的话,我更喜欢它适用于所有Unix系统以及Linux.)
在实现惰性函数语言时,有必要将值存储为未评估的thunks,仅在需要时进行评估.
如在Spineless Tagless G-machine中所讨论的,有效实现的挑战之一是,对于每个thunk,该评估必须仅执行一次,并且随后的访问必须重用计算的值 - 如果不这样做将导致至少二次减速(也许是指数?我不确定是否在我头顶.)
我正在寻找一个简单的示例实现,其操作很容易理解(与GHC的工业级实现相反,GHC专为简化性能而设计).我在http://www.andrej.com/plzoo/遇到了minihaskell,其中包含以下代码.
由于它被称为"一个有效的解释器",我认为它确实只执行了一次每次评估并保存计算值以便重复使用,但我很难看到何处和如何; 我只能在解释器本身看到一个赋值语句,并且看起来它不会覆盖thunk记录的一部分.
所以我的问题是,这个解释器确实在做这样的缓存,如果是这样,在哪里以及如何?(如果没有,那么最简单的现存实现是什么呢?)
代码来自http://www.andrej.com/plzoo/html/minihaskell.html
let rec interp env = function
| Var x ->
(try
let r = List.assoc x env in
match !r with
VClosure (env', e) -> let v = interp env' e in r := v ; v
| v -> v
with
Not_found -> runtime_error ("Unknown variable " ^ x))
... snipping the easy stuff ...
| Fun _ as e -> VClosure (env, …Run Code Online (Sandbox Code Playgroud) 我正在Node.js中编写一个程序(在某些情况下)想要充当一个简单的过滤器:从stdin读取所有内容(直到文件末尾),进行一些处理,将结果写入stdout.
你怎么做'从stdin'读取一切?到目前为止我发现的最接近的解决方案,似乎一次从控制台一行一行,或者只在stdin是文件而不是管道时工作.
我正在分发一个带有Unix版本的makefile的C++程序,我想知道我应该使用哪些编译器选项来获得最快的代码(它属于可以使用它们可以获得的所有计算能力的程序类别鉴于我事先并不知道用户将拥有什么硬件,操作系统或gcc版本,并且我最重要的是要确保它至少在每个主要类Unix上都能正常运行操作系统.
到目前为止,我有,我g++ -O3 -Wno-write-strings还有其他选择吗?在Windows上,Microsoft编译器可以选择快速调用约定和链接时间代码生成等值得使用的选项,gcc上有没有等价物?
(我假设它在64位平台上默认为64位,如果不是这样,请纠正我.)
在Eclipse项目中,我将Subversion设置为忽略bin目录,并且还在Eclipse中我将bin添加到被忽略资源的列表中.
但是,Eclipse时不时会将.svn目录放入bin.这不会干扰Subversion签入(因为Subversion命令行客户端服从stand指令忽略整个bin目录)但它确实搞乱了TortoiseSVN中的显示.
是否有已知的修复或解决方法?
(Eclipse 3.5,Windows Vista.)
传统上大多数使用计算逻辑的工作要么是命题,在这种情况下你使用了SAT(布尔可满足性)求解器,或者是一阶,在这种情况下你使用了一阶定理证明器.
近年来,SMT(可满足模理论)求解器取得了很大进展,基本上用算术等理论来增强命题逻辑.SRI International的John Rushby甚至称他们为颠覆性技术.
在一阶逻辑中可以处理但仍然无法由SMT处理的问题最重要的实际例子是什么?最特别的是,SMT在软件验证领域无法解决哪些问题?
在GDB中,给定一个指向结构的变量,print将显示原始指针值并x显示指向的原始字节.有没有办法显示指向该结构的数据,即字段列表及其值?
http://klee.llvm.org/是一个程序分析工具,它通过符号执行和约束求解来工作,找到可能导致程序崩溃的输入,并将这些输出作为测试用例输出.这是一个非常令人印象深刻的工程,到目前为止已经产生了一些好的结果,包括在Unix实用程序的开源实现集合中发现了许多错误,这些错误被认为是有史以来最全面测试的软件之一.
我的问题是:它不做什么?
当然,任何这样的工具都有固有的限制,它无法读取用户的想法并猜测输出应该是什么.但抛开原则上是不可能的,大多数项目似乎还没有使用Klee; 当前版本的限制是什么,它还没有处理哪种类型的错误和工作负载?
我正在草拟一些设计(函数的机器学习),它最好是想要一种函数式编程语言,还有内省,特别是以一些易于处理的格式检查程序自己的代码的能力,最好还有获取机器的能力.生成的代码是在运行时编译的,我想知道什么是编写它的最佳语言.Lisp当然具有强大的内省功能,但静态类型语言也有优势; 我正在考虑的是:
F# - .Net平台在这里有一个很好的故事,你可以在运行时读取字节码,也可以发出字节码并进行编译; 我假设从F#访问这些设施没有问题.
Haskell,Ocaml - 通过字节码或解析树,它们有类似的功能吗?
还有其他语言我还应该关注吗?
处理和尝试恢复C指针的以下哪种方法保证有效?
1)转换为无效指针并返回
int f(int *a) {
void *b = a;
a = b;
return *a;
}
Run Code Online (Sandbox Code Playgroud)
2)转换为适当大小的整数并返回
int f(int *a) {
uintptr_t b = a;
a = (int *)b;
return *a;
}
Run Code Online (Sandbox Code Playgroud)
3)一些简单的整数运算
int f(int *a) {
uintptr_t b = a;
b += 99;
b -= 99;
a = (int *)b;
return *a;
}
Run Code Online (Sandbox Code Playgroud)
4)整数运算非常重要,足以掩盖起源,但仍然会保持价值不变
int f(int *a) {
uintptr_t b = a;
char s[32];
// assume %lu is suitable
sprintf(s, "%lu", b);
b = strtoul(s);
a = (int *)b; …Run Code Online (Sandbox Code Playgroud)