首页
学习
活动
专区
圈层
工具
发布
    • 综合排序
    • 最热优先
    • 最新优先
    时间不限
  • 来自专栏Android 开发者

    Kotlin Vocabulary | 枚举和 R8 编译器

    我会讨论一些和 when 语句相关的潜在开销,以及 Android R8 编译器是如何优化您的应用并减少这些开销的。 编译器 首先,我们讲一讲 D8 和 R8。 事实上,有三个编译器参与了 Android 应用中 Kotlin 代码的编译。 1. Kotlin 编译器 Kotlin 编译器将会首先运行,它会把您写的代码转换为 Java 字节码。 D8 D8 是整个链条中的第二个编译器,它把 Java 字节码转换为 DEX 代码。到了这一步,您已经有了能够运行在 Android 中的代码。不过,您也可以选择继续使用第三个编译器 —— R8。 幸运的是,我们可以做一些事情来减少开销: 这就是 R8 发挥作用的时候了。 使用 R8 来解决问题 R8 是一个有趣的优化器,它能 "看" 到与应用相关的所有内容。 /studio/buil… Jake Wharton 的博客,详细介绍了 D8 和 R8 的工作原理,并为各种功能提供了示例,以及如何直接运行编译器、如何获得反编译的结果等 jakewharton.com

    1.3K50发布于 2020-05-08
  • 来自专栏全栈程序员必看

    pycharm如何编译程序_xc8编译器

    这是 PyCharm 的下载地址:http://www.jetbrains.com/pycharm/download/#section=windows

    1.1K10编辑于 2022-09-27
  • 来自专栏Android 开发者

    R8 编译器: 为 Kotlin 库和应用 瘦身

    不过这些信息还不足以告诉 Kotlin 编译器这些方法需要作为扩展函数在 Kotlin 代码中调用。所以,Kotlin 编译器还在类文件中增加了 kotlin.Metadata 注解。 因此,R8 会从下面两个选项中择其一: 去除元数据 保留原始的元数据 但是这两个选项都不可取。 如果去除元数据,Kotlin 编译器就再也无法正确识别扩展函数。 比如在我们的例子中,当编译类似 D8CommandBuilder().setMinApi(12) 这样的代码时,编译器就会报错,提示不存在该方法。 如果我们保留原始的 Kotlin 元数据,Kotlin 编译器会在元数据中寻找 D8CommandBuilder 的超类。 我们可以在保留规则中使用 allowobfuscation 修饰符来允许 R8 重命名类,生成 Kotlin 元数据,这样 Kotlin 编译器和 Android Studio 都会将该类视为 Kotlin

    1.3K30发布于 2020-11-16
  • 来自专栏Android 开发者

    R8 编译器: 为 Kotlin 库和应用 瘦身

    不过这些信息还不足以告诉 Kotlin 编译器这些方法需要作为扩展函数在 Kotlin 代码中调用。所以,Kotlin 编译器还在类文件中增加了 kotlin.Metadata 注解。 因此,R8 会从下面两个选项中择其一: 去除元数据 保留原始的元数据 但是这两个选项都不可取。 如果去除元数据,Kotlin 编译器就再也无法正确识别扩展函数。 比如在我们的例子中,当编译类似 D8CommandBuilder().setMinApi(12) 这样的代码时,编译器就会报错,提示不存在该方法。 如果我们保留原始的 Kotlin 元数据,Kotlin 编译器会在元数据中寻找 D8CommandBuilder 的超类。 我们可以在保留规则中使用 allowobfuscation 修饰符来允许 R8 重命名类,生成 Kotlin 元数据,这样 Kotlin 编译器和 Android Studio 都会将该类视为 Kotlin

    1.3K20编辑于 2022-09-23
  • 来自专栏向治洪

    Android D8,下一代 dex 编译器

    Google 在刚刚发布的 Android Studio 3.1 新版本中,将 D8 作为新版本开发工具默认的 Dex 编译器。那么什么是 D8 呢,D8 与之前的 Dex 打包器有何区别呢? Google 一直在致力于提升 Dex 文件的编译和运行优化工作,并开发出称之为下一代 dex 编译器:D8。其实早在 AS 3.0 Beta 版本中,Google 已经引入 D8 的测试使用。 直到当前 3.1 新版本的发布,才正式将其作为默认 Dex 编译器。 根据官方介绍,新版 D8 Dex 编译器相比之前称之为 DX 的旧版编译器,在 dex 文件的编译和使用上,至少具备这么三个优势: 1,更快的编译速度; 2,更小的文件大小; 3,更优的运行性能 如果你使用的 Android Studio 还是 3.0 版本,可以在项目的 gradle.properties 文件手动开启 D8 编译器

    94030编辑于 2022-11-30
  • 来自专栏全栈程序员必看

    java官方编译器_JAVA 编译器

    说白了,javac就是一个编译器编译器就是把一种语言规矩转换成另一种语言规矩,也就是将对人友好的语言转换成对机器友好的语言。 JIT做了些什么 JIT 是 just in time 的缩写, 也就是即时编译编译器。使用即时编译器技术,能够加速 Java 程序的执行速度。下面,就对该编译器技术做个简单的讲解。 查看编译模式 中级编译器调优 大多数情况下,优化编译器其实只是选择合适的 JVM 以及为目标主机选择合适的编译器(-cient,-server 或是-xx:+TieredCompilation)。 我们已经知道 client 编译器和 server 编译器在最终的性能上有很大的差别,很大程度上是因为编译器在编译一个特定的方法时,对于两种编译器可用的信息并不一样。 当使用 client 编译器时,JVM 启动一个编译线程,而 server 编译器有两个这样的线程。

    2.9K30编辑于 2022-09-14
  • 来自专栏安全基础

    V8优化编译器中的关键思想Sea of Nodes介绍

    编译器是每个软件工程师每天都要用到的东西。令人惊讶的是,即使是那些自认为远离代码编写的人,每天也会大量使用编译器。 简单的编译器只进行一次翻译:从源代码到机器代码。但实际上,大多数编译器至少要进行两次翻译:从源代码到抽象语法树(AST),再从 AST 到机器代码。 = cmp "<", i6, i7 i9 = if ^i6, i8}b1 -> b2, b3b2 { i10 = checkIndex ^b2, i3, i6 i11 = load ^i10, i3 -> b1 b1 { i5 = ssa:phi ^b1 i0, i12 i6 = ssa:phi ^i5, i1, i14 i7 = loadArrayLength i3 i8 = cmp "<", i6, i7 i9 = if ^i6, i8 } b1 -> b2, b3 b2 { i10 = checkIndex ^b2, i3, i6 i11 =

    1.2K00编辑于 2023-09-16
  • 来自专栏全栈程序员必看

    手机版java编译器_Java编译器

    这是一款专为学习Java的学员们打造的一款非常优质的程序验证软件,让用户能够非常快速的复制自己的程序到APP中,进行检验,能够非常快速的去验证程序的内容,能够非常及时的进行纠错,让你的代码能够及时的得到解决,用户可以随时在这里打开使用,保证自己的编辑的代码能够更加的完美,让你可以更好的精心纠错,对于初学者来说是一款非常棒的软件,让自己能够学的更好,经验能够更加的丰富。

    4.4K30编辑于 2022-09-14
  • 来自专栏Charlie's Road

    使用编译器

    Solidity存储库的一个构建目标是solc,solidity命令行编译器。 使用solc --help为您提供所有选项的解释。 编译器可以生成各种输出,范围从简单的二进制文件和汇编到抽象语法树(解析树),以估计gas使用情况。 编译器输入输出JSON描述 这些JSON格式由编译器API使用,也可以通过solc使用。 这些可能会发生变化,有些字段是可选的(如上所述),但其目的仅在于进行向后兼容的更改。 编译器API需要JSON格式的输入,并以JSON格式的输出输出编译结果。 评论当然是不允许的,这里仅用于解释目的。 UnimplementedFeatureError:编译器不支持该功能,但预计将在未来的版本中受支持。 InternalCompilerError:在编译器中触发的内部错误 - 这应报告为问题。

    1.8K20发布于 2018-10-19
  • 来自专栏m0w3n

    gcc编译器

    一、gcc编译器 编译器:把文件经过处理,生成对应的可执行文件。 //test.c文件: X86平台上面:   gcc编译器,可以在x86平台上面运行。 ARM平台上面的:   arm-linux-gcc   交叉编译器:在一个平台编译生成可执行文件,在另外一个平台运行可执行文件。   例如windows下面的keil就是一个交叉编译器。 ? } } } } main.c #include <stdio.h> #include "sequence.h" unsigned char dis_num[8] = {10,9,17,92,2,8,35,12}; int main(void) { unsigned char i; sequence(dis_num,sizeof(dis_num )); for(i=0;i<8;i++)printf("%d ",dis_num[i]); printf("\r\n"); return 0; } 处理如下: gcc

    2.6K10发布于 2020-02-28
  • 来自专栏技术点滴

    编译器构造

    源语言作为编译器的输入,必须让编译器“知道”自己的语法结构——文法,这样编译器才能正确处理语言的结构。所以编译器设计的第一步应该是源语言文法定义。 图8-1 编译器命令 编译过程如下: ? 图8-2 编译过程 执行一下,这里提前看看自己的生成的可执行文件(汇编过程以后会介绍): ? 图8-3 运行效果 如果需要查看具体的编译信息,只需要打开对应的编译开关即可。 例如词法分析信息: ? 图8-3 词法分析 语法分析信息: ? 图8-4 语法分析 语义处理信息: ? 图8-5 语义处理 符号表信息: ? 图8-6 符号表 代码生成信息: ? db "]",10     @str_8_len equ 2 section .bss 九、 总结 通过以上的叙述,比较详细的介绍了一个编译器的实现流程和具体所牵涉的细节,相信对想了解编译器内部结构的人有所帮助

    2.7K80发布于 2018-02-05
  • 来自专栏liuchengxu

    编译器入门

    编译器(compiler)就是一个翻译其他程序的程序而已。传统的编译器将源代码翻译为计算机能够理解的可执行机器代码(有一些编译器将源代码翻译为另一种编程语言。 这些编译器叫做从源码到源码的翻译器,source-to-source translators or transpilers)。LLVM 是一个广泛使用的编译器项目,它包含了许多模块化的编译器工具。 传统编译器涉及包含了三个部分: ? @printf(i8* getelementptr inbounds ([14 x i8], [14 x i8]* @.str, i32 0, i32 0), i32 %7, i32 %8, i32 % 但是,编译器会选择尽可能少地使用寄存器。 指令调度(instruction scheduling) 是对操作的重新安排,它反映了目标机器上的性能限制。 执行下面的命令将会产生一些机器码!

    2.1K10发布于 2018-08-23
  • 来自专栏sofu456

    编译器初识

    这种方式我们称之为并行(Parallel) 多核cpu和多cpu:https://www.zhihu.com/question/271821176 汇编中没有线程概念,进程是操作系统为了实现并发组织的集合结构 编译器

    84210发布于 2020-07-30
  • 来自专栏iOS底层原理

    编译器入门

    前言 最近栏主在研究ios的llvm层优化的时候发现很多的知识盲区,便一头埋进编译器的世界。 i = i + 1; if (i == 3 || i == 5) { continue; } if (i == 8) } return n * factor(n - 1); } 以上代码中的第一行的 #include “for_gcc_build.hh” 是为了利用gcc来编译该文件的,TinyC 编译器会注释掉该行 define sizeof 此文件中提供了 print 和 readint 函数,另外,将所有 C 语言支持、但 TinyC 不支持的关键词全部 define 成空名称,这样来保证 gcc 和 TinyC 编译器的效果差不多 利用 gcc 编译的目的是为了测试和对比 TinyC 编译器的编译结果。 让我们先用 gcc 编译并运行一下上面这个典型的 TinyC 源文件吧。

    1.1K00发布于 2020-12-27
  • 来自专栏数值分析与有限元编程

    Intel Fortran 编译器

    Fortran语言的编译器种类繁多,有Intel Fortran、GFortran、Simply Fortran、PGI Fortran、NAG Fortran 、Ftn95等等。 其中最有名的当属Intel公司开发的Intel Fortran编译器。 ? Intel Visual Fortran 是 Intel 公司出品的一款 Fortran 编译器。 Intel Visual Fortran 由 Microsoft PowerStation,Compaq Visual Fortran 等早期编译器发展而来,完全兼容早期编译器的扩展语法及特有使用习惯 领先的浮点数吞吐能力 运行时错误提示:数组越界,格式符错误等 处理器调度技术 SSE,SSSE,MMX等扩展指令集 改进的分支预测 Intel Visual Fortran 可以流程的运行在 Win7/Win8

    3.8K60发布于 2018-04-08
  • 来自专栏全栈程序员必看

    java实现编译器_实现一个简单的编译器

    简单的说 编译器 就是语言翻译器,它一般将高级语言翻译成更低级的语言,如 GCC 可将 C/C++ 语言翻译成可执行机器语言,Java 编译器可以将 Java 源代码翻译成 Java 虚拟机可以执行的字节码 编译器如此神奇,那么它到底是如何工作的呢?本文将简单介绍编译器的原理,并实现一个简单的编译器,使它能编译我们自定义语法格式的源代码。(文中使用的源码都已上传至 GitHub 以方便查看)。 自定义语法 为了简洁易懂,我们的编译器将只支持以下简单功能: 数据类型只支持整型,这样不需要数据类型符; 支持 加(+),减(-),乘(*), 除(/) 运算 支持函数调用 支持 extern(为了调用 编译器完成编译后,由 链接器(Linker) 将生成的目标文件链接成可执行文件,这一步并不是必须的,一些依赖于虚拟机运行的语言(如 Java,Erlang)就不需要链接。 工具简介 对应编译器工作步骤我们将使用以下工具,括号里标明了所使用的版本号: 词法分析器 制作工具,它可以根据我们定义的规则生成 词法分析器 的代码; 语法分析器 的制作工具,同样它可以根据我们定义的规则生成

    3.2K30编辑于 2022-09-08
  • 来自专栏全栈程序员必看

    gcc编译器如何使用_gcc编译器用什么语言写的

    一、gcc编译流程 GCC编译器在编译一份C代码的时候,需要经过以下4个步骤: 预处理(preprocessing):对 .c 源文件进行预处理,生成 .i 文件。 -Wall:打开编译器的警告标志,尽可能多的输出警告信息。强烈建议,编译时始终带上 -Wall 选项。 -Werror:将所有的警告当成错误处理,必须消除警告才能继续编译。  

    2.3K40编辑于 2022-09-20
  • 来自专栏Effective Objective C

    傻傻分不清:JIT编译器,解释器,AOT编译器

    编译器和解释器 编译器和解释器的区别在于是否编译和执行过程是否是同时进行。 JIT编译器和AOT编译器 引入解释器的思想,逐渐演化出JIT编译器(Just-in-Time Complier):和AOT编译器(Ahead-of-Time Complier)。 需要注意的是,JIT编译器将语言 X 转化为机器代码时,需要解释器的参与。可以认为,没有解释器,亦不存在JIT编译器。 Java JVM:JIT编译器和解释器 [JVM.png] Java语言的编译和执行中,均涉及编译器和解释器。 对于JVM的设计有两种,一种使用解释器直接在目标机器上执行,一种则是使用JIT编译器

    7.3K41发布于 2020-05-20
  • 来自专栏全栈程序员必看

    三、java编译器

    java编译器分为2种 解析器 (bytecode intepreter) JIT (just in time compiler) 解释执行:解释执行是采用匹配执行解释器(解释器是个黑盒,通常也有编译器的组成部分 混合模式 现在主流的商用虚拟机(HotSpot(Oracle)、J9 VM(IBM))中几乎都同时包含“解释器和编译器。 二者在其中各有优势:当程序需要迅速启动和执行时,解释器可以首先发挥作用,省去编译的时间,立即执行;当程序运行后,随着时间的推移,编译器逐渐会返回作用,把越来越多的代码编译成本地代码后,可以获取更高的执行效率 在 Java7 之前,需要根据程序的特性来选择对应的 JIT,虚拟机默认采用解释器和其中一个编译器配合工作。 这种配合使用的方式称为**“混合模式”(Mixed Mode)**,用户可以使用参数 -Xint 强制虚拟机运行于 “解释模式”(Interpreted Mode),这时候编译器完全不介入工作。

    92820编辑于 2022-09-14
  • 来自专栏全栈程序员必看

    安装java编译器

    参考:https://www.cnblogs.com/mr-wuxiansheng/p/6850437.html

    1.4K50编辑于 2022-06-26
领券