Questions tagged «compilers»

有关以一种语言(源语言)读取代码并将其翻译为另一种语言(目标语言)的等效程序的程序的问题。


5
为什么某些编程语言比其他编程语言“更快”或“更慢”?
我已经注意到,某些基于编程语言(例如C ++ / Rust)构建的应用程序或算法比在同一台机器上运行的基于Java / Node.js的应用程序或算法运行得更快或更灵活。我对此有一些疑问: 为什么会这样? 是什么决定了编程语言的“速度”? 这和内存管理有关系吗? 如果有人为我解决了这个问题,我将不胜感激。

9
编程语言的哪些属性使得无法进行编译?
题: “某种编程语言的某些属性可能要求将代码写入其中的唯一方法是通过解释来执行。换句话说,不可能编译成传统CPU的本机代码。这些属性是什么?” 编译器:Parag H. Dave和Himanshu B. Dave的原则和实践(2012年5月2日) 这本书没有给出答案的任何线索。我试图找到有关编程语言概念(SEBESTA)的答案,但无济于事。网络搜索也无济于事。你有什么线索吗?

10
像Ruby / Python这样的动态语言能否达到性能一样的C / C ++?
我想知道是否可以为像Ruby这样的动态语言构建编译器,使其具有与C / C ++类似和可比的性能?根据我对编译器的了解,以Ruby为例,由于Ruby处理反射的方式,诸如从整数到大整数的自动类型转换以及缺少静态类型等特性,使得编译Ruby代码永远不可能高效地进行编译。对于Ruby来说非常困难。 是否有可能构建一个可以将Ruby或任何其他动态语言编译为与C / C ++非常接近的二进制文件的编译器?是否有根本的原因导致JIT编译器(例如PyPy / Rubinius)最终或永远无法在性能上与C / C ++相匹配? 注意:我确实知道“性能”可能是模糊的,所以要澄清一下,我的意思是,如果您可以在C / C ++中以X的性能执行X,那么您可以在Ruby / Python中以接近Y的性能执行X吗?X是从设备驱动程序和OS代码到Web应用程序的所有内容。


4
编译器的时间复杂度
我对编译器的时间复杂度感兴趣。显然,这是一个非常复杂的问题,因为要考虑许多编译器,编译器选项和变量。具体来说,我对LLVM感兴趣,但是对人们有什么想法或开始研究的地方感兴趣。一个相当谷歌似乎没有什么亮点。 我的猜测是有些优化步骤是指数级的,但对实际时间影响很小。例如,基于数字的指数是函数的参数。 从我的头顶上,我会说生成AST树将是线性的。IR生成将需要在不断增长的表中查找值时单步执行树,因此或。代码生成和链接将是类似的操作类型。因此,如果我们删除不实际增长的变量的指数,我的猜测将是。O(n2)O(n2)O(n^2)O(nlogn)O(nlog⁡n)O(n\log n)O(n2)O(n2)O(n^2) 我可能完全错了。有人对此有任何想法吗?
54 compilers 

8
是什么决定了编程语言的“速度”?
假设一个程序是用两种不同的语言编写的,让它们分别是语言X和语言Y,如果它们的编译器生成相同的字节码,为什么我应该使用语言X而不是语言Y?是什么定义了一种语言比另一种语言快? 我之所以这么问,是因为经常看到人们说这样的话:“ C是最快的语言,ATS是和C一样快的语言”。我试图了解编程语言“快速”的定义。


5
证明编译器无法检测到无效代码
我打算讲授有关各种主题的冬季课程,其中之一将是编译器。现在,我在考虑整个季度要分配的作业时遇到了这个问题,但是这让我很困惑,因此我可以用它作为示例。 public class DeadCode { public static void main(String[] args) { return; System.out.println("This line won't print."); } } 在上面的程序中,很明显,由于,print语句将永远不会执行return。编译器有时会给出有关死代码的警告或错误。例如,以上代码将无法在Java中编译。但是,javac编译器不会在每个程序中检测到所有死代码实例。我如何证明没有编译器可以这样做?


2
什么是批处理编译器?
我在编译器的课程中有以下引文(在图形着色的情况下): 因为它很慢,所以在批处理编译器中倾向于使用图形着色,而在JIT编译器中倾向于使用线性扫描。 我在网上找不到清晰的定义。那么,是什么使编译器成为批处理编译器呢?
28 compilers 

6
是否有可以在任何两种语言之间“翻译”源代码的程序?
是否存在可以在任何两种语言之间“翻译”源代码的程序(假设翻译者可以访问必需的库)? 如果存在,它们如何工作(使用的技术,所需的知识等)?它们将如何可行地构造? 如果不是,阻碍其发展的限制因素是什么?这是AI的完整问题(自然语言翻译列为其中一个)吗? 仅当语言具有相同的表达能力时,才可以预期 EDIT转换,可以解决相同类型的问题,并且要转换的代码可以用目标语言表示。(例如,不建议将Shell脚本转换为MATLAB)。

2
为什么C的void类型不同于Empty / Bottom类型?
维基百科以及我发现的其他来源都将C的void类型列为单位类型,而不是空类型。我觉得这很混乱,因为在我看来,它void更适合于空/底类型的定义。 void据我所知,没有价值观存在。 返回类型为void的函数指定该函数不返回任何内容,因此只能执行某些副作用。 类型的指针void*是所有其他指针类型的子类型。同样,void*在C中进行来回转换是隐式的。 我不确定最后一点是否可以作为void空类型的参数,void*或多或少是与无关的特例void。 另一方面,void它本身不是所有其他类型的子类型,据我所知,这是将类型作为底部类型的要求。
28 type-theory  c  logic  modal-logic  coq  equality  coinduction  artificial-intelligence  computer-architecture  compilers  asymptotics  formal-languages  asymptotics  landau-notation  asymptotics  turing-machines  optimization  decision-problem  rice-theorem  algorithms  arithmetic  floating-point  automata  finite-automata  data-structures  search-trees  balanced-search-trees  complexity-theory  asymptotics  amortized-analysis  complexity-theory  graphs  np-complete  reductions  np-hard  algorithms  string-metrics  computability  artificial-intelligence  halting-problem  turing-machines  computation-models  graph-theory  terminology  complexity-theory  decision-problem  polynomial-time  algorithms  algorithm-analysis  optimization  runtime-analysis  loops  turing-machines  computation-models  recurrence-relation  master-theorem  complexity-theory  asymptotics  parallel-computing  landau-notation  terminology  optimization  decision-problem  complexity-theory  polynomial-time  counting  coding-theory  permutations  encoding-scheme  error-correcting-codes  machine-learning  natural-language-processing  algorithms  graphs  social-networks  network-analysis  relational-algebra  constraint-satisfaction  polymorphisms  algorithms  graphs  trees 

2
JIT编译器与普通编译器有何不同?
有关Java,Ruby和Python之类的JIT编译器的宣传大肆宣传。JIT编译器与C / C ++编译器有何不同?为什么为Java,Ruby或Python编写的编译器称为JIT编译器,而C / C ++编译器仅称为编译器?
22 compilers 

1
是否存在针对终端程序完全优化的编译器?
在安德鲁·W·阿佩尔(Andrew W. Appel)的《现代编译器在ML中的实现》一书中,他说,在第17章中,可计算性理论表明,总是有可能发明新的优化转换,并继续证明完全优化的编译器将解决停顿问题:不产生输出且永不停止的Q可以轻松地用其最佳表示Opt(Q)代替,即“ L:goto L”。因此,完全优化的编译器可以解决停止问题。 所以我的问题是:是否存在用于终端程序的完全优化的编译器?我唯一的想法是:即使保证某个程序可以终止,它仍然可以任意复杂,对于任何具体的优化编译器C,一个人也许可以构造一个以C作为输入的程序,并以某种方式生成较差的程序,如下所示:某种特殊情况。 另外,将自己限制为终止程序有什么含义?

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.