【问题标题】:Compilers and beyond编译器及其他
【发布时间】:2023-10-15 07:34:01
【问题描述】:

我想回过头来了解更多关于编译器、处理器和内存如何在我的程序上运行的信息。我也对所有这一切所依赖的物理学感兴趣。任何好的参考资料或书籍将不胜感激......

【问题讨论】:

  • 电压、电流、电阻 - 底部都是物理。

标签: memory compiler-construction physics processor


【解决方案1】:

对于编译器,终极书籍是Dragon Book,又名《编译器设计原理》。一开始有点重,但是每次通过它都会变得更容易。这是一本经典之作,所有认真学习编程/计算机科学的学生都应该阅读。

【讨论】:

    【解决方案2】:

    我的第一个建议是Code,这已经被建议了。 Hennessey & Patterson 的《Computer Organization & Design》是一本更好但更难的关于处理器主题的书。您可能会在 Amazon 或 Half.com 上寻找旧版本。它们会便宜很多,而且信息基本相同。

    这些都将教您处理器的工作原理、汇编语言等基础知识。这将帮助您了解您的程序将如何被解释,从而了解您的设计可能存在什么样的性能瓶颈。

    【讨论】:

      【解决方案3】:

      在我看来,您想获得计算机科学学位。 :-)

      【讨论】:

        【解决方案4】:

        【讨论】:

        • 这就是我要推荐的书。
        • 好书。我希望我一开始就拥有它。再说一次,没有它迫使我自己学习很多东西。
        【解决方案5】:

        我通常不会同时想到物理和编译器。

        This link 可能会让你思考。

        【讨论】:

          【解决方案6】:

          为 C64 之类的东西编写一个简单的模拟器。通过思考如何模拟 CPU、内存和其他芯片,您将了解这些简单机器的工作原理。今天的计算机几乎以相同的方式运行,但复杂性更高,但基本思想是相同的。

          您的模拟器不必非常快 - 尝试获取 C64 欢迎信息,如果您的代码正确 - 您应该能够 POKE 并编写基本程序并让它们工作:)

          10 PRINT "DONT LISTEN TO ME - APPLE //E's RULE"
          

          20 转到 10

          【讨论】:

            【解决方案7】:

            我建议学习足够的 assembler 以便能够在汇编程序中编写一个简单的 Hello World 程序。

            这将准确地告诉您 CPU 在寄存器和内存级别是如何工作的。

            它还将向您很好地介绍如何将源代码转换为目标文件以及链接器如何将所有这些目标文件组合在一起以创建一个工作程序。

            【讨论】:

            • 任何人都可以编写Hello world程序。这并不意味着您实际上理解了它所显示的语言,您可以从某个地方复制一些文本并运行编译器。
            • 任何人都可以通过学习像 hello world 这样简单的程序来学到很多东西,只要他们准备好花时间尝试理解他们正在复制的代码。我不是汇编程序程序员,但我可以阅读汇编程序,这要归功于我编写的一两个简单的 hello world 程序。
            【解决方案8】:
            【解决方案9】:

            费曼对Physics of Computation 有一个很好的了解:

            它解决了您问题的第二部分。

            【讨论】:

              【解决方案10】:

              在亚马逊上购买一本关于“计算机组织”或“计算机架构”的书。 This is what we used 上大学的时候。它不太厚,会给你基础知识,从门级一直到内存的组织方式和程序的编写方式。如果在此之后,你想更深入地研究物理学,那么你会想要一本关于半导体物理学的书。 (但如果我是你,我会先在*上查找“逻辑门”、“二极管”和“晶体管”!)

              【讨论】:

              • 任何人都可以读一本书——这并不能证明你理解它。一个实际的例子,比如编程一些真实的东西表明你真正理解......
              【解决方案11】:

              如果您真的想深入了解处理器/IC 的物理学,您需要具备扎实的电磁学/电路分析背景。这当然不是一件容易的事,而且不会真正让你成为一个更好的程序员。如果你真的有兴趣,可以向 EE 朋友借一些书!

              从这里开始的抽象是门级,程序员通常可以理解它,因为它都是关于逻辑的。

              【讨论】:

                【解决方案12】:

                在阅读了 Steve Yegge 的关于了解编译器的建议后,我做出了类似的决定。我一直非常喜欢 Nisan 和 Schocken 的计算系统的要素:从第一原理构建现代计算机,它首先是一本教科书,其次是针对新生或大四学生的一个学期课程,第三,提供讲座和跨平台仿真模拟软件的网站:http://www1.idc.ac.il/tecs/ (TECS)

                主题从 NAND(用 HDL 编程数字逻辑电路)到触发器、ALU 和寄存器、汇编器、解析和编译器、操作系统和 GUI。您,学生,在网站上提供的硬件模拟器或软件模拟器上实现这些主题中的每一个。对我来说,本科生可以在 3--4 个月内深入了解这些想法,这是对人类创造力的一种庆祝。一位作者/教授就该主题进行了 Google 技术讲座,如果您有一个小时的时间可以从他们的课程中抽出时间,那么值得一试。

                我不能推荐一个同样引人入胜的计算物理资源,但我可以敷衍地说,我的电气工程系的前两个核心 EE 课程的学生可以学习(如果他们选择的话,可以同时学习)是电路 1 和半导体 1。前者涉及电压、电流、电感、电容、运算放大器等——后者涉及量子力学、晶体、掺杂、电荷载流子等,最直接涉及数字处理和存储的物理设备。但是,我很难想象像 TECS 这样的动手模拟环境可以解决这样的主题,使其更适合学术而不是业余爱好者/专业研究?

                【讨论】: