什么是惯用的Clojure方法来创建一个在后台循环的线程,对一些共享引用进行更新并管理它的生命周期?我发现自己正在使用future它,但感觉有点像黑客,因为我永远不会返回有意义的价值.例如:
(future (loop [] (do
(Thread/sleep 100)
(dosync (...))
(recur))))
Run Code Online (Sandbox Code Playgroud)
此外,future-cancel当不再需要后台处理时,我需要小心这一点.关于如何在Clojure/Swing应用程序中编排它的任何提示都会很好.例如JComponent,添加到我的UI中的虚拟对象,当窗口关闭时负责杀死线程可能是一个想法.
如何使Clojure宏充当函数,所以我可以将它作为参数传递给你?我希望不得不以某种方式包装它.
我不希望包装版本的行为与原始宏完全相同(按名称调用与按值调用的差异),但在少数情况下这不重要.
在C++(MSVC)中,如何测试异常当前是否"在飞行中".即,作为类析构函数的一部分被调用的代码可能会被调用,因为异常正在展开堆栈.如何检测这种情况,而不是正常情况下由于正常返回而调用析构函数?
是否有一个固定点组合器用于创建相互递归函数的元组?即我正在寻找像Y-Combinator这样的东西,但它需要多个"递归"*函数,并将返回一个函数元组?
*:当然不是真正的递归,因为它们是以通常的Y-Combinator方式将自己(和兄弟姐妹)作为参数编写的.
recursion functional-programming combinators y-combinator mutual-recursion
Clojure是否指定了函数参数的评估顺序?
即当我在Clojure中调用函数时:
(my-func (fun1 arg1) (fun2 arg2) (fun3 arg3))
Run Code Online (Sandbox Code Playgroud)
是评价的顺序fun1,fun2和fun3界定?
我知道Java定义了从左到右的函数参数的评估顺序,但我可以想象像Clojure这样的函数式语言更加轻松.
我们有一个大的C++应用程序,有时我们需要作为调试版本运行以调查错误.调试版本比发布版本慢得多,几乎无法使用.
有哪些技巧可以使MSVC Debug构建执行得更快而不会牺牲太多的可调试性?
我一直在学习一些Clojure,我目前只有一个.clj文件,我在文本编辑器中编辑,并在命令行执行.
我在哪里可以找到关于扩展到更大程序/库的实际方面的指南?
.clj在文件系统上布置多个文件?我正在寻找有关从小脚本扩展到真实内容的实际方面的信息.
我有一些适用于__m128值的代码.我在这些值上使用x86-64 SSE内在函数,我发现如果值在内存中未对齐,我会崩溃.这是由于我的编译器(在此实例中为clang)仅生成对齐的加载指令.
我是否可以指示我的编译器生成未对齐的加载,无论是全局加载还是某些值(可能带有某种注释)?
我首先得到未对齐值的原因是我试图节省内存.我有一个struct大致如下:
#pragma pack(push, 4)
struct Foobar {
__m128 a;
__m128 b;
int c;
};
#pragma pack(pop)
Run Code Online (Sandbox Code Playgroud)
然后我创建了这些结构的数组.数组中的第二个元素从36个字节开始,这不是16的倍数.
我知道我可以切换到数组表示的结构,或者删除打包编译指示(代价是将结构的大小从36增加到48字节); 但我也知道,未对齐的载荷现在并不那么昂贵,并且想先尝试一下.
更新以回答以下一些评论:
我的实际代码更接近于此:
struct Vector4 {
__m128 data;
Vector4(__m128 v) : data(v) {}
};
struct Foobar {
Vector4 a;
Vector4 b;
int c;
}
Run Code Online (Sandbox Code Playgroud)
然后我有一些实用功能,例如:
inline Vector4 add( const Vector4& a, const Vector4 &b ) {
return Vector4(_mm_add_ps(a.data, b.data));
}
inline Vector4 subtract( const Vector4& a, const Vector4& b ) {
return Vector4(_mm_sub_ps(a.data, b.data));
} …Run Code Online (Sandbox Code Playgroud) clojure ×5
c++ ×4
visual-c++ ×2
combinators ×1
debugging ×1
dispose ×1
exception ×1
intrinsics ×1
macros ×1
ownership ×1
performance ×1
recursion ×1
simd ×1
sse ×1
swing ×1
x86-64 ×1
y-combinator ×1