标签: compiler-construction

Go如何快速编译?

我用Google搜索并在Go网站上搜索,但我似乎无法找到Go的非凡构建时间的解释.它们是语言功能(或缺少),高度优化的编译器或其他东西的产品吗?我不是想推广Go; 我只是好奇.

compiler-construction performance build-process go

209
推荐指数
10
解决办法
5万
查看次数

__PRETTY_FUNCTION __,__ FUNCTION __,__ func__之间有什么区别?

什么之间的区别__PRETTY_FUNCTION__,__FUNCTION__,__func__,和他们在哪里记录?我如何决定使用哪一个?

c c++ compiler-construction standards

205
推荐指数
5
解决办法
10万
查看次数

用自己的语言编写编译器

直观地说,似乎语言的编译器Foo本身不能用Foo编写.更具体地说,语言的第一个编译器Foo不能用Foo编写,但可以编写任何后续的编译器Foo.

但这是真的吗?我对一种语言的阅读非常模糊,这种语言的第一个编译器是用"本身"编写的.这是可能的,如果是这样的话怎么样?

compiler-construction bootstrapping

196
推荐指数
7
解决办法
4万
查看次数

阅读GHC核心

核心是GHC的中间语言.阅读核心可以帮助您更好地了解您的计划的性能.有人问我关于阅读Core的文档或教程,但我找不到多少.

有哪些文档可供阅读GHC Core?

这是我到目前为止所发现的:

compiler-construction performance haskell ghc

190
推荐指数
3
解决办法
2万
查看次数

gcc/g ++是如何引导的?

这一直困扰着我.gcc/g ++如何编译自己?我猜测每个修订版都使用以前构建的修订版进行编译.这是真的?如果是的话,是否意味着最古老的g ++/gcc版本是用汇编语言编写的?

c c++ compiler-construction

182
推荐指数
2
解决办法
2万
查看次数

"文件末尾没有换行符"编译器警告

在某些C++编译器中出现以下警告的原因是什么?

文件末尾没有换行符

为什么我应该在源/头文件的末尾有一个空行?

c++ compiler-construction warnings c-preprocessor

180
推荐指数
6
解决办法
9万
查看次数

静态变量存储在C和C++中的哪个位置?

在可执行文件的哪个段(.BSS,.DATA,其他)中存储了静态变量,以便它们没有名称冲突?例如:


foo.c:                         bar.c:
static int foo = 1;            static int foo = 10;
void fooTest() {               void barTest() {
  static int bar = 2;            static int bar = 20;
  foo++;                         foo++;
  bar++;                         bar++;
  printf("%d,%d", foo, bar);     printf("%d, %d", foo, bar);
}                              }
Run Code Online (Sandbox Code Playgroud)

如果我编译两个文件并将其链接到重复调用fooTest()和barTest的main,则printf语句将独立增加.有意义,因为foo和bar变量是翻译单元的本地变量.

但是存储分配在哪里?

需要明确的是,假设您有一个工具链可以输出ELF格式的文件.因此,我相信,有将一些空间,对于那些静态变量的可执行文件保留.
出于讨论目的,我们假设我们使用GCC工具链.

c c++ compiler-construction

169
推荐指数
10
解决办法
18万
查看次数

C#编译器如何检测COM类型?

编辑:我已将结果写成博客文章.


C#编译器有点神奇地处理COM类型.例如,这个陈述看起来很正常......

Word.Application app = new Word.Application();
Run Code Online (Sandbox Code Playgroud)

......直到你意识到这Application是一个界面.在接口上调用构造函数?Yoiks!这实际上被转换为对Type.GetTypeFromCLSID()另一个的调用Activator.CreateInstance.

此外,在C#4中,您可以对ref参数使用非ref 参数,并且编译器只是添加一个局部变量以通过引用传递,丢弃结果:

// FileName parameter is *really* a ref parameter
app.ActiveDocument.SaveAs(FileName: "test.doc");
Run Code Online (Sandbox Code Playgroud)

(是的,有一堆参数丢失.不是可选参数好吗?:)

我正在尝试调查编译器的行为,我没有假装第一部分.我可以做第二部分没有问题:

using System;
using System.Runtime.InteropServices;
using System.Runtime.CompilerServices;

[ComImport, GuidAttribute("00012345-0000-0000-0000-000000000011")]
public interface Dummy
{
    void Foo(ref int x);
}

class Test
{
    static void Main()
    {
        Dummy dummy = null;
        dummy.Foo(10);
    }
}
Run Code Online (Sandbox Code Playgroud)

我想能够写:

Dummy dummy = new Dummy();
Run Code Online (Sandbox Code Playgroud)

虽然.显然它会在执行时爆炸,但没关系.我只是在试验.

编译器为链接的COM PIA(CompilerGeneratedTypeIdentifier)添加的其他属性似乎没有做到这一点......什么是神奇的酱油?

c# compiler-construction com c#-4.0

167
推荐指数
4
解决办法
2万
查看次数

使用多个核心使用g ++进行编译

快速提问:什么是编译器标志,允许g ++生成自身的多个实例,以便更快地编译大型项目(例如,一次为多核CPU提供4个源文件)?

非常感谢.

c++ compiler-construction multicore makefile g++

166
推荐指数
8
解决办法
14万
查看次数

第一个编译器是如何编写的?

我听说过鸡肉和鸡蛋以及自责.我有几个问题.

编写第一个将某些内容转换为二进制指令的编译器是什

汇编是编译还是翻译成二进制指令?

...我发现很难相信他们用二进制编写了一个编译器.

compiler-construction machine-instruction

161
推荐指数
6
解决办法
4万
查看次数