39 Star 111 Fork 22

方舟编译器孵化器 / maple_engine

 / 详情

ninja: error: loading 'build.ninja': No such file or directory

已完成
创建于  
2020-07-22 20:20

ninja 已被脚本正确从github下载,但在编译 maple_engine 时 出现这个。
输入图片说明

评论 (40)

xkeyC 创建了任务
展开全部操作日志

正在使用ubuntu 16.04 重试...

xkeyC 任务状态待办的 修改为已完成
xkeyC 任务状态已完成 修改为待办的

ubuntu18也会有奇怪的问题,所以,只有ubuntu16才能正常编译

很高兴您在Ubuntu 16.04上能成功地编译和运行。没有在Ubuntu 18.04上遇到您提到的问题。

建议执行Readme.md中的命令安装一下依赖的软件包试一下。

sudo apt install -y build-essential clang cmake libffi-dev libelf-dev libunwind-dev \
    libssl-dev openjdk-8-jdk-headless unzip python-minimal python3

@Maple_YZhang 这个是执行过的😂

从您贴的信息看,如下的Python命令运行出错。也许Python环境有问题?
输入图片说明

@Maple_YZhang 包管理自动安装的,具体就不清楚了。

@Maple_YZhang 我在进行简单的性能测试, import java.util.Random 无法使用,运行时报错:
Exception in thread "main" java.lang.ExceptionInInitializerError

从您贴的信息看,如下的Python命令运行出错。也许Python环境有问题?
输入图片说明

@Maple_YZhang 另一个问题,方舟编译器是否做了内存占用限制?我在进行性能测试时,方舟编译器编译的程序运行时内存占用最高只有270M左右(并且非常慢慢的完成测试),而openjdk达到了1G左右,并且瞬间完成测试。

@Maple_YZhang 我在进行简单的性能测试, import java.util.Random 无法使用,运行时报错:
Exception in thread "main" java.lang.ExceptionInInitializerError

@MSGXingKong 谢谢,会尽快修复。

@Maple_YZhang 另一个问题,方舟编译器是否做了内存占用限制?我在进行性能测试时,方舟编译器编译的程序运行时内存占用最高只有270M左右(并且非常慢慢的完成测试),而openjdk达到了1G左右,并且瞬间完成测试。

@MSGXingKong 没有内存占用限制,但会根据程序的需要去占用内存。

@Maple_YZhang 那么方舟编译后的程序运行效率有提升嘛?
我做了个简单的测试,生成一亿个1,并对其进行排序,方舟编译的程序内存溢出了。

@MSGXingKong 没有内存占用限制,但会根据程序的需要去占用内存。

@Maple_YZhang
看这里惹:
https://clinux.co/d/95/5
楼主的测试……

@Maple_YZhang 这是文章链接

@MSGXingKong
且慢,为什么java显示是10002,而方舟显示是1000002?

@MSGXingKong
且慢,为什么java显示是10002,而方舟显示是1000002?

@wconly 代码失误,这是新结果
输入图片说明

斐波那契数列, 到35就变得非常慢了, 是不是限制了栈。。。

@wconly 代码失误,这是新结果
输入图片说明

@MSGXingKong
随便瞎说几句自己的想法,不代表社区看法惹……
官方示例都跑了一遍,就是反射有点儿问题。我用的是虚拟机,就不折腾有关性能的东东惹。但是,另外还有个原因,这个所谓的引擎,我的理解就是一种以解释方式来跑代码的,相对java的虚拟机而言,它还要额外进行rc有关操作,而且你这个示例还创建了那么多对象,rc的过程想必不会少。所以这个性能可以预想惹……
这个引擎目前给出的原因,一个是可以让产物跑起来,往远了说感觉就跟flutter差不多,用解释的方式进行开发,因为可以动态调试,实际发布时直接aot。而目前给出的也就是这个解释方式所需要引擎。
至于您反映的这个问题,我觉得可以偷师一下苹果平台……
当然,上面都是我猜的,具体还要等开源惹……

@wconly 我简单的测试了反射,没有问题。

@wconly 我简单的测试了反射,没有问题。

@MSGXingKong
奇了葩了,人品问题?气cry……
不知道你的反射测试是怎么做的,我是这样做的:
#I1OMOC:编译openjdk时可能碰到的两个小patch#note_2873229
有时间试一试?

@wconly

调用方法是没问题的,其他的没细测

public class Main {
    public static void main(String[] args) throws ClassNotFoundException, IllegalAccessException, InstantiationException {
        Class c = Class.forName("F");
        F f = (F) c.newInstance();
        f.p();
    }
}

class F {
    void p(){
        System.out.println("ok");
    }
}

@wconly
调用方法是没问题的,其他的没细测

public class Main {
public static void main(String[] args) throws ClassNotFoundException, IllegalAccessException, InstantiationException {
Class c = Class.forName("F");
F f = (F) c.newInstance();
f.p();
}
}
class F {
void p(){
System.out.println("ok");
}
}

@MSGXingKong
先Class.forName("java.lang.String")
后getDeclaredMethods()
然后爆炸
你有时间请试一试看跑的通吗?

@wconly

        Class c = Class.forName("java.lang.String");
        System.out.println(c.getDeclaredMethods().length);

输入图片说明

@wconly

Class c = Class.forName("java.lang.String");
System.out.println(c.getDeclaredMethods().length);

输入图片说明

@MSGXingKong
从别的地方偷来的……
javac、java没问题……

import java.lang.reflect.*;
public class Main {
public static void main(String args[]) {
try {
Class c = Class.forName("java.lang.String");
Method m[] = c.getDeclaredMethods();
for (int i = 0; i < m.length; i++)
System.out.println(m[i].toString());
}
catch (Throwable e) {
System.err.println(e);
}
}
}

失败。
输入图片说明
@wconly

@MSGXingKong @Maple_YZhang
对吧,那问题基本就锁定在循环下的
System.out.println(m[i].toString());
这一句惹……
所以我当时以为反射是有问题的,这样来看,问题似乎不在反射本身惹?

@wconly 看起来是的。

@MSGXingKong @Maple_YZhang
已经爱负责人员惹,让他们来看一看吧
至少你说的是对的,反射这块基本没问题惹(我当时看爆炸了就没再细找问题,真是不努力惹……气cry)
但是根据这个示例以及你引用java.util.Random的情况来看,似乎是调用jdk api的时候还是有点儿问题……

@MSGXingKong @Maple_YZhang
已经爱负责人员惹,让他们来看一看吧
至少你说的是对的,反射这块基本没问题惹(我当时看爆炸了就没再细找问题,真是不努力惹……气cry)
但是根据这个示例以及你引用java.util.Random的情况来看,似乎是调用jdk api的时候还是有点儿问题……

@wconly @MSGXingKong 的确是这样,问题出在m[i].toString()

@wconly @MSGXingKong 的确是这样,问题出在m[i].toString()

@Maple_YZhang
加油惹~
另外等一个lambda,试了一个简单的示例,发现还是有问题(当然也许现在还不支持),问题是程序没有爆掉,但是并不显示任何内容惹:

public class lambda {
	public static void main(String args[]) {
		new Thread(() -> System.out.println(9527)).start();

		try {
			Thread.sleep(6000);
		} catch (InterruptedException e) {
			System.out.println("INTERRUPTED_MESSAGE");
		}
	}
}

@Maple_YZhang Random、HttpURLConnection、Scanner 等等,都挂掉了😂

@Maple_YZhang Random、HttpURLConnection、Scanner 等等,都挂掉了😂

@MSGXingKong @wconly 都看到了,尽快修复。谢谢提供这些失败用例!

@MSGXingKong
随便瞎说几句自己的想法,不代表社区看法惹……
官方示例都跑了一遍,就是反射有点儿问题。我用的是虚拟机,就不折腾有关性能的东东惹。但是,另外还有个原因,这个所谓的引擎,我的理解就是一种以解释方式来跑代码的,相对java的虚拟机而言,它还要额外进行rc有关操作,而且你这个示例还创建了那么多对象,rc的过程想必不会少。所以这个性能可以预想惹……
这个引擎目前给出的原因,一个是可以让产物跑起来,往远了说感觉就跟flutter差不多,用解释的方式进行开发,因为可以动态调试,实际发布时直接aot。而目前给出的也就是这个解释方式所需要引擎。
至于您反映的这个问题,我觉得可以偷师一下苹果平台……
当然,上面都是我猜的,具体还要等开源惹……

@wconly 分析基本是正确的。

斐波那契数列, 到35就变得非常慢了, 是不是限制了栈。。。

@东方星痕 没有限制栈,是运行时的性能问题。参见分析

另外等一个lambda,试了一个简单的示例,发现还是有问题(当然也许现在还不支持),问题是程序没有爆掉,但是并不显示任何内容惹:

@wconly 你从mpl文件可以发现lambda函数没被调用。这是因为前端jbc2mpl还开发中,肯定会支持的。

@luoyin @杨欢

@wconly 你从mpl文件可以发现lambda函数没被调用。这是因为前端jbc2mpl还开发中,肯定会支持的。
@luoyin @杨欢

@HuWen
您好,之前多有得罪,不过不那么说的话,openjdk的那几个指令不知何时才能支持惹,嘻嘻~[滑稽]

  1. 另外,看了当前mapleall与maple_engine的开放情况,感觉是可以直接跑二进制形式的?这样就可以大致测一下效率惹?(虽然可能一些优化还未全开)
  2. 但是修改mapleall采用x86后端的过程中,发些许多代码都需要调整,有时候调用的头文件及函数名都差几个字符,看起来是有过多次调整,完整度也对的上,但就是需要做相应的调整,让它能顺利跑起来,不知实际上x86后端开源情况如何?
  3. 另外,maple_engine几日没有更新了,调用java sdk api的问题依然没有解决,追了追,似乎是libffi那里调用出了问题?开源不完整,用gdb追起来太麻烦了,希望能立即更正这一点。(内部有完整代码,调试起来似乎没有什么太大难度,但是外面跑不起来风言风语就太多了……)
  4. maple_engine在内部是否也是这样逐一解释maple ir的,用libffi去__engine__shim?这样似乎说不通?因为速度太慢惹……换句话说,内部是否像方舟环境一样有maple_engine的完整实现,而不是这样用些额外组件临时搭建起的不成熟的东东?
  5. 国外似乎也有一些类似叫maple engine的项目,这样会不会有什么问题?

望尽快解决java sdk api调用过程中的种种问题惹……

@HuWen
您好,之前多有得罪,不过不那么说的话,openjdk的那几个指令不知何时才能支持惹,嘻嘻~[滑稽]

  1. 另外,看了当前mapleall与maple_engine的开放情况,感觉是可以直接跑二进制形式的?这样就可以大致测一下效率惹?(虽然可能一些优化还未全开)
  2. 但是修改mapleall采用x86后端的过程中,发些许多代码都需要调整,有时候调用的头文件及函数名都差几个字符,看起来是有过多次调整,完整度也对的上,但就是需要做相应的调整,让它能顺利跑起来,不知实际上x86后端开源情况如何?
  3. 另外,maple_engine几日没有更新了,调用java sdk api的问题依然没有解决,追了追,似乎是libffi那里调用出了问题?开源不完整,用gdb追起来太麻烦了,希望能立即更正这一点。(内部有完整代码,调试起来似乎没有什么太大难度,但是外面跑不起来风言风语就太多了……)
  4. maple_engine在内部是否也是这样逐一解释maple ir的,用libffi去__engine__shim?这样似乎说不通?因为速度太慢惹……换句话说,内部是否像方舟环境一样有maple_engine的完整实现,而不是这样用些额外组件临时搭建起的不成熟的东东?
  5. 国外似乎也有一些类似叫maple engine的项目,这样会不会有什么问题?
    望尽快解决java sdk api调用过程中的种种问题惹……

@wconly 八月四日会有更新推出。OpenArkCompiler支持AArch64指令生成,而Maple引擎X86_64下目前只支持Maple IR指令,注重多语言执行环境的支持。Maple debugger会在几周后推出,便于调试。最后一个问题,要由律师确定。

@HuWen
您好,之前多有得罪,不过不那么说的话,openjdk的那几个指令不知何时才能支持惹,嘻嘻~[滑稽]

  1. 另外,看了当前mapleall与maple_engine的开放情况,感觉是可以直接跑二进制形式的?这样就可以大致测一下效率惹?(虽然可能一些优化还未全开)
  2. 但是修改mapleall采用x86后端的过程中,发些许多代码都需要调整,有时候调用的头文件及函数名都差几个字符,看起来是有过多次调整,完整度也对的上,但就是需要做相应的调整,让它能顺利跑起来,不知实际上x86后端开源情况如何?
  3. 另外,maple_engine几日没有更新了,调用java sdk api的问题依然没有解决,追了追,似乎是libffi那里调用出了问题?开源不完整,用gdb追起来太麻烦了,希望能立即更正这一点。(内部有完整代码,调试起来似乎没有什么太大难度,但是外面跑不起来风言风语就太多了……)
  4. maple_engine在内部是否也是这样逐一解释maple ir的,用libffi去__engine__shim?这样似乎说不通?因为速度太慢惹……换句话说,内部是否像方舟环境一样有maple_engine的完整实现,而不是这样用些额外组件临时搭建起的不成熟的东东?
  5. 国外似乎也有一些类似叫maple engine的项目,这样会不会有什么问题?
    望尽快解决java sdk api调用过程中的种种问题惹……

@wconly github上面我们有个mirror,你可以注意一下是不是我们的mirror.

@wconly @MSGXingKong 的确是这样,问题出在m[i].toString()

@wconly @MSGXingKong 上面提到的问题已经在今天的更新中解决了。参见8月3号更新。有两个遗留问题,lambda的支持和java.util.Scanner.nextInt()。

jbc2mpl缺少lambda的支持会造成Http Request用例的失败。 @luoyin @杨欢

Maple_YZhang 任务状态待办的 修改为已完成

登录 后才可以发表评论

状态
负责人
里程碑
Pull Requests
关联的 Pull Requests 被合并后可能会关闭此 issue
分支
开始日期   -   截止日期
-
置顶选项
优先级
参与者(6)
1984634 xkeyc 1616635127 5282271 wconly 1596507560 58234 ystyle 1578915778 5275110 hu   wen 1581627339 5274908 ye handong 1578983635
C++
1
https://gitee.com/openarkcompiler-incubator/maple_engine.git
git@gitee.com:openarkcompiler-incubator/maple_engine.git
openarkcompiler-incubator
maple_engine
maple_engine

搜索帮助

53164aa7 5694891 3bd8fe86 5694891