我的git repo看起来像这样:
_ branch_a
/
master /
\_ branch_b
Run Code Online (Sandbox Code Playgroud)
现在我想将branch_b合并到branch_a中,而不是将其分支到master中.
所以我做了
git checkout branch_a
git merge branch_b
Run Code Online (Sandbox Code Playgroud)
git去了,发现了几个冲突.
当我git mergetool使用meld我在控制台上获得的东西时
{local}: modified file
{remote}: modified file
Run Code Online (Sandbox Code Playgroud)
和一个只显示LOCAL和REMOTE的窗口.
我想知道的是:
为什么不显示master中的内容的共享基础?
在LOCAL和REMOTE之间,我应该编辑哪一个?
我被扔进了一个包含大量源文件的大型Fortran项目中.
我需要为这个项目做出贡献,我首先理解来源似乎是谨慎的.
作为第一步,我想想象各种源文件之间的相互依赖性,即哪些源文件需要哪些模块.据我所知,其他语言存在自动化方法,并产生可以使用Graphviz构建的图形.
但有没有人知道那些可以为Fortran 90代码执行此操作的软件?
[搜索Fortran帮助的互联网是一个真正的痛苦,因为你最终搜索了蜘蛛网,这要归功于痛苦无处不在的FORTRAN 77.
我有一个分叉的Perl脚本.
每个fork运行一个外部程序,解析输出,并将输出转换为Storable文件.
然后由父母读入可存储文件,并且在继续重复前一个分支之前分析来自每个孩子的总数据,否则父母停止.
当一些孩子仍在运行外部程序时发出^ C时到底发生了什么?在前台调用父perl脚本,我认为,尽管有分叉,仍保留在前台.
是否将SIGINT传递给所有子节点,即父节点,父节点的子节点以及子节点调用的外部程序?
更新:
我应该补充一点,看来当我发出SIGINIT时,我脚本的子节点调用的外部程序似乎会确认信号并终止.但孩子们,或者父母的计划,继续下去.这一点对我来说都不清楚.
更新2:
关于tchrist的评论,外部程序是用Perl的system()命令调用的.
事实上,tchrist的评论似乎也包含了我正在寻找的解释.经过一些调试后,根据我的程序的行为,看来确实,SIGINT正从父级传递给所有子级,并且从所有子级传递给所有子级(外部程序).
因此,根据tchrist的评论,似乎正在发生的事情是CTRL-C正在杀死外部程序,导致孩子们离开system()命令 - 仅此而已.
虽然我让我的孩子检查了所调用内容的退出状态system(),但我假设CTRL-C会从父节点中删除所有内容,而不是导致创建更多轮处理,这就是发生的事情! !
解决方案(对我的问题):
我需要在父级中为SIGINT创建一个信号处理程序.然后信号处理程序将SIGTERM发送给每个子节点(我假设它也会向子节点的子节点发送SIGTERM),然后使父节点正常退出.虽然这个有点明显的解决方案可能会解决问题,但我想理解我对于在Perl中分叉的SIGINT行为的误解.
在学习C的过程中,我犯了一些错误并打印出未初始化的字符数组元素.
如果我将数组的大小扩展为相当大,比如说大小为100万个元素然后打印内容,那么出来的并不总是用户不可读,但似乎包含一些运行时信息.
请考虑以下代码:
#include <stdio.h>
main() {
char s[1000000];
int c, i;
printf("Enter input string:\n");
for (i = 0; ( c = getchar()) != '\n'; i++) {
s[i] = c;
}
printf("Contents of input string:\n");
for (i = 0; i < 999999; i++) {
putchar(s[i]);
}
printf("\n");
return 0;
}
Run Code Online (Sandbox Code Playgroud)
只需滚动输出,我会发现如下内容:
?? ?L' ?????? _ dyldVersionNumber_dyldVersionString_dyld_all_image_infos_dyld_fatal_error_dyld_shared_cache_ranges_error_string__mh_dylinker_header_stub_binding_helper_dyld_func_lookup_offset_to_dyld_all_image_infos__dyld_start__ZN13dyldbootstrapL30randomizeExecutableLoadAddressEPK12macho_headerPPKcPm__ZN13dyldbootstrap5startEPK12macho_headeriPPKcl__ZN4dyldL17setNewProgramVarsERK11ProgramVars__ZN4dyld17getExecutablePathEv__ZN4dyld22mainExecutablePreboundEv__ZN4dyld14mainExecutableEv__ZN4dyld21findImageByMachHeaderEPK11mach_header__ZN4dyld26findImageContainingAddressEPKv
并且,
Apple Inc.1&0 $ U?0?*?H ?? CA0?"0ple Certification Authority10U?GP ?? GP ?? ^ y? - ?6?WLU ???? Kl ??"0?>?P? A ??????????????????????????????????????????????????????????????????????????????????? ?ˬ,运算δλ0 24 C'= …
我有一个产生一组孩子的脚本.家长必须等待每个孩子完成.
我的脚本执行类似于以下perl脚本:
#! /usr/bin/perl
use strict;
use warnings;
print "I am the only process.\n";
my @children_pids;
for my $count (1..10){
my $child_pid = fork();
if ($child_pid) { # If I have a child PID, then I must be the parent
push @children_pids, $child_pid;
}
else { # I am the child
my $wait_time = int(rand(30));
sleep $wait_time;
my $localtime = localtime;
print "Child: Some child exited at $localtime\n";
exit 0; # Exit the child
}
}
foreach my $child (@children_pids) …Run Code Online (Sandbox Code Playgroud) 在" 科学家和工程师的Fortran 95/2003 "一书中,有很多关于认识到格式语句中的第一列是为控制字符保留的重要性.我还看到互联网上的控制字符被称为运输控制.
为了避免混淆,通过控制字符,我将字符"1,空白(即\ s),0和+"称为当放置在第一列(字符)中时对输出的垂直间距产生影响格式声明.
另外,请参阅这个完全以固定宽度字体编写的纯文本网页:Fortran支架控制(因为没有什么比等宽字体中的散文更能说明准确性和古老性).我发现这个页面和其他类似的页面并不十分清楚.
据的Fortran 95/2003科学家和工程师,失败回顾,第一列被保留以供滑架控制可导致可怕意想不到的输出.解读Dave Barry,输入错误的字符,核导弹向挪威开火.
然而,当我试图坚持这个严厉的警告时,我发现gfortran不知道我在说什么.
请允许我用一些示例代码说明我的观点.我正在尝试打印数字Pi:
PROGRAM test_format
IMPLICIT NONE
REAL :: PI = 2 * ACOS(0.0)
WRITE (*, 100) PI
WRITE (*, 200) PI
WRITE (*, 300) PI
100 FORMAT ('1', "New page: ", F11.9)
200 FORMAT (' ', "Single Space: ", F11.9)
300 FORMAT ('0', "Double Space: ", F11.9)
END PROGRAM test_format
Run Code Online (Sandbox Code Playgroud)
这是输出:
1New page: 3.141592741
Single Space: 3.141592741
0Double Space: 3.141592741 …Run Code Online (Sandbox Code Playgroud) 经过多次痛苦的调试后,我相信我已经找到了Fortran的一个独特属性,我想在stackoverflow验证这里.
我一直注意到的是,至少,内部逻辑变量的值在函数或子程序调用中保留.
这是一些示例代码来说明我的观点:
PROGRAM function_variable_preserve
IMPLICIT NONE
CHARACTER(len=8) :: func_negative_or_not ! Declares function name
INTEGER :: input
CHARACTER(len=8) :: output
input = -9
output = func_negative_or_not(input)
WRITE(*,10) input, " is ", output
10 FORMAT("FUNCTION: ", I2, 2A)
CALL sub_negative_or_not(input, output)
WRITE(*,20) input, " is ", output
20 FORMAT("SUBROUTINE: ", I2, 2A)
WRITE(*,*) 'Expected negative.'
input = 7
output = func_negative_or_not(output)
WRITE(*,10) input, " is ", output
CALL sub_negative_or_not(input, output)
WRITE(*,20) input, " is ", output
WRITE(*,*) 'Expected positive.'
END PROGRAM …Run Code Online (Sandbox Code Playgroud) 我想在Fortran中使用链表来保存未定义长度的数据数组.
我有以下设置:
TYPE linked_list
INTEGER :: data
TYPE(linked_list) :: next_item => NULL()
END TYPE
Run Code Online (Sandbox Code Playgroud)
现在说我创建了这样一个列表:
TYPE(LINKED_LIST) :: example_list
example_list%data =1
ALLOCATE(example_list%next_item)
example_list%next_item%data = 2
ALLOCATE(example_list%next_item%next_item)
example_list%next_item%next_item%data = 3
Run Code Online (Sandbox Code Playgroud)
我的问题是,如果我执行:
DEALLOCATE(example_list)
Run Code Online (Sandbox Code Playgroud)
所有嵌套的级别也会被释放,或者我是否需要遍历列表到最深的元素并从最深的元素向上释放?
我已经获得了一个2D矩阵,表示金属板表面的温度点.基质(板)的边缘保持恒定在20摄氏度,并且在一个预定点处存在100摄氏度的恒定热源.所有其他网格点最初设置为50摄氏度.
我的目标是通过对周围的四个网格点(i + 1,i-1,j + 1,j-1)进行迭代平均来获取所有内部网格点并计算其稳态温度,直到达到收敛(迭代之间小于0.02摄氏度).
据我所知,迭代网格点的顺序是无关紧要的.
对我来说,这听起来像是调用Fortran FORALL构造并探索并行化乐趣的好时机.
如何确保代码确实是并行化的?
例如,我可以在我的单核PowerBook G4上编译它,并且由于并行化,我预计速度不会提高.但如果我在双核AMD Opteron上编译,我会假设FORALL结构可以被利用.
或者,有没有办法衡量程序的有效并行化?
更新
回答MSB的问题,这是与gfortran版本4.4.0.gfortran是否支持自动多线程?
值得注意的是,FORALL结构已被淘汰,我想,那就是自动向量化.
也许这对于一个单独的问题是最好的,但自动矢量化是如何工作的?编译器是否能够检测到循环中只使用纯函数或子例程?
在我的C++程序中,我试图按值而不是按键对我的地图进行排序.
从这个问题来看,似乎很清楚,这样做的方法是创建一个集合,其元素是成对的,并且由我自己的less-than函数排序.
这是一些示例代码,我尝试这样做:
#include <map>
#include <set>
#include <iostream>
#include <string>
using namespace std;
bool compareCounts(const pair<string, size_t> &lhs, const pair<string, size_t> &rhs);
int main (int argc, char *argv[]) {
map <string, size_t> counter = { {"A", 1}, {"B", 2}, {"C", 3} };
set <pair<string, size_t>, decltype(compareCounts) *> sorted_counter;
for (map<string, size_t>::iterator it = counter.begin(); it != counter.end(); ++it) {
cout << "About to add: " << it->first << ":" << it->second << endl;
auto ret = sorted_counter.insert(*it); …Run Code Online (Sandbox Code Playgroud)