如果我以后和 imKiva 的 KiVM(JVM) 有时间实现自己的编程语言运行时了,华为这种.... 我觉得还是太令人迷惑了,都是上个世纪的人么?
DalvikVM 在 Android L 从 Dalvik 模式到 ART 模式,就引入了 AOT 编译技术,你说不能编译优化?AOT 的好处就是敢做耗时的分析优化,你说 ART 模式是模板解释器,说它和姜饼时代之前没有 JIT 支持的 Dalvik 一样,说它不敢做代码优化,请问,我们手机上的 dex2oat 程序是做什么的?oat 又是什么文件?为啥软件包的安装时间变长了?让用户白等的?
要这么说,还不如和 LLVM 之类的优化编译框架扯点关系,然后这种扯 B 污蔑 Google 技术团队的消息就不要发,省得被内行人喷。
更好的策略我信,但这么大白天的糊弄人是真当学 CS 的傻逼?还是觉得 Android 开发者比较好骗?
DalvikVM 在 Android L 从 Dalvik 模式到 ART 模式,就引入了 AOT 编译技术,你说不能编译优化?AOT 的好处就是敢做耗时的分析优化,你说 ART 模式是模板解释器,说它和姜饼时代之前没有 JIT 支持的 Dalvik 一样,说它不敢做代码优化,请问,我们手机上的 dex2oat 程序是做什么的?oat 又是什么文件?为啥软件包的安装时间变长了?让用户白等的?
要这么说,还不如和 LLVM 之类的优化编译框架扯点关系,然后这种扯 B 污蔑 Google 技术团队的消息就不要发,省得被内行人喷。
更好的策略我信,但这么大白天的糊弄人是真当学 CS 的傻逼?还是觉得 Android 开发者比较好骗?
GitHub
imkiva/KiVM
🌟This is a pure C++ implementation of Java Virtual Machine (only Java 8 is supported). Inspired by Hotspot In Action. - imkiva/KiVM
duangsuse::Echo
如果我以后和 imKiva 的 KiVM(JVM) 有时间实现自己的编程语言运行时了,华为这种.... 我觉得还是太令人迷惑了,都是上个世纪的人么? DalvikVM 在 Android L 从 Dalvik 模式到 ART 模式,就引入了 AOT 编译技术,你说不能编译优化?AOT 的好处就是敢做耗时的分析优化,你说 ART 模式是模板解释器,说它和姜饼时代之前没有 JIT 支持的 Dalvik 一样,说它不敢做代码优化,请问,我们手机上的 dex2oat 程序是做什么的?oat 又是什么文件?为啥软…
华为公布的方舟编译器到底对安卓软件生态会有多大影响? - weishu的回答 - 知乎
https://www.zhihu.com/question/319688949/answer/648358786
我觉得华为应该研发出一种新『HuaMIPS』架构,推出限量款芯片,这样就不管目标机器平台,可以直接编译成机器码到处发布,直接执行了 😸
呵呵呵。
https://www.zhihu.com/question/319688949/answer/648358786
我觉得华为应该研发出一种新『HuaMIPS』架构,推出限量款芯片,这样就不管目标机器平台,可以直接编译成机器码到处发布,直接执行了 😸
呵呵呵。
Zhihu
华为公布的方舟编译器到底对安卓软件生态会有多大影响? - 知乎
看到问题下许多答案有误导,忍不住出来解释一下。Android 平台的绝大多数应用是使用 Java 语言写的,CPU …
duangsuse::Echo
华为公布的方舟编译器到底对安卓软件生态会有多大影响? - weishu的回答 - 知乎 https://www.zhihu.com/question/319688949/answer/648358786 我觉得华为应该研发出一种新『HuaMIPS』架构,推出限量款芯片,这样就不管目标机器平台,可以直接编译成机器码到处发布,直接执行了 😸 呵呵呵。
说到底,某些 #Android 开发者还是真对性能的误区太大了,以为『It's fast』就是一切
一般来讲,真正需要高性能计算的部分,比如 canvas, opengl,都是无 GC,C/C++ 之类的实现的,可能连 shared_ptr Rc 智能指针都舍不得用
C、C++ 的编译 native code 实现,GCC、LLVM 都是经过的编译器框架,足以生成让人满意的优化代码
而你们写的程序逻辑,别往自己脸上贴金了,对所谓的性能,都
真正有需求的敏感点,必要的时候,很多人都直接用 JNI 实现或者并行化了(当然 JNI 本身调用检查也有不少开销,所以一般是大批量任务和内存敏感任务),只有傻瓜才觉得应用逻辑的『性能』提升可以改变『生态环境』
至于应用使用 JVM 平台函数库的性能,比如说,人工神经网络,再文本解析器,你当真以为普通的编译优化能对这个『一次一字符』的东西有啥,客户端要绝对速度,是不是给闪电侠用的手机?为啥不开发个 NeonJSON 出来?
我到是很想看看,华为的工程师如何弄出可以汇编出 ARM, x86 等一大堆流行支持架构都能解释『超性能机器代码』的汇编器,或者 dirty 一点,把安装包和更新补丁再加上个几兆 😉
如果真的有这样的黑科技,我真的要为蛤为五体投地啊。可怜也是做电子电路出生的,居然现在弄这种事情?
后面的知乎回答也说了,猾为的优化,主要还是一些『非高级分析编译优化』领域的事情,有一个『IO 密集模式切换优化』
至于 GPU Turbo,我来看就是 GPGPU 并行化技术,如果配合修改算法的话自然有很大提升,当真自大了?不知道这并不是首创?论文在哪里?
其他的优化,诸如视图缓存什么的,和编译原理没太大关系,主要还是 runtime
绘制策略、系统服务架构、异步、事件 IO
说到底还是系统图形动画架构的事情,和编译什么方舟啊圆粥的有啥关系?
什么 IO 计算分析,也不能说是多么高大上的程序分析,可以看看这个
猾为这瞎说能力,我也是佩服了,Android 业界没谁了呃。 🤪
一般来讲,真正需要高性能计算的部分,比如 canvas, opengl,都是无 GC,C/C++ 之类的实现的,可能连 shared_ptr Rc 智能指针都舍不得用
C、C++ 的编译 native code 实现,GCC、LLVM 都是经过的编译器框架,足以生成让人满意的优化代码
而你们写的程序逻辑,别往自己脸上贴金了,对所谓的性能,都
没啥太大需求。真正有需求的敏感点,必要的时候,很多人都直接用 JNI 实现或者并行化了(当然 JNI 本身调用检查也有不少开销,所以一般是大批量任务和内存敏感任务),只有傻瓜才觉得应用逻辑的『性能』提升可以改变『生态环境』
至于应用使用 JVM 平台函数库的性能,比如说,人工神经网络,再文本解析器,你当真以为普通的编译优化能对这个『一次一字符』的东西有啥,客户端要绝对速度,是不是给闪电侠用的手机?为啥不开发个 NeonJSON 出来?
我到是很想看看,华为的工程师如何弄出可以汇编出 ARM, x86 等一大堆流行支持架构都能解释『超性能机器代码』的汇编器,或者 dirty 一点,把安装包和更新补丁再加上个几兆 😉
如果真的有这样的黑科技,我真的要为蛤为五体投地啊。可怜也是做电子电路出生的,居然现在弄这种事情?
后面的知乎回答也说了,猾为的优化,主要还是一些『非高级分析编译优化』领域的事情,有一个『IO 密集模式切换优化』
至于 GPU Turbo,我来看就是 GPGPU 并行化技术,如果配合修改算法的话自然有很大提升,当真自大了?不知道这并不是首创?论文在哪里?
其他的优化,诸如视图缓存什么的,和编译原理没太大关系,主要还是 runtime
绘制策略、系统服务架构、异步、事件 IO
说到底还是系统图形动画架构的事情,和编译什么方舟啊圆粥的有啥关系?
什么 IO 计算分析,也不能说是多么高大上的程序分析,可以看看这个
猾为这瞎说能力,我也是佩服了,Android 业界没谁了呃。 🤪
duangsuse::Echo
说到底,某些 #Android 开发者还是真对性能的误区太大了,以为『It's fast』就是一切 一般来讲,真正需要高性能计算的部分,比如 canvas, opengl,都是无 GC,C/C++ 之类的实现的,可能连 shared_ptr Rc 智能指针都舍不得用 C、C++ 的编译 native code 实现,GCC、LLVM 都是经过的编译器框架,足以生成让人满意的优化代码 而你们写的程序逻辑,别往自己脸上贴金了,对所谓的性能,都没啥太大需求。 真正有需求的敏感点,必要的时候,很多人都直接用…
#android #huawei 华为公布的方舟编译器到底对安卓软件生态会有多大影响? - 张铎的回答 - 知乎
https://www.zhihu.com/question/319688949/answer/648628733
看到一个技术向点的回复。
题外话。
最后一张图里,把自己和红旗 Linux 并列,真的是不怕黑啊。
还有,
国内编译器工程领域是空白?呵呵。
https://www.zhihu.com/question/319688949/answer/648628733
看到一个技术向点的回复。
题外话。
最后一张图里,把自己和红旗 Linux 并列,真的是不怕黑啊。
还有,
国内编译器工程领域是空白?呵呵。
Zhihu
华为公布的方舟编译器到底对安卓软件生态会有多大影响? - 知乎
4.27更新华为这几页解释真是。。。感觉就是把所有人都当小白,又沸腾了。。。不过反正8月就开源了,到时…
duangsuse::Echo
说到底,某些 #Android 开发者还是真对性能的误区太大了,以为『It's fast』就是一切 一般来讲,真正需要高性能计算的部分,比如 canvas, opengl,都是无 GC,C/C++ 之类的实现的,可能连 shared_ptr Rc 智能指针都舍不得用 C、C++ 的编译 native code 实现,GCC、LLVM 都是经过的编译器框架,足以生成让人满意的优化代码 而你们写的程序逻辑,别往自己脸上贴金了,对所谓的性能,都没啥太大需求。 真正有需求的敏感点,必要的时候,很多人都直接用…
华为公布的方舟编译器到底对安卓软件生态会有多大影响? - 黎明灰烬的回答 - 知乎
https://www.zhihu.com/question/319688949/answer/648383808
🤔 看来我误会了所谓生态的问题,原来是这样... 那猾为... 怎么说也只能是『自家消化』了emmmm
不同的『软件包代码格式』还真是不利于统一,甚至有点分裂
反正期待猾为的后话。
https://www.zhihu.com/question/319688949/answer/648383808
🤔 看来我误会了所谓生态的问题,原来是这样... 那猾为... 怎么说也只能是『自家消化』了emmmm
不同的『软件包代码格式』还真是不利于统一,甚至有点分裂
反正期待猾为的后话。
Zhihu
华为公布的方舟编译器到底对安卓软件生态会有多大影响? - 知乎
该问题的是对生态的影响,技术相关内容已转移到如何评价华为的方舟编译器?两周(4月12日-4月26日)收集…
你在编程的过程中会通过做出一点东西而觉得自己比周围人厉害很多从而获得爽感吗? - 兴趣使然千里冰封的回答 - 知乎
https://www.zhihu.com/question/321452784/answer/661429386 #recommended #pl #cs
https://www.zhihu.com/question/321452784/answer/661429386 #recommended #pl #cs
Zhihu
你在编程的过程中会通过做出一点东西而觉得自己比周围人厉害很多从而获得爽感吗? - 知乎
0. 有,我觉得这是生理性的,需要理性克制我很怂,只有讨论编程的时候(而且仅限全场都比我菜的情况下。…
CnEn.java
1.9 KB
#Java #algorithm 顺手写了个加空格垃圾线性算法... (跑路
duangsuse::Echo
具体的算法比较偷懒,开始的时候我用 java.io.Writer#write(int) 被扼了,这厮居然只取 int 的 low 16 bit 当一个 int 输出,后来我觉悟了,才学会 append 输出两个字符....
第一次把
全部使用 GNU nano 和 javap, Oracle JavaSE https://docs.oracle.com/javase/8/docs/api/ 完成
int 当 char 用(Unicode UTF-32),而且没有用 java.util.Scanner,而且没有莫名其妙拆分 int 为四个 byte 再去创建新 String 输出(有很严重的 GC 开销的,逃逸分析栈上分配除外),算是『轻量级逻辑』,开心(虽然本来就没有必要...)全部使用 GNU nano 和 javap, Oracle JavaSE https://docs.oracle.com/javase/8/docs/api/ 完成
Main.java
1.4 KB
#Java Java 的 Swing 控件 布局 Pane 什么的有点麻烦... Dimen 知道但是 Rigid 的一些参数不知道... 今天到这里
duangsuse::Echo
Main.java
不如 Android Container 们方便(
Android 的 Widgets 可以直接 match_parent 什么的,非常方便...
Android 的 Widgets 可以直接 match_parent 什么的,非常方便...
duangsuse::Echo
#zhihu #recommended #China #school https://www.zhihu.com/question/320967006 🤣和呵呵呵哈哈哈
#week 那么我懒得再说其他的消息了... (基本想看的看完了,欸你们更新怎么这么慢?)
现在我说说我这周的设计(和之前的 Cat 程序设计语言),并且预期能在下午六点之前完成 Parserc 包(包括 RangeMap、SourceManager、BinaryStreamProcessor 和 TextCombinator)
现在我说说我这周的设计(和之前的 Cat 程序设计语言),并且预期能在下午六点之前完成 Parserc 包(包括 RangeMap、SourceManager、BinaryStreamProcessor 和 TextCombinator)
写的太多不知从何说起...
时间还是不够啊
我不是把时间给虵(shé 🐸)了... QAQ
就先说绝句、二进制和字符流 Parser 框架 这些最令人 excited 的玩意
Parser 框架我还打算自己手写这些算法:
TrieTree (只需要 Trie,因为只是字符流嘛,Radix 树还不如自己手动 maybe 匹配解析... 虽然那样好像没有优化了)
RangeMap (到学校里想了会,发现还真不是那么简单的,滚动歌词什么的还真是可以简单点,但是 RangeMap 可以启用二分查找技术和区间碰撞检测,进而可以实现 NestedRageMap)
LinearRangeMap (线性查找的 RangeMap,充当演示,时间复杂度捉鸡)
HashRangeMap (空间开销捉鸡,而且不能给不可枚举的类型创建映射,比如 Rational Number)
BsearchRangeMap (这才是主流)
CollisionRangeMap (支持非边缘碰撞检测的 Bsearch)
FuzzyRangeMap (支持简单碰撞替换情况的 CollisionRangeMap,不过没有额外的碰撞类型计算)
NestedRangeMap (可以用来开发 IDE 的 CollisionRangeMap)
VersionizedMap (可以实现 Dynamic Scoping)
CollisionVersionizedMap (基于碰撞检测的 VersionizedMap)
HashCollisionVersionizedMap (HashMap,Hashtable 实现)
MultiMap (K -> Multiply Value 的 Map)
ReverseIndexedMultiMap (同上,还自动维护反向索引)
还有这些辅助的东西
MixedArrayLinkList (就是类似猾为那种『IO 热区检测优化』... 不过就是两种模式『Link 插入模式』『Array 访问模式』切换而已)
Pair, Range
ArrayMap
MixedArrayHashMap
RandomReadStream (完全保存输入流的所有已读字节,随时可以 mark / reset,即使输入流不让 Mark / reset)
StringView (覆盖 get, length, subsequence 方法的 CharSequence)
Cat 因为连一个解析器框架都没有不好定义语法呢(虽然已经有语法和语义稿了,足足写了五面多)
ApkPool 因为 GeekSpec 什么的技术都还没有准备好,就不能说了,不过我觉得如果有时间可以谈谈 Java 类的『行为 hashCode』是否可行
时间还是不够啊
我不是把时间给虵(shé 🐸)了... QAQ
就先说绝句、二进制和字符流 Parser 框架 这些最令人 excited 的玩意
Parser 框架我还打算自己手写这些算法:
TrieTree (只需要 Trie,因为只是字符流嘛,Radix 树还不如自己手动 maybe 匹配解析... 虽然那样好像没有优化了)
RangeMap (到学校里想了会,发现还真不是那么简单的,滚动歌词什么的还真是可以简单点,但是 RangeMap 可以启用二分查找技术和区间碰撞检测,进而可以实现 NestedRageMap)
LinearRangeMap (线性查找的 RangeMap,充当演示,时间复杂度捉鸡)
HashRangeMap (空间开销捉鸡,而且不能给不可枚举的类型创建映射,比如 Rational Number)
BsearchRangeMap (这才是主流)
CollisionRangeMap (支持非边缘碰撞检测的 Bsearch)
FuzzyRangeMap (支持简单碰撞替换情况的 CollisionRangeMap,不过没有额外的碰撞类型计算)
NestedRangeMap (可以用来开发 IDE 的 CollisionRangeMap)
VersionizedMap (可以实现 Dynamic Scoping)
CollisionVersionizedMap (基于碰撞检测的 VersionizedMap)
HashCollisionVersionizedMap (HashMap,Hashtable 实现)
MultiMap (K -> Multiply Value 的 Map)
ReverseIndexedMultiMap (同上,还自动维护反向索引)
还有这些辅助的东西
MixedArrayLinkList (就是类似猾为那种『IO 热区检测优化』... 不过就是两种模式『Link 插入模式』『Array 访问模式』切换而已)
Pair, Range
ArrayMap
MixedArrayHashMap
RandomReadStream (完全保存输入流的所有已读字节,随时可以 mark / reset,即使输入流不让 Mark / reset)
StringView (覆盖 get, length, subsequence 方法的 CharSequence)
Cat 因为连一个解析器框架都没有不好定义语法呢(虽然已经有语法和语义稿了,足足写了五面多)
ApkPool 因为 GeekSpec 什么的技术都还没有准备好,就不能说了,不过我觉得如果有时间可以谈谈 Java 类的『行为 hashCode』是否可行
duangsuse::Echo
写的太多不知从何说起... 时间还是不够啊 我不是把时间给虵(shé 🐸)了... QAQ 就先说绝句、二进制和字符流 Parser 框架 这些最令人 excited 的玩意 Parser 框架我还打算自己手写这些算法: TrieTree (只需要 Trie,因为只是字符流嘛,Radix 树还不如自己手动 maybe 匹配解析... 虽然那样好像没有优化了) RangeMap (到学校里想了会,发现还真不是那么简单的,滚动歌词什么的还真是可以简单点,但是 RangeMap 可以启用二分查找技术和区间碰撞检测,进而可以实现…
RangeMap 其实是相当有用的数据结构,前几天我亲自算过的,二分查找算法优化可以实现!所谓一个 RangeMap,有插入、删除、查询三个基本操作,就是给你一对 Comparable(Range)、以及他们的映射 Value,进行插入后,查询
i1 <= x < i2,或者说 x in range 就能获得之前的 Value比如:
val offsetLineMap = RangeMap()然后我们就可以利用 RangeMap,在 O(log2 n) 的时间复杂度(而不是 O(n) 辣鸡线性复杂度下)完成 offset -> line 的索引
val str = "abc\n123\n!@#"
var startLine = 0
for ((i, c) in str.withIndex) when (c) {
'\n' -> { offsetLineMap[startLine..i] = str[startLine..i]; startLine = i+1; }
else -> {}
}
offsetLineMap[0] -> "abc"
offsetLineMap[1] -> "abc"
offsetLineMap[2] -> "abc"
offsetLineMap[3] -> "123"
offsetLineMap[5] -> "123"
offsetLineMap[6] -> "!@#"
offsetLineMap[9] -> IndexOutOfBounds
当我们有了 NestRangeMap 这种逆天的数据结构(和普通 BsearchRangeMap 比更类似 HashMap 和 MultiMap 比)后,还能快速实现类似 IDEA 的辅助功能,给可能有嵌套结构的 AST(抽象语法树,JB 也有一个类似的 PSI,程序结构接口)加上索引这样,只要我们能拿到 TextField 的光标 offset,就能做类似
+ 拿到光标下的语法嵌套结构,能够知道语法路径在哪
这样的事情 🤪
这种功能很重要吗?的确很重要啊,如果你用线性查找这种省事但不讨好的算法,或者不考虑 Range 的碰撞,是绝对没有这种福利的
然而
NestedRangeMap 就可以实现这种操作,让人为之一振val documentOffsetNesting = NestedRangeMap()
val document = KommonMarks.parseString
("""
# H1
_a_ __b__ *c*
## H2
[name](url:)
""".trim())
/* Add pairs to nested range by document marker offsets */
documentOffsetNesting[0] => HeaderNode(children = [TextNode("H1")], n = 1)
documentOffsetNesting[5] => [DocumentSection(name = "H1", n = 1), TextDisplayNode(mode = Italic, text = "a")]
documentOffsetNesting[19] => HeaderNode(children = [TextNode("H2")], n = 2)
看到 documentOffsetNesting[5] 的返回值了吗?它能够提示某个 Markdown 元素的路径,是在哪个标签里对于
NestedRangeMap 来说,它会自动处理任何的区间碰撞(被分成五个大类型),将碰撞的部分替换成一个列表val rm = NestedRangeMap()程序员在写
rm[0...10] = "0 to 10"
rm[2..6] = "2 to 5" // "Full Overwrite" collision from index 2 to 6
rm[0] => "0 to 10"
rm[2] => ["0 to 10", "2 to 5"]
SourceManager 的时候,就只需要把某个语法结构的 startOffset 和 endOffset 记录一下就好了,NestedRangeMap 可以自动完成代码路径索引创建任务