Questions tagged «compilation»

5
如何编写一个非常基本的编译器
高级编译器喜欢gcc根据代码的编写语言(例如C,C ++等)将代码编译为机器可读文件。实际上,它们根据相应语言的库和功能来解释每个代码的含义。如果我错了纠正我。 我希望通过编写一个非常基本的编译器(可能使用C语言)来编译静态文件(例如,文本文件中的Hello World)来更好地理解编译器。我尝试了一些教程和书籍,但所有这些都是针对实际案例的。它们处理具有与相应语言相关的含义的动态代码的编译。 如何编写基本的编译器以将静态文本转换为机器可读文件? 下一步将变量引入编译器。想象一下,我们想编写一个只编译某种语言功能的编译器。 引入实用的教程和资源受到高度赞赏:-)
214 c  compiler  compilation  gcc 

1
了解差异:传统解释器,JIT编译器,JIT解释器和AOT编译器
我试图了解传统解释器,JIT编译器,JIT解释器和AOT编译器之间的区别。 解释器只是一台以某种计算机语言执行指令的机器(虚拟或物理)。从这个意义上讲,JVM是解释器,物理CPU是解释器。 提前编译只是意味着在执行(解释)代码之前将代码编译为某种语言。 但是我不确定JIT编译器和JIT解释器的确切定义。 根据我所读的定义,JIT编译只是在解释代码之前就对其进行编译。 因此,基本上,JIT编译是AOT编译,是在执行(解释)之前完成的吗? 还有一个JIT解释器,是一个既包含JIT编译器又包含解释器并在解释它之前对其进行编译(JIT)的程序? 请说明差异。

9
缺乏编译器错误词汇表使新手程序员感到沮丧
我一家人的朋友在学习编程(用C语言)时向我寻求帮助。在我们交谈时,他对很难理解自己的编译器(GCC)在出错时向他发送的错误消息感到沮丧。他不理解所有使用的术语,有时是它们的组合超出了他的理解。他问我:“编译器文档为什么不包含对错误消息的更长解释?” 我对他没有一个好的答案。 我本人-作为一个经验丰富的程序员-在这种情况下很少见,但那些罕见的情况确实发生了-我以前从未遇到过的一些奇怪的错误消息。我设法在搜索引擎中查找错误消息,但是显然这并不总是对他有用-尤其是因为他遇到的错误更常见并且发生在多个不同的情况下,这与他的问题有关拥有。 那么,新手程序员应该如何应对理解编译器错误消息的挑战?具体来说,结合C和GCC?

6
长时间编译是否已成为历史?
关于编译需要多长时间的战争故事不计其数。甚至xkcd都提到了它。 现在,我已经有很长时间没有编程了,并且几乎只接触过Java和Python(Python是一种解释性语言,而不是一种编译语言)。我意识到有可能我只是没有遇到过需要很长时间才能编译的项目,但是即使对于像样的应用程序,它对我来说是瞬时的(通常由IDE在后台处理)或花费不超过30个一个非常大的项目大约需要几秒钟。即使在商业环境中(发生漫画的地方),我也从来没有花太多时间来编译代码。 我只是没有接触过编译时间长的项目吗?这是过去的遗物,不再是现代发生的事情吗?为什么编译需要这么长时间?


11
C ++编译器会删除/优化无用的括号吗?
请问代码 int a = ((1 + 2) + 3); // Easy to read 运行慢于 int a = 1 + 2 + 3; // (Barely) Not quite so easy to read 还是现代的编译器足够聪明,可以删除/优化“无用的”括号。 看起来似乎很少有优化方面的问题,但是选择C ++而不是C#/ Java / ...都是关于优化(IMHO)的。

6
C ++中的内联函数。重点是什么?
根据我所读的内容,编译器没有义务用其主体替换内联函数的函数调用,但是如果可以的话,它将这样做。这让我开始思考-如果是这种情况,为什么我们要使用内联词?为什么不将所有函数默认设置为内联函数,并让编译器确定它是否可以用函数主体替代调用?

5
为什么编译器的输出称为目标代码?
摘自Paul Graham 解释的论文《编程语言》,发表在Hackers&Painters上: 您向编译器提供的高级语言也称为 源代码,其生成的机器语言翻译称为目标代码。 摘自Wikipedia关于目标代码的文章: 目标代码或有时是目标模块是计算机编译器生成的。 根据“编译器”的定义: 传统上,编译的输出称为目标代码或有时称为目标模块。(请注意,此处的“对象”一词与面向对象的编程无关。) 那么,什么是涉及到长期目标?

8
为什么我的IDE不进行后台编译/构建?
今天,我在相当复杂的计算机上进行开发,它具有多个内核,SSD驱动器以及其他功能。尽管如此,大多数时候我在对计算机进行编程时总是无所事事。当我最多需要编译和运行/部署一个稍微复杂的项目时,它仍然需要花费几秒钟的时间。为什么?现在我们越来越生活在“即时时代”中,为什么我不能在Visual Studio中按F5并立即启动/部署应用程序? 几秒钟听起来可能还不错,但仍然是认知上的磨擦和时间的累加,坦率地说,这使编程变得不那么有趣了。那么,如何立即编译呢? 好吧,人们倾向于在不同的程序集中编辑文件,如果Visual Studio / IDE不断进行编译/构建我可能适当修改的所有内容,该怎么办。如果他们想真正进步,可以按班级编译。编译可能无法正常工作,但随后它可能会默默地不执行任何操作(将错误消息添加到错误窗口除外)。 当然,今天的计算机可以为这个任务指定一个或两个核心,并且如果有人发现它很烦人,可以选择禁用它。我知道可能存在上千个技术问题,并且需要解决一些奇特的影子复制,以使其无缝和实用,但这肯定会使编程更加无缝。 有什么实际的原因导致这种情况不可能发生?不断编写二进制文件的损耗会太大吗?程序集在部署/运行之前是否无法保存在内存中?

3
运送我的一流图书馆。我需要知道的任何陷阱吗?
我是一名Web开发人员,打算在自己的职业生涯中获得“出版的一流图书馆”成就,而且我还在发汗(我整夜都在紧张地工作)。我很乐意利用社区的经验,看看是否有人有任何建议或建议,以确保尽可能顺利进行。有什么我需要注意的细节或陷阱吗?关于构建过程有什么特别之处可以让我难忘吗? 我在这里: 库已经过单元测试,代码覆盖率约为97% API有充分的文档说明,并且已经创建了用于智能感知的xml文档 我确保公共/私有类访问器是正确和正确的。所有获取者/设定者也是如此 错误处理并不像我希望的那样优雅,但是我已经到了最后期限,并且已经接受了它的“现在的样子” 没有友好的日志记录。Debug.Writeline被广泛使用...我最近了解到这反映了我的经验不足:( 非常感谢您的建议! 该库将用于生成报告。标准帽子-连接到只读数据库,执行计算,格式化并将数据输出到响应流。 我被当作一种边缘资源来填补一位辞职的程序员,而这项任务是作为“割牙”项目而交给我的。该类库将发布给公司中的其他程序员,以供他们编写生产代码时使用。

3
编译还是使用预建二进制文件性能?
如果我手动为将要在其上使用的实际计算机编译软件组件的源,那么与是否在其他平台上为许多不同体系结构编译源相比,性能会更好(更快)?我下载了一些不错的结果编译源,我想知道这是否是由于编译而不是下载预先编译的二进制文件而导致的,软件更新通常就是这种情况。

4
“我们希望对其进行编译,以免烧毁CPU做错事情。”这句话的含义是什么。
我在读这篇文章。它具有以下段落。 Scala真的很快吗?那么,您对fast的定义是什么?大约和Java一样快。它不必与C或Assembly一样快。Python没有比Ruby快很多。我们想用更少的机器做更多的事情,以更好地利用并发性。我们希望对其进行编译,以免烧毁CPU做错了事情。 我正在寻找最后一句话的含义。解释语言将如何使CPU做“错误”的事情?

3
函数式编程语言是否有更多机会进行编译时间优化?
我正在读《现实世界的函数式编程》一书。它从命令式和功能性编程语言之间的比较开始。它指出了函数式编程中的“值”和“表达式”与命令式编程中的“变量”和“函数”有何不同。通过讨论,我得出了一个想法- 与命令式编程语言相比,函数式编程语言有更多机会进行编译时间优化。 是真的吗

4
C#中的常量
为何编译器将常量值存储在程序集元数据中?它们是否直接从程序集元数据嵌入到中间语言代码中?
9 c#  clr  compilation 
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.