问题标签 [intermediate-language]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
78 浏览

javascript - Javascript 对象表示格式

在编译器 IR 表示中,我们知道函数类型可以使用笛卡尔积来表示。

例如:

函数类型可以表示为:(int × double)->int

(请注意,这里我假设所有类型都是已知的)

所以,如果我在 Javascript 中声明一个对象,比如

是否有任何正式的表示来表示obj,它是Javascript中的对象类型?

谢谢你。

0 投票
0 回答
64 浏览

c - 中间码/三地址码中的加法运算是什么样的?

如果我写一个函数如下

编译器如何用三个地址码/中间码来表示返回语句?做

我的解释是,在第一种情况下,如果添加了i,然后使用i-1作为参数递归调用sum,而在另一种情况下,使用i作为参数调用sum ,并将i-1添加到其中。那正确吗?有人可以解释编译器级别会发生什么吗?

如果将 1) 和 2) 修改为

在递归意义上会发生什么?我认为这将是一个无限循环,但是 i-- 呢?

0 投票
3 回答
380 浏览

c++ - 是否有用于将特定 IR 编译为体系结构特定代码的 LLVM 替代库?

我在问是否有库为他们需要的 IR 提供规范,并提供用于将包含该 IR 的文件编译为机器代码的程序。我不想使用 LLVM 的原因是:

  • 我想编写自己生成 IR 的代码。

  • 当我在不同的计算机上工作时,安装 LLVM 开发库有点让人头疼。

  • 我喜欢 LLVM 允许程序员生成 IR 而不必担心编译成汇编,所以我仍然想要这个功能。

0 投票
1 回答
300 浏览

.net - 了解 MSIL (CIL) 关键字中的点

我正在研究 MSIL (CIL) 代码着色器,尽管我对 MSIL 不太熟悉。

我在Common Language Infrastructure (CLI)中找到了所有关键字的列表。

这些关键字包括add, .file,conv.i4unaligned..

作为关键字的一部分,我有点挣扎。我很确定这些点需要成为关键词的一部分,因为我不认为像这样i4的东西本身就可以作为关键词。而且我很确定我希望某些关键字开头的点成为关键字的一部分。

但是那些有尾随点的少数呢,比如最后一个呢?尾随点是关键字的一部分有什么原因吗?

0 投票
2 回答
471 浏览

c# - 这条 IL 指令中的 -2 是什么意思?

我发现了IL code一个简单的程序:

我在发布模式下构建此代码并IL code生成:

我弄清楚了几乎所有的指令,除了这个:

现在这个指令应该推入int.MaxValue * 2L堆栈,然后blt.s将它与 进行比较i,如果i小于该值返回到IL_0008。但是,我无法弄清楚为什么它加载-2?如果我改变如下循环:

它加载期望值:

那么-2这段代码中的含义是什么?

0 投票
1 回答
4279 浏览

c# - 为什么C#不直接编译成机器码?

CIL 是一种面向对象的汇编语言,完全基于堆栈。它的字节码被翻译成本机代码,或者——最常见的是——由虚拟机执行。

为什么我们需要 CIL?不能将 C# 翻译成本机代码而不是 CIL 吗?如果所有 .Net 语言都编译为 CIL,为什么不使用 C# 而不是 IL?CIL 比 C# 或 VB 更具表现力吗?

0 投票
0 回答
183 浏览

compiler-construction - 目标代码模拟器的中间代码

我一直在为一种名为 Cool(Classroom Object Oriented Language)的面向对象语言开发编译器。

  • 我现在需要选择一个中间代码表示。我在想也许是 p 码或三个地址码。

  • 对于代码生成,由于我没有太多时间,我考虑使用现有的(开源)代码将中间代码转换为目标机器代码,如 MIPS 或 x86。

请建议是否有任何现有的转换器(或仿真器)可以执行我上面描述的操作。并且根据此类程序的可用性,我将选择 apt 中间表示。

  • 如果没有这样的现有开源代码,建议任何这样的捷径或从中间代码到达目标代码,而无需按照常规方式编写代码生成器。

谢谢。

0 投票
0 回答
110 浏览

c++ - 我可以以有效的方式从 C++ 调用 LLVM 后端的输出吗?

假设我有一些使用 LLVM 前端可用的编程语言编写的逻辑。我想在一些 C++ 应用程序中重用这个逻辑。我可以使用常见的 LLVM 后端生成某种库并从我的应用程序中调用它而不会显着降低性能吗?关于如何解决这个用例的任何提示?

0 投票
2 回答
329 浏览

c# - IL if-comparision reversed

I'm just trying to get into IL because I'm working with code-injection. I'm required to analyze code and cover various cases.

Sadly it doesn't work to inject a method call at the end if the last instructions are inside an if-clause, because the call is being contained by the paranthesis then.

Now I've been analyzing if-code being translated into IL and I'm a bit confused by how this is done. Obviously the compiler reverses the if. Is this because of performance reasons? If so by how far does this improve performance?

See for yourself:

and this is the output:

As you can see, after the comparison of the Random result with the const 3 it does a comparision against 0 again and thus reverses the result which is equivalent to if (false).

What reason has this? Isn't it less performant since you need additional instructions? Does this happen always?

0 投票
0 回答
150 浏览

abstract-syntax-tree - 英特尔的 icc 编译器能否生成 AST、CFG 和/或 IR?

使用 clang 时,我发现检查它生成的抽象语法树 (AST)、控制流图 (CFG) 和 LLVM IR 很有用。

我已经开始查看英特尔的 icc 编译器(版本 15.0.2),但我找不到任何文档告诉我是否/如何让它产生相同的工件。

我发现最接近的是它可以生成胖链接时间对象,其中包含 IR 等。但是,我没有看到任何暗示 IR 是为了让用户理解的东西。

有谁知道是否有办法从 icc 获取这些工件?