compiler-construction相关内容
可能重复: JIT 编译器与离线编译器 我听说在某些情况下,由于 JIT 优化,Java 程序或更确切地说是部分 Java 程序能够比 C++ 中的“相同"代码(或其他预编译代码)更快地执行.这是因为编译器能够确定一些变量的范围,避免一些条件并在运行时提取类似的技巧. 你能否举一个(或更好的——一些)例子,这适用于什么地方?并且也许概述了编译器能够优化字节码超出预编译代码可能的确切条
..
当 #ifndef #define #endif 始终有效. 我已经看到使用 #pragma comment 来链接其他文件,但是使用 IDE 设置编译器设置更容易. #pragma 还有哪些其他有用但不广为人知的用法? 编辑: 我不是只是在#pragma 指令列表之后.或许我应该重新表述一下这个问题: 您使用 #pragma 编写的哪些代码对您有用? .
..
我想知道模式匹配通常是如何实现的.例如,在 Erlang 中,您认为它是在字节码级别实现的(它有一个字节码以便它有效地完成)还是由编译器生成为一系列指令(一系列字节码)? 这是一个非常有用的东西,我只需要将它放入我正在构建的玩具语言中. 解决方案 你可以看看如果编译一些代码会发生什么 -模块(匹配).-出口([匹配/1]).匹配(X)->{a,Y} = X. 当你想看看看起来像
..
我的问题很简单: 编译器是否将最终类中的所有方法都视为最终方法?给final类的方法加上final关键字有什么作用吗? 我知道 final 方法有更好的内联机会,这就是我问的原因. 提前致谢. 解决方案 你说得对,final类中的所有方法都是隐式final的. 见这里: "请注意,您还可以声明整个类 final.声明的 final 不能被子类化.这特别有用,因为例
..
我正在使用 Linux 机器.是否有任何系统命令可以找到我正在使用的 C 编译器所遵循的标准? 解决方案 这取决于编译器,我假设你使用的是 GCC.您可以使用以下方法检查编译器定义的宏: gcc -dM -E -
..
为什么注释掉这个 for 循环的前两行并取消注释第三行会导致 42% 的加速? int count = 0;for (uint i = 0; i 时间的背后是截然不同的汇编代码:循环中有 13 条与 7 条指令.该平台是运行 .NET 4.0 x64 的 Windows 7.启用了代码优化,并且测试应用在 VS2010 之外运行.[更新: Repro 项目,用于验证项目设置.] 消除中
..
我想更清晰地了解 scala 编译的各个阶段.我知道某些事情必须在编译器中发生,但并不真正知道它们发生的顺序以及顺序应该如何影响我的编程. 我是否正确地说以下内容是编译器功能的完整列表? 解析程序 检查类型 删除 隐式转换 生成的字节码 优化 如果是这样,它执行这些阶段的顺序是什么?这个顺序对程序员,尤其是类型级程序员有什么影响? 解决方案 您可以使用 scal
..
我刚刚在观看 Google IO 视频,他们谈到了他们在 android 中包含的 JIT 编译器.由于 JIT 编译器,他们展示了性能改进的演示.我想知道 JIT 编译器到底是做什么的,想听听不同的人的意见. 那么,JIT 编译器的职责是什么? 解决方案 Java 代码通常以字节码的形式分布,是机器无关的伪代码.(同样的想法以前在 70 年代开发的 UCSD-p 系统 中使用.)这
..
我知道如何将它们相互转换,但从未真正了解它们的应用程序是什么.通常的中缀操作可读性很强,但是它在哪里失败导致了前缀和后缀表示法的开始 解决方案 中缀表示法对于人类来说很容易阅读,而前/后缀表示法对于机器来说更容易解析.前置/后置表示法的一大优势是永远不会出现诸如运算符优先级之类的问题. 例如,考虑中缀表达式1 # 2 $ 3.现在,我们不知道这些运算符的含义,因此有两种可能的对应后缀
..
从下面的代码片段可以看出,我声明了一个 char 变量和一个 int 变量.编译代码时,必须识别变量str和i的数据类型. 为什么我需要在扫描我的变量时通过将 %s 或 %d 指定为 scanf?当我声明我的变量时,编译器还不够成熟,无法识别吗? #include 主函数(){字符 str [80];诠释我;printf("请输入您的姓氏:");scanf ("%s",s
..
我看到了编译器选项 GNU99 和 C99.他们有什么区别?有详细的文档吗?(Clang、Xcode、Mac OS X) 解决方案 各种标准模式的区别 clang 支持 -std 选项,它改变了 clang 使用的语言模式.C 支持的模式是 c89、gnu89、c94、c99、gnu99 和这些模式的各种别名.如果没有指定 -std 选项,clang 默认为 gnu99 模式.
..
有什么方法可以将 C 代码转换为 JavaScript 并从 JavaScript 转换为 C?我发现 V8 juice 可以从 C++ 生成 JavaScript-side 类,但这只是一种方式(C++ 到 JavaScript). 我不是在寻找软件. 解决方案 非常非常棘手 --- Javascript 是一种高度动态的语言,几乎所有东西都可以在运行时更改:变量名、函数名、类型等
..
Just-in-Time-Compiler 和 Interpreter 有什么区别,.NET 和 Java JIT 编译器有什么区别? 解决方案 Just-in-时间编译是在执行之前将非本地代码(例如字节码)转换为本地代码. 来自维基百科: JIT 建立在运行时环境中的两个早期想法之上:字节码编译和动态编译.它在本机执行之前在运行时转换代码,例如将字节码转换为本机机器码.
..
阅读 Peter 关于 JavaScript 的文章后我注意到了 Brendan Eich 表示,Harmony 的目标之一是成为 JavaScript 编译器的更好目标. 目前有两个流行的编译器具有一些模糊的ES:Harmony 合规性: Traceur CoffeeScript 尽管 CoffeeScript 有一些合规性,但它并不是为 ES:Harmony 编译器而
..
经过十多年的 C/C++ 编码,我注意到以下模式 - 非常优秀的程序员往往对编译器的内部有详细的了解. 我是一个相当优秀的程序员,我有一个特别的编译器“迷信"集合,所以我想重新认识我的知识并从基础开始. 谁能推荐在线资源或喜爱书籍的链接?我对 C/C++ 编译、优化、GCC 和 LLVM 特别感兴趣. 解决方案 从龙书入手....(更注重代码优化和代码生成) 继续为诸如
..
我查看了 http://referencesource.microsoft.com/ 的源代码,它出现了所有源代码都在 C# 中. 我还查看了新 C# 编译器平台的源代码(Roslyn),它也在 C# 中.这怎么可能?C# 语言编译器是用 C# 编写的吗?还是我错过了一些明显的东西?如果 C# 编译器是用 C# 编写的,那么它是如何工作的? 解决方案 最初的 C# 编译器不是用 C#
..
我想我对将 .NET 字节码编译为本机代码感到有些困惑,或者我对最终结果感到困惑.因此,请耐心等待我尝试整理我认为我理解的内容,以便您帮助我弄清楚我缺少什么. 我想做的是将我用 C# 编写的应用程序编译成常规的本机代码,就像我用 C 编写的那样.我的推理与性能无关,而是带有某种程度的保护.我知道我的最终目标并非不可能(甚至真的那么难以规避),但我只是觉得逆转 x86 组装比逆转 Reflec
..
在 Haskell 中编程时(尤其是在解决 Project Euler 问题时,次优的解决方案往往会对 CPU 或内存需求造成压力),我经常对为什么程序的行为方式感到困惑.我查看配置文件,尝试引入一些严格性,选择另一种数据结构,......但大多是在黑暗中摸索,因为我缺乏良好的直觉. 另外,虽然我知道 Lisp、Prolog 和命令式语言的典型实现方式,但我不知道如何实现惰性语言.我也有点好
..
LR、SLR 和 LALR 解析器之间的实际区别是什么?我知道 SLR 和 LALR 是 LR 解析器的类型,但就它们的解析表而言,它们的实际区别是什么? 以及如何显示一个语法是 LR、SLR 还是 LALR?对于 LL 语法,我们只需要证明解析表的任何单元格都不应包含多个产生式规则.LALR、SLR 和 LR 是否有类似的规则? 例如,我们如何证明语法 S -->啊 |醋酸乙酯 |
..
我遇到了编译器错误,但我不知道为什么. .hpp: #ifndef _CGERADE_HPP#define _CGERADE_HPP#include "CVektor.hpp"#include CGerade 类{受保护:CVektor o, rv;上市:CGerade(CVektor n_o, CVektor n_rv);CVektor getPoint(float t);字符
..