bismon (这是一个临时名称)是一个持久的监视器,将来(将来)将与GCC编译器Thru插件进行交互。它是(或将成为)以某种方式成为我旧的GCC融化项目的继任者;中期目标也是借助GCC的静态程序源代码分析。 The source code repository (GPLv3+ licensed) is on https://github.com/bstarynk/bismon .. My (Basile Starynkevitch, employed at CEA, LIST in France) work on bismon is partly funded (from start of 2018 to end of 2020) by the European Union, Horizon H2020 programme, CHARIOT project, under Grant Agreement No 780075. Within CHARIOT I will focus on analysis在C ++中编码的某种物联网软件,以及GCC在某些Linux桌面上编写的(交叉)。在2019年至2021年,根据赠款协议824231(与其持续的知识监视器WP1有关), bismon的发展也部分由解码器H2020项目资助。
目前(2021年开始) bismon仍处于Beta阶段,并且在GPLV3+许可证下是免费软件。它适用于Linux X86-64桌面开发人员的工作站(在Windows或MacOSX或Android上不起作用)。
可以生成一些仍然不完整的文档(作为PDF中的技术报告doc/bismon-doc.pdf )(使用然后make doc make该命令要求您具有可写的$HOME/tmp/ directory)。该报告的早期(非正式)草案可能可在http://starynkevitch.net/basile/bismon-doc.pdf上找到
While Bismon is currently funded by H2020 projects with static-analysis goals, please notice that Bismon might later -when more mature, after 2024- be probably usable as a somehow generic framework , with a lot of additional work (years, not months), for many other purposes (the most significant limit being your imagination, and the power of your computer), including perhaps even some kind of AI system (read J.Pitrat's book Artificial Beings: the conscious of有意识的机器,ISBN:978-1848211018),精致的桌面式图形环境,一些基于交互式Web的协作软件工具由某些团队同时使用,或对象数据库应用程序或相关问题。由于Bismon是GPLV3+许可,因此,任何未来使用它的软件都应该是IMHO,实际上也是GPLV3+(但是其他许可方案可能是可能的,请通过[email protected]与我联系;但是,Ianal ...)
[联合罢工战斗机汽车C ++编码标准](https://www.stroustrup.com/jsf-av-rules.pdf)
[Zero-Overhead确定性例外:投掷值](http://www.open-std.org/jtc1/sc2222222221/wg21/docs/papers/2019/p0709r4.pdf)
[C ++标准化,论文2021](http://www.open-std.org/jtc1/sc22/wg21/wg21/docs/papers/2021/)
开发某种高级(更具表现力,更具声明性的)域语言,以促进GCC上方的静态程序源代码分析,并为其生成GCC插件,与GCC融化相同的动机(以及与Coccinnelle,Coccinnelle,Frama-C,Frama-C,Rascal,Rascal,Rascal,Crossminer,Crossminer,Clang,Clang Enallyzer,Clang,Clang等)相同的动机。
特定领域的语言的重要特征和目标及其实施包括:
正交持久性;这是一个主要功能(对于整个程序的静态源代码分析,对由几个翻译单元制成的分析程序进行了静态源代码分析,每个单元独立编译),这是不可实际添加到GCC熔体的,因此需要进行完整的重新设计。预计bismon过程将是相对较长的服务器类似的,并将其大部分数据从一个运行中保留到下一个数据(在store*.bmon Textual Files中)。将来, bismon过程将与gcc或g++ (交叉)编译过程进行通信(使用bismon本身生成的一些GCC插件)
动态打字,例如Python,Scheme,Ruby,JavaScript,...(某种程度上融化)。
多线程,但没有任何吉尔。一个小的工人线程池反复并同时从全球议程中获取任务。每个工作人员在某些工作线程中快速运行(毫秒),可以更新该议程(例如,添加自身要继续)。
反身
同性恋
精确收集了垃圾
声明性,具有良好的模式匹配和规则形式主义
自举并将其编译为C,也许是使用GCCJIT的某些部分。
如此元编程
生成GCC插件(在C ++中),该插件将通过某些RPC机制与bismon相互作用
请注意, bismon的语法和语义(仍然没有证明)是在进行中的工作,并且可能会更改。
当bismon将完成至可用点时,通常会由一小部分开发人员一起使用(通常是在C或C ++中编码的)(最好是一个免费软件项目)。
bismon的大部分位于C99或C11中(包括modules/下的越来越多的生成的C代码),但是一些手写的代码在C ++ 14中(尤其是misc_BM.cc和BM_makeconst.cc Metagrogram Igractram图生成C标头)。
在Linux/X86-64上(例如Debian/Unclable或Buster或最近的Ubuntu 18或19) (没有其他补丁或工作, Bismon都无法在32块钻机上工作!):
您应该能够为其源代码编译许多开源软件包。您应该拥有一个近期具有根部ACESS的GNU/Linux系统,最好是32个GIGABYTES或更多的RAM,一些X86-64处理器,至少有4个核心,以及至少250gbytes的自由磁盘空间。期望您能通过Linux命令行界面和UNIX壳(例如GNU BASH或ZSH)感到流利。您应该能够并且可以从其源代码中汇总GCC 10,或者最好是GCC 11,并且熟悉源代码编辑器,例如GNU Emacs,Vim,Geany等...您喜欢阅读SICP。
另请参见依赖项子目录及其依赖性的依赖性 - 也许没有更新。
最近的GCC(SO GCC 10或最好是GCC 11 ...),并启用C ++以及JIT支持和插件(使用gcc -v ;如果您的System gcc和g++都缺乏对插件和Libgccjit的支持,则应从其源代码中构建并安装GCC最新发布,并配置它以提供它们。)。无法使用旧的GCC (例如9或更早版本)。
'/usr/src/Lang/gcc-11.1.0/configure' '-v' '--prefix=/usr/local' '--with-gcc-major-version-only' '--program-suffix=-11' '--enable-shared' '--enable-linker-build-id' '--enable-nls' '--enable-bootstrap' '--enable-clocale=gnu' '--enable-libstdcxx-debug' '--enable-libstdcxx-time=yes' '--with-default-libstdcxx-abi=new' '--enable-gnu-unique-object' '--disable-vtable-verify' '--enable-plugin' '--enable-default-pie' '--with-system-zlib' '--enable-libphobos-checking=release' '--with-target-system-zlib=auto' '--enable-objc-gc=auto' '--enable-multiarch' '--disable-werror' '--with-arch-32=i686' '--with-abi=m64' '--with-multilib-list=m32,m64,mx32' '--enable-multilib' '--with-tune=native' 'CFLAGS=-O2 -g' 'CXXFLAGS=-O2 -g' '--enable-host-shared' '--enable-languages=c,c++,d,go,jit,lto' ....最近安装了PIP的Python 3。
该文档需要由GCC-8-MIPSEL /usr/bin/mipsel-linux-gnu-gcc-8 gcc-8-mipsel-linux-gnu DEBIAN软件包提供的A/USR/BIN/MIPSEL-LINUX-LINUX-LINUX-LINUX-GCC-8跨编译器。当心,该软件包与Debian上的gcc-multilib*软件包发生冲突。
需要忍者建筑商,1.8版或更新的版本(并由make启动)。不要使用较旧的人(请检查ninja --version ;如果那不起作用,您的ninja太老了)。
需要最近的Guile解释器,即版本2或更高(最好是Guile 2.2)。我不知道,非常不喜欢Python,而Guile口译员是GNU,LGPLV3+,对我来说更熟悉。同样,LISP方言(例如guile实施的语言)的概念与理解Bismon非常相关,而Bismon则使用Guile用于生成build.ninja脚本。
最近的Guile增强的mailutils ,即Debian mailutils-guile可执行/usr/bin/guimb 。
GLIB 2.58或更高(上面的GTK也需要),因为需要一些低级别例程,特别是与UTF-8相关的例程。
JSON需要使用Jansson 2.12或更高(用于Websockets)。
Web界面需要Libonion,但在2022年6月27日被删除,GIT COMMIT a943cf687c748或标记no-more-ibonion-tag (带有错字:缺失l )。在此提交之前,请查看BISMON_LIBONION预处理器标志。
gnu使4或更好
CCACHE用于避免无用的重新补偿。如果没有它,则需要编辑我们的Makefile来编译生成的模块。
libbacktrace-有时是系统GCC的一部分,但是您最好单独安装它(例如,在您/usr/local/ prefix中)
某些文档需要降级,例如此README.md
GNU缩进(终于2.2.x)和ASTYLE(至少3.1)对于make indent很有用。现在,生成的模块需要indent 。
Tardy( tar文件后处理器)用于生成文档。
乳胶 - 可能是带有Inkscape,Hevea和Hevea and Xindy的Texlive Suite或Luatex-及相关实用程序( pdflatex , makeidx , bibtex ...)。
On Debian/Unstable or recent Ubuntu, apt-get install build-essential make ninja-build gcc-8 g++-8 gcc-8-plugin-dev libgccjit-8-dev ccache gcc-8-mipsel-linux-gnu inkscape hevea texlive-full xindy fonts-inconsolata ttf-ubuntu-font-family fonts-ubuntu ttfautohint guile-2.2 mailutils-guile ;请注意, gcc-8-mipsel-linux-gnu是MIPSEL GCC跨编译器 - 它与gcc-multilib*软件包发生冲突; inkscape , hevea , texlive-full (巨大的元包), xindy , fonts-inconsolata , fonts-ubuntu , ttfautohint需要生成文档。
GTK 3我们仍然需要apt-get install libgtk-3-dev这可能会吸引很多依赖关系。
apt-get install libglib2.0-dev libjansson-dev ,我们的glib和jansson需要依赖项。
libbacktrace并非独立包装在Debian中。我建议通过其源代码构建和安装它,否则(不建议使用,但可行)编辑Makefile以使用您的系统GCC编译器的编译器。
libonion并非独立包装在Debian中。
apt-get install markdown indent astyle tardy和apt-get install texlive texlive-full hevea
dependencies/子目录用于与libbacktrace和libonion相关的git submodule -s
您可能需要将.mjs添加为有效的后缀或文件扩展名,以在您的/etc/mime.types系统文件中使用application/javascript MIME类型。在网络上阅读有关JavaScript模块的信息,并查看Debian Bug#927300。
运行locale ,以确保您的本地化在UTF-8中是符合POSIX符合POSIX的或英语(英国或美国)(例如,它不能是意大利语,希腊语或法语)。因此,应该是POSIX或C或en_US.UTF-8或en_GB.UTF-8 。您可能需要适当地设置环境变量(至少LANG=en_US.UTF-8和LANGUAGE=en_US:en and LC_ALL=en_US.UTF-8 ,没有其他LC_*环境变量)。参见LOCALE(1),LOCALE(7),UTF-8(7),LOCALE(5),SETLOCALE(3)。但是,不要要求我更多地了解这些非常微妙的国际化和本地化细节,该主题非常复杂。如果您仍然需要由我完成的工作,请给我发送电子邮件至[email protected] 。但是不要指望它是在2024年之前由我完成的。
.mjs文件扩展名适用于JavaScript模块。如果您的/etc/mime.types文件( libonion使用)不知道,则需要添加以下行(下面的第一行,带有哈希# ,是评论;重要的是提及mjs行)。
# in your /etc/mime.types for JavaScript modules
application/javascript mjs
文档生成需要可写的$HOME/tmp/ Directory。
应在contact_BM文件中给出一个主要的人负责联系(以#开始的注释已在内部接受,但应具有John Doe <[email protected]>的线。该文件应在当前目录或您的主目录中,或用--contact-file=PATH明确给出。我的~/contact_BM文件可能是:
# file $HOME/contact_BM
Bismon master (Basile Starynkevitch) <[email protected]>
git配置您可能希望(适应此建议并定义您的自定义大块头),以改善store*.bmon持久数据文件的git diff的交互式输出。也许是从git config diff.bismon.xfuncname '"^«_[0-9A-Za-z_]*$"'可能起作用的东西,但实际上并非如此。
像往常一样克隆此git存储库,然后在获得的源树中使用bismon 。
查看Makefile ,并在需要时进行编辑;也许通过将$(shell gcc-7 -print-file-name=include)添加到PREPROFLAGS= LIBES=和$(shell gcc-7 -7 -7 -7-print-file-name = libbacktrace )中,将PREPROFLAGS= and libes = line = line,例如,使用系统的$(shell gcc-7 -print-file-name=libbacktrace.a)到LIBES= line中。当然,如果适当的话,将7替换为8。也许您需要将GCC=和GXX=明确设置为特定的GCC C和C ++编译器。
make或make -j3
持久性机制通过make redump测试
./bismon程序(暂时)仍在使用GTK和Libonion。我们想摆脱GTK。它被称为bismongtk和bismonion 。
请确保与--help首先使用bismon , bismongtk或bismonion一起使用,以了解可用的程序选项。
bismon (至少其Web版本)需要了解您。因此,您应该向其注册一次(这会增长其持续状态)。 bismon (更确切地说是bismonion )具有登录表格,因此您应该拥有一个密码(特定于bismon ,与您拥有的任何其他密码无关)。
您首先需要初始化一个空密码文件(默认密码文件为~/passwords_BM ;您可以在命令行上指定另一个)。因此,在终端(Shell)中运行命令touch ~/passwords_BM以创建该空文件。然后,您需要使用chmod u+rw,go-rwx ~/passwords_BM限制其许可(仅由UNIX用户可读和写作)。最后,使用ls -ls ~/passwords_BM检查此文件仅由您使用,可读取且可写。
然后您会注册自己。如果Alan Turing是您的名字或伪造的,而[email protected]是您的主要电子邮件,您的次要电子邮件是turing@localhost ,您可以通过与类似的东西运行与bismon一起添加到bismon中--contributor='Alan Turing;[email protected];turing@localhost' and --batch and --dump-after-load=.程序选项。当然,您应该用适合您的任何东西代替Alan Turing , [email protected]和turing@localhost 。次要电子邮件(也称为别名)是可选的。如果您不使用它(因此,如果您不提供任何别名,这可能是可能的 - 因此,用空字符串替换turing@localhost ), bismon对您的了解不比git (请参阅user.email和user.name )的Git配置。您甚至可以编码一些Shell脚本以从git中提取该个人数据信息并将其放入bismon中。
最后,您需要设置密码(它与计算机或网络中的其他密码无关,但使用--add-passwords bismon (也带有--batch -form --dump-after-load=. )。 To set your initial password to mypass!123456 create some temporary text file (it contains contributor names and their updated passwords in clear text, so you should not keep it), perhaps /tmp/addpassbismon , containing for example Alan Turing:mypass!123456 add run bismonion with --add-passwords=/tmp/addpassbismon --batch then remove /tmp/addpassbismon .当然,您最好编写一些shell脚本包装,并确保拥有足够强的密码,而该密码不在此README.md中。
您可能会添加您信任的其他一些用户(可能少于十几个),并且可以与您一起使用。每个用户都可以尽可能轻松地弄乱或滥用bismon系统。如果您的任何用户是欧洲人(而GDPR合规性是您的责任),请一定要符合GDPR。登录表格是从源文件login_ONIONBM.thtml的web_onionbm.c的模板(来自web_ONIONBM.c的代码)(如果需要的话,您可以在该文件中改进文本)。
bismon除了2018年7月(Basile)之外,它还不可用(尚无静态源代码分析,尚无生成GCC插件)。如果您想使用GTK查看某些内容,请运行./bismongtk ,然后在标有New-Bismon的命令窗口中键入the_system ,然后将CTRL和返回密钥压在一起。如果您想通过Web界面看到某些内容,请运行./bismonion ,然后在Web浏览器中打开其URL(也许是localhost:8086/或用其他内容--web-base ))。
建议偶尔make clean一段时间(例如每天或每周)。生成文件时, bismon可以备份他们以前的版本。
请问我(Basile starynkevitch, [email protected]或[email protected] ...)有关详细信息。
为了方便起见,此git存储库还包含jQueryui 1.12框架(具有不同的MIT许可证) webroot/jquery-ui
stopbismon $HOME/bismon包含bismon源代码和可执行文件:
#!/bin/bash -x
# script stopbismon
if [ -f $HOME/bismon/_bismon.pid ]; then
kill -TERM $(/bin/head -1 $HOME/bismon/_bismon.pid)
else
pkill bismon
fi
这是未发布的免费软件
许可证(GPLV3+)可能不会更改(在战车赠款中指定)。版权通知可能是错误的:在生成的文件中,它尚不符合GPL期望。这些细节是待定的错误,但是还有更多其他错误。
作者在2019年中期充分意识到了这个bismon系统中的几个错误- 一个研究项目 - 但纠正它们并不是优先事项(因为继续进行Bismon的渐进式引导性更为重要,尚未实现)。 GTK界面经常被设计和崩溃(不会纠正),并且应尽快被更可用的Web界面取代 - 这就是2019年中期的工作。请通过电子邮件通过电子邮件联系作者以获取可能的解决方法。请注意,作者知道的临时错误未注册为Bismon gitlab问题,因为该软件尚未批准。
在提交24E400E4B25EA8FBD91中,该文档未能生成。
从文件bismon-doc.tex中删除input{appendix-bm}不要解决该错误。
报告它们的首选方法是在https://github.com/bstarynk/bismon上添加一些新问题
当然,一个问题应该是独立的。如果您能够构建bismon ,请明确给出计算机上的bismon --version输出。
如果该问题与构建bismon可执行文件有关,请明确给您您运行的所有Linux命令(在检查并成功运行了distclean-script.bash脚本之后,或者只是在某些Fresh git clone命令之后)。提及git log -3的输出。
另外,如果您不想添加github问题),则以英语或法语发送电子邮件(UTF-8编码,html5是可取的),或者以法语(或俄语,也许是在俄语中,只有在您不能用英语或法语发送电子邮件)到[email protected]或basile.starynkevitch.net.starynkevitch@[email protected]。我将尝试用英语或法语回答(因为我的书面俄语太糟糕了)。
如果您需要发送屏幕截图,请将某些编码为JPEG或PNG编码的图像附加到您的电子邮件中。
如果您需要或需要发送多个文件,请将所有文件存档在唯一的目录中(其Basename(1)仅包含字母,数字和一些下划线_ ),并制作一些焦油(1)存档。明确给我我需要运行的tar命令(在Linux上)提取您的存档。您可以假设我的Linux计算机上有GNU TAR版本1.30或更高。
如果您给我发送一些C ++代码要由bismon处理,请允许我明确地对其进行编译,并用英语,法语或俄语添加评论(UTF8编码)。
如果可能的话,添加一些Shell脚本(用于GNU BASH或ZSH ....),这使我能够复制该错误,并在电子邮件或错误报告中命名该脚本。
我的雇主(如果您不在CEA ....)也可能更喜欢一些与资金,正式协作等有关的信息...如果可能的话,用英语或法语在您的电子邮件中明确提及他们。