编程语言能否在 OS 提供的范围之外做一些事情?
Can a programming language do anthing outside of what the OS provides?
我正在努力获得对程序和编程语言的更全面、一般和更高层次的理解。
我想了解它们的实际运作方式。我了解最低级别的是机器代码,即 0 和 1。然后你有组装。然后你有另一种高级语言,其中每个 instruction/function/method/call/routine 任何你想称呼它的东西都映射到汇编中的一些指令或指令组,对吗?高级语言不能提供或做低级语言汇编提供的内容之外的任何事情正确吗?
同样,由于所有代码都在 OS 上运行,因此该代码只能执行 OS 提供的操作。代码不可能做 OS 实际提供的内容之外的任何事情 correct?
计算机有一个指令集,机器代码,它定义了计算机可以做什么。汇编代码本质上是一种更方便的表示,因此汇编代码可以做机器可以做的任何事情。更高级别的编程语言必须在机器上 运行,所以它不能做任何机器不能做的事情,尽管它可能能够更方便地表达它(例如 print "foo"
而不是比几十条机器代码指令)。该编程语言的编译器是直接生成机器代码、汇编代码还是可能需要进一步处理的任何其他形式,这取决于实现选择。
这给我们带来了一个问题,即一个程序(不管它是用什么编写的)是否有可能做一些 OS 没有明确规定的事情。我发现这是一种奇怪的表达方式,因为编写程序的目的是为你提供一些你以前没有的能力,所以在某种意义上你只为 OS 没有明确说明的事情编写程序为您提供。问题在于定义什么OS"provides"。如果它是通用的 OS,那么它的设计者很可能打算 "provide" 让您能够编写范围广泛的程序。 OS 可能会选择提供一些方便的功能(比如,创建文件的能力),但如果它没有提供这样的功能,你也许可以自己做,只要有合适的动机(并且,对于文件创建示例,执行磁盘的能力 I/O - 可能还需要您编写磁盘驱动程序)。
I am trying to gain a more holistic, general, and high-level
understanding of programs and programming languages.
I would like to understand how they actually function.
我建议通过了解现代硬件来获得良好的性能和能效,例如以下示例:
使用 subword parallelism
将 matrix multiply
提高 4 倍。
通过展开循环将性能加倍以证明 instruction level parallelism
的值。
通过优化缓存再次将性能加倍
blocking
。
最后,使用 thread-level parallelism
从 16 个处理器加速 14。
所有四项优化总共仅将 24 行 C 代码添加到您在
中找到的矩阵乘法示例
Computer Organization and Design: The Hardware Software Interface (5th ed.)
或类似书籍。
要说明一点,即使是一个好的开始,也值得深入挖掘而不只是 "learning python"。因此,理解低层次确实会在很多方面影响高级编程,这就是你根据你的问题所追求的。
实际上不只是汇编 - 本主题中处理的 VHDL 等硬件描述语言 f.e:
https://electronics.stackexchange.com/questions/132611/whats-the-motivation-in-using-verilog-or-vhdl-over-c
我正在努力获得对程序和编程语言的更全面、一般和更高层次的理解。
我想了解它们的实际运作方式。我了解最低级别的是机器代码,即 0 和 1。然后你有组装。然后你有另一种高级语言,其中每个 instruction/function/method/call/routine 任何你想称呼它的东西都映射到汇编中的一些指令或指令组,对吗?高级语言不能提供或做低级语言汇编提供的内容之外的任何事情正确吗?
同样,由于所有代码都在 OS 上运行,因此该代码只能执行 OS 提供的操作。代码不可能做 OS 实际提供的内容之外的任何事情 correct?
计算机有一个指令集,机器代码,它定义了计算机可以做什么。汇编代码本质上是一种更方便的表示,因此汇编代码可以做机器可以做的任何事情。更高级别的编程语言必须在机器上 运行,所以它不能做任何机器不能做的事情,尽管它可能能够更方便地表达它(例如 print "foo"
而不是比几十条机器代码指令)。该编程语言的编译器是直接生成机器代码、汇编代码还是可能需要进一步处理的任何其他形式,这取决于实现选择。
这给我们带来了一个问题,即一个程序(不管它是用什么编写的)是否有可能做一些 OS 没有明确规定的事情。我发现这是一种奇怪的表达方式,因为编写程序的目的是为你提供一些你以前没有的能力,所以在某种意义上你只为 OS 没有明确说明的事情编写程序为您提供。问题在于定义什么OS"provides"。如果它是通用的 OS,那么它的设计者很可能打算 "provide" 让您能够编写范围广泛的程序。 OS 可能会选择提供一些方便的功能(比如,创建文件的能力),但如果它没有提供这样的功能,你也许可以自己做,只要有合适的动机(并且,对于文件创建示例,执行磁盘的能力 I/O - 可能还需要您编写磁盘驱动程序)。
I am trying to gain a more holistic, general, and high-level understanding of programs and programming languages.
I would like to understand how they actually function.
我建议通过了解现代硬件来获得良好的性能和能效,例如以下示例:
使用 subword parallelism
将 matrix multiply
提高 4 倍。
通过展开循环将性能加倍以证明 instruction level parallelism
的值。
通过优化缓存再次将性能加倍
blocking
。
最后,使用 thread-level parallelism
从 16 个处理器加速 14。
所有四项优化总共仅将 24 行 C 代码添加到您在
Computer Organization and Design: The Hardware Software Interface (5th ed.)
或类似书籍。
要说明一点,即使是一个好的开始,也值得深入挖掘而不只是 "learning python"。因此,理解低层次确实会在很多方面影响高级编程,这就是你根据你的问题所追求的。
实际上不只是汇编 - 本主题中处理的 VHDL 等硬件描述语言 f.e: https://electronics.stackexchange.com/questions/132611/whats-the-motivation-in-using-verilog-or-vhdl-over-c