小编lim*_*imp的帖子

JavaScript子阵列没有复制?

我见过的所有创建子阵列的文档都谈到了slice,它创建了一个数组的副本.我想知道是否可以在不复制的情况下创建数组切片,因此修改切片会修改原始数组.例如:

var foo = [1, 2, 3, 4, 5];
var bar = foo.subarray(2, 4);
console.log(bar); // [2, 3, 4]
bar[0] = 'hello, world';
console.log(bar); // ['hello, world', 3, 4]
console.log(foo); // [1, 'hello, world', 3, 4, 5]
Run Code Online (Sandbox Code Playgroud)

javascript arrays

6
推荐指数
3
解决办法
2446
查看次数

Python比D ??更快 IO操作似乎减慢了D很多......发生了什么?

我为汇编翻译编写了一个虚拟机语言,用于我正在学习的计算机系统课程(使用nand2tetris课程).我最初是用Python编写的,但是因为我正在学习D,我以为我会翻译它.D在语法上与Python非常接近,所以它并不太难.我认为D,作为一种性能语言并且已经编译,至少和Python一样快,在大文件上,会快得多.但事实恰恰相反!尽管算法相同,但当我构造一个非常大的文件进行编译时,D的执行速度仍然比python略慢.在大约500000行的文件上,python一直需要大约2.6秒完成,而D一直占用大约3.这不是一个巨大的差距,但值得注意的是python会更快.

我不想暗示我天真地认为python实际上比D总体更快; 然而,在这种情况下,至少看起来D不是直观地更快.我很感激我的D代码中可能的性能下降的一些输入.我认为瓶颈可能是IO操作,但我不确定.

源代码如下.细节并不重要; 分配了一些汇编语言模板,然后通过虚拟机语言进行线性传递,将每条指令转换为等效的汇编代码块.

编辑:在使用D代码重新编译之后dmd -O -release -inline -m64,D在输入上以2.20秒的时间输出胜利者.然而,问题仍然存在,为什么几乎相同的代码,D似乎比python执行速度慢.

编辑2:使用下面的建议,我从使用简单的字符串列表切换到使用a appender!string(),并将时间改进了显着的数量.但值得一提的是,如果你有一堆字符串appender,请不要使用如下命令将它们写入文件:

auto outputfile = File("foo.txt","w");
foreach(str; my_appender.data)
   outputfile.write(str);
Run Code Online (Sandbox Code Playgroud)

而是写一些类似于:

auto outputfile = File("foo.txt","w");
outputfile.write(my_appender.data);
Run Code Online (Sandbox Code Playgroud)

第二个例子比使用简单的例子提供了小的性能提升string[].但是使用第一个给我带来了巨大的性能损失,使执行时间翻了一番.

更改为a appender!string(),上述大文件的编译花费了大约2.75秒(对于Python的2.8),其中原始版本大约需要3.执行此操作,并使用优化标记dmd,总编译时间为1.98秒!:)

蟒蛇:

#!/usr/bin/python

import sys

operations_dict = {"add":"+", "sub":"-",
                   "and":"&", "or":"|",
                   "not":"!", "neg":"-",
                   "lt":"JLT", "gt":"JGT",
                   "eq":"JEQ", "leq":"JLE",
                   "geq":"JGE"}

vars_dict = {"this":("THIS","M"),
             "that":("THAT","M"),
             "argument":("ARG","M",),
             "local":("LCL","M",),
             "static":("f.%d","M",),
             "temp":("TEMP","A",)}

start = "@SP\nAM=M-1\n"
end = "@SP\nM=M+1\n"

binary_template = start + "D=M\n\ …
Run Code Online (Sandbox Code Playgroud)

python d

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

Rust:使用traits/typeclasses实现通用数字函数

我有一个函数,可以创建一个整数的链接列表:

enum List<T> { Cons(T, ~List<T>), End }

fn range(start: int, end: int) -> ~List<int> {
    if start >= end { ~End }
    else { ~Cons(start, range(start+1, end)) }
}
Run Code Online (Sandbox Code Playgroud)

但是,我想制作任何数字类型的范围,包括uints,double等.但是,例如,这不起作用:

fn range<T: ord>(start: T, end: T) -> ~List<T> {
    if start >= end { ~End }
    else { ~Cons(start, range(start+1, end)) }
}
Run Code Online (Sandbox Code Playgroud)

产生:

> rustc list.rs
list.rs:3:12: 3:15 error: use of undeclared type name `ord`
list.rs:3 fn range<T: ord>(start: T, end: T) -> ~List<T> {
                      ^~~
error: aborting …
Run Code Online (Sandbox Code Playgroud)

traits typeclass rust

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

如果我在一天的特定时间段内如何检查python?

我想检查python,如果当前时间在两个端点之间(例如,上午8:30和下午3:00),无论实际日期如何.因为,我不在乎完整的日期是什么; 只是一小时.当我datetime使用strptime指定时间创建对象时,它会投入一个虚拟日期(我认为是1900年?),这不是我想要的.我可以使用一个笨拙的布尔表达式,(hour == 8 and minute >= 30) or (9 <= hour < 15)但似乎并不优雅.什么是最简单,最pythonic的方法来实现这一目标?

进一步扩展,我真正喜欢的东西会告诉我它是否在这个小时范围之间,而且它是一个工作日.当然我可以0 <= weekday() <= 4用来破解这个,但可能有更好的方法.

python datetime

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

Flask app对象`get`和`post`类方法的文档?

在关于测试的Flask文档(http://flask.pocoo.org/docs/testing/)中,它有一行代码

rv = self.app.get('/')
Run Code Online (Sandbox Code Playgroud)

在它下面,它提到"通过使用self.app.get,我们可以使用给定的路径向应用程序发送HTTP GET请求."

在哪里可以找到这些直接访问方法的文档(我假设所有的其他方法都有一个)?具体来说,我想知道他们可以采取什么样的参数(例如,传递数据,标题等).查看有关Flask对象的flask文档,它似乎没有列出这些方法,即使它在上面的示例中使用它们.

或者,知识渊博的个人可以回答我想要解决的问题:我正在尝试模拟向我的服务器发送POST请求,就像我通过以下行一样,如果我是通过HTTP进行的:

    res = requests.post("http://localhost:%d/generate" % port, 
                        data=json.dumps(payload), 
                        headers={"content-type": "application/json"})
Run Code Online (Sandbox Code Playgroud)

以上在适当的端口上运行Flask应用程序时起作用.但我尝试用以下内容替换它:

    res = self.app.post("/generate", 
                        data=json.dumps(payload), 
                        headers={"content-type": "application/json"})
Run Code Online (Sandbox Code Playgroud)

相反,我得到的回应是一个400 BAD REQUEST.

python get flask

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

使用haskell删除stdin中的项目

我的haskell程序中有一些代码,如下所示:

evaluate :: String -> IO ()
evaluate = ...

repl = forever $ do
  putStr "> " >> hFlush stdout
  getLine >>= evaluate
Run Code Online (Sandbox Code Playgroud)

问题是,当我按下删除键(Windows上的退格键),而不是从缓冲区中删除一个字符时,我得到了一个^?字符.从stdin读取时删除删除字符的规范方法是什么?同样,我希望能够获得箭头键来移动光标等.

io haskell input

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

如何在Coq中"翻转"平等主张?

如果我在Coq,我发现自己处于这样一个目标:

==================
  x = y -> y = x
Run Code Online (Sandbox Code Playgroud)

有一种策略可以一举完成吗?事实上,我正在写作

intros H. rewrite -> H. reflexivity.
Run Code Online (Sandbox Code Playgroud)

但它有点笨重.

coq

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

emacs中的Ctrl-backspace删除太多

emacs中的ctrl-backspace会删除所有空白是很好的。但是,它并不止于此!它似乎只有删除至少一个单词后才会停止。例如,这意味着在这里使用它:

foo(bar)
    <cursor>
Run Code Online (Sandbox Code Playgroud)

结果是

foo(<cursor>
Run Code Online (Sandbox Code Playgroud)

哪个真傻(恕我直言)!我想要的行为类似于以下内容:

  1. 如果光标前面有空格,请删除所有空格(然后停止!)。
  2. 如果光标之前有一个单词,请删除该单词。
  3. 否则,删除光标之前的所有相邻重复字符。

这似乎是一个更合理的Ctrl-Backspace,但是老实说,如果我能得到(1),那将是一个巨大的改进。是否有用于此的包装或设置?我不太了解emacs lisp,但也许会指出相关API的位置...

emacs

5
推荐指数
2
解决办法
1306
查看次数

查看远程中存在的分支

我使用的是git版本1.8.3.1(centos 7)。我在 github 上有一个存储库,其中有很多分支。我克隆该存储库并尝试检查这些分支之一,但它不允许我:

$ git clone my_repo
$ cd my_repo
$ git checkout my_desired_branch
error: pathspec 'my_desired_branch' did not match any file(s) known to git.
Run Code Online (Sandbox Code Playgroud)

我知道远程分支中存在这个分支;我是从另一台电脑上推送过来的,在github上查看没有问题。阅读有关堆栈溢出的类似问题,答案似乎各不相同:

$ git fetch [--all]
$ git pull [--all]
Run Code Online (Sandbox Code Playgroud)

然而,这些都不能解决我的问题。此外,无论我做什么,当我列出我的分支时,除了主分支之外什么都不会显示:

$ git branch
* master
$ git branch -a
* master
  remotes/origin/HEAD -> origin/master
  remotes/origin/master
$ git branch -r
  origin/HEAD -> origin/master
  origin/master
Run Code Online (Sandbox Code Playgroud)

我也无法通过哈希从存储库中获取我的分支:

$ git fetch origin 6175e3ae4c88669af8aa5cd12b
Run Code Online (Sandbox Code Playgroud)

即使使用 --verbose...,该命令也不会给出任何输出,但检查退出代码显示它是 1。当然:

$ git checkout 6175e3ae4c88669af8aa5cd12b
fatal: reference is not …
Run Code Online (Sandbox Code Playgroud)

git github

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

是否可以向elixir/erlang中的所有子进程发送消息?

让我们想象一下,我在elixir中产生了多个子进程.

defmodule Child do
  def start(name) do
    receive do
      msg -> IO.puts "Message received by #{name}: #{inspect msg}"
    end
  end
end

defmodule Parent do
  def main do
    child1 = spawn_link (fn -> Child.start("1") end)
    child2 = spawn_link (fn -> Child.start("2") end)
    child3 = spawn_link (fn -> Child.start("3") end)
  end
end
Run Code Online (Sandbox Code Playgroud)

反正我是否可以向当前流程(或其他流程)的所有孩子发送消息?

send_to_children self(), "hello to all children"
Run Code Online (Sandbox Code Playgroud)

在某种程度上,我可以告诉运行时将消息广播到链接到当前进程的所有进程?我当然可以将所有生成的pid存储在某种数据结构中并循环遍历它,但是如果有某种规范方法可以做到这一点,那么它似乎会更高效,更不容易出错.

erlang message-passing elixir

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

标签 统计

python ×3

arrays ×1

coq ×1

d ×1

datetime ×1

elixir ×1

emacs ×1

erlang ×1

flask ×1

get ×1

git ×1

github ×1

haskell ×1

input ×1

io ×1

javascript ×1

message-passing ×1

rust ×1

traits ×1

typeclass ×1