gpt4 book ai didi

.net - 如何为 .NET 制作并行编译器

转载 作者:行者123 更新时间:2023-12-04 12:50:18 25 4
gpt4 key购买 nike

Nikhil Kothari 的 Script#很可能是一段时间以来我在 JavaScript 领域看到的最令人惊奇的概念之一。这个问题不是关于 JavaScript,而是关于 .NET 运行时中的语言编译。

我一直对如何使用 .NET 平台为已经有编译器(如 C#)的语言编写编译器很感兴趣,该编译器将从原始编译器生成单独的输出,同时允许原始编译器为在相同的构建操作中使用相同的源,同时也引用/使用另一个编译器的输出。

我不完全确定我什至对这个过程的理解程度足以用正确的细节提出问题,但根据 Script# 文档中的图表,这是我目前看待这个过程的方式。我想过很多涉及复杂语言设计和编译的事情,这些事情可能能够利用这样的概念,而且我对其他人对这些概念的看法很感兴趣。

——

编辑:感谢您的评论,到目前为止;就其本身而言,您的信息非常有趣,我想对其进行更多研究,但我的问题实际上是关于如何编写可以同时在同一源代码上运行的自己的编译器使用 CLR 生成多种不同类型的(潜在的)相互依赖的输出。 Script# 用作示例,因为它使用相同的 C# 源生成 JavaScript 和程序集,同时使编译后的程序集与 JavaScript 协同工作。我很好奇在设计这种性质的东西时有哪些不同的方法和理论概念。

最佳答案

重要的是要意识到编译器所做的只是获取源语言(在本例中为 C#),对其进行解析,以便编译器具有对其而非人类有意义的表示(这是抽象语法树),然后执行原始代码生成到目标语言(msil 是在 .NET 运行时上运行的语言的目标)。

现在,如果将 script# 代码转换为程序集并与其他 .NET 代码交互,则意味着此编译器必须生成 msil。 script# 为此使用 csc.exe,它只是标准的 c# 编译器。现在要生成 javascript,它必须使用 c# 或 msil,解析它,然后生成 javascript 以发送到浏览器。文档说它有一个名为 ssc.exe 的自定义 c# -> js 编译器。

为了使客户端和服务器端的交互一致,它有一组用 .NET 编写但也编译为 javascript 的引用程序集。不过,这不是编译器特定的问题,这些引用程序集是 script# 运行时。不过,运行时可能对您所感知的许多脚本#魔法负责。

关于.net - 如何为 .NET 制作并行编译器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/75258/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com