bismon (これは一時的な名前です)は、(将来)プラグインを通じてGCCコンパイラと対話する永続的なモニターです。それはどういうわけか私の古いGCCメルトプロジェクトの後継者です(またはなるでしょう)。中期目標は、GCCの助けを借りて静的プログラムソースコード分析でもあります。ソースコードリポジトリ(GPLV3+ bismon )はhttps://github.com/bstarynk/bismonにあります。 LinuxデスクトップでGCCによってコンパイルされたCまたはC ++でコード化された、ある種のIoTソフトウェアの分析。 2019- 2021年、 bismonの開発は、助成金契約824231(その永続的な知識モニターWP1に関連)に基づき、デコーダーH2020プロジェクトによって部分的に資金提供されています。
現在(2021年の開始) bismonまだベータステージにあり、GPLV3+ライセンスの下でフリーソフトウェアです。 Linux x86-64デスクトップ開発者のワークステーションを対象としています(WindowsまたはMacOSXまたはAndroidで動作しません)。
まだ不完全なドキュメント(PDFのテクニカルレポートdoc/bismon-doc.pdfとして)を生成することができます( make make doc ;そのコマンドでは、手数料$HOME/tmp/ディレクトリを持つ必要があります)。そのレポートの初期の(非公式)ドラフトは、http://starynkevitch.net/basile/bismon-doc.pdfで入手可能になる場合があります。
Bismonは現在、静的分析の目標を持つH2020プロジェクトによって資金提供されていますが、 Bismonは2024年以降、おそらくより一般的なフレームワークとして使用できるようになる可能性があることに注意してください。意識的なマシン、ISBN:978-1848211018)、洗練されたデスクトップのようなグラフィカル環境、多くのインタラクティブなWebベースの共同ソフトウェアツールが、一部のチームまたはオブジェクトデータベースアプリケーションまたは関連する問題によって同時に使用されています。 BismonはGPLV3+ライセンスであるため、それを使用する将来のソフトウェアは、実質的にGPLV3+である必要があります(ただし、他のライセンススキームは可能です。詳細については、 [email protected]に連絡してください。
[ジョイントストライクファイターエアビークルC ++コーディング標準](https://www.stroustrup.com/jsf-av-rules.pdf)
[ゼロオーバーヘッドの決定論的例外:スロー値](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/p0709r4.pdf)
[C ++標準化、論文2021](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2021/)
GCCより上の静的プログラムソースコード分析を促進し、GCCプラグインを生成するために、ある種の高レベル(より表現力のある、より宣言的な)ドメイン固有の言語を開発し、GCCメルトと同じ動機を生成します(そして、より広く関連する動機 - コッシンネル、Frama-C、ラスカル、クロスマイナー、Clang分析など)。
そのドメイン固有の言語の重要な機能と目標とその実装には次のものがあります。
直交の持続性;これは主要な機能(GCCメルトに現実的に追加できない、それぞれが独立してコンパイルされたいくつかの翻訳ユニットで構成された分析されたプログラムのプログラム全体の静的ソースコード分析に役立ちます)したがって、完全な再設計が必要です。 bismonプロセスはstore*.bmon比較的長寿命であると予想されます。将来的には、 bismonプロセスはgccまたはg++ (クロス)コンピレーションプロセスと通信します( bismon自体によって生成されるGCCプラグインを使用して)
Python、Scheme、Ruby、JavaScript、...(そしてどういうわけか溶けて)のような動的なタイピング。
マルチスレッドがありますが、ギルはありません。ワーカースレッドの小さなスレッドプールは、グローバルなアジェンダからタスクレットを繰り返し同時に取得しています。各タスクレットは、一部のワーカースレッドで迅速に実行され(ミリ秒)、そのアジェンダを更新できます(たとえば、それ自体を継続することにより)。
反射
ホモコニック
正確にはゴミが収集されました
宣言的、良好なパターンマッチングとルールの形式主義
Bootstrapped、およびCにコンパイルされました。おそらくGCCJITを使用している部分。
そのためメタプログラム
いくつかのRPCメカニズムによってbismonと相互作用するGCCプラグイン(C ++)の生成
bismonの構文とセマンティクス(まだ文書化されていない)は、進行中であり、互換性がない場合に対応することに注意してください。
bismonが使用可能であることのポイントに完了すると、主にCまたはC ++(およびできればフリーソフトウェアプロジェクト)でコード化された一部の(一般的な)ソフトウェアプロジェクトで一緒に作業する開発者の小さなチームが通常使用します。
bismonの大部分はC99またはC11( modules/の下で生成されたCコードの量が増加することを含む)にありますが、いくつかの手書きコードはC ++ 14(特にmisc_BM.ccおよびBM_makeconst.ccメタプログラムを生成するCヘッダー)にあります。
Linux/x86-64(例:Debian/UnstableまたはBuster、または最近のUbuntu 18または19)のみ(追加のパッチや作業がなければ、 Bismonは32ビットマシンで動作しません!):
ソースコード用に多くのオープンソースソフトウェアパッケージをコンパイルできるはずです。ルートアセスを備えた最近のGNU/Linuxシステム、できれば32Gigabytes以上のRAM、少なくとも4つのコアを備えたいくつかのX86-64プロセッサ、および少なくとも250GBYのフリーディスクスペースが必要です。 Linuxコマンドラインインターフェイス、およびGNU BashやZSHなどのUNIXシェルに堪能になることが期待されています。 GCC 10、またはできればGCC 11をソースコードからコンパイルすることができ、GNU EMACS、VIM、GEANYなどのソースコードエディターに精通している必要があります。
依存関係のサブディレクトリとそのreadme依存性も参照してください - おそらく更新されていません。
CおよびC ++およびJITサポートとプラグインを有効にした最近のGCC(GCC 10またはできればGCC 11 ...)( gcc -vで確認します。GCCとg++ gccインと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-linux-gnu Debianパッケージが提供するA /usr/bin/mipsel-linux-gnu-gcc-8クロスコンパイラが必要です。そのパッケージは、Debianのgcc-multilib*パッケージと競合することに注意してください。
Ninja Builder、バージョン1.8以降が必要です(そしてmakeによって開始されます)。古いものを使用しないでください( ninja --versionで確認してください。それが機能しない場合、 ninjaは古すぎます)。
バージョン2以上の最近のガイルインタープリターが必要です(できればGuile 2.2)。私はPythonを知りませんし、嫌いで、 Guile通訳はGNU、LGPLV3+であり、私にとってはるかに馴染みがあります。また、スキーム( GUILEによって実装された言語)などのLISP方言の概念は、ninjaビルダーが使用するbuild.ninjaスクリプトを生成するためにGuileが使用されるBismonを理解するために強く関連しています。
最近のガイル強化mailutils 、つまり/usr/bin/guimb実行可能ファイルを提供するdebian mailutils-guileです。
Glib 2.58以上(上記のGTKにも必要です)。いくつかの低レベルのルーチン、特にUTF-8関連が必要であるためです。
JSON(WebSocketsに関連して使用)には、Jansson 2.12以上が必要です。
WebインターフェイスにはLibonionが必要でしたが、2022年6月27日に削除され、Git Commit a943cf687c748またはTAG no-more-ibonion-tag (タイプミス:LISSING l )。そのコミットの前に、 BISMON_LIBONION preprocessorフラグを探します。
GNUは4以上になります
CCACHEは、役に立たない再コンパイルを避けるために使用されます。持っていない場合は、生成されたモジュールを編集するためにMakefile編集する必要があります。
libbacktrace-システムGCCの一部である場合もありますが、個別にインストールする方が適切です(たとえば/usr/local/ prefix)
このREADME.mdなど、いくつかのドキュメントにはマークダウンが必要です
GNUインデント(最後に2.2.x)とアスティル(少なくとも3.1)はmake indentのに役立ちます。生成されたモジュールにはindentが必要になりました。
Tardy( tarファイルPostProcessor)を使用してドキュメントを生成します。
LaTex-おそらく、Texlive Suiteまたはlutex-および関連ユーティリティ( pdflatex 、 makeidx 、 bibtex ...)として、Inkscapeとheveaとxindyがドキュメントに必要です。
debian/unstableまたは最近の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 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 for Our GlibとJanssonには依存関係が必要でした。
libbacktraceは、Debianに独立してパッケージ化されていません。ソースコードから構築してインストールすることをお勧めします。または、システムGCCコンパイラのシステムを使用するためにMakefileを編集する(推奨されていないが実行可能)。
libonionはDebianで独立してパッケージ化されていません。
apt-get install markdown indent astyle tardyとapt-get install texlive texlive-full hevea
dependencies/サブディレクトリは、 libbacktraceとlibonionに関連するgit submodule -s用です
/etc/mime.typesシステムファイルにapplication/javascript mimeタイプの有効な接尾辞またはファイル拡張機能として.mjs追加する必要がある場合があります。 Web上のJavaScriptモジュールについて読んで、Debian Bug#927300を参照してください。
localeを実行して、ローカリゼーションがUTF-8でPOSIXに準拠しているか、英国人またはアメリカ人)であることを確認してください(たとえば、イタリア語やギリシャ語、フランス語であることはできません)。したがって、それはPOSIXまたはCまたはen_US.UTF-8またはen_GB.UTF-8でなければなりません。環境変数を適切に設定することをお勧めします(少なくともLANG=en_US.UTF-8およびLANGUAGE=en_US:enおよび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/ディレクトリが必要です。
主な人間の責任ある連絡先はcontact_BMファイルに与えられるべきです( #から始まるコメントは内部で受け入れられますが、 John Doe <[email protected]>に触発された行が必要です)。そのファイルは、現在のディレクトリまたはホームディレクトリにあるか、 --contact-file=PATHで明示的に与えられる必要があります。私の~/contact_BMファイルは次のとおりです。
# file $HOME/contact_BM
Bismon master (Basile Starynkevitch) <[email protected]>
git構成store*.bmon Persistent Dataファイルでgit diffのインタラクティブな出力を改善するには、この提案を適応させ、カスタムハンクヘッダーを定義する)が必要です。おそらく、 git config diff.bismon.xfuncname '"^«_[0-9A-Za-z_]*$"'が機能するかもしれませんが、実際にはそうではありません。
このgitリポジトリを通常どおりにクローンし、取得したソースツリー内でbismonを使用します。
Makefileを調べて、必要に応じて編集します。おそらく、 PREPROFLAGS=およびLIBES=行を更新します。たとえば、システムのGCC libbacktraceを使用して、 $(shell gcc-7 -print-file-name=include)をPREPROFLAGS= lineに追加し、 $(shell gcc-7 -print-file-name=libbacktrace.a) LIBES= lineに追加します。もちろん、必要に応じて7 x 8を交換します。たぶん、特定のGCC CおよびC ++コンパイラにGCC=およびGXX=明示的に設定する必要があるかもしれません。
makeまたはmake -j3実行または作成します
持続メカニズムはmake redumpによってテストされます
./bismonプログラムは(一時的に)まだGTKとLibonionを使用しています。 GTKを取り除きたいです。 bismongtkとbismonionと同時にされています。
bismon 、 bismongtk 、またはbismonionを使用して、最初は--helpで使用できるようにしてください。
bismon (少なくともそのWebバージョン)はあなたについて知る必要があります。したがって、あなたはそれに一度登録する必要があります(そして、それはその持続的な状態を成長させるでしょう)。また、 bismon (より正確にはbismonion )にはログインフォームがあるため、パスワードが必要です( bismonに固有の、他のパスワードとは関係ありません)。
最初に空のパスワードファイルを初期化する必要があります(デフォルトのパスワードファイルは~/passwords_BMです。コマンドラインで別のパスワードを指定できます)。コマンドtouch ~/passwords_BM端末(シェル)で実行して、その空のファイルを作成します。次に、 chmod u+rw,go-rwx ~/passwords_BMを使用して、その許可を制限する必要があります(UNIXユーザーのみがUNIXユーザーのみが書き込み可能です)。最後に、 ls -ls ~/passwords_BMに、このファイルが空で読みやすく、あなただけが書くことができることを確認してください。
その後、あなたは自分自身を登録します。 Alan Turingあなたの名前または擬似であり、 [email protected]あなたのメインメールであり、あなたのセカンダリメールturing@localhostある場合、あなたは--contributor='Alan Turing;[email protected];turing@localhost'および--batch --dump-after-load=.に似たものでそれを実行することでbismonに自分自身を追加できます。プログラムオプション。もちろん、 Alan Turing 、 [email protected]とturing@localhostあなたに適したものに置き換える必要があります。セカンダリメール(エイリアスとも呼ばれます)はオプションです。使用しない場合(したがって、エイリアスを提供しない場合、おそらく - turing@localhost空の文字列に置き換えます)、 bismon gitよりもあなたのことを知りません( user.emailとuser.nameのgit configを参照)。 gitから個人データ情報を抽出してbismonに入れて、シェルスクリプトをコーディングすることもできます。
最後に、パスワードを設定する必要があります(コンピューターまたはウェブ上のbismonの--add-passwordsとは無関係ですが、少なくとも10個のUnicode文字、数字、 --batch 、 --dump-after-load=.がある必要があります)。最初のパスワード/tmp/addpassbismon mypass!123456 bismonion設定--add-passwords=/tmp/addpassbismon --batchためにAlan Turing:mypass!123456 /tmp/addpassbismon 。もちろん、それを包んでシェルスクリプトをいくつか書いて、このREADME.mdにはない十分な強力なパスワードを確実に持っていることを確認してください。
おそらく、あなたが信頼し、それがあなたと一緒に働くことができる他のいくつかのユーザー(おそらく1ダース未満)を追加するかもしれません。すべてのユーザーは、 bismonシステムをできるだけ簡単に台無しにしたり、乱用したりする可能性があります。ユーザーのいずれかがヨーロッパ人である場合は、GDPRに準拠してください(そしてGDPRコンプライアンスはあなたの応答性です)。ログインフォームは、ソースファイルlogin_ONIONBM.thtmlからテンプレート( web_ONIONBM.cのコードを使用して)(必要に応じてそのファイル内のテキストを改善する場合があります)。
bismonを使用します2018年7月の私(Basile)による除いて、まだ使用できません(静的ソースコード分析はまだなく、GCCプラグインの生成はまだありません)。 GTKを使用して何かを見たい場合は、 ./bismongtkを実行してから、 New-Bismonというラベルの付いたコマンドウィンドウにthe_systemを入力し、 CtrlとReturn Keysの両方を一緒に押します。 Webインターフェイスを通して何かを見たい場合は、WebブラウザーでURL(おそらく./bismonion localhost:8086/または--web-baseで指定されたもの)を開きます。
たまに(毎日または毎週) make cleanことをお勧めします。ファイルを生成するとき、 bismon以前のバージョンのバックアップを作成します。
詳細については、私(Basile starynkevitch、 [email protected]または[email protected] ...)を尋ねてください。
このgitリポジトリには、便宜上、 webroot/jquery-uiの下でjQueryui 1.12フレームワーク(異なるMITライセンスがある)も含まれています。
$HOME/bismon Bismonソースコードと実行可能性が含まれている場合、あなた自身のリスクを使用して( stopbismonとして)あなた自身のリスクを使用します。
#!/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+)は変更されない可能性があります(Chariot Grantで契約上指定されています)。著作権通知はおそらく間違っています。生成されたファイルでは、GPLの期待にまだ適合していません。これらの詳細は保留中のバグですが、他にもはるかに多くのバグがあります。
著者は、2019年半ばに、この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スクリプトを調べて正常に実行した後、または新鮮なgit cloneコマンドの直後)。 git log -3の出力に言及します。
あるいは( github問題を追加したくない場合)、英語、またはフランス語(またはおそらくロシア語で、英語やフランス語で電子メールを送信できない場合)にメール( [email protected] -8エンコード、HTML5が望ましい)を送信します。私は英語またはフランス語で答えようとします(私の書かれたロシア語はとても悪いので)。
スクリーンショットを送信する必要がある場合は、JPEGまたはPNGとしてエンコードされた画像をメールに添付してください。
いくつかのファイルを送信する場合、または必要な場合は、それらすべてを一意のディレクトリ(ベースネーム(1)には文字、数字、およびいくつかのアンダースコア_を含む)にアーカイブし、それらのタール(1)アーカイブを作成します。アーカイブを抽出するために(Linuxで)実行する必要があるtarコマンドを明示的にください。 Linuxコンピューターには、GNU Tarバージョン1.30以上があると仮定できます。
bismonによって処理されるCまたはC ++コードを送信してください。明示的にコンパイルして、英語、フランス語、またはロシア語でコメント(UTF8エンコード)を追加してください。
可能であれば、シェルスクリプト(GNU BASHまたはZSH ....)を追加して、そのバグを再現し、そのスクリプトにメールまたはバグレポートに名前を付けます。
私の雇用主(あなたがCEAの外にいる場合)は、資金、正式なコラボレーションなどに関連する情報を好むことができます...可能であれば、あなたのメールで英語またはフランス語で明示的に言及します。