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 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 ....)也可能更喜歡一些與資金,正式協作等有關的信息...如果可能的話,用英語或法語在您的電子郵件中明確提及他們。