您可能已经看过BretVictor's"live"JSIDE,或一些alternativeimplementations它激发了灵感,扩展到其他语言,但仍然保留基于VM的语言。但是昨天,我偶然发现了thesameconcept,appliedingoodoldC++,感谢LLVM。仍然是一个非常早期和不成熟的实现,但具有很大的潜力。我真的很好奇这个实现,但是作者已经并且可能不会公开发布它。所以我的问题是,如果有人知道如何实现类似功能的资源,我的意思是几乎瞬时编译和两个连接,提供代码的实时反馈,允许视觉部分更改甚至生成和预览附加代码? 最佳答案
当从现有的AST构建IR时,我的AST有一些字符串值(在编译时它们是从std::string构建的)并且我想将它们安全地设置为llvm::Value用作表达式的一部分。在这种情况下,我不需要在运行时绑定(bind)字符串,因为字符串值仅用于在编译时将内容解析为变量、函数或类(该语言不支持native字符串类型)。什么是将我的字符串内容保持为llvm::Value并且仍然能够在编译的后期阶段检索它的最佳方法(当构建嵌套表达式时)?更具体地说,如果我将llvm::Value设置为:llvm::Value*v=llvm::ConstantArray::get(llvmContext,mySt
更新:我创建了一个更多的M,但仍然是重现崩溃的CVE。摘要:删除了Base类中对Bool*bools_字段的所有使用(但它仍然必须定义,否则不会发生崩溃)。还从Base及其后代中删除了Base::Initialize()和虚方法Rule。附上新的MCVE。我已经设法为此代码创建了一个MCVE并将其发布在下方。一些描述性细节:代码使用虚基类和派生类,某些实例化的派生类具有调用从“基”类继承的非虚方法的构造函数(实际上是派生类,但在继承层次结构比我所说的“派生”类)来初始化“基”类数据。该方法调用在派生类中重写的虚方法。我意识到这是一件危险的事情,但根据我对C++的(可能有限的)理解,它似
是否可以从gcov覆盖分析中排除某些函数或代码行。我的代码包含某些用于调试的函数,不作为我的测试套件的一部分进行练习。这些函数降低了gcov报告的覆盖率。我想从结果中排除这些功能。如果无法通过gcov实现,也许可以通过lcov实现,但我无法弄清楚。感谢您的帮助。 最佳答案 我通过一个简单的awk脚本运行lcov--capture的输出来过滤掉某些源文件。lcov--capture的输出格式非常简单,下面的awk脚本过滤掉与file_pattern匹配的源文件。我认为可以调整脚本以使其过滤函数而不是文件名。BEGIN{record="
当我运行gcovfoo.cpp时,它不仅会生成foo.cpp的代码覆盖率报告,还会生成foo.cpp使用的所有STLheader的代码覆盖率报告。有没有办法避免这种情况?它似乎忽略了像这样的标准库头文件.编辑刚在gcc邮件列表上看到这篇文章:Re:gcc,gcovandSTL 最佳答案 -r--relative-onlyOnlyoutputinformationaboutsourcefileswitharelativepathname(aftersourceprefixelision).Absolutepathsareusually
最近,为了磨练我的汇编技能,我用C++为玩具语言编写了一个非常简单的编译器。它运行单channel,并在解析阶段直接将代码发送到多个字符串流,每个字符串流代表一段代码(即一个代表section.bss,而其他代表.data和.text)。然后,将这些字符串流写入一个文件,我使用NASM和gcc来组装和链接它们。我知道这种单遍方法效率极低,但同样,这更像是一种理解代码生成阶段的练习,而不是其他任何东西。无论如何,我想修改我的代码以直接发出LLVMIL而不是原始汇编,再次作为学习练习。是否有任何关于LLVMIL的入门级指南?或者,更好的是,一个工具来确定一行汇编的等效IL代码?我看了看,只
我正在使用LLVM编写编译器。每个源文件都被编译成一个LLVM位码文件。最终,链接器将所有位码文件链接并优化为一个最终的二进制文件。我需要一种方法来读取编译器中的位码文件,以便访问类型信息。LLVM文档显示了一个名为BitcodeReader的类,但它似乎是LLVM的内部类。是否有任何可公开访问的方式将位码文件读入llvm::Module? 最佳答案 我查看了llvm-dis工具的源代码,找到了我要找的功能:Module*ParseBitcodeFile(MemoryBuffer*Buffer,LLVMContext&Context
我目前正在使用llc使用命令行将.ll文件转换为.s。然后我想拿这个文件然后使用nasm从中创建可执行文件。虽然第一步似乎工作正常,但我无法让第二步工作。原始文件名为code.ll,包含以下代码:definei32@main(){reti320}现在我使用cmd通过键入以下内容来构建.s文件:llccode.ll这工作正常并创建一个包含以下代码的code.s文件:.def@feat.00;.scl3;.type0;.endef.globl@feat.00@feat.00=1.def_main;.scl2;.type32;.endef.text.globl_main.align16,0x
我不是经验丰富的LLVM用户,但我正在尝试在Windows上编译LinuxLLVM项目。该项目是GHDL。因为适用于Windows的即用型LLVM安装程序没有捆绑llvm-config,所以我需要从源代码编译LLVM和clange。该项目需要LLVM3.5。首先,我下载了llvm-3.5.2和clang-3.5.2并使用CMake将其转换为VisualStudio2013项目。然后我用VS2013编译了一下。原始makefile调用llvm-config。生成的字符串传递给clang++:clang++-c-I`/usr/lib/llvm-3.5/bin/llvm-config--in
LLVM和GCC都支持Objective-C,我喜欢这种语言。因此,我有兴趣使用LLVM或GCC来定位WinRTnative代码,可能使用MinGW。虽然我感兴趣的问题应该很容易通过谷歌搜索,但我找不到任何重要信息:LLVM或GCC是否支持以WinRT为目标?英特尔有一篇关于usingIntelC++Compiler13.0withVisualStudio2012的文章其中可能包含有用的提示。还有一个nearduplicatequestion. 最佳答案 Clang现在完全支持Windows上的nativeC和C++,以及nat