小编pau*_*doo的帖子

用于生成和管理后台线程的惯用Clojure方法

什么是惯用的Clojure方法来创建一个在后台循环的线程,对一些共享引用进行更新并管理它的生命周期?我发现自己正在使用future它,但感觉有点像黑客,因为我永远不会返回有意义的价值.例如:

(future (loop [] (do
    (Thread/sleep 100)
    (dosync (...))
    (recur))))
Run Code Online (Sandbox Code Playgroud)

此外,future-cancel当不再需要后台处理时,我需要小心这一点.关于如何在Clojure/Swing应用程序中编排它的任何提示都会很好.例如JComponent,添加到我的UI中的虚拟对象,当窗口关闭时负责杀死线程可能是一个想法.

swing multithreading dispose clojure ownership

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

将Clojure宏视为一种功能

如何使Clojure宏充当函数,所以我可以将它作为参数传递给你?我希望不得不以某种方式包装它.

我不希望包装版本的行为与原始宏完全相同(按名称调用与按值调用的差异),但在少数情况下这不重要.

macros clojure

15
推荐指数
2
解决办法
3060
查看次数

如何检测异常何时飞行?

在C++(MSVC)中,如何测试异常当前是否"在飞行中".即,作为类析构函数的一部分被调用的代码可能会被调用,因为异常正在展开堆栈.如何检测这种情况,而不是正常情况下由于正常返回而调用析构函数?

c++ exception visual-c++

13
推荐指数
2
解决办法
1900
查看次数

用于相互递归函数的定点组合器?

是否有一个固定点组合器用于创建相互递归函数的元组?即我正在寻找像Y-Combinator这样的东西,但它需要多个"递归"*函数,并将返回一个函数元组?

*:当然不是真正的递归,因为它们是以通常的Y-Combinator方式将自己(和兄弟姐妹)作为参数编写的.

recursion functional-programming combinators y-combinator mutual-recursion

13
推荐指数
2
解决办法
3001
查看次数

在Clojure中创建Java类的选项

有几种不同的方法来创建Clojure中的Java类,所以什么都捡之间时,权衡gen-class,proxyreifyClojure中?(还有其他方法来创建我没有列出的Java类吗?)

我的基本理解是我已经按照权力的递减顺序列出了这些结构.

clojure clojure-java-interop

13
推荐指数
2
解决办法
2532
查看次数

是否有C++生态系统的函数式语言?

Java有Scala,.NET有F#.这两种语言都高度集成到各自的Java和.NET平台中.例如,可以用Scala编写类,然后用Java扩展.

是否存在可与C++高度互操作的等效功能语言?

c++ functional-programming

12
推荐指数
4
解决办法
3025
查看次数

Clojure中函数参数的评估顺序

Clojure是否指定了函数参数的评估顺序?

即当我在Clojure中调用函数时:

(my-func (fun1 arg1) (fun2 arg2) (fun3 arg3))
Run Code Online (Sandbox Code Playgroud)

是评价的顺序fun1,fun2fun3界定?

我知道Java定义了从左到右的函数参数的评估顺序,但我可以想象像Clojure这样的函数式语言更加轻松.

clojure

12
推荐指数
2
解决办法
1235
查看次数

如何使MSVC调试版本运行得更快

我们有一个大的C++应用程序,有时我们需要作为调试版本运行以调查错误.调试版本比发布版本慢得多,几乎无法使用.

有哪些技巧可以使MSVC Debug构建执行得更快而不会牺牲太多的可调试性?

c++ debugging performance visual-c++

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

如何组织,测试,记录和打包Clojure项目

我一直在学习一些Clojure,我目前只有一个.clj文件,我在文本编辑器中编辑,并在命令行执行.

我在哪里可以找到关于扩展到更大程序/库的实际方面的指南?

  • 我应该如何.clj在文件系统上布置多个文件?
  • 我应该如何组织和执行测试代码?
  • 我该如何记录程序/库?
  • 我该怎么打包呢?

我正在寻找有关从小脚本扩展到真实内容的实际方面的信息.

clojure project-files

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

如何指示编译器为__m128生成未对齐的载荷

我有一些适用于__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)

c++ sse x86-64 simd intrinsics

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