如何在Erlang中连接两个二进制文件?
例如,假设我有:
B1 = <<1,2>>.
B2 = <<3,4>>.
Run Code Online (Sandbox Code Playgroud)
如何连接B1和B2以创建二进制B3,即<< 1,2,3,4 >>?
我问这个的原因是因为我正在编写代码来编码某个网络协议的数据包.我通过为数据包中的字段编写编码器来实现这一点,我需要连接这些字段以构建整个数据包.
也许我这样做是错误的.我应该将数据包构建为整数列表,并在最后一刻将列表转换为二进制文件吗?
在 read-the-docs 上构建 Sphinx 文档失败,并显示以下错误(完整日志如下):
ImportError: cannot import name 'PackageFinder' from 'pip._internal.index' (/home/docs/checkouts/readthedocs.org/user_builds/cascade-python/envs/latest/lib/python3.7/site-packages/pip/_internal/index/__init__.py)
Run Code Online (Sandbox Code Playgroud)
我做错了什么还是这是阅读文档中的错误?
Sphinx 文档的本地构建运行良好。
在 read-the-docs 上完成错误日志:
Read the Docs build information
Build id: 10299638
Project: cascade-python
Version: latest
Commit: a7d50bf781bd8076b10dd7024db4ccb628016c27
Date: 2020-01-21T17:03:12.876711Z
State: finished
Success: False
[rtd-command-info] start-time: 2020-01-21T17:03:13.203354Z, end-time: 2020-01-21T17:03:13.215400Z, duration: 0, exit-code: 0
git remote set-url origin https://github.com/brunorijsman/cascade-python.git
[rtd-command-info] start-time: 2020-01-21T17:03:13.276220Z, end-time: 2020-01-21T17:03:13.630658Z, duration: 0, exit-code: 0
git fetch origin --force --tags --prune --prune-tags --depth 50
From https://github.com/brunorijsman/cascade-python
2a28505..a7d50bf master -> origin/master
[rtd-command-info] start-time: 2020-01-21T17:03:13.824496Z, …Run Code Online (Sandbox Code Playgroud) 我有以下程序:
~/test> cat test.cc
int main()
{
int i = 3;
int j = __sync_add_and_fetch(&i, 1);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我正在使用运行在多CPU 64位Intel机器上的Linux上的GCC 4.2.2编译该程序:
~/test> uname --all
Linux doom 2.6.9-67.ELsmp #1 SMP Wed Nov 7 13:56:44 EST 2007 x86_64 x86_64 x86_64 GNU/Linux
Run Code Online (Sandbox Code Playgroud)
当我以64位模式编译程序时,它编译并链接正常:
~/test> /share/tools/gcc-4.2.2/bin/g++ test.cc
~/test>
Run Code Online (Sandbox Code Playgroud)
当我在32位模式下编译它时,我收到以下错误:
~/test> /share/tools/gcc-4.2.2/bin/g++ -m32 test.cc
/tmp/ccEVHGkB.o(.text+0x27): In function `main':
: undefined reference to `__sync_add_and_fetch_4'
collect2: ld returned 1 exit status
~/test>
Run Code Online (Sandbox Code Playgroud)
虽然我永远不会在32位处理器上运行,但我确实需要一个32位可执行文件,所以我可以链接一些32位库.
我的两个问题是:
在32位模式下编译时,为什么会出现链接错误?
有没有办法让程序编译和链接,同时仍然能够与32位库链接?
在Linux上,我如何(以编程方式)基于每个接口检索以下计数器:
假设我有两个线程,T1和T2.
线程T1在TCP套接字S上进行阻塞write()调用,以发送大量字节B1的缓冲区.字节B1的缓冲区很大,以至于(a)写调用块和(b)TCP必须使用多个段来发送缓冲区.
线程T2还在同一个TCP套接字S上进行阻塞write()调用,以发送一些其他大的字节B2缓冲区.
我的问题是:
在UNIX上实现TCP是否保证B1的所有字节都将在B2的所有字节之前发送(反之亦然)?
或者TCP是否可能交错B1和B2的内容(例如,TCP发送带有B1数据的段,然后是带有B2数据的段,然后是带有B1数据的段).
PS - 我知道这样做并不是一个好主意.我正在尝试确定一些我没写的代码是否正确.
当我编写用于文本解析的Erlang程序时,我经常遇到我希望使用正则表达式进行模式匹配的情况.
例如,我希望我可以做这样的事情,其中〜是一个"组合"的正则表达式匹配运算符:
my_function(String ~ ["^[A-Za-z]+[A-Za-z0-9]*$"]) ->
....
Run Code Online (Sandbox Code Playgroud)
我知道正则表达式模块(重新)但AFAIK你不能在模式匹配时或在警卫中调用函数.
此外,我希望匹配字符串可以以不区分大小写的方式完成.这很方便,例如,在解析HTTP标头时,我很乐意做这样的事情,其中"Str~ {Pattern,Options}"的意思是"使用选项选项匹配模式模式":
handle_accept_language_header(Header ~ {"Accept-Language", [case_insensitive]}) ->
...
Run Code Online (Sandbox Code Playgroud)
两个问题:
你如何使用标准的Erlang来处理这个问题?是否有一些机制/编码风格在简洁和易于阅读方面接近于此?
在Erlang中是否有任何工作(EEP?)来解决这个问题?
这是一个Erlang问题.
我通过io遇到了一些意想不到的行为:fread.
我想知道是否有人可以检查我使用io的方式是否有问题:fread或者io中是否有错误:fread.
我有一个文本文件,其中包含一个"数字三角形",如下所示:
59 73 41 52 40 09 26 53 06 34 10 51 87 86 81 61 95 66 57 25 68 90 81 80 38 92 67 73 30 28 51 76 81 18 75 44 ...
每对数字之间有一个空格,每一行以一个回车换行符结束.
我使用以下Erlang程序将此文件读入列表.
-module(euler67).
-author('Cayle Spandon').
-export([solve/0]).
solve() ->
{ok, File} = file:open("triangle.txt", [read]),
Data = read_file(File),
ok = file:close(File),
Data.
read_file(File) ->
read_file(File, []).
read_file(File, Data) ->
case io:fread(File, "", "~d") of
{ok, [N]} ->
read_file(File, [N | Data]); … 每次运行pylint(无论检查什么程序)都会产生以下错误消息:
(env) $ pylint hello.py
Problem importing module logging.py: cannot import name 'Type'
Problem importing module spelling.py: cannot import name 'Type'
Problem importing module python3.py: cannot import name 'Type'
Problem importing module typecheck.py: cannot import name 'Type'
Problem importing module variables.py: cannot import name 'Type'
Problem importing module refactoring.py: cannot import name 'Type'
Problem importing module format.py: cannot import name 'Type'
Problem importing module imports.py: cannot import name 'Type'
Problem importing module utils.py: cannot import name 'Type'
Problem importing module …Run Code Online (Sandbox Code Playgroud) 当我将绘图渲染到文件时,如下所示:
import plotly.graph_objects as go
def produce_graph(graph, data_dir):
figure = go.Figure()
[...]
figure.write_image("output_file.png")
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
Traceback (most recent call last):
File "/Users/brunorijsman/cascade-python/env/lib/python3.7/site-packages/plotly/io/_orca.py", line 1559, in to_image
figure=fig_dict, format=format, scale=scale, width=width, height=height
File "/Users/brunorijsman/cascade-python/env/lib/python3.7/site-packages/retrying.py", line 49, in wrapped_f
return Retrying(*dargs, **dkw).call(f, *args, **kw)
File "/Users/brunorijsman/cascade-python/env/lib/python3.7/site-packages/retrying.py", line 212, in call
raise attempt.get()
File "/Users/brunorijsman/cascade-python/env/lib/python3.7/site-packages/retrying.py", line 247, in get
six.reraise(self.value[0], self.value[1], self.value[2])
File "/Users/brunorijsman/cascade-python/env/lib/python3.7/site-packages/six.py", line 696, in reraise
raise value
File "/Users/brunorijsman/cascade-python/env/lib/python3.7/site-packages/retrying.py", line 200, in call
attempt = Attempt(fn(*args, **kwargs), attempt_number, False)
File "/Users/brunorijsman/cascade-python/env/lib/python3.7/site-packages/plotly/io/_orca.py", …Run Code Online (Sandbox Code Playgroud) 我使用 Pyo3 从 Python 调用 Rust 函数,反之亦然。
我正在努力实现以下目标:
Python 调用rust_function_1
Rust 函数rust_function_1调用 Python 函数python_function,传递 Rust 函数rust_function_2作为回调参数
Python 函数python_function调用回调,在本例中是 Rust 函数rust_function_2
我无法弄清楚如何rust_function_2作为回调参数传递给python_function.
我有以下Python代码:
import rust_module
def python_function(callback):
print("This is python_function")
callback()
if __name__ == '__main__':
rust_module.rust_function_1()
Run Code Online (Sandbox Code Playgroud)
我有以下非编译 Rust 代码:
use pyo3::prelude::*;
#[pyfunction]
fn rust_function_1() -> PyResult<()> {
println!("This is rust_function_1");
Python::with_gil(|py| {
let python_module = PyModule::import(py, "python_module")?;
python_module
.getattr("python_function")?
.call1((rust_function_2.into_py(py),))?; // Compile error
Ok(())
})
}
#[pyfunction] …Run Code Online (Sandbox Code Playgroud) 有人可以解释以下奇怪的行为吗?
我在64位Intel平台上运行以下程序:
include <stdio.h>
#include <stdint.h>
int main(void)
{
int x;
int *ptr = &x;
printf("ptr = %p\n", ptr);
printf("sizeof(ptr) = %d\n", sizeof(ptr));
int64_t i1 = (int64_t) ptr;
printf("i1 = 0x%x\n", i1);
printf("sizeof(i1) = %d\n", sizeof(i1));
return 0;
}
Run Code Online (Sandbox Code Playgroud)
该程序产生以下输出:
ptr = 0x7fbfffdf2c
sizeof(ptr) = 8
i1 = 0xbfffdf2c
sizeof(i1) = 8
Run Code Online (Sandbox Code Playgroud)
任何人都可以解释为什么i1只包含最低32位的ptr?(注意它缺少0x7f).
Compiler: gcc version 3.4.6 20060404 (Red Hat 3.4.6-9)
OS: Linux scream 2.6.9-67.ELsmp #1 SMP Wed Nov 7 13:56:44 EST 2007 x86_64 x86_64 x86_64 GNU/Linux
Processor: Intel(R) Xeon(R) …Run Code Online (Sandbox Code Playgroud) 如何为使用 Clang LLVM 编译的 C++ 代码生成图形代码分析报告?
我将哪些命令行选项传递给 clang++ 以指示它在执行代码时收集分析数据?
收集到的分析数据存储在哪个文件中?
将收集到的配置文件数据转换为图形报告的后处理步骤是什么,该报告显示每个函数被调用的频率、每个函数花费的时间百分比以及每个函数是从哪些函数调用的(类似于https:// /s3-us-west-2.amazonaws.com/brunorijsman-public/example-rift-python-code-profile.png)?
我可以完全控制 C++ 源代码和 Makefile。
它必须是 LLVM clang++ (GNU g++ 对我来说不是一个选择)。Xcode 也不适合我。
考虑以下 C++ 程序,它根据用户输入的种子值生成 10 个随机数序列:
#include <iostream>
#include <random>
int main()
{
std::random_device rd;
std::mt19937 mt(rd());
std::uniform_int_distribution<int> dist(0, 10000);
int seed;
std::cout << "Enter seed: ";
std::cin >> seed;
mt.seed(seed);
for (int i=0; i<10; ++i) {
std::cout << dist(mt) << std::endl;
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
当我在 MacBook 上运行这个程序并输入种子值 12345 时,它会产生以下随机数序列:
$ bin/demo
Enter seed: 12345
4578
2177
3492
4094
4478
546
7709
3441
7483
6798
Run Code Online (Sandbox Code Playgroud)
如果我再次运行程序并再次输入相同的种子值 12345,那么正如预期的那样,我会得到相同的随机数序列:
$ bin/demo
Enter seed: 12345
4578
2177
3492
4094
4478
546
7709
3441 …Run Code Online (Sandbox Code Playgroud) python ×4
erlang ×3
c++ ×2
gcc ×2
linux ×2
atomic ×1
binaries ×1
c ×1
c++14 ×1
callback ×1
casting ×1
clang ×1
ip ×1
linker ×1
llvm ×1
macos ×1
networking ×1
pip ×1
plotly ×1
profiling ×1
pyo3 ×1
python-3.x ×1
random ×1
regex ×1
rust ×1
sockets ×1
string ×1
tcp ×1
text-parsing ×1
virtualenv ×1