Size: a a a

2019 May 06

I

Ilia in graalvm_ru
грааль
источник

I

Ilia in graalvm_ru
элементарно прога на c++ принимает два целочисленных значения и мне нужно настроить эту передачу в java проге
источник

OS

Oleg Shelajev in graalvm_ru
polyglot.c
int add(int a, int b) {
   return a + b;
}


Polyglot.java
import java.io.*;
import org.graalvm.polyglot.*;

class Polyglot {
   public static void main(String[] args) throws IOException {
       Context polyglot = Context.newBuilder().
                          allowAllAccess(true).build();
       File file = new File("polyglot.bc");
       Source source = Source.newBuilder("llvm", file).build();
       Value cpart = polyglot.eval(source);
       Value result = cpart.getMember("add").execute(40, 2);
       System.out.println(result.asInt());
   }
}


clang -g -O1 -c -emit-llvm polyglot.c
javac Polyglot.java
java Polyglot
источник

OS

Oleg Shelajev in graalvm_ru
или мы не про это?
источник
2019 May 07

λ

λoλdog in graalvm_ru
@shelajevoleg слушай) а че так все плохо ?
WARNING: Error processing log entry: java.lang.NullPointerException: {caller_class=scala.reflect.runtime.ReflectionUtils$EnclosedInMethod$$anonfun$$lessinit$greater$1, result=null, function=getEnclosingMethod, tracer=reflect}
источник

λ

λoλdog in graalvm_ru
эт в  native-image-configure process-trace
источник

I

Ilia in graalvm_ru
Oleg Shelajev
polyglot.c
int add(int a, int b) {
   return a + b;
}


Polyglot.java
import java.io.*;
import org.graalvm.polyglot.*;

class Polyglot {
   public static void main(String[] args) throws IOException {
       Context polyglot = Context.newBuilder().
                          allowAllAccess(true).build();
       File file = new File("polyglot.bc");
       Source source = Source.newBuilder("llvm", file).build();
       Value cpart = polyglot.eval(source);
       Value result = cpart.getMember("add").execute(40, 2);
       System.out.println(result.asInt());
   }
}


clang -g -O1 -c -emit-llvm polyglot.c
javac Polyglot.java
java Polyglot
примерно про это
источник

I

Ilia in graalvm_ru
Oleg Shelajev
или мы не про это?
но есть вот такой код
источник

I

Ilia in graalvm_ru
#include <iostream>
#include <string>
#include <random>

using namespace std;

void generate_task(mt19937 gen, int n);

int int_pow(int x, int m);

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

   long long rand_seed = stoll(argv[1]);
 
   mt19937 gen(rand_seed);

   int n;
   if (argc < 3) {
       
       uniform_int_distribution<int> n_dist(3, 5);
       n = n_dist(gen);
   } else {
       n = stoi(argv[2]);
   
       if (n < 1 || n > 8)
           exit(1);
   }

   generate_task(gen, n);

   return 0;
}

void generate_task(mt19937 gen, int n) {

   int min_number = int_pow(10, n - 1);
   int max_number = int_pow(10, n) - 1;
   uniform_int_distribution<int> num_dist(min_number, max_number);

   int a;
   int b;
   int a_plus_b;

   for (;;) {
       a = num_dist(gen);
       b = num_dist(gen);
       a_plus_b = a + b;

       if (a_plus_b > max_number)
           continue;

       break;
   }

   cout << "Сложите $" << a << "$ и $" << b << "$." << endl;
   cout << "% == разделитель условия и ответа ==" << endl;
   cout << "Ответ: $" << a << " + " << b << " = " << a_plus_b << "$.";
}

int int_pow(int x, int m) {
   int result = 1;
   for (int i = 0; i < m; i++)
       result *= x;
   return result;
}
источник

I

Ilia in graalvm_ru
и getMember("int_pow") возвращает null
источник

I

Ilia in graalvm_ru
а в метод main передать параметром указатель на массив char с помощью полиглота вроде невозможно
источник

I

Ilia in graalvm_ru
для комплияции байткода использую такую команду clang++ -g -O1 -c -emit-llvm -stdlib=libc++ main.cpp
источник

I

Ilia in graalvm_ru
public class Main {

   public static void main(String[] args) throws IOException {

       Context polyglot = Context.newBuilder()
               .allowAllAccess(true)
               .allowIO(true)
               .build();

       File file = new File("main.bc");
       Source source = Source.newBuilder("llvm", file).build();
       Value cpart = polyglot.eval(source);        cpart.getMember("int_pow").execute(1, 2);

   }
}
источник

RU

Roman Ushakov in graalvm_ru
за что ты нас тут мучаешь кодом, есть же куча всяких pastebin'ов куда это выложить можно, ну
источник

I

Ilia in graalvm_ru
извините :(
источник

OS

Oleg Shelajev in graalvm_ru
λoλdog
@shelajevoleg слушай) а че так все плохо ?
WARNING: Error processing log entry: java.lang.NullPointerException: {caller_class=scala.reflect.runtime.ReflectionUtils$EnclosedInMethod$$anonfun$$lessinit$greater$1, result=null, function=getEnclosingMethod, tracer=reflect}
Не видел, сложи в гитаб пожалуйста?
источник

OS

Oleg Shelajev in graalvm_ru
А кланг++ имена не портит как-нибудь?
источник

I

Ilia in graalvm_ru
Oleg Shelajev
А кланг++ имена не портит как-нибудь?
есть такое предположение
источник

I

Ilia in graalvm_ru
через просто сlang та же лажа
источник

I

Ilia in graalvm_ru
роняет нулпоинтер на строке getMember
источник