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

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

我不完全确定我甚至能够很好地理解这个过程以便用正确的细节提出问题,但这是我目前看到这个过程的方式,正如Script#docs中的图表所示。 我想过很多涉及复杂语言设计和编译的东西,可以利用这样的概念,我对其他人对这些概念的看法感兴趣。

-

编辑:感谢您的评论,到目前为止; 你的信息本身就非常有趣,我想更多地研究它,但我的问题实际上是关于如何编写我自己的编译器,它可以在同一个源上同时运行使用CLR产生多种不同类型的(可能)相互依赖的输出。 脚本#作为一个例子,因为它使用相同的C#源生成JavaScript和汇编,同时使编译的汇编与JavaScript协作。 我很好奇在设计这种性质的东西时,各种方法和理论概念是什么。

===============>>#1 票数:2 已采纳

重要的是要意识到所有编译器都采用源语言(在本例中为C#),解析它以便编译器具有对其有意义的表示而不是人类(这是抽象语法树),然后执行生成目标语言的天真代码(msil是在.NET运行时运行的语言的目标)。

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

为了在客户端和服务器端使事物一致地交互,它有一组用.NET编写但也编译为javascript的引用程序集。 这不是编译器特定的问题,那些引用程序集是脚本#moertime。 运行时可能负责很多你正在感知的脚本#magic。

===============>>#2 票数:0

所以假设您想将C#编译成Javascript。 您在询问是否可以利用现有的C#编译器,所以不是直接将C#编译成Javascript,而是实际将C#编译器生成的MSIL转换为Javascript?

当然,你可以做到这一点。 一旦你有了MSIL二进制文件,你可以做任何你想做的事情。

===============>>#3 票数:0

微软有一个名为Volta的研究项目,其中包括将msil编译为JavaScript。

用于使用现有和熟悉的工具,技术和模式构建多层Web应用程序的开发人员工具集。 Volta的声明式层次拆分使开发人员能够推迟有关分发的架构决策,直到最后可能的负责任时刻。 此外,由于跨多层的共享编程模型,Volta支持新的端到端分析和测试,以实现更高级别的应用程序性能,稳健性和可靠性。 使用声明性层分割,开发人员可以根据此分析数据优化体系结构决策。 这节省了与手动重构相关的时间和成本。 实际上,Volta扩展了.NET平台,使用现有和熟悉的工具和技术进一步支持软件+服务应用程序的开发。

您将应用程序设计和构建为.NET客户端应用程序,在开发过程的后期分配在服务器层和客户端层上运行的应用程序部分。 您可以将Web浏览器或CLR定位为客户端,Volta可以处理层拆分的复杂性。 编译器为客户端层创建跨浏览器JavaScript,为服务器层创建Web服务,以及将层级绑定在一起的所有通信,序列化,同步,安全性和其他样板代码。 实际上,Volta在多种环境中提供尽力而为的体验,而无需定制应用程序。

  ask by TheXenocide translate from so

未解决问题?本站智能推荐:

1回复

编译器设计:如何区分“ op_Minus number”和“ negativeNumber”?

如何区分令牌序列“ op_Minus”“ number”和简单的负数?
4回复

获取元数据以编译.net语言

我正在为目标为.Net平台的新语言做概念验证。 我已经整理好了词法分析器。 我很懒,我只是要使用CodeDom生成C#,而不是此时发出IL,然后进行编译。 但是,为了为我的语法生成正确的C#,我需要能够为“编译器”提供所有引用程序集的元数据,以便我可以查找所有类,方法,参数,接口等。什
2回复

首选书籍或学习知道.net的内部工作[关闭]

当我们在应用程序级别做任何事情时,我想知道.net的内部工作。 就像在我的项目中我将创建一个类的对象然后在.net内部级别的场景背后发生的事情或当我继承基类到子类时那么我的子类如何得到基类的所有方法到底是什么发生在.net内部。 这可能是一个奇怪的问题,但我想知道所有内部深度和工作。
5回复

VB.NET中的foreach比c#更快吗?

我的同事说,在之前的一次采访中,他了解到VB中的foreach比c#的foreach更快。 他被告知这是因为两者都有不同的CLR实现。 从C ++的角度来看,我很好奇为什么会这样,而且我被告知我需要先阅读CLR。 谷歌搜索foreach和CLR并不能帮助我理解。 有没有人能够很好
4回复

是否可以在C#或VB.NET中添加关键字?

我知道这可能不值得,但仅仅出于教育目的,我想知道是否有办法将自己的关键词注入.NET语言。 例如,我认为在C#中使用C ++ asm关键字是件好事。 请记住,我不是在讨论如何实现asm关键字,而是将关键字添加到C#的一般方法。 我想象的代码: 有没有办法实现这一目标?
1回复

使用Irony在.Net 2.0中进行自定义语言设计

就像问题所说的那样,我在公司里面坚持使用.Net 2.0,没有升级的机会。 有没有办法让Irony在.NET 2.0中运行。 我将简要地试着解释一下我想要实现的目标。 我们公司有一个工资单系统,我们让客户定义自己的工资单项目公式。 这些公式必须使用我们通过Regex检查的一些关键字/
1回复

为什么.NET没有概念(致命)错误异常类型的设计原因? [关闭]

初步说明: 这个问题不打算用于破坏.NET,也不打算讨论战争,如果存在“致命异常”这样的事情--Java的设计者清楚地认为存在 ,.NET设计者要么不这样认为,不知道否则,或者可能存在异常层次结构的另一个(技术)原因。 我最感兴趣的是,是否有任何MS设计人员的设计文档或声明,为什么.
2回复

为什么VB.NET中的可选类属性有一个奇怪的语法?

我只是好奇为什么VB.NET中的类/属性属性有一个奇怪的可选语法,例如: VB.NET允许你设置这样的可选参数,以避免订单限制(这是可爱的),但在这种情况下,它迫使你这样做。 例如,这是不可能的: 即使参数与原始定义的顺序相同。 这有什么好的理由吗? 或者只是.NE
3回复

.NET中的隐式链构造函数

为什么基类没有隐式链构造函数? 我的意思是? 让我们看一下以下类: 如果尝试编译此代码,则不会编译。 如您所见, Person取决于名称,并且很清楚,您不会构造没有Name的Person 。 为什么没有隐式的EnhancedPerson构造函数,该构造函数链接到每个Per
2回复

.NET / CLR上Scala中的Reified泛型

Scala(至少在JVM上 )使用类型擦除来实现Java兼容性。 这个功能被广泛 持有 ,以 吸 。 在JVM上解决这个问题很困难 。 与JVM情况相反,.NET支持reified泛型。 Scala的.NET实现是否使用它们? 如果没有,可能,或者使用具体原因会出现什么问题?