最后,以Linux 创始人Linus Torvalds的名言结尾:
Talk is cheap. Show me the code!——空谈误国,实干兴邦!
原帖由 @Tobar 于 2019-8-8 18:50 发表
Posted by Xiaomi MIX 2S
前面一大堆现状介绍都是从专业文章里面抄的,后面介绍华为的就没有任何实质性的内容
1。大数据编译器动态语义分析,编译时怎么进行动态语义分析?代码都没跑起来,是不是从哪里抄来的内容混到一起了
2。内存回收引用计数法和环消除算法,前面说华为编译器不用gc,这里又说华为破天荒用了gc里面著名的算法。还真是破天荒,java早就不用引用计数法了,而是用可达性算法(天生不存在环引用问题),华为这是开倒车?
感觉这文章就是东抄西抄凑合了一大堆文字出来,然后尬吹牛逼,这绝对不是华为官方提供的文章
原帖由 @dboy99 于 2019-8-8 18:48 发表
确实是突破性的,以后华为的手机可以获得接近ios的执行效率
原帖由 流浪的枪骑兵 于 2019-8-8 19:25 发表
posted by wap, platform: 小米
有同感,涉及关键问题基本一句不提。
java代码直接变成机器码,指令集不一样怎么办?
难不成针对每套指令集做一套后端?这成本也太高了。
等源码出来再看。
原帖由 Tobar 于 2019-8-8 18:50 发表
Posted by Xiaomi MIX 2S
前面一大堆现状介绍都是从专业文章里面抄的,后面介绍华为的就没有任何实质性的内容
1。大数据编译器动态语义分析,编译时怎么进行动态语义分析?代码都没跑起来,是不是从哪里抄来的内容 ...
原帖由 @卖哥 于 2019-8-8 21:32 发表
就是每套指令集做一套后端
三段式编译
高等程序语言中间码可执行代码
不同的高等语言用对应的解释器转化成中间码
而不同的指令集用对应优化器生成最终可执行代码
方舟按照之前的描述,主要改动有两个,一个是前端支持混合编译,而且混的相当彻底,把java自带机制都砸了;
另一个就是软件开发者以中间码提交,这本身按照三段式编译来说是不难的,但是现实没那么美好,本来三段式都在本地进行,那么调试还是比较便利的,但是递交发行那后端优化就脱离源代码了呀。除非真的做到单一环境下通过即可编译到其他指令集其他优化配置不需调试,那就非常黑科技,真做到可以说解决了编译这件事的万年毒瘤,怎么吹都不过分。
原帖由 Tobar 于 2019-8-8 18:50 发表
Posted by Xiaomi MIX 2S
前面一大堆现状介绍都是从专业文章里面抄的,后面介绍华为的就没有任何实质性的内容
1。大数据编译器动态语义分析,编译时怎么进行动态语义分析?代码都没跑起来,是不是从哪里抄来的内容 ...
原帖由 流浪的枪骑兵 于 2019-8-8 19:25 发表
posted by wap, platform: 小米
有同感,涉及关键问题基本一句不提。
java代码直接变成机器码,指令集不一样怎么办?
难不成针对每套指令集做一套后端?这成本也太高了。
等源码出来再看。
原帖由 卖哥 于 2019-8-8 21:32 发表
就是每套指令集做一套后端
三段式编译
高等程序语言-中间码-可执行代码
不同的高等语言用对应的解释器转化成中间码
而不同的指令集用对应优化器生成最终可执行代码
方舟按照之前的描述,主要改动有两个, ...
原帖由 流浪的枪骑兵 于 2019-8-8 21:58 发表
posted by wap, platform: 小米
真要是这样,这工作量确实无法想象
光前端就很麻烦了,这中间代码得复杂成什么样
另外这种做法不知道会不会影响java的一些特殊特性,比如反射之类
原帖由 @masterfish 于 2019-8-9 06:49 发表
1、动态语义分析可以说是这次最有看头的地方,等开源了看大佬分析了,毕竟确实做出来了;
2、引用计数我认为远比java的暂停回收式gc好用多了,对内存的利用效率高多了。对于鸿蒙系统(方舟肯定是为鸿蒙服务的)这样的实时系统来说,几乎是唯一适合的gc模型。唯一的问题是循环引用的问题,但这其实是少数情况,可以单独处理。python是采用这样的,rust也是这种。
3、方舟我认为最牛逼的还是对多语言的融合,这个我觉得不会是完全创新,应该有llvm的底子,但是能够融合java、c/c++等,抛开傻逼透顶的jni,可以说功德无量了,同样,等开源了看大佬的分析。
原帖由 @yfl2 于 2019-8-9 11:46 发表
看不懂,引用计数是标记垃圾的方法,和暂停回收有啥关系?
原帖由 @masterfish 于 2019-8-9 12:37 发表
引用计数和标记是两种不同的垃圾回收机制。
引用计数是如果一个变量一个分配的内存空间,会给一个计数器+1,当另一个变量也指向这块内存,就计数器继续+1,如果这些指向内存的变量指向其他位置,或者被删除了,那么就计数器1,计数器变为0,就表示没有任何变量指向这块内存,那么就可以删除这块内存了。这整个过程不需要停下任何其他程序,资源损耗非常小。
引用计数的问题,是如果有两个指针互相循环引用,那末就会出现永远不会减到0的情况,造成内存泄露。
内存标记是java采用的垃圾回收机制,就是后台独立运行一个监控程序,监控所有的申请的内存是否被变量引用,一旦没有被引用,就证明这块内存可以回收,但是为了回收内存,监控程序会暂停所有的程序,然后将内存进行回收顺便处理碎片,所以会有卡顿,但不会有循环引用无法回收的问题。
现在python这类的语言,主要采用的是二者的综合,99%的内存是采用引用计数进行回收,剩下极少数循环引用的设置监控程序来处理。
原帖由 masterfish 于 2019-8-9 12:37 发表
posted by wap, platform: Android
引用计数和标记是两种不同的垃圾回收机制。
引用计数是如果一个变量一个分配的内存空间,会给一个计数器+1,当另一个变量也指向这块内存,就计数器继续+1,如果这些指向内存的 ...
原帖由 @cj2047 于 2019-8-9 13:33 发表
???
引用计数法和可达性分析都只是判断对象是否可以回收的办法, 只能算垃圾回收机制中的一部分内容
原帖由 yfl2 于 2019-8-9 13:10 发表
posted by wap, platform: Samsung
你不要瞎说好么……
整天复制别人的装懂也是够了……
本帖最后由 yfl2 于 2019-8-9 13:11 通过手机版编辑
原帖由 @masterfish 于 2019-8-9 13:38 发表
你有什么料露出来看看?
原帖由 hourousha 于 2019-8-9 15:42 发表
其实没多少意料之外的东西,多语言编译成IR再通过不同后端对应不同平台,AOT编译同时支持部分动态语义,独立的垃圾回收器这些,其实都不是新鲜的东西。就好像几年前u3d的那个IL2CPP就是个类似的东西。
原帖由 @momou 于 2019-8-9 17:38 发表
不要理他,一个不学无术的喷子troll
原帖由 @masterfish 于 2019-8-9 12:37 发表
posted by wap, platform: Android
引用计数和标记是两种不同的垃圾回收机制。
引用计数是如果一个变量一个分配的内存空间,会给一个计数器+1,当另一个变量也指向这块内存,就......
欢迎光临 TGFC Lifestyle (http://tgfcer.com/) | Powered by Discuz! 6.0.0 |