bismon (este é um nome temporário ) é um monitor persistente que (no futuro) interagiria com o compilador GCC através dos plugins. É (ou se tornará) de alguma forma um sucessor do meu antigo projeto de fusão do GCC; A meta de médio prazo também é a análise do código-fonte do programa estático com a ajuda do GCC. O repositório do código -fonte (GPLV3+ licenciado) está em https://github.com/bstarynk/bismon .. meu (Basile starynkevitch, empregado na CEA, list na França), o Sconts Remescet no bismon é parcialmente financiado (do início de 2018, para o final de 2020) pela União Europeia, a União Europeia, a União Europeia, HORIZON, HORIZON, HORIZON, HORIZEN, HORIZEN HORIZEN (do Start of 2018, do final de 2020), pela União Europeia, a União Europa, Concentre-se na análise de algum tipo de software de IoT codificado em C ou C ++ e (Cross-) compilado pelo GCC em algum desktop do Linux. Em 2019 - 2021, o desenvolvimento do bismon também é parcialmente financiado pelo projeto Decoder H2020, sob o contrato de concessão 824231 (relacionado ao seu Monitor de Conhecimento Persistente WP1).
Atualmente (início de 2021) bismon ainda em beta -estágio e é software livre sob licença GPLV3+. Destina-se a uma estação de trabalho do desenvolvedor da área de trabalho do Linux X86-64 (não funcionará no Windows ou Macosx ou Android).
Alguns ainda documentação incompleta (como um relatório técnico doc/bismon-doc.pdf em PDF) podem ser gerados (com make make doc ; esse comando exige que você tenha um escritor $HOME/tmp/ Diretório). Um rascunho (não oficial) desse relatório pode estar disponível em 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 Consciente de uma máquina consciente , ISBN: 978-1848211018), ambientes gráficos sofisticados semelhantes a desktop, muitas ferramentas de software colaborativo interativo baseadas na Web usadas simultaneamente por alguma equipe ou bancos de dados de objetos ou problemas relevantes. Como o Bismon é licenciado GPLV3+, qualquer software futuro que o usa deveria, IMHO, praticamente também ser GPLV3+ (mas outros esquemas de licenciamento podem ser possíveis, entre em contato comigo em [email protected] para mais; no entanto, Ianal ...)
[Padrões de codificação C ++ de veículos de caça de greve de greve de greve] (https://www.stroustrup.com/jsf-av-rules.pdf)
[Exceções determinísticas de cabeça zero: Valores de lançamento] (http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/p0709r4.pdf)
[Padronização C ++, Papers 2021] (http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2021/)
Desenvolva algum tipo de linguagem específica de domínio de alto nível (mais expressiva, mais declarativa) para facilitar a análise de código-fonte estática do programa acima do GCC e gerar plugins GCC para ele, para que as mesmas motivações que o GCC derretem (e mais amplamente relacionadas-motivações-para coccinnelle, fama-c, rascal, rascal, analisador crossminer, clang analisador, analisador, etc.
Recursos e objetivos importantes dessa linguagem específica de domínio e sua implementação incluem:
persistência ortogonal; Esse é um recurso importante (útil para análise de código -fonte estática de todo o programa de um programa analisado feito de várias unidades de tradução, cada uma compilada de forma independente), que não era realisticamente adicionada ao fusão do GCC, portanto, requer uma reformulação completa. Espera-se que o processo bismon seja um servidor de vida relativamente longa-e retém a maior parte de seus dados de uma execução para a próxima (na store*.bmon Textual Arquivos). No futuro, o processo bismon se comunicará com os processos de compilação gcc ou g++ (cruzado) (usando algum plug-in do GCC, a ser gerado pelo próprio bismon )
Digitação dinâmica como em python, esquema, rubi, javascript, ... (e de alguma forma derreter).
Multi-thread, mas sem nenhum GIL. Um pequeno pool de threads trabalhadores é repetidamente e simultaneamente buscando tarefas de uma agenda global. Cada TaskLet é executado rapidamente (milissegundos) em algum tópico de trabalhador e pode atualizar essa agenda (por exemplo, adicionando -se a ser continuada).
reflexivo
homoicônico
Precisamente o lixo coletado
declarativo, com boa correspondência de padrões e formalismos de regras
inicializou e compilou para C, talvez algumas partes usando GCCJit.
então metaprograma
gerar plugins GCC (em C ++) que interagem com bismon por algum mecanismo de RPC
Observe que a sintaxe e a semântica (ainda sem documentos) do bismon está em andamento e sujeitas a mudanças incompatíveis.
Quando bismon será concluído em ponto de ser utilizável, normalmente seria usado por uma pequena equipe de desenvolvedores que trabalham juntos em algum projeto de software (comum) codificado principalmente em C ou C ++ (e de preferência um projeto de software livre).
A maior parte do bismon está em C99 ou C11 (incluindo uma quantidade crescente de código C gerado em modules/ ), mas alguns poucos código escrito à mão estão em C ++ 14 (principalmente misc_BM.cc e BM_makeconst.cc METAPROGROGROGROGROGROMENT CIPADORES).
No Linux/X86-64 (por exemplo, Debian/Install ou Buster ou Ubuntu 18 ou 19) apenas (sem remendos ou trabalho adicionais, o Bismon não funcionará em 32 máquinas!):
Você poderá compilar muitos pacote de software de código aberto para o código fonte deles. Você deve ter um sistema GNU/Linux recente com acessões de raiz, de preferência 32gabytes ou mais de RAM, algum processador X86-64 com pelo menos 4 núcleos e pelo menos 250 Gbytes de espaço livre em disco. Espera-se que você seja fluente com a interface da linha de comando Linux e shells Unix, como GNU Bash ou Zsh. Você deve poder e permissão para compilar o GCC 10 ou, de preferência, até o GCC 11 do seu código -fonte e familiarizado com os editores do código -fonte, como GNU Emacs, Vim, Geany etc ... Você gostou de ler SICP.
Veja também o subdiretório de dependências e suas dependências de leitura - talvez não sejam atualizadas.
GCC recente (SO GCC 10 ou de preferência GCC 11 ...), com suporte C e C ++ e JIT e plugins ativados (verifique com gcc -v ; se o seu sistema gcc e g++ não tiverem suporte para plugins e libgcjit, você deve construir e instalar uma versão recente do GCC a partir de seu código fonte e configurá -los para fornecê -los.). Um GCC antigo (por exemplo, versão 9 ou anterior) não pode ser usado.
'/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' ....Um Python 3 recente com PIP instalado.
A documentação precisa de A /usr/bin/mipsel-linux-gnu-gcc-8 compilador cruzado fornecido pelo pacote gcc-8-mipsel-linux-gnu Debian. Cuidado, esse pacote entra em conflito com os pacotes gcc-multilib* no Debian.
Ninja Builder, versão 1.8 ou mais recente é necessário (e é iniciado por make ). Não use um mais antigo (verifique com ninja --version ; se isso não funcionar, seu ninja é muito velho).
É necessário um interpretador recente de dublador, versão 2 ou melhor (preferencialmente o Guile 2.2). Eu não sei e não gosto fortemente de Python e o intérprete de dunas é GNU, LGPLV3+, e muito mais familiar para mim. Além disso, os conceitos de dialetos LISP, como o esquema (o idioma implementado por Guile ) são fortemente relevantes para entender o Bismon , onde o Guile é usado para gerar o script build.ninja usado pelo Builder Ninja.
Um recente mailutils aprimorado, que é o Debian mailutils-guile fornecendo o executável /usr/bin/guimb .
GLIB 2.58 ou melhor (que também é necessário para GTK acima), porque são necessárias algumas rotinas de baixo nível, principalmente o UTF-8, são necessárias.
Jansson 2.12 ou melhor é necessário para o JSON (usado em relação aos Websockets).
Foi necessário Lobonion para a interface da Web, mas removido em 27 de junho de 2022, com comprometimento do Git a943cf687c748 ou TAG no-more-ibonion-tag (com erro de digitação: falta l ). Antes desse comprometimento, procure o sinalizador pré -processador BISMON_LIBONION .
GNU faz 4 ou melhor
O CCACHE é usado para evitar recompilações inúteis. Se você não tiver, precisará editar nosso Makefile para a compilação de módulos gerados.
Libbacktrace - às vezes faz parte do seu sistema GCC , mas é melhor instalá -lo separadamente (por exemplo, em seu /usr/local/ prefixo)
É necessário o Markdown para alguma documentação, como este README.md
GNU Recent (2.2.x finalmente) e ASTYLE (3,1 pelo menos) são úteis para make indent . Agora é necessário o indent para os módulos gerados.
Tardy (um pós -processador de arquivo tar ) é usado para gerar documentação.
LATEX - Provavelmente como Suíte Texlive ou Utilitários Relacionados e Luatex ( pdflatex , makeidx , bibtex ...) com Inkscape e Hevea e Xindy são necessários para documentação.
No Ubuntu Debian/Instalado ou Recente, 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 para a infraestrutura de construção; Observe que gcc-8-mipsel-linux-gnu é o Mipsel GCC Cross-Compiler-é conflitante com os pacotes gcc-multilib* ; inkscape , hevea , texlive-full (uma enorme meta-package), xindy , fonts-inconsolata , fonts-ubuntu , ttfautohint são necessários para gerar a documentação.
Ainda precisamos apt-get install libgtk-3-dev para o GTK 3. Isso pode extrair muitas dependências.
E apt-get install libglib2.0-dev libjansson-dev para nosso glib e Jansson exigia dependências.
O libbacktrace não é embalado independentemente no Debian. Eu recomendo construí -lo e instalá -lo a partir de seu código -fonte, ou então (não recomendado, ", mas factível) editar o Makefile para usar o seu sistema GCC Compiler's One.
O libonion não é embalado independentemente em Debian.
apt-get install markdown indent astyle tardy E apt-get install texlive texlive-full hevea
As dependencies/ subdiretório são para git submodule --s relacionados ao libbacktrace e libonion
Pode ser necessário adicionar .mjs como um sufixo válido ou extensão de arquivo para application/javascript mime tipo em seu arquivo/system /etc/mime.types . Leia sobre os módulos JavaScript na web e veja o Bug#927300 do Debian.
Execute locale para ter certeza de que sua localização é compatível com Posix ou inglês (britânico ou americano) no UTF-8 (não pode, por exemplo, ser italiano, grego ou francês). Portanto, deve ser POSIX ou C ou en_US.UTF-8 ou en_GB.UTF-8 . Você pode definir suas variáveis de ambiente adequadamente (pelo menos LANG=en_US.UTF-8 e LANGUAGE=en_US:en e LC_ALL=en_US.UTF-8 , sem outra variável de ambiente LC_* ). Ver Locale (1), Locale (7), UTF-8 (7), Locale (5), Setlocale (3). Mas não me peça para entender mais esses detalhes sutis da Internationalizaion e da localização, esse tópico é muito complexo. Se você ainda precisar desse trabalho a ser feito por mim, envie -me um e -mail no trabalho para [email protected] . Mas não espere que isso seja feito por mim antes de 2024.
A extensão do arquivo .mjs é para módulos JavaScript. Se o seu arquivo /etc/mime.types (usado pelo libonion ) não souber, você precisará adicionar as seguintes linhas (a primeira linha abaixo, com um hash # , é um comentário; o que é importante é a linha que menciona mjs ).
# in your /etc/mime.types for JavaScript modules
application/javascript mjs
A geração de documentação precisa de um $HOME/tmp/ diretório gravável.
Um contato humano principal deve ser fornecido em um arquivo contact_BM (os comentários começando com # são aceitos por dentro, mas deve ter uma linha inspirada por John Doe <[email protected]> ). Esse arquivo deve estar no diretório atual ou no seu diretório inicial ou explicitamente dado com --contact-file=PATH . Meu arquivo ~/contact_BM pode ser:
# file $HOME/contact_BM
Bismon master (Basile Starynkevitch) <[email protected]>
git Você pode querer (adaptar esta sugestão e definir seu cabeçalho de pedaço personalizado) para melhorar a saída interativa do git diff no store*.bmon Arquivos de dados persistentes. Talvez algo inspirado no git config diff.bismon.xfuncname '"^«_[0-9A-Za-z_]*$"' possa funcionar, mas não.
Clone este repositório git , como de costume, e construa e use bismon dentro da árvore de origem obtida.
Olhe para o Makefile e edite -o, se necessário; Talvez atualize os PREPROFLAGS= e LIBES= linhas, por exemplo, para usar o GCC libbacktrace do seu sistema, adicionando $(shell gcc-7 -print-file-name=include) no PREPROFLAGS= linha e $(shell gcc-7 -print-file-name=libbacktrace.a) para o LIBES= . Obviamente, substitua o 7 por 8, se apropriado. Talvez você precise definir explicitamente GCC= e GXX= para seus compiladores GCC C e C ++ específicos.
Correr make ou make -j3
O mecanismo de persistência é testado por make redump
O programa ./bismon ainda está (temporariamente) usando o GTK e o Liber. Queremos nos livrar do GTK. É simplificado como bismongtk e bismonion .
Certifique -se de executar bismon , bismongtk ou bismonion com --help no início para entender as opções do programa disponíveis.
bismon (pelo menos sua versão da Web) precisa saber sobre você. Portanto, você deve se registrar uma vez (e isso aumentaria seu estado persistente). E bismon (mais exatamente bismonion ) possui um formulário de login, portanto, você deve ter uma senha (específica para bismon , não relacionada a qualquer outra senha que você tenha).
Você primeiro precisa inicializar um arquivo de senha vazia (o arquivo de senha padrão é ~/passwords_BM ; você pode especificar outro na linha de comando). Portanto, execute o comando touch ~/passwords_BM em um terminal (shell) para criar esse arquivo vazio. Em seguida, você precisa restringir sua permissão (legível e gravável apenas pelo seu usuário do UNIX) com chmod u+rw,go-rwx ~/passwords_BM . Por fim, verifique com ls -ls ~/passwords_BM se este arquivo está vazio e legível e gravável apenas por você.
Então você se registrará. Se Alan Turing for seu nome ou pseudo, e [email protected] é o seu e-mail principal, com seu e-mail secundário sendo turing@localhost , você pode se adicionar ao bismon executando-o com algo semelhante a --contributor='Alan Turing;[email protected];turing@localhost' e --batch e --dump-after-load=. Opções do programa. É claro que você deve substituir Alan Turing , [email protected] e turing@localhost pelo que for apropriado para você. O email secundário (também chamado de alias) é opcional. Se você não o usar (por isso, se você não fornecer nenhum pseudônimo, o que é provável - substitua turing@localhost por uma string vazia), bismon não sabe mais sobre você do que git (consulte o Git Config para user.email e user.name ). Você pode até codificar algum script de shell para extrair essas informações de dados pessoais do git e colocá -lo em bismon .
Por fim, você precisa definir sua senha (ela não está relacionada a outras senhas no seu computador ou na web, mas deve ter pelo menos 10 caracteres unicode e dígitos, cartas, pontuações), como se sabe pelo bismon , usando a opção --add-passwords (também com --batch e --dump-after-load=. ). Para definir sua senha inicial como mypass!123456 Crie algum arquivo de texto temporário (ela contém nomes bismonion colaboradores e suas senhas atualizadas em texto claro , para que você não seja mantê-lo), talvez --add-passwords=/tmp/addpassbismon --batch /tmp/addpassbismon , contendo, por exemplo, Alan Turing:mypass!123456 /tmp/addpassbismon É claro que você escreverá melhor algum script de shell que envolva isso e não se esqueça de ter uma senha suficientemente forte que não está neste README.md .
Talvez você possa adicionar alguns outros usuários (provavelmente menos de uma dúzia) em que você confia e que possa trabalhar com você. Todo usuário pode mexer ou abusar do sistema bismon o mais facilmente possível. Tenha certeza de estar em conformidade com o GDPR se algum de seus usuários for europeu (e a conformidade com o GDPR for sua responsabilidade ). O formulário de login é modificado (com código de web_ONIONBM.c ) do arquivo de origem login_ONIONBM.thtml (e você pode melhorar o texto dentro desse arquivo, se desejar).
bismon Ainda não é realmente utilizável, exceto por mim (Basile) em julho de 2018 (ainda não há análise de código -fonte estática, nenhuma geração de plugins GCC ainda). Se você quiser ver algo usando o GTK, execute ./bismongtk , digite the_system na janela de comando rotulada no New-Bismon , então o CTRL e o retorno as teclas pressionadas juntas. Se você quiser ver algo através da interface da web, execute ./bismonion , abra seu URL (talvez localhost:8086/ ou o que foi especificado com --web-base ) no seu navegador da web.
Recomenda -se a execução make clean de vez em quando (por exemplo, diariamente ou semanalmente). Ao gerar arquivos, bismon faz um backup de sua versão anterior.
Pergunte -me (basile starynkevitch, [email protected] ou [email protected] ...) para obter detalhes.
Este repositório git também contém, por conveniência, a estrutura JQueryui 1.12 (que possui uma licença diferente do MIT) sob webroot/jquery-ui
Use -o (como stopbismon ) seu próprio risco, se $HOME/bismon contiver o código -fonte do Bismon e executável:
#!/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
Este é um software livre não lançado
A licença (GPLV3+) provavelmente não alterará (é especificada contratualmente na concessão da carruagem). O aviso de direitos autorais provavelmente está errado: em arquivos gerados, ainda não está em conformidade com as expectativas da GPL. Esses detalhes estão pendentes de bugs, mas também existem muito mais bugs.
O autor está plenamente consciente - em meados de 2019 - de vários bugs neste sistema bismon - um projeto de pesquisa -, mas corrigi -los não é uma prioridade (já que continua o bootstrap progressivo do Bismon é muito mais importante e ainda não foi alcançado). A interface GTK é de buggy por design e trava com frequência (que não será corrigida) e deve ser o mais rápido possível, substituído por uma interface da Web mais utilizável - e isso é um trabalho em andamento em meados de 2019. Entre em contato com o autor para obter possíveis soluções alternativas. Observe que esses bugs temporários conhecidos pelo autor não estão registrados como problemas do Bismon gitlab , já que este software ainda não está lançado.
Em Commit 24E400E4B25EA8FBD91, a documentação não é gerada.
Remoção input{appendix-bm} do arquivo bismon-doc.tex não resolva esse bug.
A maneira preferida de relatá -los é adicionar algum novo problema em https://github.com/bstarynk/bismon
Obviamente, um problema deve ser independente. Por favor, dê explicitamente a saída do bismon --version no seu computador, se você conseguiu construir bismon .
Se o problema estiver relacionado à criação do executável bismon , dê explicitamente a todos os comandos do Linux que você executou (depois de examinar e executar com sucesso o script distclean-script.bash , ou logo após algum novo comando git clone ). Mencione a saída do git log -3 .
Como alternativa (se você não quiser adicionar um problema github ), envie um email (UTF-8 codificado, o HTML5 é preferível) em inglês ou em francês (ou talvez em russo, apenas se você não puder enviar um e-mail em inglês ou francês) para [email protected] ou [email protected]. Vou tentar responder em inglês ou em francês (já que meu russo escrito é tão ruim).
Se você precisar enviar uma captura de tela, anexe alguma imagem codificada como JPEG ou PNG ao seu email.
Se você deseja ou precisar enviar vários arquivos, arquiva todos eles em um diretório exclusivo (cujo nome de base (1) contém apenas letras, dígitos e alguns sublinhados _ ) e faça um pouco de alcatrão (1) delas. Dê -me explicitamente o comando tar que eu preciso executar (no Linux) para extrair seu arquivo. Você pode assumir que eu tenho GNU TAR versão 1.30 ou melhor no meu computador Linux.
Se você me enviar algum código C ou C ++ a ser processado pelo bismon , permita -me explicitamente compilá -lo e adicionar comentários (UTF8 codificados) em inglês, francês ou russo.
Se possível, adicione algum script de shell (para GNU Bash ou para ZSH ....), o que me permite reproduzir esse bug e nomear esse script no seu email ou relatório de bug.
Meu empregador (se você estiver fora do CEA ....) poderia preferir também algumas informações relacionadas ao financiamento, colaboração formal, etc ... se possível mencioná -las explicitamente em inglês ou em francês em seu e -mail.