小编Jan*_*sen的帖子

如何使用PetitParser防止贪婪?

我正在尝试在Pharo/PetitParser中实施EPDBNF.

digit18 := $1 asParser / $2 asParser / $3 asParser / $4 asParser / $5 asParser / $6 asParser / $7 asParser / $8 asParser.
piecePromotion := $N asParser / $B asParser / $R asParser / $Q asParser.
promotion := ($= asParser) , piecePromotion.
fileLetter := ($a asParser / $b asParser / $c asParser / $d asParser / $e asParser / $f asParser / $g asParser / $h asParser).
targetSquare := fileLetter , digit18.
disambiguation …
Run Code Online (Sandbox Code Playgroud)

parsing smalltalk squeak bnf pharo

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

Pharo/Squeak - 如何快速浏览给定类中给定方法的实现?

假设我想看看如何在Dictionary类中实现"复制".目前我使用系统浏览器并手动遍历继承层次结构(自下而上),直到找到实现给定消息的类.是否有工作空间的单行,这将在正确的位置打开系统浏览器?

ide smalltalk squeak class-hierarchy pharo

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

为什么_exit(0)(由syscall退出)阻止我收到任何标准内容?

我有一个Linux x86-32 GAS汇编程序终止如下:

movl $1, %eax
movl $0, %ebx # argument for _exit
int $0x80
Run Code Online (Sandbox Code Playgroud)

当我像这样退出时,程序正常运行,但如果我尝试读取stdout输出,我什么也得不到(使用ie less或wc).

我尝试编译一个最小的C程序并比较strace输出.我发现的唯一区别是,GCC使得C程序(int main() { printf("donkey\n"); })隐含地退出exit_group(0)了strace输出.

我尝试修改我的ASM程序以退出call exit而不是原始系统调用.stdout现在可以正常读取.

测试用例

.data
douout: .string "monkey\n"
.text
.globl main

main:

pushl $douout
call printf
# Exit
movl $1, %eax
movl $0, %ebx
int $0x80
Run Code Online (Sandbox Code Playgroud)

编译并运行:

$ yasm -g dwarf2 -f elf -p gas t.asm && gcc -g -melf_i386 -o t t.o && ./t | wc -c
0
Run Code Online (Sandbox Code Playgroud)

预期:

7
Run Code Online (Sandbox Code Playgroud)

编辑:

我打过电话都 …

linux assembly interrupt gnu-assembler system-calls

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

在ContainerResponseFilter中获得响应(JAX-RS 2)

我试图将此CORS过滤器移植到JAX-RS 2.

不过,我看不出如何让响应对象(如旧代码)从ContainerResponseContext我得到的重载方法传递ContainerResponseFilter.

如果有一种更优雅的方式来使用JAX-RS 2进行CORS,那当然是首选.提前致谢.

java jax-rs jax-ws cors

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

Libtool正在丢弃`-static`标志

我正在构建我使用以下配置的flex-2.5.39:

./configure --enable-static LDFLAGS=-static CC=/x86_64-linux-musl/bin/x86_64-linux-musl-gcc
Run Code Online (Sandbox Code Playgroud)

但最后,libtool并没有静态链接.事实上,它只是丢弃旗帜:

[ root@836843e09b55:/flex-2.5.39 ]$ make flex
/bin/bash ./libtool --tag=CC   --mode=link /x86_64-linux-musl/bin/x86_64-linux-musl-gcc  -g -O2  -static -o flex ccl.o dfa.o ecs.o scanflags.o gen.o main.o misc.o nfa.o parse.o scan.o skel.o sym.o tblcmp.o yylex.o options.o scanopt.o buf.o tables.o tables_shared.o filter.o regex.o lib/libcompat.la -lm 
libtool: link: /x86_64-linux-musl/bin/x86_64-linux-musl-gcc -g -O2 -o flex ccl.o dfa.o ecs.o scanflags.o gen.o main.o misc.o nfa.o parse.o scan.o skel.o sym.o tblcmp.o yylex.o options.o scanopt.o buf.o tables.o tables_shared.o filter.o regex.o  lib/.libs/libcompat.a -lm
[ root@836843e09b55:/flex-2.5.39 ]$
Run Code Online (Sandbox Code Playgroud)

如何让libtool接受标志并传递它?

libtool

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

如何使用 Clang 的 CUDA 编译器?

我在 Ubuntu 17.10 上。我安装了 NVIDIA 的 CUDA 9.1 SDK。

这是我尝试过的:

~/GrinGoldMiner/src/Cudacka$ clang++-5.0 -Wl,--cuda-path=/usr/local/cuda-9.1 kernel.cu
clang: error: cannot find libdevice for sm_20. Provide path to different CUDA installation via --cuda-path, or pass -nocudalib to build without linking with libdevice.
clang: error: cannot find CUDA installation.  Provide its path via --cuda-path, or pass -nocudainc to build without CUDA includes.
clang: error: cannot find CUDA installation.  Provide its path via --cuda-path, or pass -nocudainc to build without CUDA includes.
Run Code Online (Sandbox Code Playgroud)

显然这是行不通的。似乎链接器标志没有通过。我怎样才能正确地传递它们?

c++ cuda clang++

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

从种子中产生闪电秘密

我正在尝试在以下部分中实现该功能:Per-commitment Secret Requirements

generate_from_seed(seed, I):
    P = seed
    for B in 47 down to 0:
        if B set in I:
            flip(B) in P
            P = SHA256(P)
    return P
Run Code Online (Sandbox Code Playgroud)

其中“flip(B)”替换值 P 中的第 B 个最低有效位。

根据这个定义,如果我们有seed=0x0101010101010101010101010101010101010101010101010101010101010101I=1,我希望结果是

>>> from hashlib import sha256
>>> from binascii import hexlify

>>> hexlify(sha256(int(("00000001"*31)+"00000000",2).to_bytes(length=32,byteorder="big")).digest())
b'79356295f56e69998b9140cb77c63d3d80c93874259793a38d1dbd8678809ca9'
Run Code Online (Sandbox Code Playgroud)

因为flip函数执行一次,将第 0 个 LSB(最右边的位)设置为 0。

相反,结果是(测试向量):

>>> hexlify(sha256(int("00000000"+("00000001"*31),2).to_bytes(length=32,byteorder="big")).digest())
b'915c75942a26bb3a433a8ce2cb0427c29ec6c1775cfc78328b57f6ba7bfeaa9c'
Run Code Online (Sandbox Code Playgroud)

查看一个实现,很明显人们正在使用:

output[lp / 8] ^= (1 << (lp % 8));
Run Code Online (Sandbox Code Playgroud)

这在我看来是错误的,因为它正在改变字节的 LSB,如果 …

pseudocode endianness bitwise-operators bitcoin lightning-network

5
推荐指数
0
解决办法
133
查看次数

如何在飞机上获得三个非共线点? - C++

我正在尝试在线平面交叉算法上实现.根据维基百科,我需要飞机上的三个非共线点来做到这一点.

因此,我尝试在C++中实现此算法.有些东西肯定是错的,因为没有任何意义我可以选择任何x和y坐标,它们都适合飞机.如果平面是垂直的并且沿着x轴怎么办?然后y = 1的任何点都不在平面内.

我意识到这个问题已经在StackOverflow上发布了很多,我看到很多解决方案,其中平面由3个点定义.但我只有一个正常和一个位置.在我整理非共线点检测器之前,我无法测试我的线平面交点算法.

现在的问题是,我除了normal.z,而且当normal.z为0时,这显然不起作用.

我正在测试这个平面:Plane*p = new Plane(Color(),Vec3d(0.0,0.0,0.0),Vec3d(0.0,1.0,0.0)); //第二个参数:position,第三个参数:normal

当前代码给出了错误答案:

{0 , 0 , 0} // alright, this is the original
{12.8377 , 17.2728 , -inf} // obviously this is not a non-colinear point on the given plane
Run Code Online (Sandbox Code Playgroud)

这是我的代码:

std::vector<Vec3d>* Plane::getThreeNonColinearPoints() {
    std::vector<Vec3d>* v = new std::vector<Vec3d>();

    v->push_back(Vec3d(position.x, position.y, position.z)); // original position can serve as one of the three non-colinear points.

    srandom(time(NULL));

    double rx, ry, rz, start;

    rx = Plane::fRand(10.0, 20.0);
    ry = …
Run Code Online (Sandbox Code Playgroud)

c++ math linear-algebra computational-geometry

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

如何防止 Datalog 规则修剪空值?

我有以下事实和规则:

% frequents(D,P) % D=drinker, P=pub
% serves(P,B) % B=beer
% likes(D,B)

frequents(janus, godthaab).
frequents(janus, goldenekrone).
frequents(yanai, goldenekrone).
frequents(dimi,  schlosskeller).

serves(godthaab, tuborg).
serves(godthaab, carlsberg).
serves(goldenekrone, pfungstaedter).
serves(schlosskeller, fix).

likes(janus, tuborg).
likes(janus, carlsberg).

count_good_beers_for_at(D,P,F) :- group_by((frequents(D,P), serves(P,B), likes(D,B)),[D,P],(F = count)).
possible_beers_served_for_at(D,P,B) :- lj(serves(P,B), frequents(D,R), P=R).
Run Code Online (Sandbox Code Playgroud)

现在我想构建一个规则,当每个酒吧的“饮酒者”“频率”大于 0 的可用“喜欢”啤酒的数量时,该规则应该像一个返回“真”的谓词一样工作。

当规则不返回元组时,我会认为谓词为真。如果谓词为假,我打算让它返回没有单一“喜欢”啤酒的酒吧。

如您所见,我已经制定了一个规则,可以计算特定酒吧中特定饮酒者的优质啤酒。我也有一个规则,给我提供啤酒的数量。

DES> count_good_beers_for_at(A,B,C)

{                                           
  count_good_beers_for_at(janus,godthaab,2)
}
Info: 1 tuple computed.          
Run Code Online (Sandbox Code Playgroud)

如您所见,柜台没有返回经常光顾的酒吧,但有 0 个喜欢的啤酒。我计划通过使用左外连接来解决这个问题。

DES> is_happy_at(D,P,Z) :- lj(serves(P,B), count_good_beers_for_at(D,Y,Z), (Y=P))

Info: Processing:
  is_happy_at(D,P,Z) :-
    lj(serves(P,B),count_good_beers_for_at(D,Y,Z),Y = P).
{                                           
  is_happy_at(janus,godthaab,2),
  is_happy_at(null,goldenekrone,null),
  is_happy_at(null,schlosskeller,null)
}
Info: …
Run Code Online (Sandbox Code Playgroud)

database logic prolog datalog

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

为什么 Haskell PVP 将新函数描述为非破坏性的?

假设我有以下代码

module A where

  x :: Int 
  x = 5

module Main where

  import A
  import Lib
  
  main :: IO ()
  main = print (x + y)
Run Code Online (Sandbox Code Playgroud)

以及在外部库中

module Lib where

  y :: Int
  y = 10
Run Code Online (Sandbox Code Playgroud)

一切都很好,该库的版本为 v0.1.0.0,我将其包含在边界中mylib == 0.1.*

现在,该名称x :: Int已添加到 MyLib 的导出列表中,并且新版本已发布。它的版本是 v0.1.1.0,如PVP 流程图所示:

在这种情况下,只有[...]函数[...]被添加到库的导出接口中。不会导致破损 [...]

这个说法如何正确呢?当然我的代码不再编译。因为它不知道x从哪里拉。

versioning compatibility haskell

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