小编Ale*_*x B的帖子

巧妙破解C++代码的邪恶样本

我需要一些糟糕的C++代码示例来说明违反良好做法的行为.我想提出我自己的例子,但是我很难想出一些没有做作的例子,而且陷阱不是很明显(它比看起来更难).

例子如下:

  1. 不为具有std::auto_ptr成员的类定义复制构造函数,并使用std::auto_ptr具有前向声明的类的成员.
  2. 从构造函数或析构函数(直接或间接)调用虚函数.
  3. 重载模板功能.
  4. 循环引用boost::shared_ptr.
  5. 切片.
  6. 从C回调中抛出异常(直接或间接).
  7. 相等的浮点比较.
  8. 具有原始指针成员的构造函数的异常安全性.
  9. 从析构函数中抛出.
  10. 在不同体系结构上编译时的整数溢出(size_t和的不匹配int).
  11. 使容器迭代器无效.

......或者你能想到的任何其他邪恶的东西.

我很欣赏对现有资源或一两个样本的一些指示.

c++

39
推荐指数
7
解决办法
8831
查看次数

如何在Clojure中过滤持久性地图?

我有一个我想要过滤的持久性地图.像这样的东西:

(filter #(-> % val (= 1)) {:a 1 :b 1 :c 2})
Run Code Online (Sandbox Code Playgroud)

以上是([:a 1] [:b 1])(一个懒惰的地图条目序列).但是我希望得到{:a 1 :b 1}.

如何过滤地图以使其保持地图而无需从一系列地图条目重建地图?

clojure

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

解释Clojure符号

我有一个"a"绑定到函数的符号:

(defn a []
    (println "Hello, World"))

user=> a
#<user$a__292 user$a__292@97eded>
user=> (a)    
Hello, World
nil
Run Code Online (Sandbox Code Playgroud)

然后我使用语法引用,它"解析当前上下文中的符号,产生一个完全限定的符号",根据Clojure文档.但为什么我不能像不合格的符号一样使用它?

user=> `a
user/a
user=> (`a)
java.lang.IllegalArgumentException: Wrong number of args passed to: Symbol (NO_SOURCE_FILE:0)
Run Code Online (Sandbox Code Playgroud)

第二个问题:如果我在列表中有符号,为什么我不能像直接评估符号一样评估它?

user=> (def l '(a 1 2))
#'user/l
user=> 'l
l
user=> (first l)
a
user=> ((first l))
java.lang.IllegalArgumentException: Wrong number of args passed to: Symbol (NO_SOURCE_FILE:0)
Run Code Online (Sandbox Code Playgroud)

我怀疑在某些地方对于符号如何在这里工作有一个致命的缺陷.上面的代码有什么问题?

clojure

32
推荐指数
3
解决办法
8659
查看次数

是否可以为每个用户配置Linux功能?

似乎支持Linux内核中的细粒度功能,它允许为进程授予权限,例如,在不授予进程root权限的情况下打开原始套接字或提高线程优先级.

但是,如果有办法授予每个用户的能力,我想知道的是什么.也就是说,允许非root和非suid进程获取这些功能.

linux security permissions linux-capabilities

32
推荐指数
3
解决办法
3万
查看次数

ZeroMQ生产准备好了吗?

ZeroMQ作为通用消息传递中间件的经验是什么?

  1. 您是否遇到任何显示停止错误或非显而易见的"功能"?例如,2.0没有正确地刷新消息,故障排除指南似乎给出了最可怕的解决方法:" sleep(1)退出前".
  2. API是否降低了应用程序的复杂性,还是证明它很麻烦?
  3. 向后兼容性经常被破坏吗?

messaging zeromq

32
推荐指数
2
解决办法
8532
查看次数

使用Clojure中的逻辑函数"reduce"或"apply"

我不能在Clojure(1.2)中对一系列布尔值使用逻辑函数.由于逻辑函数是宏,以下两种方法都不起作用:

(reduce and [... sequence of bools ...])
(apply or [... sequence of bools ...])
Run Code Online (Sandbox Code Playgroud)

错误消息说我"无法获取宏的值:#'clojure.core/and".如何在不编写样板代码的情况下应用这些逻辑函数(宏)?

clojure

31
推荐指数
2
解决办法
3928
查看次数

32位应用程序如何在64位Linux上进行系统调用?

一些(很多?全部?)64位1 Linux发行版允许通过提供32位和64位库(包括libc)的并行集合来运行32位应用程序.因此,32位应用程序可以链接到32位库,并由64位内核运行.

我想知道力学的32位应用程序如何让在64位内核的系统调用.我怀疑答案是在libc和/或内核源代码中的某个地方,但由于我不知道在哪里查看,因此潜入源代码会非常耗时.

还有一个更重要的问题,是否有任何性能开销?2从逻辑上讲,来自32位app系统调用的调用必须转换为64位内部内核环境.这完成的方式和地点?

1 "32位"= IA-32,"64位"= AMD64
2在你的回答中假设它很重要:)

c linux performance system-calls

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

高效的Clojure工作流程?

我正在和Clojure一起开发一个宠物项目,但是我想知道我是否可以加快我的工作流程.

我目前的工作流程(使用Compojure)是:

  1. 开始使用Swank lein swank.
  2. 转到Emacs,与之联系M-x slime-connect.
  3. 逐个加载所有现有的源文件.这也启动了Jetty服务器和应用程序.
  4. 在REPL中写一些代码.
  5. 当对实验感到满意时,请编写我想到的构造的完整版本.Eval(C-c C-c)吧.
  6. 将REPL切换到此构造所在的命名空间并对其进行测试.
  7. 切换到浏览器并使用受影响的页面重新加载浏览器选项卡.
  8. 调整代码,评估它,检查浏览器.
  9. 重复上述任何一项.

它有很多烦恼:

  1. 我必须一直在Emacs和浏览器(或浏览器,如果我正在测试像多个浏览器进行模板测试)之间切换.有一个共同的习惯用于自动化吗?我以前有一个JavaScript位可以连续重新加载页面,但是当我必须与页面交互超过几秒钟时,它的实用性有限.
  2. 当我试验和编写测试函数时,我的JVM实例变得"脏".基本上名称空间会受到污染,特别是如果我在名称空间之间重构和移动函数.这可能导致符号冲突,我需要重新启动Swank.我可以取消一个符号吗?
  3. C-c C-k重启Swank后逐个加载所有源文件().我怀疑我做错了.
  4. 在REPL和文件编辑器之间切换可能会有点恼人,尤其是当我在浏览器旁边打开很多Emacs选项卡时.

我正在寻找改善上述要点和整个工作流程的方法,所以如果你愿意分享你的话,我会很感激.

PS

我之前也使用过Vimclojure,因此也欢迎基于Vimclojure的工作流程.

clojure

28
推荐指数
2
解决办法
3119
查看次数

在Python中有一种简单的方法可以等到某些条件成立吗?

我需要在脚本中等待,直到一定数量的条件成为现实?

我知道我可以使用条件变量和朋友滚动自己的事件,但我不想经历实现它的所有麻烦,因为一些对象属性更改来自包装C++库(Boost.Python)中的外部线程,所以我不能只是__setattr__在一个类中劫持并在那里放置一个条件变量,这让我尝试从C++创建并发出Python条件变量信号,或者包装一个本地变量并在Python中等待,这两个声音都是繁琐,不必要的复杂和无聊.

是否有更简单的方法,除非连续轮询病情?

理想情况下,它将沿着这条线

res = wait_until(lambda: some_predicate, timeout)
if (not res):
    print 'timed out'
Run Code Online (Sandbox Code Playgroud)

python

25
推荐指数
3
解决办法
5万
查看次数

与位置无关的代码的差异:x86 vs x86-64

我最近正在构建一个针对x86-64架构的特定共享库(ELF),如下所示:

g++ -o binary.so -shared --no-undefined ... -lfoo -lbar
Run Code Online (Sandbox Code Playgroud)

这失败,出现以下错误:

在制作共享对象时,不能使用对"本地符号"的重定位R_X86_64_32; 用-fPIC重新编译

当然,这意味着我需要将其重建为与位置无关的代码,因此它适合链接到共享库.

But this works perfectly well on x86 with exactly the same build arguments. So the question is, how is relocation on x86 different from x86-64 and why don't I need to compile with -fPIC on the former?

c linux x86 x86-64 elf

24
推荐指数
2
解决办法
5719
查看次数