我安装了Erlang/OTP和Elixir,并使用以下命令将HelloWorld程序编译成BEAM:
elixirc test.ex
Run Code Online (Sandbox Code Playgroud)
其中生成了一个名为Elixir.Hello.beam的文件
我该如何运行这个文件?
有关PyUnit入门的最佳教程是什么?
(在Google上,我倾向于发现大多数支离破碎的提示和技巧,并且在指南方面并不多)
我想知道adler32校验和与md5校验和相比有多可靠?在维基百科上告诉我,adler32"比md5"更"可靠",所以我想知道它有多少,以及以哪种方式?
更具体地说,我想知道它是否足够可靠作为长期存档大小为20GB +的(tar)文件的一致性检查?
我非常喜欢Golang,可以轻松地编写并发软件,以便在一台机器上使用更多的CPU内核.我有点担心得知Go并不是真正的分布式(如多节点并发)语言 - 甚至Rob Pike也承认(在GopherCon 2014上)它从一开始就不是为分布式计算而设计的,尽管有尝试帮助的GoCircuit等软件包.
因此,我最近对Erlang和Elixir感兴趣,因为经过实战的Erlang VM已被用于跨节点分发应用程序数十年.
但后来我了解到Rust从Erlang(消息传递,模式匹配)中获取大部分并发功能,同时仍然是静态类型和编译语言(因此可能更快),我想知道Rust是否可能是一个不错的选择(除此之外) Erlang/Elixir)用于编写分布式多节点软件?
以下是一些针对所寻求信息的具体问题:
distributed programming-languages distributed-computing rust
我想从Python运行一个管道命令行linux/bash命令,它首先记录文件,然后拆分tar文件.命令在bash中看起来像这样:
> tar -cvf - path_to_archive/* | split -b 20m -d -a 5 - "archive.tar.split"
Run Code Online (Sandbox Code Playgroud)
我知道我可以使用子进程执行它,通过设置shell = True,并将整个命令作为字符串提交,如下所示:
import subprocess
subprocess.call("tar -cvf - path_to_archive/* | split -b 20m -d -a 5 - 'archive.tar.split'", shell=True)
Run Code Online (Sandbox Code Playgroud)
...但出于安全原因,我想找到一种方法来跳过"shell = True"部分(它采用字符串列表而不是完整的命令行字符串,并且无法正确处理管道char).在Python中有没有解决方案?即,是否有可能以某种方式设置链接管道,或其他一些解决方案?
精简版:
是否有可能在Golang产卵一些外部程序(shell命令)的并行,使得它不会启动一个操作系统线程每外部流程...并仍然能够接收它的输出,当它完成?
更长的版本:
在Elixir中,如果使用端口,则可以生成数千个外部进程,而不会真正增加Erlang虚拟机中的线程数.
例如,下面的代码片段(启动2500个外部sleep进程)仅由Erlang VM下的20个操作系统线程管理:
defmodule Exmultiproc do
for _ <- 1..2500 do
cmd = "sleep 3600"
IO.puts "Starting another process ..."
Port.open({:spawn, cmd}, [:exit_status, :stderr_to_stdout])
end
System.cmd("sleep", ["3600"])
end
Run Code Online (Sandbox Code Playgroud)
(如果设置ulimit -n为高数字,例如10000)
另一方面,Go中的以下代码(它应该执行相同的操作 - 启动2500个外部sleep进程)也会启动2500个操作系统线程.所以它显然会启动一个操作系统线程 per(阻塞?)系统调用(以便不阻塞整个CPU,或类似,如果我理解正确):
package main
import (
"fmt"
"os/exec"
"sync"
)
func main() {
wg := new(sync.WaitGroup)
for i := 0; i < 2500; i++ {
wg.Add(1)
go func(i int) { …Run Code Online (Sandbox Code Playgroud) 我想尝试将D用于一些需要高性能的系统管理脚本(用于比较性能与python/perl等).
我在目前为止看过的教程(dsource.org等)中找不到一个例子,说明如何进行系统调用(即调用另一个软件)并从stdout接收它的输出?
如果我错过了,有人可以指向正确的文档/教程,或者立即提供答案吗?
我重申需要连接格式字符串,并且想知道在D中写入flfln()函数之外连接字符串的最短(或最容易阅读)的方法是什么?
也就是说,我喜欢writefln的行为,例如你可以做的事情:
// Some code to init y="2013", m="01", d="02" ...
writefln("%s-%s-%s", y, m, d);
Run Code Online (Sandbox Code Playgroud)
...但我想这样做而不在stdout上写出来.有同样简单的方法吗?
我发现的唯一想法是std.string中的format函数,但是这需要你提供预定义长度的字符串缓冲区作为第一个参数,这在大多数时候都很不方便.
我发现的另一个选择是(通过在std.array中使用"join"):
// Some code to init y="2013", m="01", d="02" ...
datestr = [y, m, d].join("-");
Run Code Online (Sandbox Code Playgroud)
...这非常方便,但只有当你使用相同的"分隔符"时才有效.
更常见的方法是,这比上面的示例短,并且不需要提供预定义长度的缓冲区字符串?
我想知道你是否知道使用prolog进行流处理的任何方法,即某种反应式编程,或者至少让查询在不断更新的知识库上运行(实际上是一个流),并且连续输出推理的输出?
流行的"prologs"中实现了什么,比如SWI-prolog?
python ×3
d ×2
elixir ×2
adler32 ×1
bash ×1
checksum ×1
concurrency ×1
distributed ×1
erlang ×1
go ×1
ipython ×1
md5 ×1
phobos ×1
prolog ×1
rust ×1
stream ×1
swi-prolog ×1
system-calls ×1
testing ×1
unit-testing ×1
unix ×1