您可能已经看过Bret Victor 的“实时”JS IDE,或者它启发的一些替代实现,它们扩展到其他语言,但仍然保留在基于 VM 的语言中。
然而,昨天,我偶然发现了同样的概念,它应用在了很好的旧 C++中,这要归功于 LLVM。仍然是一个非常早期和不成熟的实施,但有很大的潜力。
我真的很好奇它的实现,但是作者已经并且可能不会将它公开。
所以我的问题是,如果有人知道如何实现类似功能的资源,我的意思是几乎瞬时的编译和两个连接,提供代码的实时反馈,允许视觉部分更改甚至生成和预览附加代码?
您可能已经看过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 $$
注意:它需要“inotify-tools”包。
它是如何工作的?
1)它将打开一个终端(默认:xterm),其中每秒将使用“watch”命令执行二进制文件(如果不存在文件,它将只显示“未找到错误”)
2) 如果你的 C/C++ 代码发生变化,它会编译它(默认编译器:clang++,但你可以使用 gcc 等)。如果需要,可以在以下位置修改编译命令:$compiler $file_to_edit -o $file_output
3)它将使用您选择的编辑器(默认为vim)打开文件。
4) 退出时将关闭终端和监控进程。