代码之家  ›  专栏  ›  技术社区  ›  Agile_Eagle

cmd.exe是用哪种语言编写的?

  •  1
  • Agile_Eagle  · 技术社区  · 6 年前

    命令提示符,也称为cmd.exe或cmd(在其可执行文件之后 文件名),是Windows NT、Windows CE上的命令行解释器, OS/2和EcomStation操作系统。它是 DOS和Windows 9x系统中的COMMAND.COM “MS-DOS Prompt”),类似于Unix上使用的Unix shell 系统。

    资料来源: Wikipedia

    我到处找遍了,但找不到这个问题的答案。

    每个网站都关注以下事实 batch language 用于 cmd.exe 但我找不到它所用的语言。


    所以我的问题是:

    在Windows中,用于编写命令提示符或cmd.exe的语言是什么?

    2 回复  |  直到 6 年前
        1
  •  4
  •   CodeCaster    6 年前

    文件在文本编辑器中打开时,包含以下路径 onecore\base\cmd\maxpathawarestring.cpp ,这表明至少有一个源文件是用C++编写的。

    附录来自 Hans Passant 以下内容:

    它依赖的进口使得它很可能是C和C++的混合体。CRT功能如下 longjmp , calloc , free 指出C代码,很可能是古老的,并且可以追溯到command.com时代它也清楚地使用C++异常处理,C++是他们最近所有代码开发的首选武器。混合并不少见。

    以及 eryksun 以下内容:

    在调试器下,很明显,最近对CMD的添加已经用C++编写了。 x cmd!*::* 显示了C++的大量使用 std 命名空间

    [...]

    但是CMD仍然主要是C,而不是C++。它的命令和支持函数被实现为c函数,例如 eExit , eChdir , ParseStatement 我是说, SearchForExecutable ExecPgm . 他们还没有将所有这些旧的c代码移植到oop设计中。

    所以我会用C和C++混合。

        2
  •  0
  •   phuclv    5 年前

    作为 正式确认 作者是Rich Turner女士, 原来 是用C写的

    Cmd是一个完全用“C”编写的Win32应用程序,这一点很重要,因为NT的一个关键目标是在许多不同的处理器和机器体系结构中实现可移植性

    https://blogs.msdn.microsoft.com/commandline/2017/01/04/rumors-of-cmds-death-have-been-greatly-exaggerated/

    但是现在它的部分迁移到C++。

    在Windows控制台内

    Windows控制台是一个传统的Win32可执行文件,虽然它最初是在C语言中编写的,但是随着团队的现代化和模块化控制台的代码库,大部分代码都被移植到现代C++中。

    对于那些关心这些事情的人:很多人问Windows是用C还是C++编写的。答案是,尽管NT的基于对象的设计和大多数操作系统一样,Windows几乎完全是用“C”编写的为什么?C++在内存占用和代码执行开销方面引入了成本。即使在今天,用C++编写的代码隐藏的成本是令人惊讶的,但在1990年底,当 memory cost ~$60/MB (是的,每件60美元 兆字节 !)vtables等的隐藏内存开销较大此外,虚拟方法调用间接的代价和对象撤销可能会导致当时C++代码非常重要的性能和规模惩罚。虽然仍然需要小心,现代计算机在现代计算机上的性能开销远没有受到关注,并且考虑到它的安全性、可读性和可维护性优点,常常是可接受的权衡。这就是为什么我们不断升级控制台代码到现代C++的原因。

    Windows Command-Line: Inside the Windows Console

    如果你调查一下 latest Windows Console’s internals structure 你可以看到它使用 Map , Collection 这表明它可能会使用一些 C++/CX

    Windows Console Text Buffer Architecture

    从顶部(原始缓冲区的蓝色框):

    • ScreenInfo –维护有关视区等的信息,并包含一个文本缓冲区
      • TextBuffer 将控制台文本区域表示为行的集合
        • Row –唯一地表示控制台中的每个CharRow以及应用于每一行的格式化属性
          • CharRow 包含一个charrowcell集合,以及用于处理行包装和导航的逻辑和状态
            • CharRowCell 包含实际单元格文本和包含单元格特定标志的dbcsattribute字节

    如果您感兴趣,那么conhost.exe也已经以新的windows终端的形式开源了。

    Windows控制台主机, conhost.exe ,是windows最初的命令行用户体验。它实现了Windows的命令行基础设施,并负责托管Windows控制台API、输入引擎、呈现引擎和用户首选项此存储库中的控制台主机代码是 conhost.exe 窗户本身就是这样建造的。

    https://github.com/microsoft/terminal

    你可以在 Windows command line blog