小编jub*_*0bs的帖子

为什么这个Haskell程序比同等的Python程序慢得多?

作为编程挑战的一部分,我需要从stdin读取一系列空格分隔的整数(在一行上),并将这些整数的总和打印到stdout.有问题的序列可以包含多达10,000,000个整数.

我有两个解决方案:一个用Haskell(foo.hs)编写,另一个用等价的,用Python 2(foo.py)编写.不幸的是,(编译的)Haskell程序一直比Python程序慢,而且我不知道解释两个程序之间的性能差异; 请参阅下面的基准部分.如果有的话,我会期望Haskell占上风......

我究竟做错了什么?我如何解释这种差异?有没有一种简单的方法来加速我的Haskell代码?

(有关信息,我使用的是2010年中期的Macbook Pro,配备8Gb RAM,GHC 7.8.4和Python 2.7.9.)

foo.hs

main = print . sum =<< getIntList

getIntList :: IO [Int]
getIntList = fmap (map read . words) getLine
Run Code Online (Sandbox Code Playgroud)

(编译ghc -O2 foo.hs)

foo.py

ns = map(int, raw_input().split())
print sum(ns)
Run Code Online (Sandbox Code Playgroud)

基准

在下文中,test.txt由一行1000万个以空格分隔的整数组成.

# Haskell
$ time ./foo < test.txt 
1679257

real    0m36.704s
user    0m35.932s
sys     0m0.632s

# Python
$ time python foo.py < test.txt
1679257 

real    0m7.916s
user …
Run Code Online (Sandbox Code Playgroud)

python io performance haskell

45
推荐指数
3
解决办法
3955
查看次数

为什么Git Bash不能运行我的可执行文件?

我正在使用git-for-windows Git Bash.我无法在命令行上运行可执行文件:

Pedr@Abc-07 MINGW64 /c/dev
$ ls sqlite3.exe
sqlite3.exe*

Pedr@Abc-07 MINGW64 /c/dev
$ sqlite3
bash: sqlite3: command not found
Run Code Online (Sandbox Code Playgroud)

为什么会这样?

windows git bash mingw-w64 msys2

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

如何将分支合并为主分支但继续在分支上工作?

我创建了一个分支来尝试不同的方法并且它有效,所以我想将"Farmcrops"分支合并为"Master"以保持这些变化,但继续"Farmcrops"分支以探索另一种可能性.这样,如果这个最新的改变不起作用,我可以回到"大师",现在包括第一轮改变.

我怎样才能做到这一点?

git github

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

错误:pathspec'test-branch'与git已知的任何文件都不匹配

我是Git的新用户.我已经分叉了一个名为Spoon-Knife的存储库(可以用Git练习分叉).然后,我通过运行在本地克隆它

git clone https://github.com/rohinichoudhary/Spoon-Knife.git
Run Code Online (Sandbox Code Playgroud)

该存储库包含三个分支,即

  • master,
  • test-branch,
  • change-the-title.

当我跑git branch,它只显示*master,而不是剩下的两个分支.当我跑

git checkout test-branch
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

错误:pathspec'test-branch'与git已知的任何文件都不匹配.

为什么会这样?我怎么解决这个问题?

git github git-checkout git-fork

40
推荐指数
5
解决办法
12万
查看次数

如何为Git命令设置自动完成功能?

我有Git(版本1.7.2.5)bash compeletion正在处理我的Debian squeeze(6.0).Git安装了aptitude,我正在使用标准的debian bash,它支持命令行自动完成.

现在,我刚刚在另一台机器(Lenny/Debian 5.0)上安装了Git(1.5.6.5),并且没有自动完成功能.

  1. 为什么Git自动完成不能在第二台机器上运行?我该如何诊断?

  2. 什么使我的机器完成工作?我已经查找了该文件,git-completion.bash但它似乎不在我的机器上.Git如何完成工作?

  3. 如何将git完成到另一台机器上?

linux git bash debian

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

如何在裸Git存储库中创建主分支?

(全部在Windows 8上以poshgit完成):

git init --bare test-repo.git
cd test-repo.git
Run Code Online (Sandbox Code Playgroud)

(文件夹是使用git-ish文件和文件夹创建的)

git status
Run Code Online (Sandbox Code Playgroud)

致命:这个操作必须在工作树中运行 (好吧,所以我不能使用git状态和一个简单的仓库;我猜是有道理的)

git branch
Run Code Online (Sandbox Code Playgroud)

(没什么,似乎裸仓库不包含任何分支.我是否必须从克隆的仓库中添加它们?)

cd ..
mkdir test-clone
cd test-clone
git clone ../test-repo.git
Run Code Online (Sandbox Code Playgroud)

(我收到有关克隆空存储库的警告)

cd test-repo
Run Code Online (Sandbox Code Playgroud)

(提示更改以指示我在主分支上)

git branch
Run Code Online (Sandbox Code Playgroud)

(显示没有结果 - 是吗?)

git branch master
Run Code Online (Sandbox Code Playgroud)

致命的:不是有效的对象名称:'master'

嗯.那么如何在我的裸仓库中创建主分支?

git git-bare git-branch posh-git

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

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

"分支"究竟是什么意思?

长话短说...

据我所知,术语"分支"(用Git的说法)可能指的是相关但不同的东西:

  1. 提交的非符号引用/指针,
  2. 这种参考的名称(例如"主人"),
  3. 存储库的提交DAG的子图由这样的引用所指向的提交中可到达的所有提交组成.

但是,我已经看到这个术语过去常常是指三种可能的用法以外的东西(下面有更多细节).在Git上下文中,我的列表中缺少的"分支"一词是否还有其他有效和明确的用法?

更多细节

使用Git大约一年后,我正在为CS学生准备一个简短的教程.我真的想要确定Git术语,以避免任何混淆.

当然,我现在已经使用Git分支了一段时间; 我很习惯使用它们并且发现Git分支模型很棒.但是,我仍然发现术语"分支"有问题且含糊不清,因为它似乎至少引用了两个不同的东西,具体取决于它所使用的上下文...有时甚至在同一个教程/手册中.

用法1:branch =指向提交的指针/引用

Pro Git书(3.1中 - 分支是什么),在显示下图后,

在此输入图像描述

继续将分支定义为

只是一个指向其中一个提交的轻量级可移动指针.

据我所知,这也是Git手册页中"分支"的含义.

我对这个定义非常满意.我认为分支只是指向DAG中特定提交的引用,而分支的"提示提交"是该引用指向的提交.到现在为止还挺好.可是等等...

用法2:branch = DAG的子图

Atlassian的Git的教程介绍分支如下:

分支代表独立的发展路线.

我猜他们的意思是一串提交.让我改进一下这个想法......唯一对我有意义的解释是术语"分支"也可以指存储库的提交DAG子图,该提交DAG由所考虑的提示提交可到达的所有提交组成.

但是,Pro Git书籍也包含以下图表(参见3.4 - 分支工作流程),

在此输入图像描述

这似乎与我的解释相矛盾,因为它似乎暗示只有提交C2- C5(不C1)属于develop分支,并且只提交C6- C7(不是C1- C5)属于topic分支.

我发现这种用法含糊不清,因为如果我在那个阶段绘制DAG,而不知道分支引用在过去指向的位置,并且没有任何假设三个分支之间的任何层次结构,我会得到的是

在此输入图像描述

我还发现其他Git学习资源中的一些图表令人困惑.特别考虑以下内容(取自Lynda.com的介绍视频- Git Essential Training):

在此输入图像描述

这里,尖端master实际 534de(和HEAD指向master),但图中的"主"标签的位置是非常误导.在这种情况下,该标签应该描述的是我不清楚的......

编辑:我已经 …

git branch terminology

34
推荐指数
2
解决办法
3197
查看次数

列表git提交两个日期之间的主分支

如何获取2014-01-01和2014-06-30之间对主分支所做的所有git提交的列表?

我知道git log会给我大致这种格式(对所有提交重复):

commit <hash>
author: <author name>
date: <date>
<comment>
Run Code Online (Sandbox Code Playgroud)

但是如何将其限制为选定日期和每个提交格式一行?

<hash> <author> <date>
<hash> <author> <date>
Run Code Online (Sandbox Code Playgroud)

git git-log

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

为什么即使我不进行任何更改,git commit --amend也会更改哈希值?

为什么即使我在运行后没有对提交(消息,文件)进行任何更改,我最新提交的SHA-1哈希值也会发生变化git commit --amend

假设我在命令行运行以下命令.

cd ~/Desktop
mkdir test_amend
cd test_amend
git init
echo 'foo' > test.txt
git add test.txt
git commit -m 'initial commit'
Run Code Online (Sandbox Code Playgroud)

然后,调用

git log --pretty=oneline --abbrev-commit
Run Code Online (Sandbox Code Playgroud)

打印以下消息:

b96a901 initial commit
Run Code Online (Sandbox Code Playgroud)

然后我做

git commit --amend
Run Code Online (Sandbox Code Playgroud)

但我改变主意,决定不改变最后一次提交中的任何内容.换句话说,我保持最后一次提交的文件,目录和消息不变(我只保存消息文件并关闭我的编辑器).

然后,我做

git log --pretty=oneline --abbrev-commit
Run Code Online (Sandbox Code Playgroud)

再一次,我看到提交的哈希值发生了变化:

3ce92dc initial commit
Run Code Online (Sandbox Code Playgroud)

是什么导致哈希改变?是否与提交的时间戳有关?

git sha git-amend

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