小编MvG*_*MvG的帖子

在reST中指定锚名称

我正在使用rst2htmldoctils附带的工具从reST创建HTML .似乎代码已经将id属性分配给各个部分,这些部分可以用作URL中的片段标识符,即作为跳转到页面的特定部分的锚点.这些id值基于部分标题的文本.当我更改标题的措辞时,标识符也会更改,从而使旧URL无效.

有没有办法指定要用作给定部分的标识符的名称,以便我可以编辑标题而不会使链接无效?如果我从我自己的脚本中自己调用docutils发布者,会有办法吗?

python restructuredtext docutils

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

使用单个命令进行分支和结帐

创建和使用新分支涉及两个命令:

$ git branch new_branch_name
$ git checkout new_branch_name
Run Code Online (Sandbox Code Playgroud)

我倾向于忘记后者,这可能很烦人.有没有办法使用单个命令执行此操作?也许使用别名或类似的东西?我知道我可以写一个shell函数,但对于这样一个简单而常见的任务来说,这似乎有点多了.

Bazaar在某种程度上使用bzr branch --switch符号来支持这一点.

git version-control git-checkout git-branch

11
推荐指数
3
解决办法
741
查看次数

C++处理过多的精度

我目前正在研究进行多精度浮点运算的代码.为了正常工作,该代码要求在明确定义的点处将值降低到最终精度.因此,即使将中间结果计算到80位扩展精度浮点寄存器,在某些时候也必须将其四舍五入为后续操作的64位双精度.

代码使用宏INEXACT来描述此要求,但没有完美的定义.在GCC手册中提到-fexcess-precision=standard的办法迫使流延和赋值操作定义良好的精度.但是,它还写道:

对于C以外的语言,未实现"-fexcess-precision = standard"

现在我正在考虑将这些想法移植到C++(如果有人知道现有的实现,则欢迎评论).所以我似乎无法将该开关用于C++.但是没有任何开关的g ++默认行为是什么?是否有更多类似C++的方法来控制过度精度的处理?

我想对于我目前的用例,我可能会-mfpmath=sse在任何情况下使用,据我所知,这不应该产生任何过多的精度.但我仍然很好奇.

c++ floating-point gcc floating-point-precision extended-precision

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

用括号初始化的make_unique

https://en.cppreference.com/w/cpp/memory/unique_ptr/make_unique写入std::make_unique可以实现为

template<typename T, typename... Args>
std::unique_ptr<T> make_unique(Args&&... args)
{
    return std::unique_ptr<T>(new T(std::forward<Args>(args)...));
}
Run Code Online (Sandbox Code Playgroud)

这对于没有构造函数的普通结构不起作用。可以将它们初始化,但没有非默认构造函数。例:

#include <memory>
struct point { int x, z; };
int main() { std::make_unique<point>(1, 2); }
Run Code Online (Sandbox Code Playgroud)

编译它会使编译器抱怨缺少2参数的构造函数,这是正确的。

我想知道,是否有任何技术理由不根据大括号初始化来定义函数?如

template<typename T, typename... Args>
std::unique_ptr<T> make_unique(Args&&... args)
{
    return std::unique_ptr<T>(new T{std::forward<Args>(args)...});
}
Run Code Online (Sandbox Code Playgroud)

对于上面的方案,这已经足够好了。还有其他合法的用例会破坏吗?

看到总体趋势似乎倾向于使用括号进行初始化,我认为在该模板中制作括号是一种典型的选择,但是标准不这样做的事实可能表明我缺少某些东西。

c++ initialization unique-ptr c++-standard-library c++14

10
推荐指数
3
解决办法
687
查看次数

正确格式化multipart/form-data主体

介绍

背景

我正在编写一个脚本,使用RFC 2388中multipart/form-data定义的内容类型上传包含文件的内容.从长远来看,我正在尝试提供一个简单的Python脚本来为github上传二进制包,这涉及将类似表格的数据发送到Amazon S3.

有关

这个问题已经问过如何做到这一点,但到目前为止它还没有得到公认的答案,而且目前这两个答案中更有用的是指出这些方法,这些方法反过来手动构建整个消息.我有点担心这种方法,特别是关于字符集和二进制内容.

还有这个问题,其目前得分最高的答案暗示了该MultipartPostHandler模块.但这与我提到的食谱没什么不同,因此我的担忧也适用于那些.

关注

二进制内容

RFC 2388第4.3节明确规定除非另有声明,否则内容应为7位,因此可能需要Content-Transfer-Encoding标头.这是否意味着我必须对Base64编码二进制文件内容?或者Content-Transfer-Encoding: 8bit对于任意文件是否足够?或者应该读一下Content-Transfer-Encoding: binary

标题字段的字符集

一般的filename标题字段,特别是标题字段,默认情况下仅为ASCII.我希望我的方法能够传递非ASCII文件名.我知道,对于我目前为github上传内容的应用程序,我可能不需要它,因为文件名是在一个单独的字段中给出的.但我希望我的代码可以重用,所以我宁愿以一致的方式编码文件名参数.RFC 2388第4.4节建议RFC 2231中引入的格式,例如filename*=utf-8''t%C3%A4st.txt.

我的方法

使用python库

由于multipart/form-data本质上是一种MIME类型,我认为它应该是可以使用的email从标准Python库撰写我的职务.特别是非ASCII头字段的相当复杂的处理是我想委托的.

到目前为止工作

所以我写了下面的代码:

#!/usr/bin/python3.2

import email.charset
import email.generator
import email.header
import email.mime.application
import email.mime.multipart
import email.mime.text
import io
import sys

class …
Run Code Online (Sandbox Code Playgroud)

python mime http multipartform-data amazon-s3

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

JVM规范中JSR/RET的状态

JVM规范的某些部分建议操作JSR(Jump SubRoutine),JSR_W(Jump SubRoutine Wide)RET(从子例程返回)仅可用于类文件版本50.0(JDK 1.6):

3.13最后编译

(本节假设编译器生成版本号为50.0或更低版本的类文件,以便可以使用jsr指令.另请参见§4.10.2.5.)

然后:

4.10.2.5.例外和finally

要实现try- finallyconstruct,生成class版本号为50.0或更低版本的文件的Java编程语言的编译器可以使用异常处理工具和两个特殊指令:jsr("跳转到子例程")和ret("从子例程返回" ").

另一方面,操作码描述本身并未说明这些功能的弃用.引用的文本只说明过去50.0版本中的版本如何,但在此之后并没有明确说明事态.

这个评论(对于询问这种弃用或删除背后的动机的问题)表明了类似的混淆程度,所以显然我并不是唯一一个寻找此问题的人.

java jvm finally opcode jvm-bytecode

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

是否存在Java的通用或"胖"类文件?

一个胖二进制是可在多个架构上运行的二进制.基本上,它由一个编译两次的程序组成,每个架构一次,然后写入同一个文件.可能最着名的例子是Apple的"通用"二进制文件,允许为英特尔和Power PC架构编译程序,并从相同的可执行文件运行.

这对Java来说从来都不是问题,因为Java在JVM上运行,允许它从任何支持JVM的计算机运行.但是,Android现在非常流行,Android的VM(Dalvik)与JVM不兼容.有没有办法编译代码两次,并创建一个可以由JVM和Dalvik执行的类文件?如果没有,这甚至可能吗?

java android dalvik fat-binaries

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

写入fifo(命名管道)

我正在尝试使用fortran 90应用程序打开fifo并将格式化数据写入其中.我把它剥夺了一个最小的例子.让我们foo.f90成为以下计划:

program foo
  open(1,file='fifo',position='asis',action='write')
  write(1,*)'Hello, world!'
  write(1,*)'Goodbye.'
end program
Run Code Online (Sandbox Code Playgroud)

现在编译并运行程序:

$ gfortran-4.7.1 -o foo foo.f90
$ rm -f fifo
$ ./foo
$ cat fifo
 Hello, world!
$ rm -f fifo
$ mkfifo fifo
$ cat fifo > bar &
[1] 6115
$ strace -o foo.st ./foo
At line 3 of file foo.f90 (unit = 1, file = 'fifo')
Fortran runtime error: Invalid argument
[1]+  Done                    cat fifo > bar
$ tail foo.st
write(3, " Hello, world!\n", 15) …
Run Code Online (Sandbox Code Playgroud)

linux fortran named-pipes gfortran fortran90

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

伽罗瓦域算术的实现

你知道C++ 中Galois域算法的实现吗?至少应包括GF(2 16)和GF(2 32)等案例.性能是一个问题,因此实现应该考虑优化其操作.

我更喜欢一个通用的计算库或一个专门用于此任务的小型库.缺乏这些,我也欢迎一些可读的源代码.

c++ galois-field finite-field

8
推荐指数
2
解决办法
5966
查看次数

打开文件进行读/写,根据需要创建

什么是打开文件的最优雅的方式

  • 如果文件不存在,则创建该文件,
  • 如果文件确实存在,则不会截断该文件
  • 可以写文件的任何部分(在搜索之后),而不仅仅是结束?

据我所知,open内置似乎并没有胜任这项任务:它提供了多种模式,但每一个我试图不能满足我的要求的至少一个:

  • r+ 如果文件不存在则失败.
  • w+ 将截断文件,丢失任何现有内容.
  • a+ 将强制所有写入到文件的末尾,至少在我的OS X上.

在打开文件之前检查存在感觉很糟糕,因为它为竞争条件留出了空间.同样适用于在异常处理程序中使用不同模式重试open.我希望有更好的方法.

python io file-io posix python-3.x

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