小编13r*_*ren的帖子

更快的javac/ant?

我发现java启动并且几乎立即为我运行 - 但是javac需要几秒钟,而ant会让它再次变慢.它只有几秒钟,但我的编辑 - 编译 - 测试循环没有它会更顺畅.:-)

顺便说一句:我已经用过蚂蚁的vim's":make"了.

有没有办法加速javac和/或蚂蚁?我在想特殊的开关或技巧?或者也许是另一种java编译器(我在linux中使用1.6)

java ant time build javac

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

在vim中,如何使用argdo追加/插入文本?

有一个":a"命令,但那是多行的,argdo会再次要求你为每个文件提供文本.

文档提到全局命令(g/pat/command),它将使用替换版本的":a",它由换行符而不是"."终止.在一行(您可以通过"\"转义它们来包含换行符).但我无法让它发挥作用.

我看到的唯一方法是首先将要添加的文本添加到命名寄存器中,然后使用:

:argdo put x                 " where x is the register
Run Code Online (Sandbox Code Playgroud)

我希望有类似的东西

:argdo append myTextHere
Run Code Online (Sandbox Code Playgroud)

vi vim insert append

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

为什么Java toString()在间接循环中无限循环?

这更像是一个我想分享的问题而不是一个问题:当打印时toString(),Java将检测Collection中的直接循环(Collection指的是其自身),而不是间接循环(其中Collection指的是另一个指向第一个 - 或更多步骤).

import java.util.*;
public class ShonkyCycle {
  static public void main(String[] args) {
    List a = new LinkedList();
    a.add(a);                      // direct cycle
    System.out.println(a);         // works:  [(this Collection)]

    List b = new LinkedList();
    a.add(b);
    b.add(a);                      // indirect cycle
    System.out.println(a);         // shonky:  causes infinite loop!
  }
}
Run Code Online (Sandbox Code Playgroud)

这对我来说是一个真正的问题,因为它发生在调试代码中以打印出Collection(当它遇到直接循环时我感到很惊讶,所以我错误地认为他们已经实现了一般的检查).有一个问题:为什么?

我能想到的解释是,检查一个引用自身的集合是非常便宜的,因为你只需要存储集合(你已经存在),但是对于更长的周期,你需要存储所有的集合你遭遇,从根开始.此外,您可能无法确切地回答什么根,所以你必须存储在系统中的每个集合-你无论如何做-但你也不得不做的每集合元素的哈希查找.对于相对罕见的周期(在大多数编程中),这是非常昂贵的.(我认为)它检查直接循环的唯一原因是因为它如此便宜(一个参考比较).

好的...我有点回答了我自己的问题 - 但是我错过了什么重要的事吗?有人想要添加任何东西吗?


澄清:我现在意识到我看到的问题特定于打印 Collection(即toString()方法).循环本身没有问题(我自己使用它们并需要它们); 问题是Java无法打印它们.编辑 Andrzej Doyle指出它不仅仅是集合,而是任何toString被称为的对象.

鉴于它受此方法的限制,这里有一个检查它的算法:

  • root是第一个toString()被调用的对象(为了确定这一点,你需要保持关于toString当前是否正在进行的状态;所以这很不方便).
    • 在遍历每个对象时,将其添加到IdentityHashMap,以及唯一标识符(例如递增的索引).
    • 但如果此对象已在Map中,请写出其标识符.

此方法还可以正确呈现multirefs(一个多次引用的节点).

内存成本是IdentityHashMap(每个对象一个引用和索引); 复杂性成本是有向图中每个节点(即每个打印的对象)的哈希查找.

java collections cycle infinite-loop

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

在bash中,如何使控制删除意味着杀词?

Bash使用readline,readline可以使用"kill-word"删除光标右侧的单词.

问题在于识别控制删除的按键.当我用bash按下它们时,屏幕上会输出"5~".我可以为此绑定,但这意味着有一天我需要键入"5~",它会删除右边的单词!所以我更愿意发现正确的控制序列.

我用google搜索,并且有很多资源讨论"删除"键,但我发现没有讨论"控制 - 删除"键.我尝试了很多变化,但没有任何作用.

最糟糕的是我花在这种乏味,无意识的磨练上的时间,当它真的应该是一个没问题的时候.

编辑:这是通过X,所以也许有一个xev和xmodmap的解决方案

linux bash readline

3
推荐指数
2
解决办法
3504
查看次数

用\n替换尾部反斜杠\的最清楚的方法是什么?

我想在java中使用多行字符串,所以我寻求一个简单的预处理器来将C风格的多行转换为带有文字'\n'的单行.

之前:

    System.out.println("convert trailing backslashes\
this is on another line\
\
\
above are two blank lines\
But don't convert non-trailing backslashes, like: \"\t\" and \'\\\'");
Run Code Online (Sandbox Code Playgroud)

后:

     System.out.println("convert trailing backslashes\nthis is on another line\n\n\nabove are two blank lines\nBut don't convert non-trailing backslashes, like: \"\t\" and \'\\\'");
Run Code Online (Sandbox Code Playgroud)

我认为sed会做得很好,但是sed是基于行的,所以替换'\'和它后面的换行符(有效加入两行)在sed中并不是很自然.我将sredden79的oneliner改编为以下 - 它有效,它很聪明,但不清楚:

sed ':a { $!N; s/\\\n/\\n/; ta }'
Run Code Online (Sandbox Code Playgroud)

替补是escaped literal backslash,newlineescaped literal backslash,n. :a是标签,ta如果替代品找到匹配,则为goto标签; $表示最后一行,并且$! …

perl awk sed

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

哪些应用程序太慢了?或者:需要多核吗?

就像汽车一样,速度很酷,但是:" 需要速度吗?人们会付钱吗?"

文字处理,电子邮件和电子表格都足够快,即使是功能不足的上网本(它们已经足够快十年了.)如果您可以播放高清视频和声音,人们是否需要它更快?似乎游戏总能使用更多的力量,这是真的 - 但人们会为此付出代价吗?"休闲游戏"和Nintendo Wii(参见XBOX360和PSX3)的成功表明,大多数人都不会; 并且更多的力量对他们来说并不意味着更多的乐趣(至少,没有足够的额外乐趣来支付额外费用.)

哪些应用程序太慢了?什么是需要的应用程序,目前太慢了?

我唯一能想到的是令人尴尬的可并行化(服务器,图形,物理建模,同时运行几个应用程序.)澄清:在我看来,多核很难被利用并不重要,除非有什么东西(1)并不是令人尴尬的可并行化; (1)需要更快.我要求这样的案件.

这是一个发明一些人们甚至不知道他们需要的新东西的机会,这在多核之前是不可行的.

背景:

你是如何利用多核的?

你关注多核吗?

请问,其中一个关闭者可以解释为什么这不是一个"真正的问题"吗?我认为是,我看不出有任何问题.是否有一个常见问题解答可以指导我在SO上哪些问题是"真实的"?谢谢.

hardware parallel-processing performance multicore

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