小编Ell*_*ron的帖子

将分支移动到历史记录中的另一个点

我们有以下历史

start         master  public
|                 |   |
v                 v   v
o---o-- ... --o---o---o
Run Code Online (Sandbox Code Playgroud)

不幸的是,我们在master包含一些敏感数据的分支中做了一些提交.我们在一个名为public的独立分支中进行了修改.现在我们想要"切断" public分支,以获得一个完整而干净的"状态",public但没有妥协的历史部分仍然包含在内master.换句话说,我们想要以下新历史:

start         master
|                 |
v                 v
o---o-- ... --o---o
 \
  o <- public
Run Code Online (Sandbox Code Playgroud)

现在退房public将导致与原始情况相同的工作树,但没有合理的历史细节.然后我们将旧分支停止master:将其重命名为unsafe并从新master分支中精心设计一个新public分支.通过这种方式,我们保留了旧的历史,unsafe并且能够public毫无后顾之忧地将分支机构推向公众:

start         unsafe
|                 |
v                 v
o---o-- ... --o---o
 \
  o---o-- ... --o <-- public
   \           /
    o-- .. --o-- ... --o <-- master
Run Code Online (Sandbox Code Playgroud)

有什么正确的git命令来实现这一目标?

PS:当然我们可以结账start,建立一个新的分支并在那里提交分支的整个工作树public.但必须有一种不同的,更加迷人的git方式!

git branch

5
推荐指数
1
解决办法
1801
查看次数

SQLite是否使用SQLCipher扩展泄漏内存?

我正在使用SQLCipher来存储加密的SQLite数据库。但是,当我sqlite3_key用来加密数据库时,我开始出现内存泄漏。观察以下示例:

#include <sqlite3.h>    

int main()
{
    sqlite3 * connection;
    sqlite3_open_v2(":memory:", &connection, SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE, NULL);
    sqlite3_key(connection, "passphrase", 10);
    sqlite3_close(connection);
}
Run Code Online (Sandbox Code Playgroud)

此示例产生内存泄漏。如果我取消对的呼叫sqlite3_key,内存泄漏将消失。

我缩小了一些可能的罪魁祸首:

  • 尽管该示例使用内存数据库(因此":memory:"),但在使用基于文件的数据库时,我会看到相同的结果。
  • sqlite3_*调用的所有返回码均为SQLITE_OK,表示没有任何错误。
  • 10for 的缓冲区长度"passphrase"不是问题。

但是,无论我创建了多少连接或使用了多少个不同的加密密钥,内存泄漏始终约为8 KB。这使我怀疑这实际上不是内存泄漏,而只是SQLite / SQLCipher中的某些恒定全局内存,这些内存无法手动释放。

有谁之前经历过这个吗?有办法摆脱泄漏吗?即使这不是官方的内存泄漏,也很难通过此工具检测实际的内存泄漏。

我正在使用WindowsSQLCipher库

c c++ sqlite memory-leaks sqlcipher

5
推荐指数
1
解决办法
715
查看次数

如何获取排他锁**然后降级到共享而不释放锁

堆栈溢出有几个例子,其中一个函数获得的升级第一然后获得由升级的独占访问.我的理解是,如果不小心使用,这导致死锁,因为两个线程都可以获得可升级/共享锁,然后两者都尝试升级,此时两者都不能继续,因为另一个具有共享锁.

我想要的是首先获得独占锁,然后降级到共享锁,而不完全释放锁.我找不到这样的例子.有任何想法吗?

c++ boost-thread boost-mutex

5
推荐指数
1
解决办法
672
查看次数

防止Haskell的getArgs解析glob表达式

我正在使用getArgs我的Haskell程序来解析命令行中的参数.但是,当我调用我的程序时,我注意到我遇到了问题:

runhaskell Main *.hs .
Run Code Online (Sandbox Code Playgroud)

可以想象,Main查看*.hs目录中的.文件.

但是有一个问题.下面的代码表现不像我期望的那样.

import System

main :: IO ()
main = do
    args <- getArgs
    print args
Run Code Online (Sandbox Code Playgroud)

我想看看

args = ["*.hs","."]
Run Code Online (Sandbox Code Playgroud)

但相反,我明白了

args = ["file1.hs","file2.hs","file3.hs","."]
Run Code Online (Sandbox Code Playgroud)

我的程序需要扩展glob表达式本身,因为它在多个目录中完成.但是我如何才能getArgs返回原始的参数列表而不是试图变得神奇并且自己进行解析呢?

console haskell arguments

4
推荐指数
2
解决办法
335
查看次数

如何在Haskell的Text.Regex库中转义字符?

介绍

我正在使用Haskell的Text.Regex库,我想匹配一些通常在正则表达式中有意义的字符.据Text.Regex文件,

正则表达式的语法是... egrep的语法(即POSIX"扩展"正则表达式).

显然,在 POSIX扩展正则表达式(ERE)中转义使用反斜杠[与POSIX Basic正则表达式(BRE)不同 ].


问题

但是,当我尝试做这样的事情时:

> import Text.Regex
> matchRegex (mkRegex "\*") "*"
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

<interactive>:1:23:
    lexical error in string/character literal at character '*'
Run Code Online (Sandbox Code Playgroud)

无论我在之后放置什么角色,都会发生同样的事情\.


变通

我可以这样做:

> matchRegex (mkRegex "[*]") "*"
Just []
Run Code Online (Sandbox Code Playgroud)

哪个有效,但它似乎是一个黑客,特别是如果我想连续逃脱几件事(例如mkRegex "[[][(][)][]]"哪些匹配[()]).


这是在POSIX ERE中逃脱的唯一途径吗?为什么Haskell的Text.Regex库支持\不像它应该的那样逃避?

regex haskell escaping posix-ere

4
推荐指数
1
解决办法
1605
查看次数

优化Haskell中的"列表"索引

假设你有一个非常确定的算法产生一个列表,就像initsData.List.有没有办法让Haskell编译器能够在不实际产生所有中间结果的情况下对该算法进行最佳执行"索引"操作?

例如,inits [1..] !! 10000很慢.编译器能否以某种方式推断inits出在没有任何递归的情况下在第10000个元素上产生的内容等等?当然,同样的想法可以超越列表.

编辑:虽然inits [1..] !! 10000是常数,但我想知道某些算法上的任何"索引式"操作.例如,可以\i -> inits [1..] !! i进行优化,以便不执行[或最小]递归来达到任何结果i

algorithm optimization haskell

4
推荐指数
1
解决办法
190
查看次数

Boost.MPI和Boost.Interprocess之间有什么区别?

我想Boost.MPI并且Boost.Interprocess不同,对吗?

从性能角度来看,哪个更快?有没有人做过基准测试?

我可以使用它们在同一进程中传递数据(即在不同的线程中)吗?

谢谢!

c++ boost

3
推荐指数
1
解决办法
861
查看次数

如何在boost :: spirit :: qi中捕获角色而不消耗它

我正在使用boost::spirit::qi解析看起来像这样的"模板"格式:

/path/to/:somewhere:/nifty.json
Run Code Online (Sandbox Code Playgroud)

where :somewhere:表示由名称标识的任何字符串somewhere(名称可以是两个:字符之间的任何字符串).我有一个有效的解析器,但我想做一个额外的改进.

我想知道:somewhere:占位符后面的字符(在本例中为a /).但我的解析器的其余部分仍然需要知道这一点/并将其作为下一部分的一部分使用.

如何/:somewhere:不实际使用它的情况下"读取" 后面的内容,以便解析器的其余部分可以看到它并使用它.

c++ boost boost-spirit boost-spirit-qi

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

如何使用boost :: iostreams管道进入std :: cout

我是新手,boost::iostreams所以这可能是微不足道的:

假设 namespace io = boost::iostreams;

这很有效

io::filtering_ostream out(std::cout);
out << "some\nstring\n";
Run Code Online (Sandbox Code Playgroud)

这很有效

std::string result;
io::filtering_ostream out(io::counter() | io::back_inserter(result));
out << "some\nstring\n";
Run Code Online (Sandbox Code Playgroud)

但这不编译

io::filtering_ostream out(io::counter() | std::cout);
out << "some\nstring\n";
Run Code Online (Sandbox Code Playgroud)

你怎么管std::cout

c++ boost iostream boost-iostreams

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