Questions tagged «compiler-construction»

标记“编译器构造”应应用于有关编译器编程的问题或有关编译器详细内部工作的问题。请勿使用有关*使用*特定编译器或编译错误的问题。

30
学习编写编译器[关闭]
关闭。此问题不符合堆栈溢出准则。它当前不接受答案。 想改善这个问题吗? 更新问题,使其成为Stack Overflow 的主题。 5年前关闭。 这个问题的答案是社区的努力。编辑现有答案以改善此职位。它目前不接受新的答案或互动。 首选语言:C / C ++,Java和Ruby。 我正在寻找一些有用的书籍/教程,以了解如何仅出于教育目的编写自己的编译器。我最熟悉C / C ++,Java和Ruby,因此我更喜欢涉及这三种资源之一的资源,但是任何好的资源都是可以接受的。


16
什么是应用程序二进制接口(ABI)?
我从不清楚什么是ABI。请不要将我指向Wikipedia文章。如果我能理解的话,我就不会在这里发表如此冗长的文章。 这是我对不同接口的看法: 电视遥控器是用户和电视之间的接口。它是一个现有的实体,但是它本身是无用的(不提供任何功能)。电视机上实现了遥控器上每个按钮的所有功能。 接口:是该功能的functionality和之间的“现有实体”层 consumer。接口本身不执行任何操作。它只是调用后面的功能。 现在,取决于用户是谁,有不同类型的界面。 命令行界面(CLI)命令是现有的实体,使用者是用户,而功能却在后面。 functionality: 我的软件功能可以解决我们描述此界面的某些目的。 existing entities: 命令 consumer: 用户 图形用户界面(GUI)窗口,按钮等是现有的实体,而使用者又是用户,功能又在后面。 functionality: 我的软件功能解决了我们描述此接口时遇到的一些问题。 existing entities: 窗口,按钮等。 consumer: 用户 应用程序编程接口(API)函数(或更准确地说)(在基于接口的编程中)接口是现有的实体,此处的使用者是另一个程序,而不是用户,并且功能仍在该层后面。 functionality: 我的软件功能解决了我们描述此接口时遇到的一些问题。 existing entities: 函数,接口(函数数组)。 consumer: 另一个程序/应用程序。 应用程序二进制接口(ABI)这就是我的问题所在。 functionality: ??? existing entities: ??? consumer: ??? 我已经用不同的语言编写了软件,并提供了不同种类的界面(CLI,GUI和API),但是我不确定是否提供过任何ABI。 维基百科说: ABI涵盖了诸如 数据类型,大小和对齐方式; 调用约定,它控制如何传递函数的参数以及如何检索返回的值; 系统调用号以及应用程序应如何对操作系统进行系统调用; 其他ABI标准化细节,例如 C ++名称修改 异常传播,以及 相同平台上的编译器之间的调用约定,但不需要跨平台兼容性。 谁需要这些细节?请不要说操作系统。我知道汇编编程。我知道链接和加载的工作方式。我确切地知道里面发生了什么。 …

6
编译/链接过程如何工作?
编译和链接过程如何工作? (注意:这本来是Stack Overflow的C ++ FAQ的一个条目。如果您想批评以这种形式提供FAQ的想法,则可以在开始所有这些操作的meta上进行发布。)该问题在C ++聊天室中进行监控,该问题最初是从FAQ想法开始的,所以提出这个想法的人很可能会读懂您的答案。)

12
编译语言与口译语言
我正在尝试更好地理解它们之间的区别。我在网上找到了很多解释,但是它们倾向于抽象的差异,而不是实际的含义。 我的大部分编程经验都来自CPython(动态的,解释的)和Java(静态的,编译的)。但是,我知道还有其他种类的解释和编译语言。除了可以从以编译语言编写的程序中分发可执行文件这一事实之外,每种类型是否都有优点/缺点?通常,我听到人们争辩说解释语言可以交互使用,但是我相信编译语言也可以具有交互实现,对吗?

4
为什么在添加了大小写的情况下,Java开启连续int似乎运行得更快?
我正在研究一些Java代码,这些代码需要高度优化,因为它将在热门函数中运行,这些热点函数在我的主程序逻辑中的许多地方被调用。该代码的一部分涉及将double变量乘以10任意非负数int exponents。获得乘数的一种快速方法(编辑:但不是最快的方法,请参见下面的Update 2)是在switch上exponent: double multiplyByPowerOfTen(final double d, final int exponent) { switch (exponent) { case 0: return d; case 1: return d*10; case 2: return d*100; // ... same pattern case 9: return d*1000000000; case 10: return d*10000000000L; // ... same pattern with long literals case 18: return d*1000000000000000000L; default: …


7
Clang vs GCC-产生更好的二进制文件?[关闭]
已关闭。这个问题是基于观点的。它当前不接受答案。 想改善这个问题吗?更新问题,以便通过编辑此帖子以事实和引文回答。 3年前关闭。 改善这个问题 我目前正在使用GCC,但最近发现了Clang,并且正在考虑切换。但是,有一个决定性因素-它生成的二进制文件的质量(速度,内存占用量,可靠性)-如果gcc -O3可以生成运行速度快1%或占用内存减少1%的二进制文件,那么这是一个决定性的因素。 与GCC相比,Clang具有更好的编译速度和更低的编译时内存占用空间,但是我对生成的编译软件的基准测试/比较非常感兴趣-您能指出我的观点还是描述您的经验?



27
无法加载文件或程序集……参数不正确
最近,我在C#解决方案中遇到了以下异常: 错误2无法加载文件或程序集'Newtonsoft.Json,版本= 3.5.0.0,文化=中性,PublicKeyToken = b9a188c8922137c6'或其依赖项之一。参数错误。(来自HRESULT的异常:0x80070057(E_INVALIDARG)) 这既不依赖于我的代码也不依赖于程序集的名称(如Newtonsoft.Json本例所示)。 当我从解决方案中删除此dll时,编译器会在同一异常中告知另一个dll。所以我想应该在我的电脑上关闭/打开某些东西:)

13
用自己的语言编写编译器
凭直觉,似乎语言的编译器Foo本身不能用Foo编写。更具体地说,第一个语言编译器Foo不能用Foo编写,但是任何后续编译器都可以用编写Foo。 但这是真的吗?我对阅读某种语言的记忆非常模糊,这种语言的第一个编译器是用“自身”编写的。这有可能吗?

4
阅读GHC核心
核心是GHC的中间语言。Reading Core可以帮助您更好地了解程序的性能。有人要求我提供有关阅读Core的文档或教程,但找不到很多。 哪些文档可用于阅读GHC Core? 到目前为止,这是我发现的内容: 与C一样快地编写Haskell:利用严格性,惰性和递归 Haskell速度与C一样快:在高海拔下工作可获得低水平性能 RWH:第25章。分析和优化 CUFP上的高性能Haskell演讲(幻灯片65-80)


1
如何引导GCC和g ++?
这一直困扰着我一段时间。GCC和g ++如何自行编译? 我猜每个修订都使用以前构建的修订进行编译。这是真的?如果是的话,是否意味着最旧的g ++和GCC版本是用汇编编写的?

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.