小编JKR*_*KRT的帖子

如何通过过滤在 swift 中就地改变整数数组

可以快速过滤这样的数组:

var numbers = Array(1...1000000)
numbers = numbers.filter( { return $0 % 2 == 0  } ) 
Run Code Online (Sandbox Code Playgroud)

是否可以过滤并避免在过滤完成时发生的复制操作,例如改变原始数组。

与此伪代码类似: numbers.MutablefilterOperation({ return $0 % 2 == 0})

在 C++ 中,相当于上面 Swift 中发生的事情是:

std::vector<int> originalNumbers(1000000);
std::vector<int> newNumbers;
std::copy_if (originalNumbers.begin(), originalNumbers.end(), std::back_inserter(newNumbers), [](int i) { return i % 2 == 0 } );
Run Code Online (Sandbox Code Playgroud)

出于性能原因,我想实现的目标:

std::vector<int> originalNumbers(1000000);
auto pos = std::remove_if(originalNumbers.begin(), originalNumbers.end(), [](int x) { return x % 2 == 0; });
originalNumbers.erase(pos, originalNumbers.end());
Run Code Online (Sandbox Code Playgroud)

arrays filtering immutability swift

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

未找到 LLVM JIT 符号

我正在尝试编写一个程序来 JIT 一些代码。JITTed 代码需要回调正在运行的应用程序以获得运行时支持,并且在实现函数时找不到运行时支持符号。

我尝试遵循万花筒教程。我需要在运行时从一些 IR 生成的代码中调用函数。例如,我想从一些 llvm IR 调用这个函数。

extern "C" void* llvmNewVector() {
    return new vector<int>();
}
Run Code Online (Sandbox Code Playgroud)

根据 Kaleidscope 教程,它应该在应用程序的运行时声明为 extern“C”。在 LLVM IR 中,我创建了一个函数原型,并且正确生成了 IR(检查我正在执行的函数后没有错误)。

在我看来,需要做更多的事情才能将此函数链接到 jitted 代码,但 Kaleidoscopy 教程似乎并没有这样做。

我的问题是,由于外部符号未解析,因此抖动代码无法实现。

以下代码打印“made it here”,但没有进一步说明。

cerr << "made it here." << endl;
auto Sym = ExitOnErr(TheJIT->lookup(name));
NativeCodePtr FP = (NativeCodePtr)Sym.getAddress();
assert(FP && "Failed to find function ");
cerr << "returning jitted function " << name << endl;
return FP;
Run Code Online (Sandbox Code Playgroud)

我确信我做错了什么或错过了某些步骤,但我一直无法找到它。

我得到的输出是:

made it here.
JIT session error: Symbols not …
Run Code Online (Sandbox Code Playgroud)

c++ jit llvm

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

C - 使用ptrace和waitpid进行分段错误

对于C语言中的实验学校,我们必须编写一个进程(我们将称之为A),需要连接到另一个进程(B)并在函数中放置一个陷阱(陷阱指令是0xCC),所以我们做了但是当B输入是这个函数时,我们有一个分段错误

所以这是附加到其他进程的进程A.

#include <stdio.h>
#include <stdlib.h>
#include <sys/ptrace.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <string.h>

int main(int argc, char *argv[]) {

pid_t pidTargetProgram;
FILE *file;
int buf;
char path[50];
long long int address;


if (argc == 2) {
   fprintf(stderr, "Argument waited !\n");
   exit(1);
 }

// The second argument is the PID of the program 
pidTargetProgram = atoi(argv[1]);

// The third argument is the address of the function where we are going to put a trap
address = strtoll(argv[2], NULL, 16);

// …
Run Code Online (Sandbox Code Playgroud)

c segmentation-fault

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

返回 Julia 中字段已更改的新结构

我遇到了尝试创建一个结构的问题,该结构是特定字段已更改的现有结构的新副本。我知道这可能可以通过元编程来实现。然而,这是正确的方法还是我会重新发明轮子?

例如:

struct A
  a
  b
end

var = A(1,2)
var.b  = 4 # This means var = A(1,4)
Run Code Online (Sandbox Code Playgroud)

struct immutability julia

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

使用现代 LLVM 运行默认优化管道

我正在使用 LLVM 7,并且我llvm::Module想使用标准优化管道对其进行优化。不幸的是,没有llvm::runDefaultOptimizations我可以调用的函数。似乎有无数种方法可以优化 LLVM 中的模块。我在这个主题上的搜索发现了许多旧的/折旧的 API 和一些在我的系统上不起作用的示例。

我想以-O3尽可能少的麻烦来运行所有标准优化。我不想手动列出所有的通行证,甚至不想写一个 for 循环。我认为llvm::PassBuilder::buildModuleOptimizationPipeline可能是解决方案,但是当我尝试使用该函数时出现链接器错误,我认为这很奇怪。

c++ llvm clang llvm-c++-api

3
推荐指数
1
解决办法
1165
查看次数

在Swift中以降序创建数组的最短方法

我可以通过以下方式在Swift中按升序创建数组

let x = Array(100...999)
Run Code Online (Sandbox Code Playgroud)

但是,如果我做相反的事情,例如

let x = Array(999...100) //Does not work
Run Code Online (Sandbox Code Playgroud)

arrays initialization swift

2
推荐指数
1
解决办法
854
查看次数