"Live"代码和使用C++和LLVM JIT进行快速原型设计?

"Live" code and rapid prototyping with C++ and LLVM JIT?

本文关键字:原型 JIT 代码 Live LLVM C++      更新时间:2023-10-16

你可能已经看过Bret Victor的"实时"JS IDE,或者它启发的一些替代实现,扩展到其他语言,但仍然保留它基于VM的语言。

然而,昨天,我偶然发现了同样的概念,应用于古老的C++,这要归功于LLVM。仍然是一个非常早期和不成熟的实施,但有很大的潜力。

我真的很好奇这个实现,但是作者已经并且可能不会将其公开发布。

所以我的问题是,如果有人知道有关如何实现类似功能的资源,我的意思是几乎即时的编译和两个连接,提供代码的实时反馈,允许视觉部分更改甚至生成和预览其他代码?

名为"Cling"的基于 clang 的 C/C++ 解释器可能是相关的代码段。了解如何使用它来实时构建 GUI:http://www.youtube.com/watch?v=BrjV1ZgYbbA

Linux:如果有人想要一种天真的方法来几乎实时地测试快速的 C/C++ 代码,你可以使用我组装的这段代码:

#!/bin/bash
#Requires: inotify-tools
################################
# Adjust values:
terminal="xterm"
editor="vim"
compiler="clang++"
################################
if [[ $1 == "" ]]; then
    echo "Usage: $0 example.cpp";
    exit
fi
file_to_edit=$1
file_output=${file_to_edit%%.*}
(while(true); do 
    change=$(inotifywait -q -e close_write,moved_to,create .);
    change=${change#./ * }
    if [ "$change" = "$file_to_edit" ]; then
        ($compiler $file_to_edit -o $file_output);
    fi
done) & > /dev/null
$terminal -e "watch -n 1 ./$file_output" &
$editor $file_to_edit;
pkill -P $$

注意:它需要"通知工具"包。

它是如何工作的?

1)它将打开一个终端(默认:xterm),其中每秒将使用"watch"命令执行二进制文件(如果不存在文件,则只会显示"未找到错误")

2)如果你的C/C++代码发生变化,它会编译它(默认编译器:clang++,但你可以使用gcc等)。如果需要,可以在以下位置修改编译命令: $compiler $file_to_edit -o $file_output

3)它将使用您选择的编辑器打开文件(默认为vim)。

4)出口时将关闭终端和监控过程。