标签: intermediate-language

C#编译为MSIL代码

Microsoft C#编译器(CSC.exe)是否有输出中间语言文件的选项?有点像GCC中的-S开关吗?

c# cil csc intermediate-language

4
推荐指数
2
解决办法
1581
查看次数

在C#中动态调用方法的选项

我已经看到了很多与我如何调用这样的方法相关的问题.我没有找到的是如何通过反射或csharp中的任何其他方法调用方法的不同选项的列表.

有人能详细解释在csharp中动态调用方法的不同方法吗?从反射到发射IL以及其间的任何其他方式.我想知道在资源方面从最昂贵到最便宜的所有不同方式.

c# reflection methods invocation intermediate-language

4
推荐指数
1
解决办法
440
查看次数

部分C++程序的静态分析

我正在考虑对C++代码示例进行一些静态分析项目,而不是整个程序.通常,静态分析需要一些更简单的中间表示,但是如果没有整个程序代码,则无法准确地创建这种表示.

尽管如此,我知道有一种Java工具 - 它基本上"猜测"了缺失的信息,因此即使它不再合理或完整,也可以进行静态分析.

是否有类似的东西可用于将部分C++代码转换为某种中间形式(例如LLVM字节码)?

c++ static-analysis compilation intermediate-language

4
推荐指数
1
解决办法
580
查看次数

C# 单元测试和代码位于同一文件夹中:从编译的二进制文件中删除测试

我已阅读“您将单元测试放在同一个项目还是另一个项目中吗?”的答案。当时(大约 10 年前)的共识是将单元测试放在与正在测试的代码不同的项目中。给出的主要原因是避免部署非生产代码,这是相当合理的。

从那时起,事情发生了很大变化,至少对于基于 JavaScript 的项目来说,在代码旁边进行测试是常态,而且实际上大多数人认为这是非常可取的。但我不会在这里讨论优点,因为这不是这个问题的目的。

假设我们对 C# 想要同样的东西,但仍然避免将测试代码部署到产品中,那么我们是否可以在 IL 级别编织一些编译后魔法,以在构建过程中从二进制文件中删除测试?例如,我们可以使用该[TestFixture]属性搜索并销毁二进制文件中的所有类吗?

我们可以利用 Roslyn 的某些功能来实现同样的目的吗?

或者,我们还可以采取其他方法吗?

.net c# unit-testing intermediate-language roslyn

4
推荐指数
1
解决办法
1495
查看次数

为什么将 double 转换为 double 会发出 conv.r8 IL 指令

C# 编译器在从进行转换时是否有任何理由发出conv.r8double -> double

这看起来完全没有必要(从 int -> int、char -> char 等进行转换)不会发出等效的转换指令(正如您在该I2I()方法生成的 IL 中看到的那样)。

class Foo
{
    double D2D(double d) => (double) d;
    int I2I(int i) => (int) i;
}
Run Code Online (Sandbox Code Playgroud)

IL 的结果为:

.class private auto ansi '<Module>'
{
} // end of class <Module>

.class private auto ansi beforefieldinit Foo
    extends [System.Private.CoreLib]System.Object
{
    // Methods
    .method private hidebysig 
        instance float64 D2D (
            float64 d
        ) cil managed 
    {
        // Method begins at RVA 0x2050 …
Run Code Online (Sandbox Code Playgroud)

c# cil compilation intermediate-language

4
推荐指数
1
解决办法
169
查看次数

IL(中级语言)入门

任何人都可以建议任何良好的资源开始使用IL.特别是如果有人知道任何好书或截屏,我会很感激反馈.

.net intermediate-language

3
推荐指数
1
解决办法
409
查看次数

ILGenerator:加载创建的方法

我正在使用System.Reflection.Emit,在某些时候我想从MethodBuilder创建一个委托:

MethodBuilder fooBuilder = createFooMethodBuilder();
ILGenerator ilGenerator = ...
Type delegateType = typeof(DelegateType);
LocalBuilder delegateVar = ilGenerator.DeclareLocal(delegateType);
//Somehow create emit instructions to create delegate from fooBuilder
//Store delegate in delegateVar using 
Run Code Online (Sandbox Code Playgroud)

我可以发现从静态函数创建委托使用这样的东西:

ldnull 
ldftn void class Test.MainClass::bar()
newobj instance void class Test.DelegateType::'.ctor'(object, native int)
Run Code Online (Sandbox Code Playgroud)

但是现在我被卡住了.我需要一种方法来修改MethodBuilder然后我需要一种方法来发出以下行的指令.我不知道如何获得一个接受原生int的构造函数.

有什么建议?

.net c# delegates reflection.emit intermediate-language

3
推荐指数
1
解决办法
849
查看次数

来自C++的中间代码

我想将C++程序编译为中间代码.然后,我想用当前处理器的所有资源编译中间代码.

第一步是使用优化(-O2)编译C++程序,运行链接器并执行大部分编译过程.此步骤必须独立于操作系统和体系结构.

第二步是使用处理器的优化和特殊指令(-march = native),为当前计算机的操作系统和处理器编译第一步的结果,而不使用原始源代码.第二步应该是快速且软件要求最低.

我可以做吗?怎么做?

编辑:
我想这样做,因为我想分发一个独立于平台的程序,它可以使用处理器的所有资源,而不需要原始的源代码,而不是为每个平台和操作系统分发编译.如果第二步快速而简单,那将是件好事.

相同架构的处理器可能具有不同的功能.X86处理器可能有SSE1,SSE2或其他,它们可以是32位或64位.如果我为通用X86编译,它将缺乏SSE优化.多年以后,处理器将具有新功能,并且需要针对新处理器编译程序.

c++ compiler-construction optimization cross-platform intermediate-language

3
推荐指数
1
解决办法
1565
查看次数

是否有Perl的LLVM后端?

我有一个用C编写的项目,我希望将其转换为Perl.我的一个朋友建议使用LLVM.我使用Clang将我的C代码编译为LLVM程序集.现在我正在尝试将此中间表示转换为Perl,但我似乎无法找到它的任何后端.有人会指出我正确的方向吗?

perl llvm clang intermediate-language llvm-ir

3
推荐指数
2
解决办法
1419
查看次数

当我启用 LTO/IPO 时,为什么 CMake 设置 -no-fat-lto-objects?

我正在使用 CMake 为我的 C 编译启用 IPO(过程间优化):

set_property(TARGET foo PROPERTY INTERPROCEDURAL_OPTIMIZATION TRUE)
Run Code Online (Sandbox Code Playgroud)

正如预期的那样,这会导致-flto添加编译器标志。然而,它还补充说-fno-fat-lto-objects:这意味着生成的目标文件将只有中间代码,而不是同时包含正确编译的代码和中间代码;这意味着链接器必须支持我的系统编译器的中间表示并且能够感知 IPO/LT​​O。

我没有要求-fno-fat-lto-objects,也不想。我可以让 CMake 不添加此选项吗?

c compilation cmake intermediate-language lto

3
推荐指数
1
解决办法
1688
查看次数